Télécharger la présentation
1
Algorithmique Boucles et Itérations
Cours de BTS/CPI 1ère année Algo – Prog CPI/BTS1 – M. Dravet – 22/09/ Dernière modification: 22/09/2003
2
Introduction Dans un algo, on doit souvent répéter les mêmes blocs d’instruction … Avec quelques variations dans les paramètres pour préciser le déroulement de l’algo … Il est fastidieux d’écrire plusieurs fois la même chose Surtout que le nombre de répétitions à faire peut varier en fonction de l’algo lui-même et de ce qu’il fait : il est très dur de connaître ce nombre à l’avance.
3
Introduction Pour gérer ces cas, on fait appel à des instructions en boucle qui ont pour effet de répéter plusieurs fois une même instruction. Deux formes existent : si le nombre de répétitions est connu avant l'exécution de l'instruction de répétition, … et s’il n’est pas connu. On appellera itération l'exécution de la liste des instructions.
4
Répétition inconditionnelle
Il est fréquent que le nombre de répétitions soit connu à l'avance, et que l'on ait besoin d'utiliser le numéro de l'itération afin d'effectuer des calculs ou des tests. Le mécanisme permettant cela est la boucle Pour. Pour variable de valeur initiale à valeur finale faire liste d'instructions Fin pour
5
Répétition inconditionnelle
La variable dont on donne le nom va prendre successivement toutes les valeurs entières entre valeur initiale et valeur finale. Pour chaque valeur prise par la variable, la liste des instructions est exécutée. La valeur utilisée pour énumérer les itérations est appelée valeur d'itération, indice d'itération ou compteur. L'incrémentation par 1 de la variable est implicite.
6
Répétition inconditionnelle
Autre forme de la boucle Pour : Pour variable décroissante de valeur initiale à valeur finale faire liste d'instructions Fin pour La variable d'itération est décrémentée de 1 après chaque itération.
7
Répétition inconditionnelle
Exemple n° 1 Programme TableDe9 Début écrire(1*9) écrire(2*9) écrire(3*9) écrire(4*9) écrire(5*9) écrire(6*9) écrire(7*9) écrire(8*9) écrire(9*9) écrire(10*9) fin
8
Répétition inconditionnelle
Exemple n° 1 Il est plus simple d'utiliser une boucle avec un compteur prenant d'abord la valeur 1, puis augmentant peu à peu jusqu'à atteindre 10. Programme TableDe9 Déclarations Var i : entier { compteur de la boucle } Début pour i de 1 à 10 faire écrire(i*9) fin pour fin
9
Répétition inconditionnelle
Exemple n° 2 On veut imprimer, pour n donné, la somme des carrés des n premiers entiers. Cette somme, notée s, est obtenue en calculant le n-ième terme d'une suite définie par récurrence : sn=sn-1+n² Algorithmiquement le calcul de cette suite se fait en deux étapes : initialisation (ici, s0=0) répétition de : calcul du ième terme en fonction du terme d'indice i-1
10
Répétition inconditionnelle
Exemple n° 2 Programme SommeCarrés Déclarations Var s : entier { résultat de la somme } n : entier { borne supérieure de la suite } i : entier { compteur de boucle } Début Écrire(‘entrez la borne max de la suite: ‘) lire(n) { 1 } s 0 { 2 } pour i de 1 à n faire { 3 } s s + i2 { 4 } Fin pour { 5 } écrire(s) fin
11
Répétition inconditionnelle
Schéma de l'évolution de l'état des variables instruction par instruction : On suppose que la valeur introduite par l'utilisateur est 4. Instructions n s i 1 4 2 3 5 14 30 fin écrire
12
Répétition inconditionnelle
Exercice Ecrire l'algorithme qui permet d'imprimer le maximum de n entiers positifs donnés au fur et à mesure. Le programme doit demander n à l’utilisateur, puis doit demander n fois de rentrer un nombre. Au bout de n nombre saisis, le programme affiche le maximum. On suppose que les entiers saisis par l’utilisateur sont positifs (pas besoin de vérification dans le programme)
13
Répétition inconditionnelle
Exercice 1ère méthode: initialisation à un terme artificiel. Programme maximum Déclarations Variable n : entier { nombre d'entiers positifs donné } maximum : entier { maximum des i premiers entiers } nombre : entier { ième nombre lu } i : entier { indice d'itération } Début lire(n) { 1 } maximum { 2 } pour i de 1 à n faire { 3 } lire(nombre) { 4 } si nombre > maximum alors { 5 } maximum nombre { 6 } fin si Fin fin pour écrire (maximum) { 7 } fin
14
Répétition inconditionnelle
Schéma de l'évolution de l'état des variables instruction par instruction Instructions n maximum i nombre nombre > maximum 1 4 2 -1 3 5 Vrai 6 faux 8 7 (fin) écrire
15
Répétition inconditionnelle
Exercice 2ème méthode: initialisation à un terme utile. Programme maximum Déclarations Variable n : entier { nombre d'entiers positifs donné } maximum : entier { maximum des i premiers entiers } nombre : entier { ième nombre lu } i : entier { indice d'itération } Début lire(n) { 1 } écrire(‘Entrez le 1er chiffre: ‘) lire(maximum) { 2 } pour i de 2 à n faire { 3 } lire(nombre) { 4 } si nombre > maximum alors { 5 } maximum nombre { 6 } fin si fin pour écrire (maximum) { 7 } fin
16
Répétition inconditionnelle
Schéma de l'évolution de l'état des variables instruction par instruction Instructions n maximum i nombre nombre > maximum 1 4 2 3 5 faux 8 Vrai 6 7 (fin) (écrire)
17
Répétitions conditionnelles
L'utilisation d'une boucle pour nécessite de connaître à l'avance le nombre d'itérations désiré, c'est-à-dire la valeur finale du compteur. Dans beaucoup de cas, on souhaite répéter une instruction tant qu'une certaine condition est remplie … … alors qu'il est à priori impossible de savoir à l'avance au bout de combien d'itérations cette condition cessera d'être satisfaite. Le mécanisme permettant cela est la boucle Tant que.
18
Répétitions conditionnelles
Syntaxe de la boucle Tant que : Tant que condition faire liste d'instructions Fin tantque Exécution de l’itération basée sur un type booléen dont la valeur est vrai la liste d'instructions est répétée autant de fois que la condition de poursuite a la valeur vraie.
19
Répétitions conditionnelles
Remarques: Du fait que la condition est évaluée avant l'exécution des instructions à répéter, il est possible que celles-ci ne soient jamais exécutées. Il faut que la liste des instructions ait une incidence sur la condition afin qu'elle puisse être évaluée à faux et que la boucle se termine. Il faut toujours s'assurer que la condition devient fausse au bout d'un temps fini.
20
Répétitions conditionnelles
Exemple n°1: Demander à l’utilisateur de saisir un entier positif et le redemander jusqu’à ce que l’entier soit positif.
21
Répétitions conditionnelles
Exemple n°1: Programme TestSaisie Déclaration Variable nb_lu : entier Début nb_lu -1 tant que nb_lu<0 faire écrire(‘entrez un entier positif: ‘) lire(nb_lu) fin tantque Fin
22
Répétitions conditionnelles
Exemple n°2: Demander à un utilisateur de saisir des entiers, tant que la somme de ces entiers est inférieure à 200 Ecrire à la fin de l’algo, le nombre d’entiers que l’utilisateur a saisi pour arriver à 200.
23
Répétitions conditionnelles
Exemple n°2: Programme TestSomme Déclaration Variable nb_lu, somme, nb : entier Début somme 0 nb 0 tant que somme<200 faire écrire(‘entrez un entier positif: ‘) lire(nb_lu) somme somme + nb_lu nb nb + 1 Fin fin tantque écrire(nb)
24
Boucles imbriquées Le corps d’une boucle est une suite d’instructions
Or une boucle est elle-même une instruction … Donc le corps d'une boucle peut contenir une boucle dite imbriquée, puisque c’est une instruction comme une autre La boucle imbriquée utilise un compteur différent
25
Boucles imbriquées A chaque passage dans la boucle principale, la boucle imbriquée sera totalement exécutée … Attention aux boucles infinies, et à la gestion des compteurs !
26
Répétitions conditionnelles
Exemple n°3: Demander à un utilisateur de saisir un entier positif Pour chaque entier N partant de 1 à l’entier saisi par l’utilisateur, écrire les nombres allant de 1 à cet entier N Exemple (saisie: 6) :
27
Répétitions conditionnelles
Exemple n°3: Programme TestSaisie Déclaration Variable nb_lu, somme, nb : entier Début lire(nb_lu) Pour i de 1 à nb_lu faire Pour j de 1 à i faire écrire (j) fin pour fin
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.