Les boucles imbriquées
On peut placer une boucle à l'intérieur d'une autre. Pour chaque tour de la boucle extérieure, la boucle intérieure s'exécute en entier. C'est l'outil pour tout ce qui a des lignes et des colonnes.
L'horloge
Pense à une horloge : pour chaque heure, l'aiguille des minutes fait un tour complet.
pour heures de 0 à 1
pour minutes de 0 à 2
affiche heures + ' h ' + minutes + ' min'
fin pour
fin pour
Le programme affiche 6 lignes : 0 h 0, 0 h 1, 0 h 2, puis 1 h 0, 1 h 1, 1 h 2. La boucle intérieure recommence à zéro à chaque nouvelle heure.
Question : Combien de fois le affiche est-il exécuté avec pour i de 1 à 4 et, à l'intérieur, pour j de 1 à 3 ? — 12. La boucle intérieure fait 3 tours pour chacun des 4 tours de la boucle extérieure : 4 × 3 = 12.
Dessiner un rectangle d'étoiles
affiche écrit une ligne entière. Pour construire une ligne de plusieurs étoiles, on les accumule d'abord dans un texte :
rangee est un texte
pour i de 1 à 3
rangee vaut ''
pour j de 1 à 8
rangee ajoute '* '
fin pour
affiche rangee
fin pour
La boucle intérieure fabrique une rangée de 8 étoiles ; la boucle extérieure répète l'opération 3 fois. N'oublie pas rangee vaut '' : sans cette ligne, les rangées s'allongeraient à chaque tour.
Un triangle
Et si la boucle intérieure dépendait du compteur de la boucle extérieure ?
rangee est un texte
pour i de 1 à 5
rangee vaut ''
pour j de 1 à i
rangee ajoute '* '
fin pour
affiche rangee
fin pour
À la ligne 1, une étoile ; à la ligne 2, deux étoiles... La boucle intérieure va de 1 à i : elle fait un tour de plus à chaque ligne.
Toutes les tables de multiplication
rangee est un texte
pour i de 1 à 9
rangee vaut ''
pour j de 1 à 9
rangee ajoute (i * j) + ' '
fin pour
affiche rangee
fin pour
81 multiplications en six lignes de code !
Toutes les combinaisons
Les boucles imbriquées servent aussi à essayer toutes les possibilités. Combien de façons y a-t-il d'obtenir 7 avec deux dés ?
solutions est un nombre vaut 0
pour premierDe de 1 à 6
pour secondDe de 1 à 6
si premierDe + secondDe = 7 alors
affiche premierDe + ' + ' + secondDe
solutions ajoute 1
fin si
fin pour
fin pour
affiche solutions + ' combinaisons sur 36'
Le programme trouve 6 combinaisons. Il essaie les 36 lancers possibles et ne garde que ceux qui conviennent : c'est une recherche exhaustive.
Le nombre de tours se multiplie : deux boucles de 1 000 tours font un million de tours. Trois boucles imbriquées de 1 000 tours en feraient un milliard, bien trop pour CoddyRun.
Sortir d'une boucle imbriquée
arrête ne sort que de la boucle dans laquelle il se trouve, pas de celle qui l'entoure :
pour i de 1 à 3
pour j de 1 à 5
si j > 2 alors
arrête
fin si
affiche i + '-' + j
fin pour
fin pour
Pour chaque i, la boucle intérieure s'arrête dès que j dépasse 2, mais la boucle extérieure continue. Le programme affiche 1-1, 1-2, 2-1, 2-2, 3-1, 3-2.
En résumé
- Pour chaque tour de la boucle extérieure, la boucle intérieure s'exécute en entier.
- Le nombre total de tours est le produit des deux.
- Pour afficher un motif, on accumule chaque rangée dans un texte.
- La boucle intérieure peut dépendre du compteur extérieur.
arrête ne sort que de la boucle la plus proche.