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
FE-EFichiers, enregistrements et matrices

Matrice : rechercher un motif par parcours et écrire les positions trouvées dans un fichier texte

Idée directrice

On parcourt une matrice case par case (i, puis j) pour y reconnaître un motif défini par l'énoncé : maximum de sa ligne et minimum de sa colonne, quatre cases consécutives identiques, ligne ou colonne palindrome, suite contiguë de somme donnée, case isolée parmi ses voisines. Chaque occurrence trouvée est écrite dans un fichier texte au format imposé, souvent suivie d'un total. Toute la difficulté est dans les bornes (j ≤ C − 4 pour quatre cases, k de j + 1 à C − 1 pour une séquence, voisines qui n'existent pas au bord) et dans le calcul, fait une seule fois, des valeurs auxiliaires dont le test a besoin.

Ce qui aide à reconnaître la démarche

« On se propose de remplir un fichier texte … par les positions … » ; « Chaque ligne du fichier contiendra … séparés par un espace » ; « … sont les éléments qui sont minimum sur leur ligne et maximum sur leur colonne » ; « … cases consécutives dans le sens horizontal ou dans le sens vertical » ; « Pour les cases situées sur les bords de la matrice … »

Besoin d’un point de départ ? Voir la méthode
  • Lire l'exemple de l'énoncé avant d'écrire : la matrice, puis le fichier attendu, ligne par ligne. Le format (espaces, séparateurs, ligne de titre, ligne de total) fait partie de la réponse.
  • Déclarer Mat = Tableau de <max> lignes et <max> colonnes de … ; la partie utile est L × C.
  • Fixer les bornes à partir du motif : un motif de p cases consécutives commence au plus à C − p ; une voisine (a, b) se teste 0 ≤ a < L et 0 ≤ b < C avant d'être lue.
  • Calculer une seule fois ce qui sert à toutes les cases (maximum de chaque ligne, minimum de chaque colonne), dans des tableaux auxiliaires.
  • Construire la ligne du fichier avec Convch et la concaténation, l'écrire avec Ecrire_nl, compter les occurrences, écrire le total après le parcours, puis fermer le fichier.
Les pièges à vérifier dans ta démarche

Initialiser un maximum ou un minimum à 0 au lieu du premier élément de la ligne ou de la colonne. Ne garder qu'un seul maximum par ligne alors que la ligne peut en contenir plusieurs égaux. Dépasser la partie utile (j jusqu'à C − 1 pour un motif de quatre cases, voisine lue avant d'être testée). S'arrêter à la première occurrence d'une ligne. Écrire le total à l'intérieur de la boucle. Oublier d'ouvrir le fichier en création, ou de le fermer.

Sujet principal

Exercice — matrice et fichier texte (5 points), dans l'esprit des sessions 2016–2026

8 questionsCorrigé masqué

Un géomètre relève les altitudes (en mètres) d'un terrain aux nœuds d'une grille, rangées dans une matrice M de L lignes et C colonnes d'entiers (2 ≤ L ≤ 20 et 2 ≤ C ≤ 20). Les lignes et les colonnes sont numérotées à partir de 0.

Un élément M[i, j] est un point selle de M s'il est à la fois le maximum de sa ligne i et le minimum de sa colonne j. Une ligne peut contenir plusieurs maximums égaux, et une colonne plusieurs minimums égaux.

Pour trouver les points selles, on procède ainsi :

  • on remplit un tableau MaxL de L entiers, où MaxL[i] est le maximum de la ligne i, et un tableau MinC de C entiers, où MinC[j] est le minimum de la colonne j ;
  • on parcourt M ligne par ligne : M[i, j] est un point selle si M[i, j] = MaxL[i] et M[i, j] = MinC[j] ;
  • on écrit chaque point selle trouvé dans une ligne d'un fichier texte "Selles.txt", à la racine du disque D, au format valeur : ligne i, colonne j, puis on écrit une dernière ligne Nombre de points selles : k, où k est le nombre de points selles trouvés.

Exemple : pour L = 5, C = 4 et la matrice M suivante :

i \ j0123
058404439
163287166
242354217
347506033
451364951

Travail demandé :

  1. Déclarer le type Mat de la matrice M et le type Tab des tableaux MaxL et MinC.
  2. Pour la matrice de l'exemple, donner le contenu des tableaux MaxL et MinC, puis le contenu du fichier "Selles.txt".
  3. Écrire l'algorithme d'une procédure Extremes(M, L, C, MaxL, MinC) qui remplit les tableaux MaxL et MinC.
  4. Écrire l'algorithme d'une procédure Selles(M, L, C) qui crée le fichier "Selles.txt", le remplit comme décrit ci-dessus en faisant appel à la procédure Extremes, puis le ferme.
  5. Sans les tableaux MaxL et MinC, il faudrait parcourir la ligne i et la colonne j pour chacune des L × C cases. Expliquer l'intérêt de calculer MaxL et MinC une seule fois, avant le parcours.

NB : M, L et C sont saisis dans le programme appelant. Chaque algorithme est accompagné du tableau de déclaration de ses objets locaux.

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

1. Idée : on déclare la matrice à sa taille maximale, 20 × 20 ; la partie utile, L lignes et C colonnes, est fixée à l'exécution.

Nouveaux types
Mat = Tableau de 20 lignes et 20 colonnes d'Entiers
Tab = Tableau de 20 Entiers

2. Idée : on calcule les deux tableaux auxiliaires, puis on ne retient que les cases égales à la fois à MaxL[i] et à MinC[j].

i01234
MaxL[i]5871426051
j0123
MinC[j]42284217

La ligne 2 a deux maximums égaux à 42, aux colonnes 0 et 2, et 42 est justement le minimum de ces deux colonnes. Aucune autre case ne convient : 71 est le maximum de la ligne 1 mais pas le minimum de la colonne 2, et 28 est le minimum de la colonne 1 mais pas le maximum de sa ligne.

Contenu du fichier "Selles.txt" :

42 : ligne 2, colonne 0
42 : ligne 2, colonne 2
Nombre de points selles : 2

3. Idée : deux doubles boucles indépendantes. Pour MaxL, la ligne est fixée et on parcourt les colonnes ; pour MinC, c'est l'inverse. Chaque recherche démarre sur le premier élément, pas sur 0 : une altitude peut être négative.

Procédure Extremes (M : Mat, L, C : Entier,
                    @ MaxL, MinC : Tab)
DEBUT
    Pour i de 0 à L - 1 Faire
        MaxL[i] ← M[i, 0]
        Pour j de 1 à C - 1 Faire
            Si M[i, j] > MaxL[i] Alors
                MaxL[i] ← M[i, j]
            Fin Si
        Fin Pour
    Fin Pour
    Pour j de 0 à C - 1 Faire
        MinC[j] ← M[0, j]
        Pour i de 1 à L - 1 Faire
            Si M[i, j] < MinC[j] Alors
                MinC[j] ← M[i, j]
            Fin Si
        Fin Pour
    Fin Pour
FIN
ObjetType / NatureRôle
i, jEntierIndices de ligne et de colonne

4. Idée : on ouvre le fichier en création, on parcourt M ligne par ligne et on écrit une ligne par point selle. Le compteur k sert à écrire la dernière ligne après le parcours, et à écrire 0 s'il n'y a aucun point selle.

Procédure Selles (M : Mat, L, C : Entier)
DEBUT
    Extremes (M, L, C, MaxL, MinC)
    Ouvrir ("D:\Selles.txt", F, "w")
    k ← 0
    Pour i de 0 à L - 1 Faire
        Pour j de 0 à C - 1 Faire
            Si (M[i, j] = MaxL[i]) Et (M[i, j] = MinC[j]) Alors
                ch ← Convch (M[i, j]) + " : ligne " + Convch (i)
                ch ← ch + ", colonne " + Convch (j)
                Ecrire_nl (F, ch)
                k ← k + 1
            Fin Si
        Fin Pour
    Fin Pour
    Ecrire_nl (F, "Nombre de points selles : " + Convch (k))
    Fermer (F)
FIN
ObjetType / NatureRôle
MaxL, MinCTabMaximums des lignes, minimums des colonnes
FFichier texteNom logique du fichier "Selles.txt"
i, jEntierIndices de parcours
kEntierNombre de points selles
chChaîneLigne à écrire
ExtremesProcédureRemplir MaxL et MinC

5. Idée : compter les comparaisons. Tester directement une case demande de parcourir sa ligne (C éléments) et sa colonne (L éléments) : environ L × C × (L + C) comparaisons, soit 20 × 20 × 40 = 16 000 pour une matrice 20 × 20. Avec MaxL et MinC, chaque maximum et chaque minimum est calculé une seule fois (environ 2 × L × C comparaisons), puis chaque case ne demande que deux tests : de l'ordre de 4 × 400 = 1 600 comparaisons.

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 : lignes et colonnes palindromes d'une matrice de lettres écrites dans Symetrie.txt avec leur nombre (contrôle 2016) ; quatre cases consécutives d'un même joueur dans une grille de jeu (principale 2016) ; points cols, minimums de leur ligne et maximums de leur colonne, trouvés grâce aux matrices M_min et M_max et écrits dans un fichier (principale 2021) ; séquences contiguës de somme nulle des lignes d'une matrice (principale 2022) ; zones couvertes isolées, les côtés inexistants du bord comptant pour 0, affichées puis marquées X dans Isolees.txt (contrôle 2026).

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

1 Drill FE-E.1 — quatre cases consécutives identiques : la borne j ≤ N − 4 et les alignements qui se chevauchent
Entraînement 01 / 04

Drill FE-E.1 — quatre cases consécutives identiques : la borne j ≤ N − 4 et les alignements qui se chevauchent

3 questionsCorrigé masqué

Dans un jeu de tuiles, une grille carrée est représentée par une matrice G d'ordre N (4 ≤ N ≤ 12) de caractères ; chaque case contient la couleur d'une tuile : "R", "V", "B" ou "J". Les lignes et les colonnes sont numérotées à partir de 0.

Un alignement est formé de quatre cases consécutives de même couleur, dans le sens horizontal ou dans le sens vertical. Cinq cases identiques consécutives forment donc deux alignements.

On se propose de créer, à la racine du disque D, un fichier texte "Alignements.txt" contenant une ligne par alignement : H i j pour un alignement horizontal commençant à la case (i, j), V i j pour un alignement vertical commençant à la case (i, j), les horizontaux étant écrits avant les verticaux. La dernière ligne du fichier est Total : k, où k est le nombre d'alignements.

Exemple pour N = 6 :

i \ j012345
0RVBBBJ
1VVJBRJ
2VRRRRR
3VJBJRB
4BJVJRB
5RJRVBB

Travail demandé :

  1. Donner le contenu du fichier "Alignements.txt" pour cet exemple.
  2. Écrire l'algorithme d'une procédure Alignements(G, N) qui crée, remplit et ferme le fichier "Alignements.txt".
  3. Préciser la dernière valeur prise par l'indice de départ d'un alignement horizontal, et ce qui se passerait si l'on allait jusqu'à N − 1.

NB : G et N sont saisis dans le programme appelant ; G est de type Mat, tableau de 12 lignes et 12 colonnes de caractères.

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

1. Idée : on examine chaque case de départ possible et les trois cases qui la suivent ; les suites de trois tuiles seulement ne comptent pas. La ligne 2 contient cinq "R" consécutifs, des colonnes 1 à 5 : deux alignements, qui commencent aux colonnes 1 et 2. La colonne 4 contient quatre "R", des lignes 1 à 4. Les suites "BBB" de la ligne 0 et "VVV" de la colonne 0 n'ont que trois cases.

H 2 1
H 2 2
V 1 4
Total : 3

2. Idée : deux doubles parcours. Pour un alignement horizontal, la ligne i est quelconque et le départ j va de 0 à N − 4 ; pour un vertical, c'est l'inverse.

Procédure Alignements (G : Mat, N : Entier)
DEBUT
    Ouvrir ("D:\Alignements.txt", F, "w")
    k ← 0
    Pour i de 0 à N - 1 Faire
        Pour j de 0 à N - 4 Faire
            Si Quatre (G[i, j], G[i, j + 1], G[i, j + 2], G[i, j + 3]) Alors
                Ecrire_nl (F, "H " + Convch (i) + " " + Convch (j))
                k ← k + 1
            Fin Si
        Fin Pour
    Fin Pour
    Pour j de 0 à N - 1 Faire
        Pour i de 0 à N - 4 Faire
            Si Quatre (G[i, j], G[i + 1, j], G[i + 2, j], G[i + 3, j]) Alors
                Ecrire_nl (F, "V " + Convch (i) + " " + Convch (j))
                k ← k + 1
            Fin Si
        Fin Pour
    Fin Pour
    Ecrire_nl (F, "Total : " + Convch (k))
    Fermer (F)
FIN
Fonction Quatre (a, b, c, d : Caractère) : Booléen
DEBUT
    Retourner (a = b) Et (b = c) Et (c = d)
FIN
ObjetType / NatureRôle
FFichier texteNom logique du fichier "Alignements.txt"
i, jEntierIndices de la case de départ
kEntierNombre d'alignements
QuatreFonctionTester si quatre tuiles ont la même couleur

3. Le dernier départ possible est j = N − 4 : l'alignement occupe alors les colonnes N − 4 à N − 1. Dans l'exemple, le départ j = 2 = N − 4 de la ligne 2 est bien trouvé. Si j allait jusqu'à N − 1, le test lirait G[i, N], G[i, N + 1] et G[i, N + 2], qui sont hors de la partie utile de la matrice.

2 Drill FE-E.2 — lignes et colonnes palindromes d'une matrice de lettres
Entraînement 02 / 04

Drill FE-E.2 — lignes et colonnes palindromes d'une matrice de lettres

3 questionsCorrigé masqué

Soit M une matrice de L lignes et C colonnes (2 ≤ L ≤ 15 et 2 ≤ C ≤ 15) remplie par des lettres majuscules. Une ligne (ou une colonne) de M est dite symétrique si la chaîne obtenue en concaténant ses lettres, de gauche à droite (ou de haut en bas), est un palindrome.

On se propose de créer, à la racine du disque D, un fichier texte "Symetrie.txt" qui contient une ligne Ligne i : mot pour chaque ligne symétrique, puis une ligne Colonne j : mot pour chaque colonne symétrique, et enfin la ligne Total : k, où k est le nombre de lignes et de colonnes symétriques.

Exemple pour L = C = 5 :

i \ j01234
0KAYAK
1ELLES
2NOEON
3ETSTE
4KAYAK

Travail demandé :

  1. Donner le contenu du fichier "Symetrie.txt" pour cet exemple.
  2. Écrire l'algorithme d'une fonction Palindrome(ch) qui retourne Vrai si la chaîne ch est un palindrome, en s'arrêtant à la première différence.
  3. Écrire l'algorithme d'une procédure LC_Sym(M, L, C) qui crée, remplit et ferme le fichier "Symetrie.txt".

NB : M, L et C sont saisis dans le programme appelant ; M est de type Mat, tableau de 15 lignes et 15 colonnes de caractères.

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

1. Idée : on lit chaque ligne de gauche à droite et chaque colonne de haut en bas, puis on teste le palindrome. Les lignes 0, 2, 3 et 4 sont symétriques ; la ligne 1, "ELLES", ne l'est pas. La colonne 0 se lit "KENEK" ; les autres colonnes ne sont pas symétriques (la colonne 1 se lit "ALOTA").

Ligne 0 : KAYAK
Ligne 2 : NOEON
Ligne 3 : ETSTE
Ligne 4 : KAYAK
Colonne 0 : KENEK
Total : 5

2. Idée : deux indices partent des deux bouts et se rapprochent tant que les caractères sont égaux ; la chaîne est un palindrome si les indices se sont croisés ou rejoints.

Fonction Palindrome (ch : Chaîne) : Booléen
DEBUT
    i ← 0
    j ← Long (ch) - 1
    Tant que (i < j) Et (ch[i] = ch[j]) Faire
        i ← i + 1
        j ← j - 1
    Fin Tant que
    Retourner i ≥ j
FIN

3. Idée : la chaîne d'une ligne ou d'une colonne se construit par concaténation, en partant de la chaîne vide ; le compteur k cumule lignes et colonnes.

Procédure LC_Sym (M : Mat, L, C : Entier)
DEBUT
    Ouvrir ("D:\Symetrie.txt", F, "w")
    k ← 0
    Pour i de 0 à L - 1 Faire
        ch ← ""
        Pour j de 0 à C - 1 Faire
            ch ← ch + M[i, j]
        Fin Pour
        Si Palindrome (ch) Alors
            Ecrire_nl (F, "Ligne " + Convch (i) + " : " + ch)
            k ← k + 1
        Fin Si
    Fin Pour
    Pour j de 0 à C - 1 Faire
        ch ← ""
        Pour i de 0 à L - 1 Faire
            ch ← ch + M[i, j]
        Fin Pour
        Si Palindrome (ch) Alors
            Ecrire_nl (F, "Colonne " + Convch (j) + " : " + ch)
            k ← k + 1
        Fin Si
    Fin Pour
    Ecrire_nl (F, "Total : " + Convch (k))
    Fermer (F)
FIN
ObjetType / NatureRôle
FFichier texteNom logique du fichier "Symetrie.txt"
i, jEntierIndices de parcours
chChaîneLettres d'une ligne ou d'une colonne
kEntierNombre de lignes et de colonnes symétriques
PalindromeFonctionTester si une chaîne est un palindrome
3 Drill FE-E.3 — séquences contiguës d'une ligne dont la somme vaut V : une somme cumulée par point de départ
Entraînement 03 / 04

Drill FE-E.3 — séquences contiguës d'une ligne dont la somme vaut V : une somme cumulée par point de départ

3 questionsCorrigé masqué

Soit M une matrice de L lignes et C colonnes d'entiers (2 ≤ L ≤ 20 et 2 ≤ C ≤ 20) et V un entier. On appelle séquence de somme V toute suite d'au moins deux éléments consécutifs d'une même ligne de M dont la somme est égale à V. Les lignes et les colonnes sont numérotées à partir de 0.

On se propose de remplir un fichier texte F comme suit : la première ligne contient le titre Séquences de somme V (avec la valeur de V) ; puis chaque séquence trouvée donne une ligne formée de trois entiers séparés par un espace : le numéro de la ligne de M, le numéro de la colonne de début et le numéro de la colonne de fin de la séquence.

Exemple pour L = 4, C = 5, V = 10 et la matrice M suivante :

i \ j01234
046-2210
133319
2-515073
3100128

Travail demandé :

  1. Donner le contenu du fichier F pour cet exemple.
  2. Écrire l'algorithme d'une procédure Sequences(M, L, C, V, F) qui remplit le fichier F comme décrit ci-dessus.
  3. Pourquoi n'est-il pas nécessaire d'écrire une troisième boucle pour calculer la somme des éléments de la colonne j à la colonne k ?

NB : une ligne peut contenir plusieurs séquences, qui peuvent se chevaucher. Le candidat n'est pas appelé à saisir M, L, C et V, ni à ouvrir ou fermer le fichier F. M est de type Mat, tableau de 20 lignes et 20 colonnes d'entiers.

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

1. Idée : pour chaque départ j, on ajoute les éléments suivants un par un et on écrit une ligne chaque fois que la somme vaut V. Dans la ligne 3, 10 0 est une séquence (10 + 0 = 10), mais 10 seul n'en est pas une : il faut au moins deux éléments. Dans la ligne 2, un 0 prolonge une séquence sans changer sa somme : d'où 2 0 1 et 2 0 2.

Séquences de somme 10
0 0 1
0 0 3
0 2 4
1 0 3
1 3 4
2 0 1
2 0 2
2 2 4
2 3 4
3 0 1
3 3 4

2. Idée : le départ j va de 0 à C − 2 (il faut au moins un élément après lui) ; la fin k va de j + 1 à C − 1, et la somme s est mise à jour à chaque nouvel élément.

Procédure Sequences (M : Mat, L, C, V : Entier,
                     @ F : Fichier texte)
DEBUT
    Ecrire_nl (F, "Séquences de somme " + Convch (V))
    Pour i de 0 à L - 1 Faire
        Pour j de 0 à C - 2 Faire
            s ← M[i, j]
            Pour k de j + 1 à C - 1 Faire
                s ← s + M[i, k]
                Si s = V Alors
                    Ecrire_nl (F, Convch (i) + " " + Convch (j) + " " + Convch (k))
                Fin Si
            Fin Pour
        Fin Pour
    Fin Pour
FIN
ObjetType / NatureRôle
iEntierNuméro de ligne
jEntierColonne de début
kEntierColonne de fin
sEntierSomme des éléments de la colonne j à la colonne k

3. Pour un départ j fixé, la somme de j à k est la somme de j à k − 1, déjà contenue dans s, plus M[i, k]. On ne réinitialise s qu'au changement de départ, par s ← M[i, j]. On ne s'arrête pas à la première séquence trouvée : les éléments négatifs ou nuls peuvent en faire apparaître d'autres plus loin, comme 0 0 1 puis 0 0 3 dans la ligne 0.

4 Drill FE-E.4 — cases isolées parmi leurs huit voisines : tester chaque voisin avant d'y accéder
Entraînement 04 / 04

Drill FE-E.4 — cases isolées parmi leurs huit voisines : tester chaque voisin avant d'y accéder

4 questionsCorrigé masqué

Une parcelle de forêt est représentée par une matrice M de L lignes et C colonnes (2 ≤ L ≤ 50 et 2 ≤ C ≤ 50) ; chaque case contient 1 s'il y pousse un arbre et 0 sinon. Les lignes et les colonnes sont numérotées à partir de 0.

Un arbre isolé est une case contenant 1 dont les huit cases voisines (haut, bas, gauche, droite et les quatre diagonales) contiennent 0. Pour une case du bord, les voisines qui n'existent pas sont ignorées.

On se propose d'écrire, dans un fichier texte "Isoles.txt" à la racine du disque D, une ligne (i, j) par arbre isolé, en parcourant M ligne par ligne, puis la ligne Arbres isolés : k.

Exemple pour L = 5 et C = 6 :

i \ j012345
0100101
1000000
2010010
3001000
4100001

Travail demandé :

  1. Donner le contenu du fichier "Isoles.txt" pour cet exemple.
  2. Écrire l'algorithme d'une fonction Isole(M, L, C, i, j) qui retourne Vrai si la case (i, j) contient un arbre isolé.
  3. Écrire l'algorithme d'une procédure Isoles(M, L, C) qui crée, remplit et ferme le fichier "Isoles.txt".
  4. Quelles cases de l'exemple deviendraient isolées si l'on ne regardait que les quatre voisines haut, bas, gauche et droite ?

NB : M, L et C sont saisis dans le programme appelant ; M est de type Mat, tableau de 50 lignes et 50 colonnes d'entiers.

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

1. Idée : pour chaque 1, on regarde les voisines qui existent, diagonales comprises. Les arbres (2, 1) et (3, 2) se touchent par un coin : aucun des deux n'est isolé. Les quatre coins et les arbres (0, 3) et (2, 4) n'ont que des 0 autour d'eux.

(0, 0)
(0, 3)
(0, 5)
(2, 4)
(4, 0)
(4, 5)
Arbres isolés : 6

2. Idée : les huit voisines sont (i + di, j + dj) avec di et dj dans {−1, 0, 1}, sauf (0, 0). On vérifie qu'une voisine existe avant de lire sa valeur, et on s'arrête dès qu'on trouve un arbre.

Fonction Isole (M : Mat, L, C, i, j : Entier) : Booléen
DEBUT
    ok ← (M[i, j] = 1)
    di ← -1
    Tant que ok Et (di ≤ 1) Faire
        dj ← -1
        Tant que ok Et (dj ≤ 1) Faire
            a ← i + di
            b ← j + dj
            Si (a ≥ 0) Et (a < L) Et (b ≥ 0) Et (b < C) Alors
                Si ((di ≠ 0) Ou (dj ≠ 0)) Et (M[a, b] = 1) Alors
                    ok ← Faux
                Fin Si
            Fin Si
            dj ← dj + 1
        Fin Tant que
        di ← di + 1
    Fin Tant que
    Retourner ok
FIN
ObjetType / NatureRôle
okBooléenVrai tant que la case est un arbre sans voisin
di, djEntierDécalages de ligne et de colonne
a, bEntierCoordonnées de la voisine

3.

Procédure Isoles (M : Mat, L, C : Entier)
DEBUT
    Ouvrir ("D:\Isoles.txt", F, "w")
    k ← 0
    Pour i de 0 à L - 1 Faire
        Pour j de 0 à C - 1 Faire
            Si Isole (M, L, C, i, j) Alors
                Ecrire_nl (F, "(" + Convch (i) + ", " + Convch (j) + ")")
                k ← k + 1
            Fin Si
        Fin Pour
    Fin Pour
    Ecrire_nl (F, "Arbres isolés : " + Convch (k))
    Fermer (F)
FIN
ObjetType / NatureRôle
FFichier texteNom logique du fichier "Isoles.txt"
i, jEntierIndices de parcours
kEntierNombre d'arbres isolés
IsoleFonctionTester une case

4. Avec les quatre seules voisines orthogonales, (2, 1) et (3, 2) deviennent isolées, puisqu'ils ne se touchent que par un coin : on trouverait 8 arbres isolés au lieu de 6.

Relier ce raisonnement au bac

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