Module 02 · Leçon 4
Itératives à condition d'arrêt : Répéter et Tant que
Ce que vous saurez faire
- Écrire une boucle Tant que…Faire
- Écrire une boucle Répéter…Jusqu'à
- Choisir l'itérative adaptée à un problème
Avant de commencer
Pour calculer la somme des chiffres d'un entier (123 → 1 + 2 + 3 = 6),
on ne sait pas à l'avance combien d'itérations on va faire. Comment
boucler tant qu'une condition reste vraie, sans connaître le nombre
de tours ?
1. La boucle Tant que…Faire
Tant que n > 0 Faire
somme ← somme + (n mod 10)
n ← n div 10
FinTantQue
Tant que n > 0 Faire
somme ← somme + (n mod 10)
n ← n div 10
FinTantQue
WHILE n > 0 DO
BEGIN
somme := somme + (n MOD 10);
n := n DIV 10;
END;
2. La boucle Répéter…Jusqu'à
Répéter
Ecrire("Tapez O ou N : ")
reponse ← Donnée()
Jusqu'à (reponse = 'O') OU (reponse = 'N')
Répéter
Ecrire("Tapez O ou N : ")
reponse ← Donnée()
Jusqu'à (reponse = 'O') OU (reponse = 'N')
REPEAT
Write('Tapez O ou N : ');
Readln(reponse);
UNTIL (reponse = 'O') OR (reponse = 'N');
3. Tant que vs Répéter — la différence
| Question | Tant que | Répéter |
|---|---|---|
| Test ? | Avant | Après |
| Min d'itérations | 0 | 1 |
| Condition pour boucler | Vraie | Fausse |
| Condition de sortie | Devient fausse | Devient vraie |
Tant que (condition vraie) Faire ... ↔ Répéter ... Jusqu'à (condition fausse)
C'est l'inverse de la même logique. Le bac SI exige de connaître les deux et de savoir choisir.
4. Boucle infinie : à éviter
Tant que n > 0 Faire
somme ← somme + n
{ Oups : on n'a pas modifié n ! }
FinTantQue
Cette boucle ne se termine jamais. La condition reste éternellement vraie. Toute boucle conditionnelle doit modifier au moins une variable de la condition dans son corps.
5. Choisir entre Pour, Tant que et Répéter
| Situation | Structure |
|---|---|
| Nombre d'itérations connu à l'avance | Pour |
| Nombre inconnu, test avant (peut ne pas exécuter) | Tant que |
| Nombre inconnu, exécution au moins 1 fois (saisie) | Répéter |
6. Exercices
Écrire un programme qui lit un entier positif n et calcule la somme
de ses chiffres. Exemple : n = 1234 → résultat 10.
Voir le corrigé
PROGRAM SommeChiffres;
VAR
n, somme : integer;
BEGIN
Readln(n);
somme := 0;
WHILE n > 0 DO
BEGIN
somme := somme + (n MOD 10);
n := n DIV 10;
END;
Writeln('Somme = ', somme);
END.
Tant que est adapté car si n = 0, la somme doit rester 0.
Demander à l'utilisateur de saisir un entier strictement positif. Tant que l'entrée n'est pas valide, redemander. Afficher la valeur saisie à la fin.
Voir le corrigé
PROGRAM SaisieControlee;
VAR
n : integer;
BEGIN
REPEAT
Write('Entrez un entier > 0 : ');
Readln(n);
UNTIL n > 0;
Writeln('Vous avez saisi : ', n);
END.
Répéter est idéal : il faut demander la valeur avant de pouvoir la tester.
Écrire un programme qui calcule le PGCD de deux entiers a et b par
soustractions successives : remplacer le plus grand par la différence
des deux, jusqu'à ce qu'ils soient égaux.
Voir le corrigé
PROGRAM PGCD;
VAR
a, b : integer;
BEGIN
Readln(a, b);
WHILE a <> b DO
BEGIN
IF a > b THEN
a := a - b
ELSE
b := b - a;
END;
Writeln('PGCD = ', a);
END.
7. Erreurs fréquentes au bac
- Oublier de modifier la variable de la condition → boucle infinie.
- Confondre la condition d'arrêt (Répéter) avec la condition de boucle (Tant que). L'inversion logique est facile à rater.
- Utiliser
Tant quequandRépéterest requis (saisie contrôlée : on doit demander avant de tester). - Démarrer le compteur d'arrêt à une mauvaise valeur initiale.
8. Quiz
Quiz (5 questions)
Combien de fois minimum s'exécute le corps d'une boucle Répéter…Jusqu'à ?
Pour une saisie contrôlée jusqu'à obtenir un entier valide, on choisit :
L'équivalent de `Tant que C Faire X FinTantQue` avec Répéter est :
Pour le tri à bulles classique, quelle structure externe convient le mieux ?
Pour parcourir un tableau de 100 éléments, on préfère :