Académique Documents
Professionnel Documents
Culture Documents
les boucles
6 Instructions répétitives (les boucles)
6. 1 Introduction
Les structures itératives ou répétitives sont des
instructions qui permettent d’exécuter un traitement un
certain nombre de fois.
Ce sont des boucles qui répètent l’exécution d’un même
bloc d’instructions.
Pour réaliser et mettre en place une structure itérative on
doit connaître:
Soit le nombre de répétition (itération),
Soit la condition d’arrêt qui est une expression logique
qu’on vérifie avant ou après chaque répétition.
6 Instructions répétitives (les boucles)
6. 2 Instructions répétitives
i 1; Test
i i + 1;
FinTantQue Incrémentation
Fin
Instructions répétitives (les boucles)
ATTENTION: Une des instructions du corps de la boucle doit
absolument changer la valeur de la condition de vrai à faux
(après un certain nombre d'itérations), sinon le programme
tourne indéfiniment (boucle infinie).
Exemple d’une boucle infinie
Algorithme boucle_infinie;
Var A: réel; !!!!! Rien ne fait évoluer la
Début variable A qui reste
A 5; toujours égale à 5<20.
Tantque (A<20) Faire Il y aura donc un
affichage de la valeur 5
Ecrire(A); éternellement.
FinTQ
Fin
Instructions répétitives (les boucles)
Exercice 2: Ecrire un algorithme qui lit un entier positif n puis
affiche tous ses diviseurs.
Correction de l’exemple 3:
Algorithme diviseurs;
Var n, i : Entier;
Début
Ecrire(”Entrer un entier positif : ”) ;
Lire(n); Initialisation
i 1; Test
TantQue (i <= n) Faire
Si (n Mod i = 0) Alors
Ecrire(i);
FinSi Corps de la boucle
i i + 1;
FinTQ Incrémentation
Fin
Instructions répétitives (les boucles)
Exercice 4: Ecrire un algorithme qui lit un entier positif n puis
calcule et affiche son factoriel selon la formule n! = 1*2*… *n
Correction de l’exemple 4:
Algorithme facto;
Var n, f, i : Entier;
Début
Ecrire (”Entrer un entier positif : ”);
Lire (n);
Initialisation
f 1;
i 2; Test
TantQue (i <= n) Faire
f f * i;
i i + 1; Corps de la boucle
FinTQ Incrémentation
Ecrire (n,”! = ”,f);
Fin.
Instructions répétitives (les boucles)
La boucle : Répéter … jusqu’à
La syntaxe d'une boucle Répéter est la suivante:
Répéter
instructions;
Jusqu’à (Condition)
Jusqu’à(i>5); Test
Fin
Remarque: Dans une boucle « répéter…Jusqu’à », il faut toujours
s’assurer que la condition de sortie sera vérifiée après un nombre fini
de parcours. Sinon, c’est une boucle infinie.
Instructions répétitives (les boucles)
Exercice 2: Ecrire un algorithme qui lit un entier positif n puis
affiche tous ses diviseurs.
Algorithme diviseurs;
Var n, i : Entier;
Début
Ecrire(”Entrer un entier positif : ”) ;
Lire(n);
i 1; Initialisation
Répéter
Si (n Mod i = 0) Alors Incrémentation
Ecrire(i);
FinSi Corps de la boucle
i i + 1;
Jusqu’à (i > n);
Fin Test
Instructions répétitives (les boucles)
Exercice 2: Ecrire un algorithme qui lit un entier positif n puis
calcule et affiche son factoriel selon la formule n! = 1*2*… *n
Algorithme facto;
Var n, f, i : Entier;
Début
Ecrire(”Entrer un entier positif : ”);
Lire(n);
Initialisation
f 1;
i 2;
Répéter
f f * i; Corps de la boucle
i i + 1;
Incrémentation
Jusqu’à (i > n) ;
Ecrire(n,”! = ”,f); Test
Fin.
Instructions répétitives (les boucles)
La boucle Tant que … fin tant que
La syntaxe d'une boucle Tant que est la suivante.
TantQue (condition) faire
instructions;
FinTantQue
La condition est évaluée avant chaque passage dans la boucle,
A chaque fois que la condition est vérifiée, on exécute les instructions de
la boucle,
Une fois que la condition n'est plus vérifiée, l‘exécution se poursuit après
la boucle (FinTantQue)
Si dès le début la condition est fausse, le traitement (les instructions de la
boucle) ne sera pas exécutée.
La boucle TantQue peut s’exécuter 0, 1 ou n fois.(voir schéma 1)
Instructions répétitives (les boucles)
La boucle : Répéter … jusqu’à
La syntaxe d'une boucle Répéter est la suivante:
Répéter
instructions;
Jusqu’à (Condition)
Schéma 3 d’exécution
d’une boucle « pour »
Instructions répétitives (les boucles)
La boucle Pour … finPour
Le principe de la boucle Pour est simple :
1. On initialise le compteur (i) au début par la valeur initiale
2. On test si le compteur (i) a dépassé la valeur finale
3. On exécute les instructions (corps de la boucle)
4. On incrémente le compteur (i i + 1)
5. On test si le compteur n’a pas dépassé la valeur finale
6. etc.
Instructions répétitives (les boucles)
La boucle Pour … finPour
Exemple :
On veut écrire un algorithme qui affiche le message "Bonjour à tous"
100 fois.
Résolution :
Au lieu d’écrire 100 fois l’instruction : écrire("Bonjour à tous") ;
On utilise plutôt une boucle Pour :
Algorithme message;
var i: Entier;
Début
Pour i allant de 1 à 100 faire
écrire("Bonjour à tous");
Finpour
fin
Instructions répétitives (les boucles)
Exemple :
On peut améliorer l’algorithme précédent par :
• L’ajout d’un entier n : le nombre de fois que le message
s’affichera à l’écran,
• L’affichage de la variable i dans la boucle : pour numéroter les
passages dans la boucle.
Algorithme message2;
var
n, i: Entier;
Début
écrire("entrer le nombre n :");
lire(n);
Pour i allant de 1 à n faire
écrire("Bonjour à tous la ",i," fois");
Finpour
Fin
Instructions répétitives (les boucles)
Exemple 1:
Afficher tous les nombres de 1 à 10 dans l'ordre croissant.
Notez bien que l'on utilise une boucle pour quand on sait à
l’avance combien d'itérations devront être faites.
Par exemple, n'utilisez pas une boucle pour afin de contrôler
une saisie ! « Voulez-vous un café? (O/N) ».
Instructions répétitives (les boucles)
Remarque: Lorsque le nombre d’itération est connu avant l’exécution
de l’algorithme on utilise la boucle pour, sinon il faut utiliser soit:
1. la boucle Répéter …Jusqu’à
2. ou la boucle Tantque
Correction de l’exemple 2 ( avec la boucle Pour)
Ecrire un algorithme permettant d’afficher respectivement les
nombres 10, 20, 30, 40 et 50.
Algorithme exemple2; Initialisation + Test
Var + Incrémentation
i : Entier;
Début
Pour i 1 à 5 Faire
Ecrire(i*10);
Corps de la
FinPour
boucle
Fin
Instructions répétitives (les boucles)
Remarque: Dans une boucle « Pour », l’évolution du compteur peut
se faire dans le sens décroissant comme dans l’exemple suivant :
Correction de l’exemple 2 (Décrémentation)
Algorithme exemple2bis; Initialisation +
Test+
Var i : Entier;
Décrémentation
Début
Pour i 5 à 1 [pas=-1] Faire
Ecrire(i*10); Corps de la
FinPour boucle
Fin
Dans ce cas, le compteur i sera décrémenté après chaque parcours.
Instructions répétitives (les boucles)
Exemple 3 ( boucle Pour)
Ecrire un algorithme qui lit un entier positif n puis affiche tous
ses diviseurs.
Algorithme Diviseurs;
Var n, i : Entier;
Début Initialisation +
Ecrire(”Entrer un entier positif : ”); Test+
Incrémentation
Lire(n);
Pour i allant de 1 à n Faire
Si (n Mod i = 0) Alors Corps de la
Ecrire(i); boucle
FinSi
FinPour
Fin
Instructions répétitives (les boucles)
Exemple 4 ( boucle Pour)
Ecrire un algorithme qui lit un entier positif n puis calcule et affiche
son factoriel selon la formule n! = 1*2*… *n
Algorithme Fact;
Var n, i, f : Entier;
Début
Ecrire(”Entrer un entier positif : ”);
Initialisation +
Lire(n); Test+
f 1; Incrémentation
Pour i 2 à n Faire
f f * i; Corps de la
FinPour boucle
Ecrire(n,”! = ”,f);
Fin
Instructions répétitives (les boucles)
La boucle Pour
Il faut éviter de modifier la valeur du compteur (et de finale) à
l'intérieur de la boucle. En effet, une telle action :
perturbe le nombre d'itérations prévu par la boucle Pour
rend difficile la lecture de l'algorithme
présente le risque d'aboutir à une boucle infinie
Exemple
Pour i allant de 1 à 5
i i -1;
écrire(" i = ", i);
Finpour
Instructions répétitives (les boucles)
Lien entre Pour et TantQue
La boucle Pour est un cas particulier de TantQue (cas où le
nombre d'itérations est connu et fixé) .
Tout ce qu'on peut écrire avec Pour peut être remplacé avec
TantQue (la réciproque est fausse)
Pour compteur allant de initiale à finale [pas] faire
instructions
FinPour
Peut être remplacé par :
compteur ← valeur initiale (cas d'un pas positif)
TantQue compteur <= finale faire
instructions
compteur ← compteur+pas
FinTantQue
Instructions répétitives (les boucles)
Passage d’une structure itérative à une autre
M_age S_age/NP;
Ecrire(‘’ la moyenne d’ages est =’’,M_age);
Ecrire(‘’ le nombre de personnes saisi est =’’,NP);
Fin