Aller au contenu

Un mot pour Fahmio

Tu écris. Tu continues.

Un problème, une idée — assez pour qu’on comprenne, puis tu retournes à ta copie.

On lit. Tu n’as rien d’autre à faire.

Où veux-tu aller ?

↑ ↓ pour parcourir · Entrée pour ouvrir · Échap pour fermer

Fahmio
Fahmio
Bac Tunisie
SD-JStructures de données et modularité

Fonction donnée : type du résultat, T.D.O.L, appels, rôle, puis réutilisation obligatoire dans un nouveau module

Idée directrice

L'exercice court le plus régulier de l'épreuve commune : on donne l'algorithme d'une fonction (Quoi, Inconnue…) dont l'en-tête est incomplet. On le lit à partir de l'usage des variables — ce qui est retourné fixe le type, ce qui est affecté dans le corps remplit le T.D.O.L —, on l'exécute à la main sur un tableau imposé, y compris un appel où la boucle ne tourne pas, puis on généralise en une phrase : le rôle. La dernière question change de nature : écrire un module qui doit faire appel à cette fonction, sans la redévelopper ; tout l'enjeu est alors de choisir les bons arguments à chaque appel.

Ce qui aide à reconnaître la démarche

« Déterminer le type de résultat retourné par la fonction » ; « Compléter le tableau de déclaration des objets locaux de la fonction » ; « Donner le résultat de chacun des appels » ; « Déduire le rôle de la fonction » ; « Le module … doit faire appel à la fonction » ; « en employant impérativement la fonction »

Besoin d’un point de départ ? Voir la méthode
  • Type du résultat : regarder ce qui suit Retourner et ce qu'on lui affecte (indice ou compteur : Entier ; test : Booléen ; concaténation : Chaîne).
  • T.D.O.L : seulement les objets affectés dans le corps qui ne sont pas des paramètres ; dans le module qui réutilise la fonction, déclarer celle-ci avec la nature Fonction.
  • Appels : exécuter la boucle à la main ; un appel avec d = f ou d > f ne fait souvent aucun tour, la valeur retournée est alors l'initialisation.
  • Rôle : une phrase qui dit ce qui est calculé, y compris le cas « rien trouvé » (-1, Faux, chaîne vide), jamais une relecture ligne à ligne.
  • Réutilisation : appeler la fonction avec des bornes qui avancent (d ← résultat + 1) au lieu de recopier sa boucle.
Les pièges à vérifier dans ta démarche

Recopier la boucle de Quoi dans Portions au lieu de l'appeler : la consigne « doit faire appel à la fonction » n'est plus respectée. Mettre T, d ou f dans le T.D.O.L alors que ce sont des paramètres. Oublier le cas où l'appel retourne -1 : la dernière portion n'est jamais affichée, ou la boucle ne s'arrête pas. Donner comme rôle « compare T[i] et T[i+1] » au lieu de ce que la fonction calcule.

Sujet principal

Exercice 2 (5 points) — dans l'esprit des sessions 2020–2025

6 questionsCorrigé masqué

Soit l'algorithme suivant de la fonction Quoi, où TAB est un nouveau type désignant un tableau de 50 entiers (indices de 0 à 49) :

Fonction Quoi (T : TAB, d, f : Entier) : ……
DEBUT
    i ← d
    p ← -1
    Tant que (i < f) Et (p = -1) Faire
        Si T[i] > T[i+1] Alors
            p ← i
        Sinon
            i ← i + 1
        FinSi
    Fin Tant que
    Retourner p
FIN
  1. Déterminer le type du résultat retourné par la fonction Quoi.
  2. Compléter le tableau de déclaration des objets locaux (T.D.O.L) de la fonction Quoi : colonnes Objet et Type/Nature.
  3. Soit le tableau T suivant de 10 entiers, d'indices 0 à 9 : T = [12, 15, 15, 21, 8, 10, 30, 4, 4, 9].
    1. Donner le résultat de chacun des appels : Quoi(T, 0, 9) ; Quoi(T, 4, 9) ; Quoi(T, 7, 9) ; Quoi(T, 8, 8).
    2. Pour l'appel Quoi(T, 4, 9), donner les valeurs successives de i et de p.
  4. Déduire le rôle de la fonction Quoi.
  5. On appelle portion croissante d'un tableau une suite maximale d'éléments adjacents rangés dans l'ordre croissant au sens large. Écrire l'algorithme d'une procédure Portions, d'en-tête Procédure Portions (V : TAB, N : Entier), qui affiche chaque portion croissante du tableau V de N entiers sur une ligne. Pour le tableau T ci-dessus, on doit obtenir les trois lignes 12 15 15 21, 8 10 30 et 4 4 9. Le module Portions doit faire appel à la fonction Quoi ; dresser son T.D.O.L.
  6. En faisant appel à Quoi, écrire une seule instruction qui affiche Vrai si le tableau V de N éléments est rangé dans l'ordre croissant au sens large, et Faux sinon.

N.B. Le candidat n'est pas appelé à déclarer le nouveau type TAB.

Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : le type se lit sur ce que la fonction retourne. Quoi retourne p, qui reçoit soit -1, soit la valeur d'un indice i : le résultat est de type Entier\boxed{\text{Entier}}. L'en-tête complet est Fonction Quoi (T : TAB, d, f : Entier) : Entier.

2. T.D.O.L de Quoi — les paramètres T, d et f n'y figurent pas, seuls les objets affectés dans le corps :

  • i — Type/Nature : Entier — parcourt les indices de d à f
  • p — Type/Nature : Entier — indice trouvé, -1 tant que rien n'est trouvé

3.a Idée : on compare chaque élément à son suivant tant que i < f ; la boucle s'arrête dès que p reçoit un indice.

  • Quoi(T, 0, 9) : 12 ≤ 15, 15 ≤ 15, 15 ≤ 21, puis 21 > 8 à l'indice 3 : 3\boxed{3}.
  • Quoi(T, 4, 9) : 8 ≤ 10, 10 ≤ 30, puis 30 > 4 à l'indice 6 : 6\boxed{6}.
  • Quoi(T, 7, 9) : 4 ≤ 4, 4 ≤ 9, puis i atteint 9 = f sans descente : −1\boxed{-1}.
  • Quoi(T, 8, 8) : d = f, la condition i < f est fausse dès l'entrée, la boucle ne s'exécute pas et p garde son initialisation : −1\boxed{-1}.

3.b Trace de Quoi(T, 4, 9) :

 i    p    test T[i] > T[i+1]
 4   -1    8 > 10  : faux
 5   -1    10 > 30 : faux
 6    6    30 > 4  : vrai

La boucle s'arrête car p ≠ -1 ; la fonction retourne 6.

4. La fonction Quoi retourne l'indice du premier élément de la portion T[d..f] strictement supérieur à son suivant (la première « descente »), et -1 si cette portion est rangée dans l'ordre croissant au sens large — en particulier lorsque d ≥ f.

5. Idée : l'appel Quoi(V, d, N-1) donne la fin de la portion qui commence en d ; la portion suivante commence juste après. Un retour -1 signifie que la portion va jusqu'au dernier élément.

Procédure Portions (V : TAB, N : Entier)
DEBUT
    d ← 0
    Tant que d ≤ N-1 Faire
        p ← Quoi(V, d, N-1)
        Si p = -1 Alors
            f ← N-1
        Sinon
            f ← p
        FinSi
        ligne ← ""
        Pour i de d à f Faire
            ligne ← ligne + Convch(V[i]) + " "
        Fin Pour
        Ecrire(ligne)
        d ← f + 1
    Fin Tant que
FIN

T.D.O.L de Portions :

  • d, f, p, i — Type/Nature : Entier — début et fin de la portion, résultat de l'appel, compteur
  • ligne — Type/Nature : Chaîne — portion en cours d'affichage
  • Quoi — Type/Nature : Fonction — première descente entre deux indices

Sur l'exemple : d = 0 donne p = 3, ligne « 12 15 15 21 » ; d = 4 donne p = 6, ligne « 8 10 30 » ; d = 7 donne p = -1, ligne « 4 4 9 » ; puis d = 10 > 9 arrête la boucle. Les comparaisons V[i] > V[i+1] ne sont jamais réécrites : elles restent dans Quoi, comme l'exige la consigne.

6. Ecrire(Quoi(V, 0, N-1) = -1) : Quoi retourne -1 exactement lorsqu'aucune descente n'existe entre les indices 0 et N − 1.

Changer d’énoncé, garder le raisonnement

Choisis un seul transfert après le sujet principal. Qu’est-ce qui change ? Quel résultat ou quelle méthode peux-tu réutiliser ? Les autres exercices restent disponibles pour une prochaine séance.

Variantes rencontrées : somme des éléments entre deux indices, bornes échangées si p1 > p2, réutilisée pour les points d'équilibre (principale 2020) ; entier formé des chiffres impairs ou -1, puis procédure d'affichage (principale 2023) ; fonction Inverse fournie, exploitée dans la condition d'un test de symétrie, et choix entre deux propositions (principale 2024) ; indice du minimum entre d et f, réutilisé par le tri ORDONNER (principale 2025) ; en section Sciences de l'informatique, procédure sur une matrice avec nature du type, Octet et paramètres effectifs (contrôle 2021).

Exercices d'entraînement — une nuance à la fois

1 Drill SD-J.1 — fonction sur une chaîne : en-tête, objets locaux, visibilité, quatre exécutions et rôle
Entraînement 01 / 06

Drill SD-J.1 — fonction sur une chaîne : en-tête, objets locaux, visibilité, quatre exécutions et rôle

5 questionsCorrigé masqué

Soit l'algorithme suivant, formé d'un programme principal Exercice et d'une fonction Inconnue dont l'en-tête est incomplet :

Algorithme Exercice
DEBUT
    Lire(A)
    Si Inconnue(A) Alors
        Ecrire(A, " est accepté")
    Sinon
        Ecrire(A, " est refusé")
    FinSi
FIN
Fonction Inconnue (ch : ……) : ……
DEBUT
    c ← 0
    Pour i de 0 à Long(ch) - 1 Faire
        Si ("0" ≤ ch[i]) Et (ch[i] ≤ "9") Alors
            c ← c + 1
        FinSi
    Fin Pour
    Retourner (c ≥ 2) Et (c < Long(ch))
FIN
  1. Compléter l'en-tête de la fonction Inconnue par les types appropriés.
  2. Dresser le T.D.O.L de la fonction Inconnue.
  3. Parmi les objets A, ch, c et i, lesquels ne sont pas visibles dans le programme principal ? Préciser le paramètre formel et le paramètre effectif.
  4. Donner l'affichage obtenu pour chacune des valeurs saisies : "BAC2026" ; "2026" ; "b7" ; "x1y2z".
  5. Déduire le rôle de la fonction Inconnue.
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : ch est indicé et passé à Long, c'est une chaîne ; ce qui est retourné est une expression logique. Fonction Inconnue (ch : Chaîne) : Booléen.

2. T.D.O.L de Inconnue :

  • c — Type/Nature : Entier — nombre de chiffres rencontrés
  • i — Type/Nature : Entier — indice de parcours de ch

3. ch, c et i ne sont pas visibles dans le programme principal : ch est le paramètre formel, c et i sont locaux à la fonction. A, objet du programme principal, est le paramètre effectif de l'appel Inconnue(A).

4. Idée : compter les caractères de "0" à "9", puis tester les deux conditions.

  • "BAC2026" : 4 chiffres sur 7 caractères, 4 ≥ 2 et 4 < 7 : « BAC2026 est accepté ».
  • "2026" : 4 chiffres sur 4 caractères, c < Long(ch) est faux : « 2026 est refusé ».
  • "b7" : un seul chiffre : « b7 est refusé ».
  • "x1y2z" : 2 chiffres sur 5 caractères : « x1y2z est accepté ».

5. La fonction Inconnue vérifie qu'une chaîne contient au moins deux chiffres et au moins un caractère qui n'est pas un chiffre.

2 Drill SD-J.2 — entier formé de certains chiffres ou -1, puis procédure qui filtre un tableau
Entraînement 02 / 06

Drill SD-J.2 — entier formé de certains chiffres ou -1, puis procédure qui filtre un tableau

5 questionsCorrigé masqué

Soit l'algorithme suivant de la fonction Inconnue :

Fonction Inconnue (x : Entier) : ……
DEBUT
    ch ← Convch(x)
    R ← ""
    Pour i de 0 à Long(ch) - 1 Faire
        Si Valeur(ch[i]) Mod 3 = 0 Alors
            R ← ch[i] + R
        FinSi
    Fin Pour
    Si R = "" Alors
        Retourner -1
    Sinon
        Retourner Valeur(R)
    FinSi
FIN
  1. Compléter le type de retour de la fonction Inconnue.
  2. Compléter le tableau de déclaration des objets locaux de la fonction Inconnue (Objet, Type/Nature).
  3. Donner le résultat retourné par la fonction pour chacune des valeurs de x : 61935 ; 2578 ; 3070 ; 96.
  4. Déduire le rôle de la fonction Inconnue.
  5. Écrire l'algorithme d'une procédure Filtrer, d'en-tête Procédure Filtrer (T : TAB, N : Entier), qui affiche les éléments du tableau T de N entiers strictement positifs dont aucun chiffre n'est multiple de 3, en faisant appel à la fonction Inconnue. Pour T = [2578, 3070, 145, 96, 8521], elle affiche 2578, 145 et 8521. Dresser son T.D.O.L.
Voir la correction commentéeAprès avoir posé votre démarche

1. La fonction retourne Valeur(R) ou -1 : type Entier.

2. T.D.O.L de Inconnue :

  • ch — Type/Nature : Chaîne — écriture de x
  • R — Type/Nature : Chaîne — chiffres retenus
  • i — Type/Nature : Entier — indice de parcours

3. Idée : R ← ch[i] + R place chaque chiffre retenu devant les précédents, donc l'ordre est inversé.

  • x = 61935 : chiffres retenus 6, 9, 3 ; R vaut « 6 », « 96 », puis « 396 » : 396\boxed{396}.
  • x = 2578 : aucun chiffre multiple de 3, R reste vide : −1\boxed{-1}.
  • x = 3070 : chiffres retenus 3, 0, 0 ; R = "003" et Valeur("003") vaut 3\boxed{3} : les zéros de tête disparaissent.
  • x = 96 : R vaut « 9 » puis « 69 » : 69\boxed{69}.

4. Inconnue retourne l'entier formé par les chiffres de x multiples de 3 (0, 3, 6 ou 9), pris dans l'ordre inverse de leur apparition, ou -1 si x n'en contient aucun.

5. Idée : Valeur(R) n'est jamais négatif, donc le retour -1 signale sans ambiguïté un entier sans chiffre multiple de 3.

Procédure Filtrer (T : TAB, N : Entier)
DEBUT
    Pour i de 0 à N-1 Faire
        Si Inconnue(T[i]) = -1 Alors
            Ecrire(T[i])
        FinSi
    Fin Pour
FIN
  • i — Type/Nature : Entier — compteur
  • Inconnue — Type/Nature : Fonction — chiffres multiples de 3, ou -1

Sur l'exemple, 3070 donne 3 et 96 donne 69 : ils ne sont pas affichés ; 2578, 145 et 8521 donnent -1 et sont affichés.

3 Drill SD-J.3 — somme d'une portion avec bornes échangées, puis recherche des portions de somme nulle
Entraînement 03 / 06

Drill SD-J.3 — somme d'une portion avec bornes échangées, puis recherche des portions de somme nulle

5 questionsCorrigé masqué

Soit la fonction Somme suivante, où TAB désigne un tableau de 20 entiers :

Fonction Somme (T : TAB, a, b : Entier) : Entier
DEBUT
    Si a > b Alors
        x ← a
        a ← b
        b ← x
    FinSi
    s ← 0
    Pour i de a à b Faire
        s ← s + T[i]
    Fin Pour
    Retourner s
FIN

On considère le tableau T = [4, -3, 5, -2, -4, 6, 1, -7, 3, 2], d'indices 0 à 9.

  1. Dresser le T.D.O.L de la fonction Somme.
  2. Donner la valeur de H après chacune des instructions : H ← Somme(T, 1, 4) ; H ← Somme(T, 7, 3) ; H ← Somme(T, 5, 5).
  3. Déduire le rôle de la fonction Somme.
  4. On appelle portion nulle de T toute suite T[i..j] d'au moins deux éléments adjacents (i < j) dont la somme est nulle. En employant impérativement la fonction Somme, écrire l'algorithme d'une procédure Nulles, d'en-tête Procédure Nulles (T : TAB, N : Entier), qui affiche le couple d'indices (i, j) de chaque portion nulle, ou le message « Aucune portion nulle ».
  5. Donner l'affichage obtenu pour le tableau T ci-dessus.
Voir la correction commentéeAprès avoir posé votre démarche

1. T.D.O.L de Somme : x, s et i — Type/Nature : Entier (variable d'échange, cumul, compteur).

2. Idée : si a > b, les bornes sont d'abord échangées.

  • Somme(T, 1, 4) = −3 + 5 − 2 − 4 : H=−4\boxed{H=-4}.
  • Somme(T, 7, 3) : 7 > 3, on somme T[3..7] = −2 − 4 + 6 + 1 − 7 : H=−6\boxed{H=-6}.
  • Somme(T, 5, 5) = T[5] : H=6\boxed{H=6}.

3. Somme retourne la somme des éléments de T compris entre les indices a et b inclus, quel que soit l'ordre dans lequel les deux bornes sont données.

4. Idée : chaque couple (i, j) avec i < j est une portion candidate ; Somme calcule sa somme sans boucle supplémentaire, et un drapeau garde la trace d'au moins une portion trouvée.

Procédure Nulles (T : TAB, N : Entier)
DEBUT
    trouve ← Faux
    Pour i de 0 à N-2 Faire
        Pour j de i+1 à N-1 Faire
            Si Somme(T, i, j) = 0 Alors
                Ecrire("(", i, ", ", j, ")")
                trouve ← Vrai
            FinSi
        Fin Pour
    Fin Pour
    Si Non(trouve) Alors
        Ecrire("Aucune portion nulle")
    FinSi
FIN
  • i, j — Type/Nature : Entier — bornes de la portion
  • trouve — Type/Nature : Booléen — au moins une portion nulle affichée
  • Somme — Type/Nature : Fonction — somme d'une portion

5. Affichage : (0, 4), (0, 7), (1, 3), (3, 5), (5, 7). Par exemple (3, 5) : −2 − 4 + 6 = 0, et (0, 7) : 4 − 3 + 5 − 2 − 4 + 6 + 1 − 7 = 0.

4 Drill SD-J.4 — quatre séquences : résultat pour une valeur donnée, puis rôle
Entraînement 04 / 06

Drill SD-J.4 — quatre séquences : résultat pour une valeur donnée, puis rôle

4 questionsCorrigé masqué

Pour chaque séquence algorithmique ci-dessous, donner le résultat de son exécution pour la valeur indiquée, puis son rôle. Les variables x, n, m et i sont de type entier, ch et c des chaînes de caractères, et T un tableau de 5 entiers.

Séquence 1 (pour n = 12) :

x ← 0
Pour i de 1 à n - 1 Faire
    Si n Mod i = 0 Alors
        x ← x + i
    FinSi
Fin Pour
Ecrire(x)

Séquence 2 (pour n = 50712) :

m ← 0
ch ← Convch(n)
Pour i de 0 à Long(ch) - 1 Faire
    Si Valeur(ch[i]) > m Alors
        m ← Valeur(ch[i])
    FinSi
Fin Pour
Ecrire(m)

Séquence 3 (pour ch = "info") :

c ← ""
Pour i de 0 à Long(ch) - 1 Faire
    c ← c + ch[i] + ch[i]
Fin Pour
Ecrire(c)

Séquence 4 (n = 5 ; 1er cas : T = [4, 7, 7, 2, 9] ; 2e cas : T = [4, 7, 2, 9, 1]) :

i ← 0
Tant que (i < n-1) Et (T[i] ≠ T[i+1]) Faire
    i ← i + 1
Fin Tant que
Ecrire(i < n-1)
  1. Séquence 1 : résultat et rôle.
  2. Séquence 2 : résultat et rôle.
  3. Séquence 3 : résultat et rôle.
  4. Séquence 4 : résultat dans chacun des deux cas, et rôle.
Voir la correction commentéeAprès avoir posé votre démarche

1. Pour n = 12, les valeurs de i de 1 à 11 qui divisent 12 sont 1, 2, 3, 4 et 6 : x=16\boxed{x=16}. Rôle : calculer la somme des diviseurs de n autres que n lui-même.

2. ch = "50712" ; m prend successivement 5, 5, 7, 7, 7 : m=7\boxed{m=7}. Rôle : déterminer le plus grand chiffre de n.

3. c vaut « ii », « iinn », « iinnff », puis « iinnffoo » : le résultat est « iinnffoo ». Rôle : construire la chaîne obtenue en doublant chaque caractère de ch.

4. Idée : la boucle s'arrête soit sur deux voisins égaux, soit au bout du tableau ; le test final distingue les deux sorties. 1er cas : i = 0 (4 ≠ 7), puis i = 1 où 7 = 7 arrête la boucle ; 1 < 4 affiche Vrai. 2e cas : aucun couple de voisins égaux, i atteint 4 = n − 1 ; Ecrire(4 < 4) affiche Faux. Rôle : vérifier si T contient deux éléments adjacents égaux.

5 Drill SD-J.5 — fonction fournie à exploiter dans une condition, puis choix entre deux propositions équivalentes
Entraînement 05 / 06

Drill SD-J.5 — fonction fournie à exploiter dans une condition, puis choix entre deux propositions équivalentes

2 questionsCorrigé masqué

Soit la fonction SC qui retourne la somme des chiffres d'un entier strictement positif x (exemple : SC(4726) = 19) :

Fonction SC (x : Entier) : Entier
DEBUT
    s ← 0
    Tant que x ≠ 0 Faire
        s ← s + x Mod 10
        x ← x Div 10
    Fin Tant que
    Retourner s
FIN

Un entier strictement positif est dit nombre de Harshad s'il est divisible par la somme de ses chiffres (exemples : 18, 21 et 201). On considère la procédure Affiche suivante :

Procédure Affiche (x : Entier)
DEBUT
    Si ………………………… Alors
        Ecrire(x, " est de Harshad")
    Sinon
        Ecrire(x, " n'est pas de Harshad")
    FinSi
FIN

On donne enfin deux propositions d'une fonction Inconnue ; une seule est équivalente à la fonction SC.

Proposition A

Fonction Inconnue (x : Entier) : Entier
DEBUT
    ch ← Convch(x)
    s ← 0
    Pour i de 0 à Long(ch) - 1 Faire
        s ← s + Valeur(ch[i])
    Fin Pour
    Retourner s
FIN

Proposition B : identique à la proposition A, sauf la boucle, qui parcourt la chaîne ch à partir de l'indice 1 : Pour i de 1 à Long(ch) - 1 Faire.

  1. En exploitant la fonction SC, compléter la condition de la procédure Affiche.
  2. Propositions A et B :
    1. Pour chaque proposition, donner le résultat de l'instruction Ecrire(Inconnue(4726)).
    2. En déduire la proposition équivalente à la fonction SC.
    3. Dresser le T.D.O.L de la proposition retenue.
Voir la correction commentéeAprès avoir posé votre démarche

1. Idée : « divisible par » se traduit par un reste nul, et la somme des chiffres est fournie par SC sans la recalculer. La condition est x Mod SC(x) = 0. Vérification : SC(18) = 9 et 18 Mod 9 = 0, donc 18 est un nombre de Harshad ; SC(25) = 7 et 25 Mod 7 = 4, donc 25 n'en est pas un.

2.a Proposition A : ch = "4726", la boucle parcourt les indices 0 à 3 : 4 + 7 + 2 + 6, elle affiche 19. Proposition B : la boucle commence à l'indice 1 et ignore le chiffre 4 : 7 + 2 + 6, elle affiche 15.

2.b C'est la proposition A : elle retourne 19 = SC(4726). La proposition B oublie le premier chiffre, rangé à l'indice 0.

2.c T.D.O.L de la proposition A :

  • ch — Type/Nature : Chaîne — écriture de x
  • s — Type/Nature : Entier — somme des chiffres
  • i — Type/Nature : Entier — indice de parcours
6 Drill SD-J.6 — section Sciences de l'informatique : procédure sur une matrice, nature du type, mode de passage et rôle
Entraînement 06 / 06

Drill SD-J.6 — section Sciences de l'informatique : procédure sur une matrice, nature du type, mode de passage et rôle

4 questionsCorrigé masqué

Soit l'algorithme de la procédure Traitement suivant, où n et m sont deux entiers de l'intervalle [1, 10], où les matrices manipulées contiennent des entiers et où les indices commencent à 0 :

Procédure Traitement (M1 : MAT, n, m : Entier,
                      @M2 : MAT)
DEBUT
    Pour i de 0 à n-1 Faire
        Pour j de 0 à m-1 Faire
            M2[i, m-1-j] ← M1[i, j]
        Fin Pour
    Fin Pour
FIN
  1. Valider chacune des propositions suivantes par la lettre V si elle est correcte ou F sinon.
    1. MAT est : une variable ; un type de données ; une constante.
    2. La déclaration adéquate de MAT est : tableau de 10 lignes et 10 colonnes d'entiers ; tableau de 10 entiers ; entier.
    3. Afin d'optimiser l'espace mémoire, le type le plus adéquat de n et m est : Entier ; Octet ; Réel.
    4. Dans l'en-tête de Traitement, l'objet n est : un paramètre effectif ; un paramètre formel ; une variable locale de Traitement.
    5. Après l'appel Traitement(B, p, q, A), le résultat se trouve dans : A ; B ; p.
  2. Pour n = 2, m = 3 et une matrice M1 de lignes (1, 2, 3) et (4, 5, 6), donner le contenu de M2 après l'appel.
  3. Déduire le rôle de la procédure Traitement.
  4. Qu'obtiendrait-on dans l'objet passé en quatrième position si l'on supprimait le symbole @ devant M2 ?
Voir la correction commentéeAprès avoir posé votre démarche

1.a Variable : F ; type de données : V ; constante : F. MAT sert à déclarer M1 et M2 dans l'en-tête : c'est un nouveau type.

1.b Tableau de 10 lignes et 10 colonnes d'entiers : V ; tableau de 10 entiers : F ; entier : F. Les objets sont désignés par deux indices, la ligne i et la colonne, avec au plus 10 lignes et 10 colonnes.

1.c Entier : F ; Octet : V ; Réel : F. Les valeurs de 1 à 10 tiennent dans un octet (0 à 255), qui occupe le moins de place ; un réel ne convient pas pour une borne de boucle.

1.d Paramètre effectif : F ; paramètre formel : V ; variable locale : F. n figure dans l'en-tête : c'est un paramètre formel, qui reçoit à chaque appel la valeur du paramètre effectif placé en deuxième position.

1.e A : V ; B : F ; p : F. Le résultat est rendu par le quatrième paramètre, @M2, qui reçoit ici A.

2. Idée : l'élément de la colonne j est rangé dans la colonne m − 1 − j. M2 a pour lignes (3, 2, 1) et (6, 5, 4).

3. Traitement recopie M1 dans M2 en inversant l'ordre des colonnes : M2 est l'image miroir de M1 par rapport à un axe vertical.

4. Sans @, M2 serait passé par valeur : la procédure remplirait une copie locale, et l'objet passé en quatrième position resterait inchangé après l'appel — le résultat serait perdu.

Relier ce raisonnement au bac

Choisis une filière pour voir les sujets qui étayent ce scénario.