Boucles et répétitions
Ce que ce chapitre apporte 5 points
- Choisir entre Pour et TantQue d'après ce qui est connu au moment d'entrer dans la boucle.
- Prévoir le nombre de tours d'une boucle, et la valeur de ses variables à la sortie, en déroulant le dernier tour.
- Préparer avant la boucle, et jamais dans son corps, une variable qui accumule ou qui compte.
- Écrire un TantQue qui s'arrête, et reconnaître une boucle qui ne s'arrêtera pas.
- Lire une boucle placée dans une autre.
Au contrôle qualité, un technicien mesure chaque jour les pièces d'un lot dont le nombre change d'un jour à l'autre ; au poste de commande, un opérateur ressaisit une quantité tant qu'elle est refusée. Écrire cent fois la même instruction ne conviendrait à aucun des deux : ce n'est pas seulement pénible, c'est impossible à maintenir, et impossible tout court dès que le nombre de répétitions n'est connu qu'à l'exécution. Les boucles règlent les deux. Reste à choisir la bonne : Pour quand on sait combien de tours faire au moment d'entrer dans la boucle, TantQue quand on sait seulement jusqu'à quand. Et reste à savoir, avant de la lancer, combien de tours elle fera.
Le chapitre sur le pseudo-code a présenté les deux boucles du cours en quelques lignes, celui sur les variables l'accumulateur qui retient un total, et celui sur les conditions la borne, qui décide ici du nombre de tours. Ce chapitre les assemble, et s'attache à ce qui fait qu'une boucle est juste : le nombre de tours qu'elle fait, la valeur de ses variables quand elle s'arrête, et la ligne qui la fait s'arrêter.
Pourquoi répéter des instructions ?
Une boucle est une structure qui répète un ensemble d'instructions, son corps, soit un nombre de fois déterminé, soit tant qu'une condition reste vraie. Chaque passage dans le corps s'appelle un tour, ou une itération.
Pour afficher les nombres de 1 à 10 sans boucle, il faudrait écrire dix instructions Écrire à la suite. Avec une boucle, une seule structure suffit :
programme principal
La variable i joue ici le rôle de compteur : elle prend successivement toutes les valeurs de 1 à 10, une par tour, et l'instruction Écrire i s'exécute à chaque fois avec la valeur du moment.
Dix Écrire à la suite restaient possibles. Ce qui rend la boucle indispensable, c'est le cas où le nombre de répétitions n'est pas connu de celui qui écrit l'algorithme : le nombre de mesures d'une série, qui change d'un jour à l'autre, ou le nombre d'essais qu'il faudra à un opérateur pour saisir une valeur correcte. Aucune suite d'instructions écrite d'avance ne convient alors ; une boucle, si.
La boucle Pour : un nombre de tours connu en entrant
La boucle Pour répète son corps pour chaque valeur d'un compteur, de la borne de départ à la borne d'arrivée, les deux bornes comprises. Elle convient lorsque le nombre de tours est connu au moment d'entrer dans la boucle, même s'il n'est connu qu'à l'exécution : un nombre saisi, la taille d'une série.
Sa structure générale est la suivante :
Le mot-clé Pour ouvre la boucle, FinPour la ferme, et les lignes indentées entre les deux forment le corps. Le compteur, souvent appelé i, j ou k, avance de lui-même de 1 d'un tour à l'autre : il n'y a rien à écrire pour cela.
programme principal
Cet algorithme imprime cinq fois la même étiquette. Le compteur i prend successivement les valeurs 1, 2, 3, 4 et 5. Après le tour où i vaut 5, la boucle s'arrête d'elle-même, et i garde la dernière valeur prise : 5. Python fait de même ; d'autres langages, comme C, y laissent 6, et un algorithme n'a donc pas à compter sur la valeur du compteur une fois la boucle finie. Ici, i ne sert qu'à compter les répétitions.
On peut comparer la boucle Pour à une échelle : à chaque tour, on monte une marche, jusqu'à la dernière, et l'on sait dès le pied de l'échelle combien il y en a. De a à b, quand a ne dépasse pas b, une boucle Pour fait b - a + 1 tours.
Le compteur est aussi une valeur
Le compteur peut entrer dans les calculs. Une machine produit 40 pièces par heure ; cette boucle affiche la production cumulée au bout de chaque heure :
programme principal
À chaque tour, heure * 40 se calcule avec la valeur du compteur à ce tour-là : 40, puis 80, 120 et 160.
Connu en entrant ne veut pas dire écrit dans le texte
Les bornes d'un Pour ne sont pas forcément des nombres écrits dans l'algorithme. Un technicien relève une série de mesures dont le nombre change d'un jour à l'autre : l'algorithme lit d'abord ce nombre, puis s'en sert comme borne.
programme principal
Celui qui écrit l'algorithme ignore combien de mesures seront saisies ; la machine, elle, le sait avant le premier tour, puisque n est lu avant la boucle. C'est ce qui fait un Pour : un nombre de tours connu en entrant dans la boucle, et non un nombre écrit dans le texte. Remplacer la première entrée, 4, par 2 suffit à changer le nombre de tours : la figure fait alors la moyenne des deux premières mesures. total est un accumulateur : préparé à zéro avant la boucle, il reçoit une mesure de plus à chaque tour. La division / rend un nombre décimal, ici 12,75 : l'affichage l'écrit avec une virgule, alors que l'algorithme et les entrées écrivent les décimaux avec un point, comme 12.5.
Une boucle Pour dont la borne de départ dépasse la borne d'arrivée ne fait aucun tour :
programme principal
aucune variable
Le compteur part de 10 et avance de 1 : 10 dépasse déjà 1, et la boucle passe directement à la suite. Dans ce cours, cette boucle n'affiche donc rien, et la figure le montre ; certains langages descendent d'eux-mêmes, d'autres non, et il vaut mieux ne jamais compter sur cette tolérance. Pour compter à rebours, il faut le dire, avec un pas négatif :
programme principal
Le mot pas indique de combien le compteur change à chaque tour ; sans lui, il avance de 1.
Pour i de 1 à 10 fait combien de tours ?
La boucle TantQue : répéter jusqu'à une condition
La boucle TantQue répète son corps tant qu'une condition reste vraie. Elle convient lorsque le nombre de tours n'est pas connu en entrant dans la boucle, parce qu'il dépend de ce qui se passe pendant les tours eux-mêmes : une saisie, une mesure, un calcul.
Sa structure est la suivante :
Le principe est simple : avant chaque tour, l'algorithme vérifie la condition. Si elle est vraie, le corps de la boucle s'exécute en entier, puis l'algorithme remonte au test. Si elle est fausse, la boucle s'arrête et le programme reprend après le FinTantQue. La condition n'est examinée qu'à cet endroit, en tête de tour : si elle devient fausse au milieu du corps, le tour en cours va quand même jusqu'au bout.
Le cas type est la saisie contrôlée. Une commande porte sur un nombre de pièces, qui doit être strictement positif ; tant que l'opérateur saisit une quantité négative ou nulle, l'algorithme la redemande.
programme principal
Lire reçoit », et dérouler : le test quantite <= 0 est faux dès le premier passage, aucune ligne du corps n'est surlignée, et le total de pas affiché à droite des boutons tombe de 9 à 3. Saisir ensuite 0, -1, -2, 5 : trois messages de refus s'affichent, un par valeur négative ou nulle, et le total monte à 12 pas. Chaque tour coûte trois pas, le test, le message et la nouvelle lecture : le nombre de tours est celui des saisies refusées, et il ne se connaît qu'une fois ces saisies faites. C'est ce qui fait un TantQue.
La condition quantite <= 0 est le critère de poursuite : tant qu'elle reste vraie, la boucle continue. Dès qu'une quantité strictement positive est saisie, elle devient fausse et la boucle s'arrête. La deuxième saisie de la figure, 0, est refusée comme la première : c'est la borne, et c'est elle qu'il faut essayer. La première lecture a lieu avant la boucle, sans quoi la condition porterait sur une variable qui n'existe pas encore, et l'algorithme s'arrêterait ; la seconde a lieu dans la boucle, sans quoi la condition ne changerait jamais.
La question que se pose tout débutant, « par où l'algorithme repasse-t-il pour recommencer ? », a une réponse visuelle. Dans un organigramme, la boucle se dessine avec une flèche qui remonte au test : c'est le seul trait qui aille vers le haut, et il porte à lui seul toute l'idée de répétition. Le parcours Flowgorithm dessine ainsi toutes ses boucles, dans le chapitre qui leur est consacré.
Le test est en tête de boucle, et la flèche qui remonte y ramène après chaque tour. Une première saisie correcte fait sauter la boucle entière.
Cette boucle sert chaque fois que le nombre de tours dépend de ce qui se passe pendant les tours :
- redemander une saisie jusqu'à ce qu'elle soit valide ;
- remplir une cuve par apports successifs jusqu'au niveau voulu ;
- traiter des commandes en attente jusqu'à ce qu'il n'en reste plus.
Il existe une variante, Répéter … Jusqu'à, qui vérifie la condition à la fin du tour au lieu du début :
programme principal
aucune variable
Le corps s'exécute donc toujours au moins une fois, avant tout test : c'est la forme naturelle d'une saisie, où il faut bien lire une première valeur avant de pouvoir la juger.
Attention au sens de la condition, qui s'inverse. TantQue attend la condition pour continuer, Jusqu'à la condition pour s'arrêter. La saisie contrôlée de plus haut, qui refuse les quantités négatives ou nulles, s'écrit TantQue quantite <= 0 dans un cas et Jusqu'à quantite > 0 dans l'autre : chacune est la négation exacte de l'autre, bornes comprises. Recopier la condition d'un TantQue dans un Jusqu'à donne une boucle qui s'arrête exactement quand elle devrait continuer.
Quand préférer Répéter … Jusqu'à à un TantQue ?
Ce qui fait qu'un TantQue s'arrête
Un Pour s'arrête de lui-même, à sa borne. Un TantQue ne s'arrête que si l'une des lignes de son corps finit par rendre la condition fausse, et cette ligne, c'est à celui qui écrit l'algorithme de la prévoir.
L'erreur la plus spectaculaire consiste à oublier de modifier la variable que teste la condition. Elle donne une boucle infinie :
programme principal
x ne change jamais, donc la condition x <= 5 reste toujours vraie. Déroulée, la figure affiche des zéros jusqu'à la limite de 500 pas, puis s'interrompt en nommant la cause. Pour que la boucle s'arrête, la variable doit évoluer à chaque tour, dans le sens qui rapproche la condition de sa fin :
programme principal
Le dernier tour, et le test qui le suit
Reste à savoir quand la boucle corrigée s'arrête, et c'est là que les bornes se trompent. Le tableau suit les tests, un par ligne :
| Test | x au moment du test | x <= 5 | Ce que fait le tour |
|---|---|---|---|
| 1 | 0 | vrai | affiche 0, x passe à 1 |
| 2 | 1 | vrai | affiche 1, x passe à 2 |
| 3 à 5 | 2, 3, 4 | vrai | affiche 2, 3, 4 |
| 6 | 5 | vrai | affiche 5, x passe à 6 |
| 7 | 6 | faux | aucun tour : la boucle s'arrête |
Quand x vaut 5, la condition est encore vraie : le sixième tour a lieu et affiche 5. C'est le septième test, avec x à 6, qui échoue. La boucle affiche donc six valeurs, de 0 à 5, et x vaut 6 à la sortie. Écrire TantQue x < 5 l'aurait arrêtée un tour plus tôt, après l'affichage de 4. Pour choisir entre < et <=, il n'y a qu'un moyen sûr : dérouler le dernier tour, puis le test qui le suit.
Les trois temps d'un TantQue
Un TantQue bien écrit a trois temps : initialiser avant la boucle la variable que teste la condition, la faire progresser dans le corps vers la valeur qui rendra la condition fausse, et vérifier sur le dernier tour que ce moment arrive, et où il laisse les variables. Le troisième temps réserve des surprises quand la variable avance par grands pas. Un bac doit recevoir au moins 100 litres, par apports de 30 litres :
programme principal
| Test | niveau au moment du test | niveau < 100 | Ce que fait le tour |
|---|---|---|---|
| 1 | 0 | vrai | niveau passe à 30 |
| 2 | 30 | vrai | niveau passe à 60 |
| 3 | 60 | vrai | niveau passe à 90 |
| 4 | 90 | vrai | niveau passe à 120 |
| 5 | 120 | faux | aucun tour : la boucle s'arrête |
À 90 litres, la condition est encore vraie, et le quatrième apport porte le niveau à 120. La condition dit quand la boucle cesse de tourner, pas où elle laisse les variables : ici, 20 litres au-delà du niveau voulu. Si le bac ne pouvait contenir que 110 litres, il aurait débordé, et seul le déroulement du dernier tour le fait voir.
La question à se poser avant d'écrire une boucle. « Qu'est-ce qui fera qu'elle s'arrête ? » Pour un Pour, la réponse est donnée par les bornes. Pour un TantQue, elle doit être écrite à la main, dans le corps de la boucle, et c'est la ligne qu'on oublie.
1.Qu'est-ce qui fait qu'un TantQue finit par s'arrêter ?
2.Après x ← 0, une boucle TantQue x < 3 affiche x puis l'augmente de 1. Que vaut x à la sortie ?
Une boucle dans une boucle
Le corps d'une boucle peut contenir une autre boucle. La boucle intérieure est alors relancée en entier à chaque tour de la boucle extérieure : pour trois jours de quatre relevés, elle fait quatre tours, trois fois, soit douze passages.
programme principal
Pendant les quatre tours intérieurs, jour ne bouge pas. C'est seulement quand releve a fait ses quatre tours que la boucle extérieure passe au jour suivant, et que la boucle intérieure repart de 1.
La borne intérieure peut aussi dépendre du compteur extérieur. Pour comparer chaque capteur d'une installation à chacun des autres une seule fois, le capteur i n'est comparé qu'à ceux qui le suivent :
programme principal
i | valeurs prises par j | comparaisons |
|---|---|---|
| 1 | 2, 3, 4 | 3 |
| 2 | 3, 4 | 2 |
| 3 | 4 | 1 |
La boucle intérieure fait trois tours, puis deux, puis un : six comparaisons, sans qu'aucun capteur soit comparé à lui-même ni deux fois au même voisin. La boucle extérieure s'arrête à n - 1 pour une raison qui se lit sur le tour suivant : avec i à 4, la boucle intérieure irait de 5 à 4, et ne ferait aucun tour. C'est la forme exacte des tris du chapitre Les algorithmes de tri.
Dans Pour i de 1 à 3 qui contient Pour j de 1 à 4, combien de fois s'exécute le corps de la boucle intérieure ?
Trois erreurs qui laissent la boucle se terminer
La boucle sans fin est la plus spectaculaire des erreurs de boucle. Les trois suivantes sont plus sournoises : le programme se termine, et le résultat est faux.
programme principal
somme ← 0 est dans la boucle : il s'exécute à chaque tour et efface le total précédent.
| Tour | i | somme après somme ← 0 | somme en fin de tour |
|---|---|---|---|
| 1 | 1 | 0 | 1 |
| 2 | 2 | 0 | 2 |
| 3 | 3 | 0 | 3 |
Chaque tour repart de zéro : à la sortie, somme ne contient que la contribution du dernier tour. L'algorithme affiche 3 au lieu de 6, sans le moindre message. L'initialisation appartient à ce qui précède la boucle, jamais à son corps.
La deuxième erreur est celle d'un tour, dans un sens ou dans l'autre. Pour i de 1 à 10 fait dix tours, pas neuf : les deux bornes sont comprises. Pour i de 0 à 10 en fait onze. Le même décalage guette un TantQue : entre x < 5 et x <= 5, il y a exactement un tour. Le contrôle qui ne trompe jamais consiste à compter les tours pour une petite valeur : Pour i de 1 à 3 doit afficher trois lignes. Si le résultat en donne deux ou quatre, l'erreur est dans les bornes et nulle part ailleurs.
Le chapitre sur le pseudo-code l'a montré : un i ← i + 1 ajouté dans un Pour ne change pas le nombre de tours. La figure le vérifie sur dix tours, la ligne étant placée cette fois après l'affichage.
programme principal
Déroulée, elle fait bien ses dix tours et affiche 1 à 10 : à chaque tour, l'en-tête du Pour redonne à i la valeur du tour, et la ligne ajoutée ne vaut que jusqu'à la fin du tour en cours. Python se comporte de même. Seule trace de cette ligne : à la sortie, i vaut 11, une valeur que le Pour ne lui a jamais donnée. En C ou en Java, en revanche, la même ligne fait avancer le compteur de deux à chaque tour, et la boucle n'affiche plus que 1, 3, 5, 7 et 9. Une ligne dont l'effet change d'un langage à l'autre rend l'algorithme illisible : elle est à proscrire. Quand il faut un pas irrégulier, c'est un TantQue qu'il faut écrire, où l'avancement est explicite.
1.Où placer somme ← 0 dans un algorithme qui additionne des mesures lues une à une ?
2.Ajouter i ← i + 1 dans le corps d'un Pour i de 1 à 10 fait quoi, dans ce cours ?
Mettre en pratique
Le nombre de tours d'une boucle et la valeur qu'elle laisse en sortant se calculent avant de l'exécuter. C'est ce calcul, refait à la main, qui permet de lui faire confiance.
Compter les tours avant de les faire
- 1.
Combien de tours fait
Pour i de 3 à 12? - 2.
Combien de lignes affiche
Pour c de 0 à 90 pas 15, qui écritcà chaque tour ? - 3.
Après
x ← 0, une boucleTantQue x < 7affichex, puis l'augmente de 2. Combien de valeurs affiche-t-elle ? - 4.
Que vaut
xà la sortie de cette boucle ? - 5.
Un bac reçoit des apports de 35 litres tant que son niveau, parti de zéro, reste inférieur à 100 litres. À combien de litres le remplissage s'arrête-t-il ?
- 6.
Dans
Pour jour de 1 à 7, qui contientPour releve de 1 à 24, combien de fois s'exécute le corps de la boucle intérieure ? - 7.
Pour comparer chacun de six capteurs à ceux qui le suivent, avec
Pour i de 1 à n - 1puisPour j de i + 1 à n, combien de comparaisons faut-il ?
Chercher d'abord, ouvrir le corrigé ensuite.
Afficher une table de conversion des températures, de 0 à 100 degrés Celsius, de 20 en 20, en degrés Fahrenheit. La conversion multiplie par 9, divise par 5, puis ajoute 32.
programme principal
Ce qui s'affiche :
0 °C = 32 °F
20 °C = 68 °F
40 °C = 104 °F
60 °C = 140 °F
80 °C = 176 °F
100 °C = 212 °F
Le pas de 20 donne six tours, de 0 à 100 compris, et le compteur sert directement au calcul. Sans pas, Pour c de 0 à 100 ferait cent un tours, et la table cent une lignes.
Un contrôleur mesure le diamètre de plusieurs pièces. Lire leur nombre, puis les diamètres, en millimètres, et afficher combien de pièces dépassent 20,5 mm et doivent être rejetées.
programme principal
Le nombre de pièces est lu avant la boucle : c'est un Pour. rejets compte : c'est un accumulateur qui n'ajoute que des 1, et seulement dans les tours où la condition est vraie ; il se prépare donc à zéro avant la boucle, comme un total. Sur les cinq pièces de la figure, deux sont rejetées, à 20,7 et à 21 mm. La pièce à 20,5 mm ne l'est pas : > est strict, et c'est à la tolérance exacte qu'il faut vérifier que la condition dit bien ce que veut l'énoncé.
Redemander le taux de remplissage d'une cuve, en pourcentage, tant qu'il n'est pas compris entre 0 et 100.
programme principal
Le déroulement, avec les saisies de la figure, 120, puis -5, puis 40 :
| Moment | Ce qui s'affiche | taux après lecture | taux < 0 OU taux > 100 |
|---|---|---|---|
| avant la boucle | (rien) | 120 | vrai : on entre |
| tour 1 | message d'erreur | -5 | vrai : un tour de plus |
| tour 2 | message d'erreur | 40 | faux : on sort |
| après la boucle | Taux enregistré : 40 % | 40 | (non testé) |
Deux valeurs refusées, deux messages : le compte se vérifie sur la sortie de la figure.
Reste la borne, car une cuve vide est une mesure valide. Écrire taux <= 0 au lieu de taux < 0 refuserait une cuve à 0 % à chaque saisie, et l'opérateur qui relève une cuve vide ne pourrait jamais l'enregistrer. Les bornes sont toujours l'endroit où les conditions se trompent.
Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?
Dans la bibliothèque d'exercices
Compter les tours, placer l'accumulateur, et savoir ce qui fait qu'une boucle s'arrête.
- Combien de tours1 · Lire
- L'accumulateur au mauvais endroit3 · Combiner
- Ce qui fait qu'elle s'arrête3 · Combiner
- La somme des nombres pairs3 · Combiner
- L'accumulateur remis à zéro3 · Combiner
- La moyenne d'une série de relevés3 · Combiner