CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative
description
Transcript of CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative
![Page 1: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/1.jpg)
CYCLE 4 : BOUCLES TANT QUERépéter dans un programme avec une Instruction itérative
1- Comment écrire une instruction TANT QUE
2- Comment le CPU exécute une boucle TANT QUE
3- EXEMPLES :
- Table de multiplication
- Programme avec reprise
- Saisie validée
![Page 2: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/2.jpg)
CYCLE 4 : BOUCLES TANT QUERépéter dans un programme avec une Instruction itérative
1- Comment écrire une instruction TANT QUE
do { } while ();
while () {}
![Page 3: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/3.jpg)
3
Instruction FAIRE - TANT QUE
int main()
{ /* Répétition sur condition : FAIRE - TANT QUE
do
{ instructions;
} while (condition); */
int a=2;
do
{ printf("passage boucle"); a= a-1;
} while (a>0);
}
![Page 4: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/4.jpg)
4
int main()
{ /* Répétition sur condition : TANT QUE
while (condition)
{ instructions;
} */
int a=2;
while (a>=0)
{ printf("passage boucle"); a= a-1;
}
}
Instruction TANT QUE
![Page 5: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/5.jpg)
5
Règle de programmation : lisibilité code Indentations dans les accolades du while
UN ; à la fin du while() seulement pour le do while !!!!
do
{ instructions;
} while (condition);
while (condition)
{ instructions;
}
À NOTER !!
![Page 6: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/6.jpg)
6
Le TANT QUE répète l’exécution d’un bloc d’instructions tant qu’une condition est vraie
(boucle conditionnelle)
Rôle des instructions TANT QUE
![Page 7: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/7.jpg)
CYCLE 4 : BOUCLES TANT QUERépéter dans un programme avec une Instruction itérative
2- Comment le CPU exécute une boucle TANT QUE
![Page 8: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/8.jpg)
8
Le CPU recommence l’exécution du bloc d’instructions tant que la condition de poursuite de boucle est VRAIE. Dès que la condition de
fin de boucle devient VRAIE, la boucle s’arrête :
• Le CPU passe le DO et exécute les instructions de boucle• Le CPU évalue la condition de poursuite de boucle : condition• Si condition VRAIE, le CPU réexécute la boucle• Lorsque le CPU revient au WHILE, le CPU évalue condition• Quand la condition devient FAUSSE, le CPU sort du TANTQUE.
do
{ instructions;
} while (condition);
Principe d’exécution de l’instruction FAIRE – TANT QUE
![Page 9: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/9.jpg)
9
Le CPU recommence l’exécution du bloc d’instructions tant que la condition de poursuite de boucle est VRAIE. Dès que la condition de
fin de boucle devient VRAIE, la boucle s’arrête :
• Le CPU évalue la condition de poursuite de boucle : condition• Si condition VRAIE, le CPU exécute la boucle, puis revient au WHILE• De retour au WHILE, le CPU évalue condition• Quand la condition devient FAUSSE, le CPU sort du TANTQUE.
while (condition)
{ instructions;
}
Principe d’exécution de l’instruction TANT QUE
![Page 10: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/10.jpg)
10
Le do {} while s’exécute toujours au moins une fois
do
{ instructions;
} while (condition);
while (condition)
{ instructions;
}
Pr écision sur le premier passage dans une TANT QUE
![Page 11: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/11.jpg)
11
do
{ instructions;
} while (condition);
Bloc d’instructions
Condition poursuite ?
VRAI
FAUX
Suite du programme
Organigramme de l’instruction FAIRE - TANT QUE
![Page 12: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/12.jpg)
12
INSTRUCTION PROCESSEUR
1- do exécution des instructions de la boucle
2- while évaluation condition logique de poursuite : VRAI
4- while évaluation condition logique de poursuite : VRAI
5- do exécution des instructions de la boucle
3- do exécution des instructions de la boucle
6- while évaluation condition logique de poursuite : FAUX
7- suite du programme après la fin du TANTQUE
Simulation d’exécution du FAIRE – TANT QUE
![Page 13: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/13.jpg)
13
while (condition)
{ instructions;
}
Condition poursuite ?
Bloc d’instructions
VRAI
FAUX
Suite du programme
Organigramme de l’instruction TANT QUE
![Page 14: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/14.jpg)
14
INSTRUCTION PROCESSEUR
2- { exécution des instructions de la boucle
1- while évaluation condition logique de poursuite : VRAI
3- } : while évaluation condition logique de poursuite : VRAI
5- } : while évaluation condition logique de poursuite : FAUX
6- suite du programme après la fin du TANTQUE
4- { exécution des instructions de la boucle
Simulation d’exécution du TANT QUE
![Page 15: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/15.jpg)
15
Décomposer le problème, à partir d’exemples, pour trouver les instructions qui
se répètent
CONTENU de la boucle
Ecrire la boucle TANT QUE
Vérifier la boucle TANT QUE :Dérouler l’exécution avec les valeurs limites et
un cas standard
TROUVER la CONDITION de POURSUITE de boucle
(si vous trouvez la condition de fin : l’inverser)Éventuellement, FIXER initialisation et
incrémentation
Mise au point d’une boucle TANT QUE
![Page 16: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/16.jpg)
CYCLE 4 : BOUCLES TANT QUERépéter dans un programme avec une Instruction itérative
3- EXEMPLES :
- Table de multiplication
- Programme avec reprise
- Saisie validée
![Page 17: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/17.jpg)
17
int main()
{ int produit, i;
/* comptage et affichage des produits */
i= 0;
do
{ produit= i*2;
printf("%d x 2 = %d\n",i,produit);
i++;
} while (i<11);
}
Affichage de la table de multiplication par 2
![Page 18: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/18.jpg)
18
Instruction Processeur
Mémoire
2- Initialisation : i= 0 affectation
i&i 0
7- suite après TANTQUE
3- do a- calcul: 0x2 -produit= i*2; b- affectation -printf(); c- affichage-i= i+1; d- calcul: 0+1
e- affectation
i&i 1
produit&produit
00 X 2 =
0-
4- while évaluation condition poursuite 1<11: VRAI
5- do a- calcul: 1x2 -produit= i*2; b- affectation -printf(); c- affichage-i= i+1; d- calcul: 1+1
e- affectation
produit&produit
2
i&i
2
0 X 2 = 01 X 2 = 2-
Réservation mémoire
1- Déclaration variables produit&produit i&i
… … …
6- while éval condition poursuite 11<11: FAUX
0 X 2 = 0
1 X 2 = 2 .
10 X 2 = 20
![Page 19: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/19.jpg)
19
Une boucle POUR peut toujours être transformée en boucle TANT QUE.
i=1;
do
{ instructions;
i= i+1;
} while (i<=5);
for ( i=1 ; i<=5 ; i=i+1 )
{ instructions;
}
Equivalence entre les boucles POUR et TANT QUE
![Page 20: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/20.jpg)
20
La boucle TANT QUE permet de faire plus de choses : la reprise dépend d’une condition logique quelconque.
On pourrait tout écrire avec des TANT QUE.
Quand on sait combien de fois la boucle doit tourner, la POUR est plus simple.
Différence entre les boucles POUR et TANT QUE
![Page 21: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/21.jpg)
21
int main()
{ float a, b, resu ; int choixMenu;
do // reprise du programme tant que l’utilisateur ne veut pas sortir
{ printf(“1) addition,\n2) soustraction\n3) SORTIR\n\tChoix :");
scanf(" %d",&choixMenu);
printf("Donner 2 réels:"); scanf("%f%f",&a,&b);
if (choixMenu==1) // addition
{ resu= a+b; }
if (choixMenu==2) // soustraction
{ resu= a-b; }
printf("Resultat de l’opération : %.2f",resu);
} while (choixMenu!=3);
}
GESTION D’UN MENU Le programme réalise une calculatrice avec reprise
![Page 22: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/22.jpg)
22
La boucle de reprise du programme permet d’éviter d’avoir à relancer le programme (RUN) pour une nouvelle exécution.
Précisions sur la gestion d’un menu
![Page 23: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/23.jpg)
Le programme de calculatrice recommence si l’utilisateur veut faire un nouveau calcul.
![Page 24: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/24.jpg)
24
int main()
{ int x;
do // reprise de saisie si saisie invalide
{ printf("Donner une valeur comprise entre 5 et 150 : ");
scanf("%d",&x);
if (x<5 || x>150 ) // message d’erreur si saisie invalide
{ printf("Erreur de saisie");
}
} while (x<5 || x>150 );
}
SAISIE VALIDEE Le programme saisit un entier [5,150]
![Page 25: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/25.jpg)
25
le programmeur doit vérifier la validité de toutes les saisies du programme et faire ressaisir en cas d’erreur
le programmeur doit bien informer l’utilisateur de ce qui doit être tapé au clavier et des erreurs qu’il commet
Précisions sur la SAISIE VALIDEE
![Page 26: CYCLE 4 : BOUCLES TANT QUE Répéter dans un programme avec une Instruction itérative](https://reader037.fdocuments.us/reader037/viewer/2022110212/56813f12550346895da99f08/html5/thumbnails/26.jpg)
Le programme saisit un réel dans [-50.5,100.25] exclusivement.