cursus.

Cours 2 · Boucles et tableauxLeçon 1 sur 2

Boucles

25 min de lecture6 sections Version PDF

À la fin de cette leçon, vous saurez

Choisir entre Pour et Tant que, maîtriser le compteur et l'accumulateur.

Écrire cent fois la même ligne n'est pas une option. La boucle est la construction qui permet à quinze lignes d'algorithme de traiter un million de données — et c'est précisément ce qui rend une machine utile.

Tant que : répéter jusqu'à ce que la condition tombe

TantQue condition Faire    ...instructions...FinTantQue

Le mécanisme tient en trois temps, et l'ordre compte. On évalue la condition. Si elle est VRAIE, on exécute le corps, puis on revient au test. Si elle est FAUSSE, on saute directement après le FinTantQue.

Conséquence importante : le test a lieu avant le corps. Si la condition est fausse dès le départ, le corps n'est jamais exécuté. Zéro tour est un résultat parfaitement normal, et souvent le comportement correct — une boucle qui traite les éléments d'une liste vide ne doit rien faire.

Compteur et accumulateur

Presque toute boucle utile met en scène deux rôles distincts, qu'il faut apprendre à distinguer.

Le compteur sait où on en est : i ← i + 1 à chaque tour. Il ne dépend pas du contenu traité, seulement du nombre de tours effectués.

L'accumulateur garde la mémoire de ce qui a été traité : somme ← somme + i. Sa valeur finale est le résultat de l'algorithme.

Les deux doivent être initialisés avant la boucle. Et cette initialisation n'est pas arbitraire : un accumulateur de somme part de 0, l'élément neutre de l'addition ; un accumulateur de produit part de 1. Partir de 0 pour un produit donnerait invariablement 0.

Animation · étape 1 / 160:00 / 0:24

i compte les tours. Il doit exister AVANT la boucle : une variable créée dans le corps repartirait de zéro à chaque tour.

Prêt à lancer · 0:00 / 0:24
Étapes

Cliquez l'étape 5, puis l'étape 15. Entre les deux, le même bloc de trois lignes a été parcouru quatre fois — c'est exactement ce que « boucle » veut dire. Et remarquez l'étape 15 : i vaut 5 à la sortie, pas 4. Le compteur dépasse toujours d'un cran la dernière valeur traitée, puisque c'est ce dépassement qui fait échouer le test et arrête la boucle.

Quiz · vérifiez votre compréhension Sans réponse

Dans la trace, pourquoi la boucle s'arrête-t-elle après le quatrième tour ?

La boucle infinie

Retirez la ligne i ← i + 1 de la trace précédente. i reste à 1, le test 1 ≤ 4 reste vrai, et la boucle tourne pour toujours. C'est l'erreur la plus courante du semestre, et elle viole la première exigence de la leçon 1 : la finitude.

La règle de relecture est simple : le corps de la boucle doit contenir quelque chose qui fait progresser la condition vers FAUX. Si vous ne trouvez pas cette instruction, la boucle ne s'arrêtera pas.

Quiz · vérifiez votre compréhension Sans réponse

Que fait cet algorithme : i ← 10 ; TantQue i > 0 Faire ; Écrire(i) ; i ← i + 1 ; FinTantQue ?

Pour : quand le nombre de tours est connu d'avance

Pour i de 1 à 4 Faire    somme ← somme + iFinPour

Cette boucle fait exactement la même chose que la trace ci-dessus, en trois lignes au lieu de sept. Le Pour regroupe au même endroit l'initialisation du compteur, le test et l'incrément — ce qui rend l'oubli de l'incrément impossible. C'est sa vraie qualité, bien plus que la concision.

Les bornes sont incluses des deux côtés : Pour i de 1 à 4 fait quatre tours, avec i valant successivement 1, 2, 3 puis 4.

Le choix entre les deux se fait sur une seule question : sait-on compter les tours avant d'entrer dans la boucle ?

SituationBoucle
Parcourir les 20 cases d'un tableauPour
Répéter 10 fois une opérationPour
Lire des données jusqu'au mot « fin »TantQue
Redemander une saisie tant qu'elle est invalideTantQue

Tout Pour peut se réécrire en TantQue ; l'inverse est faux. Un Pour est un TantQue discipliné.

Quiz · vérifiez votre compréhension Sans réponse

Combien de tours fait Pour i de 0 à 9 Faire … FinPour ?

Cette somme des entiers de 1 à nn a d'ailleurs une formule fermée, connue depuis l'Antiquité :

1+2++n=n(n+1)21 + 2 + \dots + n = \frac{n(n+1)}{2}

Elle donne le même résultat que la boucle, mais en une seule opération au lieu de nn. Gardez-la en tête : nous la retrouverons à la leçon 8, quand il s'agira de compter le travail d'un algorithme de tri.

À vous

Exercice · JavaScript · à vous de jouer

Écrivez la somme de 1 à n des deux façons, puis vérifiez qu'elles donnent le même résultat.

En attente
// 1. Corrigez la boucle Tant que pour qu'elle somme les entiers de 1 à n.
// 2. Écrivez ensuite la même chose avec une boucle Pour.
function sommeTantQue(n) {
  let i = 1;
  let somme = 0;
  while (i <= 0) {   // ← condition à corriger
    // à compléter : accumuler, PUIS avancer le compteur
  }
  return somme;
}

function sommePour(n) {
  let somme = 0;
  // à compléter
  return somme;
}

console.log(sommeTantQue(4), sommePour(4));      // attendu : 10 10
console.log(sommeTantQue(100), sommePour(100));  // attendu : 5050 5050

Console de sortie
Le résultat s'affiche dans la console

À retenir

Flashcards · 1 / 2Toucher pour retourner
Fin de la leçon

Vous avez parcouru les 6 sections.

Marquez-la terminée pour faire avancer votre parcours, ou revenez sur un point avant de passer à la suite.