Tout comme les conditionnelles, les boucles sont des structures de contrôle fondamentales de la programmation.
Par l'intermédiaire d'une boucle, on peut demander à un ordinateur de répéter une partie de code.
Nous allons présenter trois types de boucle: les boucles While, les boucles Repeat et les boucles For.
En fait, la boucle While suffirait à écrire n'importe quel programme. Mais dans certains cas l'écriture d'une boucle avec repeat ou avec for est plus pratique.
Une boucle While permet de répéter du code tant qu'une certaine condition est vraie.
Elle s'écrit de la manière suivante :
While condition do begin Instructions à répéter tant que la condition est vraie End ;
La condition est une expression logique quelconque.
Voilà un exemple précis de boucle While :
S := 0; i := 1; While i <= n Do begin S := S + i; i := i + 1; End;
Cette boucle permet de calculer la somme S des n premiers entiers : 1+2+3+...+n. Pour n = 4, on aura par exemple S=1+2+3+4= 10 à la fin de l'exécution de ce code.
Un peu de vocabulaire:
Dans notre exemple une itération est une exécution des instructions S := S + i; et i := i + 1;.
Dans notre exemple, ce sont les instructions S := 0 et i := 1.
Dans notre exemple, le compteur est représenté par la variable i. A chaque itération, la valeur de i est incrémentée par l'affectation i := i + 1.
Nous allons à présent dérouler la boucle donnée en exemple, c'est à dire détailler toutes les instructions qui seront exécutées jusqu'à ce que la boucle s'arrête.
Supposons que n vaut 3 avant d'entrer dans la boucle. Voilà exactement ce qu'il se passe lorsque cette boucle est exécutée :
Instruction exécutée | Valeur de i | Valeur de S | |
S := 0 | 0 | 0 | Initialisation |
i := 1 | 1 | 0 | |
S := S + i | 1 | 1 | 1ère itération |
i := i + 1 | 2 | 1 | |
S := S + i | 2 | 3 | 2ème itération |
i := i + 1 | 3 | 3 | |
S := S + i | 3 | 6 | 3ème itération |
i := i + 1 | 4 | 6 |
Dans une boucle While, la condition d'arrêt est testée avant l'exécution d'une itération.
Donc avant d'entrer la première fois dans la boucle, l'ordinateur va tester la condition i ≤ n. Comme i vaut 1 et n vaut 3, il va rentrer dans la boucle et faire une première itération.
A la fin de la première itération i vaut 2. La condition i ≤ n est toujours vérifiée. L'ordinateur va donc faire une deuxième itération.
A la fin de la deuxième itération i vaut 3. La condition i ≤ n est toujours vérifiée. L'ordinateur va donc faire une troisième itération.
A la fin de la 3ème itération, i vaut 4. Ce sera donc la dernière itération car à présent la condition i ≤ n est fausse.
La boucle Repeat s'écrit de la manière suivante:
Repeat Instructions à répéter jusqu'à ce que la condition soit vraie Until condition
Remarques:
Voici par exemple comment calculer la somme des n premiers nombres entiers avec une boucle Repeat:
S := 0; i := 0; Repeat i := i + 1; S := S+ i Until i = n;
Comme précédement, supposons que n vaut 3 et voyons ce qui se passe exactement lorsque la boucle Repeat est exécutée:
Instruction exécutée | Valeur de i | Valeur de S | |
S := 0 | 0 | 0 |
Avant d'entrer dans la boucle |
i := 0 | 0 | 0 | |
i := i + 1 | 1 | 0 | 1ère itération |
S := S + i | 1 | 1 | |
i := i + 1 | 2 | 1 | 2ème itération |
S := S + i | 2 | 3 | |
i := i + 1 | 3 | 3 | 3ème itération |
S := S + i | 3 | 6 |
Avant d'entrer dans la boucle S et i sont initialisés à 0.
A la fin de chaque itération, l'ordinateur va tester si i est égal à n (donc 3 dans notre exemple).
Cette condition n'est réalisée qu'à la fin de la troisième itération.
Fondamentalement une boucle For n'est rien d'autre qu'un raccourci d'écriture pour un certain type de boucle While que l'on rencontre très fréquemment :
compteur := valeur initiale; While compteur <= valeur finale Do Begin Instructions à répéter compteur := compteur + 1; End
Avant la boucle, on affecte une valeur initiale au compteur.
A chaque itération le compteur est incrémenté.
La boucle s'arrête dès que le compteur dépasse la valeur finale.
La boucle For permet d'écrire ce type de boucle de manière plus concise, comme suit
For compteur := valeur initiale To valeur finale Do Begin Instructions à répéter End;
On économise donc ainsi l'écriture de l'incrémentation du compteur à l'intérieur de la boucle.
Attention: l'incrémentation du compteur n'est pas écrite, mais elle est bien exécutée.
Voici par exemple la somme des n premiers nombres entiers avec une boucle For et avec une boucle While :
En boucle For | En boucle While |
S := 0; For i := 1 To n Do Begin S := S+i End |
S := 0; i := 1; While i <= n Do Begin S := S+i; i := i+1 |