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 |
|---|---|---|
| Cours | 4 h | Comprendre les formes de boucles, leur fonctionnement et leurs conditions d’arrêt. |
| Travaux dirigés | 4 h | Tracer, compléter et concevoir des algorithmes répétitifs. |
| Travaux pratiques | 4 h | Implé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ération | Une exécution complète du corps de la boucle. | Un passage pour une valeur donnée de i. |
| Corps de boucle | Ensemble des instructions répétées. | Afficher(i), somme ← somme + i. |
| Compteur | Variable qui indique le numéro ou l’avancement d’une répétition. | i prend les valeurs 1, 2, 3, … |
| Condition d’arrêt | Règle qui détermine quand la répétition se termine. | i > N ou saisie valide. |
| Initialisation | Valeur donnée aux variables avant la première itération. | somme ← 0. |
| Mise à jour | Modification 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 boucle | 1 | Initialisation. |
| Itération 1 | 1 | Afficher 1, puis passer à 2. |
| Itération 2 | 2 | Afficher 2, puis passer à 3. |
| … | … | La même règle est appliquée. |
| Après l’itération 5 | 6 | La 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 finie | i commence à 1 et augmente jusqu’à dépasser 10. | Le traitement s’arrête après 10 itérations. |
| Mise à jour oubliée | i reste toujours égal à 1 dans TantQue i <= 10. | La condition reste vraie indéfiniment. |
| Mauvais sens de variation | i commence à 1 et diminue alors que l’arrêt exige i > 10. | La valeur s’éloigne de la condition d’arrêt. |
| Condition impossible | Ré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 |
|---|---|
| 1 | Affecter la valeur de début au compteur. |
| 2 | Vérifier que la borne finale n’est pas dépassée. |
| 3 | Exécuter les instructions du corps. |
| 4 | Ajouter le pas au compteur. |
| 5 | Revenir 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 |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 3 | 3 |
| 4 | 4 | 4 |
| 5 | 5 | 5 |
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 à 7 | 1, 2, 3, 4, 5, 6, 7 | 7 |
| Pour i de 0 à 10 par pas de 2 | 0, 2, 4, 6, 8, 10 | 6 |
| Pour i de 9 à 1 par pas de -2 | 9, 7, 5, 3, 1 | 5 |
| Pour i de 5 à 5 | 5 | 1 |
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 croissant | i <= N | i ← i + 1 |
| Compteur décroissant | reste > 0 | reste ← reste - valeur |
| Saisie contrôlée | note < 0 OU note > 20 | Lire(note) |
| Recherche | NON trouve ET position < taille | position ← position + 1 |
| Convergence numérique | erreur > précision | Recalculer 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 |
|---|---|---|---|
| TantQue | Avant le corps | Condition de continuation | 0 |
| Répéter…Jusqu’à | Après le corps | Condition de terminaison | 1 |
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 > 0 | Lire x ; TantQue x <= 0 Faire Lire x FinTantQue |
| Répéter traitement Jusqu’à fini | traitement ; 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 |
|---|---|---|
| 1 | 1, 2, 3 | (1,1), (1,2), (1,3) |
| 2 | 1, 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 |
|---|---|---|
| 1 | 1 | * |
| 2 | 2 | ** |
| 3 | 3 | *** |
| 4 | 4 | **** |
| 5 | 5 | ***** |
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 à 100 | Pour | Le nombre de répétitions est connu. |
| Saisir 10 notes | Pour | Le nombre de données est fixé. |
| Lire une note valide | Répéter…Jusqu’à | La lecture doit avoir lieu au moins une fois. |
| Chercher tant que non trouvé | TantQue | L’arrêt dépend d’un état. |
| Afficher une matrice | Boucles Pour imbriquées | Les dimensions sont connues. |
| Menu jusqu’au choix Quitter | Ré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’initialisation | TantQue i <= N sans valeur initiale de i. | Affecter i avant le test. |
| Oubli de la mise à jour | i 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 condition | Continuer tant que saisie valide. | Utiliser tant que saisie invalide, ou jusqu’à saisie valide. |
| Mauvaise initialisation de somme | somme ← 1. | Initialiser une somme à 0. |
| Modification du compteur Pour | Changer 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 positif | Faire 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 |
|---|---|---|---|
| 1 | 0 | 0 + 1 | 1 |
| 2 | 1 | 1 + 2 | 3 |
| 3 | 3 | 3 + 3 | 6 |
| 4 | 6 | 6 + 4 | 10 |
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 |
|---|---|---|
| 0 | Aucune | 1 |
| 1 | Aucune si la boucle commence à 2 | 1 |
| 4 | 2, 3, 4 | 24 |
| 5 | 2, 3, 4, 5 | 120 |
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 |
|---|---|---|
| 1 | Aucun | Non premier |
| 2 | Aucun nécessaire | Premier |
| 17 | 2, 3, 4 | Premier |
| 21 | 2, puis 3 | Non 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 |
|---|---|---|---|
| Initiale | 48 | 18 | — |
| 1 | 48 | 18 | 12 |
| 2 | 18 | 12 | 6 |
| 3 | 12 | 6 | 0 |
| Fin | 6 | 0 | — |
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 |
|---|---|---|---|
| 1 | 0 | 1 | 1 |
| 2 | 1 | 1 | 2 |
| 3 | 1 | 2 | 3 |
| 4 | 2 | 3 | 5 |
| 5 | 3 | 5 | 8 |
Synthèse du chapitre
Structure | Usage principal | Test | Nombre minimal d’itérations |
|---|---|---|---|
| Pour | Nombre de répétitions connu. | Contrôle automatique des bornes. | Dépend des bornes, souvent 0 ou plus. |
| TantQue | Ré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ées | Parcours à 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 ? | Oui | Pour |
| Le corps peut-il ne jamais être exécuté ? | Oui | TantQue |
| Le corps doit-il être exécuté avant le premier test ? | Oui | Répéter…Jusqu’à |
| Faut-il parcourir lignes et colonnes ? | Oui | Deux boucles imbriquées |
| Faut-il recommencer une saisie jusqu’à validité ? | Oui | Ré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 |
|---|---|---|---|---|
| 1 | 0 | 2 | 2 | (1, 2) |
| 2 | 2 | 4 | 6 | (2, 6) |
| 3 | 6 | 6 | 12 | (3, 12) |
| 4 | 12 | 8 | 20 | (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 |
|---|---|
| Boucle | Structure permettant de répéter un bloc d’instructions. |
| Itération | Une exécution du corps d’une boucle. |
| Compteur | Variable utilisée pour compter ou contrôler les répétitions. |
| Accumulateur | Variable qui construit progressivement un résultat. |
| Initialisation | Affectation des valeurs de départ avant la boucle. |
| Condition d’arrêt | Condition qui provoque la terminaison de la répétition. |
| Mise à jour | Modification qui fait progresser la boucle. |
| Pas | Variation appliquée au compteur entre deux itérations. |
| Boucle infinie | Boucle dont la condition d’arrêt n’est jamais atteinte. |
| Imbrication | Placement 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. |