Leçon 6 sur 20

Chapitre 6 — Structures répétitives

Répéter efficacement un traitement tout en maîtrisant sa terminaison

 

Fiche pédagogique du chapitre

Objectifs d’apprentissage

À la fin de ce chapitre, l’étudiant devra être capable de :

  • expliquer le principe d’une structure répétitive ;
  • identifier le compteur, la condition d’arrêt et les variables mises à jour dans une boucle ;
  • choisir la boucle Pour lorsqu’un nombre de répétitions est connu ;
  • utiliser correctement l’incrémentation, la décrémentation et le pas d’une boucle ;
  • construire une boucle TantQue avec une initialisation et une mise à jour correctes ;
  • utiliser Répéter…Jusqu’à lorsqu’un traitement doit être exécuté au moins une fois ;
  • concevoir des boucles imbriquées pour produire des tableaux de valeurs ou des motifs ;
  • détecter et corriger une boucle infinie ;
  • effectuer le traçage manuel d’une boucle ;
  • résoudre des problèmes classiques de somme, factorielle, primalité, PGCD et Fibonacci.

Prérequis

  • connaître les variables, les constantes et les types simples ;
  • savoir écrire des affectations et des expressions arithmétiques ;
  • maîtriser les opérateurs relationnels et logiques ;
  • savoir utiliser les structures conditionnelles ;
  • comprendre le principe du traçage manuel d’un algorithme.

Plan du chapitre

6.1 Principe d’une boucle

6.2 Boucle Pour

6.3 Boucle TantQue

6.4 Boucle Répéter…Jusqu’à

6.5 Boucles imbriquées

6.6 Choix de la boucle appropriée

Applications, exercices, corrigés et synthèse

Organisation pédagogique indicative

Activité

Durée indicative

Objectif principal

Cours4 hComprendre les formes de boucles, leur fonctionnement et leurs conditions d’arrêt.
Travaux dirigés4 hTracer, compléter et concevoir des algorithmes répétitifs.
Travaux pratiques4 hImplémenter, tester et corriger des boucles dans un langage de programmation.

 

Idée directrice du chapitre

Une boucle permet d’exécuter plusieurs fois un même bloc d’instructions. Elle doit toujours préciser ce qui est répété, dans quelles conditions la répétition continue et comment elle se termine.

Introduction aux structures répétitives

De nombreux traitements algorithmiques nécessitent la répétition d’une même opération : afficher une série de nombres, saisir plusieurs notes, parcourir un tableau, calculer une somme, vérifier progressivement un résultat ou recommencer une saisie jusqu’à ce qu’elle soit valide. Écrire plusieurs fois les mêmes instructions serait long, peu lisible et difficile à modifier.

Les structures répétitives, également appelées boucles ou itérations, permettent de regrouper les instructions répétées dans un bloc unique. Une boucle contrôle ensuite le nombre de répétitions ou la condition qui autorise leur poursuite.

Notion

Définition

Exemple

ItérationUne exécution complète du corps de la boucle.Un passage pour une valeur donnée de i.
Corps de boucleEnsemble des instructions répétées.Afficher(i), somme ← somme + i.
CompteurVariable qui indique le numéro ou l’avancement d’une répétition.i prend les valeurs 1, 2, 3, …
Condition d’arrêtRègle qui détermine quand la répétition se termine.i > N ou saisie valide.
InitialisationValeur donnée aux variables avant la première itération.somme ← 0.
Mise à jourModification d’une variable qui permet à la boucle de progresser.i ← i + 1.

 

Question essentielle

Avant d’écrire une boucle, il faut pouvoir répondre à trois questions : que doit-on répéter ? quand doit-on continuer ? qu’est-ce qui garantit l’arrêt ?

6.1 Principe d’une boucle

6.1.1 Répétition d’un ensemble d’instructions

Une boucle exécute plusieurs fois un bloc appelé corps de la boucle. Chaque exécution du corps constitue une itération. Les instructions peuvent être identiques à chaque passage, mais les valeurs manipulées évoluent généralement d’une itération à l’autre.

Schéma conceptuel d’une répétition

Initialiser les variables
TantQue la répétition doit continuer Faire
    exécuter le traitement
    mettre à jour les variables de contrôle
FinTantQue

6.1.2 Compteur

Un compteur est une variable entière utilisée pour compter les itérations, parcourir un intervalle ou représenter une position. Il est généralement initialisé avant la boucle, consulté dans la condition et modifié dans le corps de la boucle.

compteur ← 1
TantQue compteur <= 5 Faire
    Écrire(compteur)
    compteur ← compteur + 1
FinTantQue

Moment

Valeur du compteur

Action

Avant la boucle1Initialisation.
Itération 11Afficher 1, puis passer à 2.
Itération 22Afficher 2, puis passer à 3.
La même règle est appliquée.
Après l’itération 56La condition compteur <= 5 devient fausse.

 

6.1.3 Condition d’arrêt

La condition d’arrêt détermine le moment où la répétition prend fin. Selon la structure utilisée, elle peut être formulée comme une condition de continuation, par exemple « tant que i <= N », ou comme une condition de terminaison, par exemple « jusqu’à saisie_valide ».

  • Condition de continuation : la boucle s’exécute tant que la condition est vraie.
  • Condition de terminaison : la boucle s’arrête lorsque la condition devient vraie.
  • Progression : une variable utilisée dans la condition doit évoluer vers la fin de la boucle.
  • Cas initial : il faut vérifier si la condition est vraie ou fausse avant la première itération.

6.1.4 Boucle finie et boucle infinie

Une boucle est finie lorsqu’elle atteint nécessairement sa condition d’arrêt après un nombre limité d’itérations. Elle est infinie lorsque cette condition ne peut jamais être atteinte, ou lorsque la variable qui la contrôle n’est pas correctement modifiée.

Situation

Exemple

Conséquence

Boucle finiei commence à 1 et augmente jusqu’à dépasser 10.Le traitement s’arrête après 10 itérations.
Mise à jour oubliéei reste toujours égal à 1 dans TantQue i <= 10.La condition reste vraie indéfiniment.
Mauvais sens de variationi commence à 1 et diminue alors que l’arrêt exige i > 10.La valeur s’éloigne de la condition d’arrêt.
Condition impossibleRépéter jusqu’à nombre < 0 alors que nombre est toujours forcé à être positif.La terminaison ne peut pas se produire.

 

Attention

Une boucle infinie peut bloquer un programme ou consommer inutilement les ressources de l’ordinateur. La condition et la mise à jour doivent être vérifiées avant toute exécution.

6.1.5 Accumulateur

Un accumulateur est une variable qui mémorise progressivement un résultat obtenu au fil des itérations. Il peut contenir une somme, un produit, un minimum, un maximum ou une chaîne construite progressivement.

somme ← 0
Pour i allant de 1 à N Faire
    somme ← somme + i
FinPour

La valeur initiale dépend de l’opération : 0 pour une somme, 1 pour un produit, une première donnée pour un minimum ou un maximum.

6.2 Boucle Pour

6.2.1 Syntaxe générale

Pour i allant de début à fin Faire
    instructions
FinPour

La boucle Pour est adaptée lorsque le nombre de répétitions est connu ou peut être déterminé avant le début de la boucle. La variable i parcourt automatiquement les valeurs de début à fin, avec un pas généralement égal à 1.

6.2.2 Fonctionnement

Étape

Action

1Affecter la valeur de début au compteur.
2Vérifier que la borne finale n’est pas dépassée.
3Exécuter les instructions du corps.
4Ajouter le pas au compteur.
5Revenir au contrôle de la borne finale.

 

6.2.3 Exemple : afficher de 1 à 5

Pour i allant de 1 à 5 Faire
    Écrire(i)
FinPour

Itération

Valeur de i

Valeur affichée

111
222
333
444
555

 

6.2.4 Incrémentation

L’incrémentation consiste à augmenter une variable. Dans la forme standard de Pour, le compteur est automatiquement augmenté d’une unité après chaque itération. Il ne faut donc pas le modifier manuellement dans le corps de la boucle, sauf si le pseudo-code utilisé l’autorise explicitement et que le besoin est maîtrisé.

Incrémentation automatique de 1

Pour i allant de 1 à 10 Faire
    Écrire(i)
FinPour

6.2.5 Décrémentation

La décrémentation consiste à diminuer une variable. Pour parcourir des valeurs dans l’ordre décroissant, il faut préciser un pas négatif ou une forme dédiée « allant de début à fin par pas de -1 ».

Compte à rebours

Pour i allant de 10 à 1 par pas de -1 Faire
    Écrire(i)
FinPour

6.2.6 Pas d’une boucle

Le pas indique la variation appliquée au compteur entre deux itérations. Un pas positif produit un parcours croissant ; un pas négatif produit un parcours décroissant. Un pas nul est interdit car le compteur ne progresserait jamais.

Boucle

Valeurs prises par i

Nombre d’itérations

Pour i de 1 à 71, 2, 3, 4, 5, 6, 77
Pour i de 0 à 10 par pas de 20, 2, 4, 6, 8, 106
Pour i de 9 à 1 par pas de -29, 7, 5, 3, 15
Pour i de 5 à 551

 

6.2.7 Bornes et nombre d’itérations

Lorsque les deux bornes sont incluses et que le pas vaut 1, le nombre d’itérations est fin - début + 1. Avec un pas positif p, le nombre dépend de l’écart entre les bornes et de la division entière par p. Il est essentiel de vérifier si les bornes appartiennent ou non au parcours dans le langage utilisé.

Bonne pratique

Le compteur d’une boucle Pour doit être réservé au contrôle du parcours. Utiliser une autre variable pour calculer une somme, un produit ou un résultat intermédiaire.

6.2.8 Exemple : somme des carrés

somme ← 0
Pour i allant de 1 à N Faire
    somme ← somme + i * i
FinPour
Écrire(somme)

6.3 Boucle TantQue

6.3.1 Syntaxe générale

TantQue condition Faire
    instructions
FinTantQue

La boucle TantQue est utilisée lorsque le nombre de répétitions n’est pas nécessairement connu à l’avance. La répétition dépend d’une condition évaluée avant chaque itération.

6.3.2 Test avant exécution

La condition est testée avant l’exécution du corps. Si elle est fausse dès le début, le corps n’est jamais exécuté. Une boucle TantQue peut donc effectuer zéro, une ou plusieurs itérations.

x ← 10
TantQue x < 5 Faire
    Écrire(x)
    x ← x + 1
FinTantQue

Dans cet exemple, x < 5 est faux avant la première itération. Aucun affichage n’est produit.

6.3.3 Initialisation

Les variables utilisées dans la condition doivent recevoir une valeur avant le premier test. Une variable non initialisée rend le comportement de l’algorithme indéterminé ou provoque une erreur.

i ← 1                 // initialisation
TantQue i <= N Faire  // test
    Écrire(i)
    i ← i + 1         // mise à jour
FinTantQue

6.3.4 Mise à jour de la condition

Au moins une instruction du corps doit faire évoluer la situation vers la fin de la boucle. Cette évolution peut modifier directement le compteur, lire une nouvelle saisie, réduire un reste, changer un état booléen ou recevoir une réponse externe.

Type de progression

Exemple de condition

Mise à jour

Compteur croissanti <= Ni ← i + 1
Compteur décroissantreste > 0reste ← reste - valeur
Saisie contrôléenote < 0 OU note > 20Lire(note)
RechercheNON trouve ET position < tailleposition ← position + 1
Convergence numériqueerreur > précisionRecalculer erreur

 

6.3.5 Exemple : demander un nombre strictement positif

Lire(nombre)
TantQue nombre <= 0 Faire
    Écrire("Valeur invalide. Recommencez.")
    Lire(nombre)
FinTantQue
Écrire("Valeur acceptée")

La première lecture est nécessaire avant le test. Si la valeur est déjà valide, le corps de la boucle n’est pas exécuté. Dans le cas contraire, la lecture est répétée jusqu’à l’obtention d’une valeur positive.

6.3.6 Exemple : nombre de chiffres d’un entier positif

Lire(nombre)
compteur ← 0
TantQue nombre > 0 Faire
    nombre ← nombre DIV 10
    compteur ← compteur + 1
FinTantQue
Écrire(compteur)

Cas particulier

Pour la valeur 0, l’algorithme précédent retourne 0 chiffre alors que 0 comporte un chiffre. Ce cas doit être traité séparément.

6.4 Boucle Répéter…Jusqu’à

6.4.1 Syntaxe générale

Répéter
    instructions
Jusqu’à condition

La boucle Répéter…Jusqu’à exécute d’abord le corps, puis évalue la condition de terminaison. Elle convient lorsque le traitement doit avoir lieu au moins une fois, notamment pour une saisie utilisateur ou un menu interactif.

6.4.2 Test après exécution

Le test est effectué après le corps. Lorsque la condition devient vraie, la boucle s’arrête. Tant qu’elle est fausse, une nouvelle itération commence. Cette logique est l’inverse de TantQue, qui continue tant que sa condition est vraie.

Structure

Moment du test

Signification de la condition

Nombre minimal d’itérations

TantQueAvant le corpsCondition de continuation0
Répéter…Jusqu’àAprès le corpsCondition de terminaison1

 

6.4.3 Exécution au moins une fois

Répéter
    Écrire("Saisir une note entre 0 et 20 :")
    Lire(note)
Jusqu’à note >= 0 ET note <= 20

La saisie est réalisée avant la vérification. Si la première note est valide, la condition est immédiatement vraie et la boucle s’arrête après une seule itération.

6.4.4 Exemple : menu simple

Répéter
    Écrire("1. Ajouter")
    Écrire("2. Afficher")
    Écrire("0. Quitter")
    Lire(choix)
    Selon choix Faire
        Cas 1 : Écrire("Ajout")
        Cas 2 : Écrire("Affichage")
        Cas 0 : Écrire("Fin")
        Sinon : Écrire("Choix invalide")
    FinSelon
Jusqu’à choix = 0

6.4.5 Transformation entre TantQue et Répéter

Une boucle Répéter peut souvent être réécrite avec TantQue, mais il faut ajouter une première exécution ou initialiser les variables avec prudence. La transformation doit respecter la différence entre condition de continuation et condition de terminaison.

Répéter…Jusqu’à

TantQue équivalent

Répéter lire x Jusqu’à x > 0Lire x ; TantQue x <= 0 Faire Lire x FinTantQue
Répéter traitement Jusqu’à finitraitement ; TantQue NON fini Faire traitement FinTantQue

 

6.5 Boucles imbriquées

6.5.1 Boucle à l’intérieur d’une autre boucle

Une boucle est imbriquée lorsqu’elle se trouve à l’intérieur du corps d’une autre boucle. Pour chaque itération de la boucle externe, la boucle interne effectue son parcours complet.

Pour i allant de 1 à 3 Faire
    Pour j allant de 1 à 4 Faire
        Écrire(i, j)
    FinPour
FinPour

La boucle externe s’exécute 3 fois et, pour chacune de ses itérations, la boucle interne s’exécute 4 fois. Le bloc Écrire est donc exécuté 3 × 4 = 12 fois.

6.5.2 Traçage de deux boucles

i

Valeurs successives de j

Couples produits

11, 2, 3(1,1), (1,2), (1,3)
21, 2, 3(2,1), (2,2), (2,3)

 

6.5.3 Génération de tableaux de valeurs

Les boucles imbriquées permettent de générer des tables à deux dimensions. La boucle externe représente généralement les lignes et la boucle interne les colonnes.

Table de multiplication de 1 à 5

Pour ligne allant de 1 à 5 Faire
    Pour colonne allant de 1 à 5 Faire
        Écrire(ligne * colonne, " ")
    FinPour
    ÉcrireLigne()
FinPour

6.5.4 Construction de formes et de motifs

Pour construire une forme, la boucle externe contrôle le nombre de lignes et la boucle interne le nombre de caractères affichés sur chaque ligne.

Triangle croissant

Pour ligne allant de 1 à 5 Faire
    Pour colonne allant de 1 à ligne Faire
        ÉcrireSansRetour("*")
    FinPour
    ÉcrireLigne()
FinPour

Ligne

Nombre d’étoiles

Affichage

11*
22**
33***
44****
55*****

 

6.5.5 Coût des boucles imbriquées

Le nombre total d’exécutions du corps interne est souvent le produit des nombres d’itérations. Deux boucles de N itérations chacune produisent environ N² exécutions. Cette observation sera approfondie dans le chapitre consacré à la complexité.

Lisibilité

Chaque niveau d’imbrication doit être clairement indenté. Des noms comme ligne, colonne, i et j permettent de distinguer les rôles des compteurs.

6.6 Choix de la boucle appropriée

6.6.1 Nombre de répétitions connu

Lorsque le nombre d’itérations est déterminé avant l’entrée dans la boucle, Pour est généralement le choix le plus simple et le plus lisible.

  • parcourir les entiers de 1 à N ;
  • saisir exactement 20 notes ;
  • afficher une table de multiplication ;
  • parcourir toutes les positions d’un tableau de taille connue.

6.6.2 Répétition dépendant d’une condition

Lorsque l’arrêt dépend d’un événement ou d’une condition dont on ne connaît pas à l’avance le moment de réalisation, TantQue est adapté. Le corps peut ne jamais s’exécuter si la condition initiale est fausse.

  • continuer une recherche tant que l’élément n’est pas trouvé ;
  • répéter un calcul jusqu’à obtenir une précision suffisante ;
  • traiter des données tant qu’il en reste ;
  • effectuer des soustractions tant que le reste est suffisant.

6.6.3 Validation d’une saisie utilisateur

Lorsqu’une valeur doit être demandée au moins une fois puis répétée tant qu’elle est invalide, Répéter…Jusqu’à est souvent la forme la plus naturelle. TantQue reste possible avec une première lecture avant la boucle.

Situation

Boucle recommandée

Justification

Afficher 1 à 100PourLe nombre de répétitions est connu.
Saisir 10 notesPourLe nombre de données est fixé.
Lire une note valideRépéter…Jusqu’àLa lecture doit avoir lieu au moins une fois.
Chercher tant que non trouvéTantQueL’arrêt dépend d’un état.
Afficher une matriceBoucles Pour imbriquéesLes dimensions sont connues.
Menu jusqu’au choix QuitterRépéter…Jusqu’àLe menu doit être affiché avant le test.

 

6.6.4 Méthode de conception d’une boucle

1. Identifier exactement le traitement à répéter.

2. Choisir la variable ou l’événement qui contrôle la répétition.

3. Déterminer la valeur initiale de cette variable.

4. Formuler la condition de continuation ou de terminaison.

5. Définir la mise à jour qui garantit la progression.

6. Tracer les premières et les dernières itérations.

7. Tester le cas où la boucle ne s’exécute pas et le cas d’une seule itération.

8. Vérifier que la boucle se termine pour toutes les entrées valides.

6.6.5 Erreurs fréquentes

Erreur

Exemple

Correction

Oubli de l’initialisationTantQue i <= N sans valeur initiale de i.Affecter i avant le test.
Oubli de la mise à jouri ne change pas dans le corps.Ajouter i ← i + 1 ou une progression adaptée.
Décalage d’une unitéParcourir 1 à N-1 au lieu de 1 à N.Vérifier les bornes incluses.
Mauvaise conditionContinuer tant que saisie valide.Utiliser tant que saisie invalide, ou jusqu’à saisie valide.
Mauvaise initialisation de sommesomme ← 1.Initialiser une somme à 0.
Modification du compteur PourChanger i dans le corps.Utiliser une autre variable.

 


 

 

Applications guidées

Les applications suivantes montrent comment analyser un problème répétitif, choisir une boucle, initialiser les variables, effectuer la mise à jour et vérifier le résultat.

Application 1 — Afficher les nombres de 1 à N

Problème : lire un entier positif N puis afficher tous les entiers de 1 à N dans l’ordre croissant.

Entrée

Traitement

Sortie

N, entier positifFaire varier i de 1 à N.La suite 1, 2, …, N.

 

Algorithme Afficher_1_a_N
Variables
    N, i : Entiers
Début
    Lire(N)
    Si N <= 0 Alors
        Écrire("N doit être positif")
    Sinon
        Pour i allant de 1 à N Faire
            Écrire(i)
        FinPour
    FinSi
Fin

Application 2 — Calculer la somme des nombres de 1 à N

La variable somme est un accumulateur. Elle doit être initialisée à 0 avant la boucle.

somme ← 0
Pour i allant de 1 à N Faire
    somme ← somme + i
FinPour
Écrire(somme)

i

somme avant

Calcul

somme après

100 + 11
211 + 23
333 + 36
466 + 410

 

Vérification

La formule N × (N + 1) / 2 peut être utilisée pour contrôler le résultat calculé par la boucle.

Application 3 — Calculer une factorielle

La factorielle de N, notée N!, est le produit des entiers de 1 à N. Par convention, 0! = 1. La variable produit doit donc être initialisée à 1.

Lire(N)
Si N < 0 Alors
    Écrire("Factorielle non définie pour un entier négatif")
Sinon
    factorielle ← 1
    Pour i allant de 2 à N Faire
        factorielle ← factorielle * i
    FinPour
    Écrire(factorielle)
FinSi

N

Itérations utiles

Résultat

0Aucune1
1Aucune si la boucle commence à 21
42, 3, 424
52, 3, 4, 5120

 

Application 4 — Afficher une table de multiplication

Lire(nombre)
Pour i allant de 0 à 10 Faire
    Écrire(nombre, " × ", i, " = ", nombre * i)
FinPour

Le compteur représente le multiplicateur. Le nombre d’itérations est connu : onze lignes lorsque l’intervalle va de 0 à 10 inclus.

Application 5 — Compter les nombres pairs et impairs

On souhaite lire N nombres et compter séparément les valeurs paires et impaires. Deux compteurs sont initialisés à zéro.

pairs ← 0
impairs ← 0
Pour i allant de 1 à N Faire
    Lire(nombre)
    Si nombre MOD 2 = 0 Alors
        pairs ← pairs + 1
    Sinon
        impairs ← impairs + 1
    FinSi
FinPour
Écrire("Pairs : ", pairs)
Écrire("Impairs : ", impairs)

Invariant utile

Après chaque itération, pairs + impairs doit être égal au nombre de valeurs déjà lues.

Application 6 — Vérifier si un nombre est premier

Un entier supérieur ou égal à 2 est premier s’il ne possède aucun diviseur autre que 1 et lui-même. Il suffit de chercher un diviseur de 2 jusqu’à la racine carrée du nombre. Une version introductive peut tester jusqu’à nombre - 1, mais elle effectue davantage d’opérations.

Lire(nombre)
Si nombre < 2 Alors
    premier ← Faux
Sinon
    diviseur ← 2
    premier ← Vrai
    TantQue premier ET diviseur * diviseur <= nombre Faire
        Si nombre MOD diviseur = 0 Alors
            premier ← Faux
        Sinon
            diviseur ← diviseur + 1
        FinSi
    FinTantQue
FinSi
Si premier Alors Écrire("Premier") Sinon Écrire("Non premier") FinSi

Nombre

Diviseurs testés

Résultat

1AucunNon premier
2Aucun nécessairePremier
172, 3, 4Premier
212, puis 3Non premier

 

Application 7 — Calculer le PGCD

Le PGCD de deux entiers positifs peut être calculé avec l’algorithme d’Euclide. À chaque étape, on remplace le couple (a, b) par (b, a MOD b) jusqu’à ce que b devienne nul.

Lire(a, b)
a ← ValeurAbsolue(a)
b ← ValeurAbsolue(b)
TantQue b ≠ 0 Faire
    reste ← a MOD b
    a ← b
    b ← reste
FinTantQue
Écrire("PGCD = ", a)

Étape

a

b

reste = a MOD b

Initiale4818
1481812
218126
31260
Fin60

 

Application 8 — Générer la suite de Fibonacci

La suite de Fibonacci commence généralement par 0 et 1. Chaque terme suivant est la somme des deux termes précédents. Il faut mémoriser les deux derniers termes et les mettre à jour sans perdre leur valeur.

Lire(N)
a ← 0
b ← 1
Pour i allant de 1 à N Faire
    Écrire(a)
    suivant ← a + b
    a ← b
    b ← suivant
FinPour

Itération

Terme affiché

a après mise à jour

b après mise à jour

1011
2112
3123
4235
5358

 

Synthèse du chapitre

Structure

Usage principal

Test

Nombre minimal d’itérations

PourNombre de répétitions connu.Contrôle automatique des bornes.Dépend des bornes, souvent 0 ou plus.
TantQueRépétition dépendant d’une condition.Avant le corps.0
Répéter…Jusqu’àTraitement devant avoir lieu avant le contrôle.Après le corps.1
Boucles imbriquéesParcours à plusieurs dimensions ou motifs.Un test par niveau.Produit ou combinaison des parcours.

 

Règles essentielles à retenir

  • initialiser toutes les variables avant leur première utilisation ;
  • choisir une valeur neutre adaptée pour les accumulateurs ;
  • formuler clairement la condition de continuation ou de terminaison ;
  • prévoir une mise à jour qui rapproche de l’arrêt ;
  • vérifier les bornes et le nombre d’itérations ;
  • tester les cas zéro itération, une itération et plusieurs itérations ;
  • ne pas modifier inutilement le compteur d’une boucle Pour ;
  • contrôler le coût des boucles imbriquées ;
  • utiliser l’indentation pour rendre les blocs visibles.

Table de choix rapide

Question

Réponse

Choix conseillé

Connaît-on le nombre de répétitions ?OuiPour
Le corps peut-il ne jamais être exécuté ?OuiTantQue
Le corps doit-il être exécuté avant le premier test ?OuiRépéter…Jusqu’à
Faut-il parcourir lignes et colonnes ?OuiDeux boucles imbriquées
Faut-il recommencer une saisie jusqu’à validité ?OuiRépéter…Jusqu’à ou TantQue avec première lecture

 

Travaux dirigés

Exercice 1 — Traçage d’une boucle Pour

Tracer l’algorithme suivant et donner les valeurs affichées :

s ← 0
Pour i allant de 1 à 4 Faire
    s ← s + 2 * i
    Écrire(i, s)
FinPour

Exercice 2 — Corriger une boucle infinie

Identifier l’erreur et proposer une correction :

i ← 1
TantQue i <= 10 Faire
    Écrire(i)
FinTantQue

Exercice 3 — Somme des multiples

Écrire un algorithme qui calcule la somme de tous les multiples de 3 compris entre 1 et N.

Exercice 4 — Saisie contrôlée

Demander une note comprise entre 0 et 20. Répéter la saisie tant que la valeur est invalide, puis afficher « Note acceptée ». Proposer une version avec TantQue et une version avec Répéter…Jusqu’à.

Exercice 5 — Compter les chiffres pairs

Lire un entier positif et compter combien de ses chiffres sont pairs. Par exemple, 42037 contient trois chiffres pairs : 4, 2 et 0.

Exercice 6 — Inverser les chiffres d’un entier

Écrire un algorithme qui transforme 12340 en 4321 en utilisant DIV et MOD.

Exercice 7 — Triangle d’étoiles

Afficher un triangle décroissant de N lignes. Pour N = 4 : ****, ***, **, *. Chaque ligne doit être produite par une boucle interne.

Exercice 8 — Table complète de multiplication

Construire une table de multiplication de 1 à 10 sous forme de grille à l’aide de deux boucles imbriquées.

Exercice 9 — Plus grand diviseur propre

Lire un entier N > 1 et déterminer son plus grand diviseur strictement inférieur à N. Réfléchir à un parcours décroissant permettant de s’arrêter dès qu’un diviseur est trouvé.

Exercice 10 — Fibonacci inférieur à une limite

Afficher tous les termes de Fibonacci strictement inférieurs à une limite L. Le nombre de termes n’étant pas connu à l’avance, choisir une structure adaptée.


 

 

Corrigé indicatif des travaux dirigés

Corrigé de l’exercice 1

i

s avant

2 × i

s après

Affichage

1022(1, 2)
2246(2, 6)
36612(3, 12)
412820(4, 20)

 

Corrigé de l’exercice 2

La variable i n’est jamais mise à jour. La condition i <= 10 reste donc toujours vraie.

i ← 1
TantQue i <= 10 Faire
    Écrire(i)
    i ← i + 1
FinTantQue

Corrigé de l’exercice 3

somme ← 0
Pour i allant de 3 à N par pas de 3 Faire
    somme ← somme + i
FinPour
Écrire(somme)

Une autre solution consiste à parcourir tous les entiers de 1 à N et à ajouter uniquement ceux pour lesquels i MOD 3 = 0. La solution avec un pas de 3 évite les tests inutiles.

Corrigé de l’exercice 4

// Version TantQue
Lire(note)
TantQue note < 0 OU note > 20 Faire
    Lire(note)
FinTantQue
Écrire("Note acceptée")

// Version Répéter
Répéter
    Lire(note)
Jusqu’à note >= 0 ET note <= 20
Écrire("Note acceptée")

Corrigé de l’exercice 5

Lire(nombre)
compteur ← 0
Si nombre = 0 Alors
    compteur ← 1
Sinon
    TantQue nombre > 0 Faire
        chiffre ← nombre MOD 10
        Si chiffre MOD 2 = 0 Alors
            compteur ← compteur + 1
        FinSi
        nombre ← nombre DIV 10
    FinTantQue
FinSi
Écrire(compteur)

Corrigé de l’exercice 6

Lire(nombre)
inverse ← 0
TantQue nombre > 0 Faire
    chiffre ← nombre MOD 10
    inverse ← inverse * 10 + chiffre
    nombre ← nombre DIV 10
FinTantQue
Écrire(inverse)

Corrigé de l’exercice 7

Lire(N)
Pour ligne allant de N à 1 par pas de -1 Faire
    Pour colonne allant de 1 à ligne Faire
        ÉcrireSansRetour("*")
    FinPour
    ÉcrireLigne()
FinPour

Corrigé de l’exercice 8

Pour i allant de 1 à 10 Faire
    Pour j allant de 1 à 10 Faire
        ÉcrireSansRetour(i * j, " ")
    FinPour
    ÉcrireLigne()
FinPour

Corrigé de l’exercice 9

Lire(N)
diviseur ← N - 1
TantQue N MOD diviseur ≠ 0 Faire
    diviseur ← diviseur - 1
FinTantQue
Écrire(diviseur)

La boucle se termine au plus tard pour diviseur = 1, qui divise tout entier. Pour un nombre premier, le résultat est donc 1.

Corrigé de l’exercice 10

Lire(L)
a ← 0
b ← 1
TantQue a < L Faire
    Écrire(a)
    suivant ← a + b
    a ← b
    b ← suivant
FinTantQue

Glossaire

Terme

Définition

BoucleStructure permettant de répéter un bloc d’instructions.
ItérationUne exécution du corps d’une boucle.
CompteurVariable utilisée pour compter ou contrôler les répétitions.
AccumulateurVariable qui construit progressivement un résultat.
InitialisationAffectation des valeurs de départ avant la boucle.
Condition d’arrêtCondition qui provoque la terminaison de la répétition.
Mise à jourModification qui fait progresser la boucle.
PasVariation appliquée au compteur entre deux itérations.
Boucle infinieBoucle dont la condition d’arrêt n’est jamais atteinte.
ImbricationPlacement d’une boucle à l’intérieur d’une autre.

 


 

 

Auto-évaluation

L’étudiant peut considérer le chapitre acquis s’il sait répondre positivement aux questions suivantes :

  • Puis-je identifier le corps, le compteur et la condition d’arrêt d’une boucle ?
  • Puis-je expliquer pourquoi une boucle donnée se termine ?
  • Puis-je détecter une boucle infinie ?
  • Puis-je choisir entre Pour, TantQue et Répéter…Jusqu’à ?
  • Puis-je initialiser correctement une somme et un produit ?
  • Puis-je tracer l’évolution des variables à chaque itération ?
  • Puis-je gérer les cas zéro et une itération ?
  • Puis-je écrire une saisie contrôlée ?
  • Puis-je construire un motif à l’aide de boucles imbriquées ?
  • Puis-je résoudre les problèmes de factorielle, primalité, PGCD et Fibonacci ?

Conclusion

Les structures répétitives rendent les algorithmes plus compacts et plus puissants. Leur fiabilité repose sur une initialisation correcte, une condition bien formulée, une progression réelle et une vérification attentive des bornes et des cas limites.