Aller au contenu principal

Module 02 · Leçon 4

Itératives à condition d'arrêt : Répéter et Tant que

180 minanalyse · pascal
Affichage du code

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

2. La boucle Répéter…Jusqu'à

Répéter
  Ecrire("Tapez O ou N : ")
  reponse ← Donnée()
Jusqu'à (reponse = 'O') OU (reponse = 'N')

3. Tant que vs Répéter — la différence

QuestionTant queRépéter
Test ?AvantAprès
Min d'itérations01
Condition pour bouclerVraieFausse
Condition de sortieDevient fausseDevient 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

SituationStructure
Nombre d'itérations connu à l'avancePour
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

Exercice 1facile
Somme des chiffres

É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.

Exercice 2moyen
Saisie contrôlée (type bac courant)

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.

Exercice 3difficile
PGCD par soustractions (hors bac, bonus)

É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 que quand Répéter est 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)

1

Combien de fois minimum s'exécute le corps d'une boucle Répéter…Jusqu'à ?

2

Pour une saisie contrôlée jusqu'à obtenir un entier valide, on choisit :

3

L'équivalent de `Tant que C Faire X FinTantQue` avec Répéter est :

4

Pour le tri à bulles classique, quelle structure externe convient le mieux ?

5

Pour parcourir un tableau de 100 éléments, on préfère :

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.