Contrôle du code: les boucles

Sommaire

Index

Boucle while (tant que)

Diagramme

Code

Pseudo-code

VARIABLE
ENTIER i
DEBUT
    i <-- 0
    TANT QUE i < 5
    FAIRE
        ECRIRE(i)
        i <-- i + 1
    FIN TANT QUE
  ECRIRE "FIN DU PROGRAMME"
FIN

C

int i = 0;
while (i < 5) {
  printf("%d\n", i);
  i++;
}
printf("Fin du programme\n");

Affichage

0
1
2
3
4
Fin du programme

Boucle do-while (faire tant que)

Diagramme

Code

Pseudo-code

VARIABLE
ENTIER i
DEBUT
    i <-- 0
    FAIRE
        ECRIRE(i)
        i <-- i + 1
    TANT QUE i < 3
    ECRIRE "Après la boucle i vaut " i
FIN

Langage C

int i = 0;
do
{
  printf("%d\n", i);
  i++;
} while (i < 3) ;
printf("Après la boucle i vaut: %d", i);

Affichage

0
1
2
Après la boucle i vaut: 3

Sur la différence entre tant que et faire - tant que

Si l’on modifie la valeur initiale de i (par exemple ici on lui affecte la valeur 5), le comportement des programmes précédents change.

Le premier programme n’entre pas dans la boucle (i < 5 n’est jamais vrai):

VARIABLE
ENTIER i
DEBUT
    i <-- 5
    TANT QUE i < 5
    FAIRE
        ECRIRE(i)
        i <-- i + 1
    FIN TANT QUE
  ECRIRE "FIN DU PROGRAMME"
FIN

Le second programme (faire-tant que) exécute une fois la boucle puis sort aussitôt:

VARIABLE
ENTIER i
DEBUT
    i <-- 5
    FAIRE
        ECRIRE(i)
        i <-- i + 1
    TANT QUE i < 5
    ECRIRE "Après la boucle i vaut " i
FIN

Exercices while et do-while

En reprenant les deux structures de contrôle précédentes, faire les exercices suivants:

Boucles for (pour)

Boucle dans laquelle on définit:

Ainsi, si on veut :

On écrira:

POUR i allant de 1 à 5
    ...
FIN POUR

Dans de nombreux langages:

for (let i = 1; i <= 5 ; i++) //...

Diagramme

Code

Pseudo-code

POUR i allant de w à x:

Exemple:

Pour i allant de 1 à 3
    ECRIRE(i)
FIN Pour

Sortie:

1
2
3

Explication

La ligne suivante a une signification différente selon la situation :

Pour i allant de 1 à 3

Déroulement du programme

Utiliser un tableau pour noter les valeurs successives des variables est indispensable (au début) à la compréhension des algorithmes.

Pour l’algorithme précédent, cela donne:

ligne i Sortie Remarque
1 1 Entrée dans la boucle (i prend la valeur 1)
2 1 1
3 2 Retour à la ligne 1 et incrémentation de i
1 2 comparaison avec la condition de sortie
2 2 2 Affichage à la suite de la ligne précédente
3 3 Retour à la ligne 1 et incrémentation de i
1 3 comparaison avec la condition de sortie
2 3 3 Affichage à la suite de la ligne précédente
3 3 Retour à la ligne 1 et incrémentation de i
1 4 comparaison avec la condition de sortie
Fin du programme 4 condition sortie atteinte

Langage C

for (int i = 0; i < 5 ; i++) {
  printf("i=%d", i);
}
printf("Fin de boucle");

Affichage

i=1
i=2
i=3
i=4
Fin de boucle

Traduction dans un langage informatique (C, Java)

Initilisation (i prend la valeur 1) (init)
for (int i = 1; i <= 3 ; i++) //...
Vérification de la condition de sortie (condition)
for (int i = 1; i <= 3 ; i++) //...
Mise à jour (update)

i++ signifie: i prend la valeur de i + 1

for (int i = 1; i <= 3 ; i++) //...

Ce qui est strictement identique à:

for (int i = 1; i <= 3 ; i = i + 1) //...

Sauts de lignes et variantes

Sans saut de ligne

VARIABLES
  i EST_DU_TYPE NOMBRE
  j EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
  POUR i ALLANT_DE 0 A 5
    DEBUT_POUR
        AFFICHER i
    FIN_POUR
FIN_ALGORITHME

Affichage:

012345

AVEC saut de ligne

FONCTIONS_UTILISEES
VARIABLES
  i EST_DU_TYPE NOMBRE
  j EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
  POUR i ALLANT_DE 0 A 5
    DEBUT_POUR
    AFFICHER* i
    FIN_POUR
FIN_ALGORITHME

Affichage:

0
1
2
3
4
5

Saut de ligne séparé

FONCTIONS_UTILISEES
VARIABLES
  i EST_DU_TYPE NOMBRE
  j EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
  POUR i ALLANT_DE 0 A 5
    DEBUT_POUR
    AFFICHER i      // pas de saut de ligne
    AFFICHER* " " // saut de ligne séparé de l'affichage de i
    FIN_POUR
FIN_ALGORITHME

Affichage:

0
1
2
3
4
5

Boucles imbriquées

Exemple 1

VARIABLES
  i EST_DU_TYPE NOMBRE
  j EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
  POUR i ALLANT_DE 0 A 3
    DEBUT_POUR
    AFFICHER i
    POUR j ALLANT_DE 0 A 4
      DEBUT_POUR
      AFFICHER j
      FIN_POUR
    AFFICHER* " "
    FIN_POUR
FIN_ALGORITHME

Affichage:

001234 
101234 
201234 
301234 

Affichage correspondant à i (boucle externe):

001234 
101234 
201234 
301234 

Affichage correspondant à j (boucle interne):

001234 
101234 
201234 
301234 

Exemple 2

POUR i allant de 0 à 3
    ECRIRE "** i="
    ECRIRE i
    POUR j allant de 0 à 4
        ECRIRE "j="
        ECRIRE j 
    FIN POUR
FIN POUR

Affichera:

** i=0
j=0
j=1
j=2
j=3
j=4
** i=1
j=0
j=1
j=2
j=3
j=4
** i=2
j=0
j=1
j=2
j=3
j=4
** i=3
j=0
j=1
j=2
j=3
j=4

Exercices

Faire les exercices de cette série : série d’exercices

Des boucles dans des boucles

Exemple: calcul des puissances de 2

Utilisation d’une boucle pour le calcul de la puissance

Pour calculer la puissance d’un nombre, on peut utiliser ce programme:

VARIABLE
ENTIER nombre
ENTIER puissance
ENTIER resultat
ENTIER i
DEBUT
    nombre <-- 2
    puissance <-- 4
    resultat <-- 1
    POUR i ALLANT DE 0 à puissance 
        puissance <-- puissance * nombre
    FIN POUR: i <-- i + 1
    ECRIRE "Après la boucle i vaut " i
    ECRIRE resultat
FIN

Exécution du calcul de puissance

ligne nombre puissance resultat i
9 2 4 1
10 2 4 1 0
11 2 4 2 0
10 2 4 2 1
11 2 4 4 1
10 2 4 4 2
11 2 4 8 2
10 2 4 8 3
11 2 4 16 3
10 2 4 16 4
14 2 4 16 4

Série de puissances

Pour calculer une série de puissance, on peut donc imbriquer cette boucle dans une autre:

Exécution de ce programme

ligne nombre puissance resultat i puissance <=10 i < puissance
6 2 0 VRAI
8 2 0 1 -
9 2 0 1 0 - FAUX
12 2 0 1
6 2 1 VRAI
8 2 1 1 -
9 2 1 1 0 - VRAI
10 2 1 2 0 - VRAI
9 2 1 1 1 - FAUX
6 2 2 VRAI
8 2 2 1 -
9 2 2 1 0 - VRAI