Informatique I 1ere Année- MI -2013/2014 Université de Khenchela Département d’Informatique CHAPITRE III : Les Traitements répétitifs Il arrive souvent dans un algorithme qu'une même action soit répétée plusieurs fois, avec éventuellement quelques variantes dans les paramètres qui précisent le déroulement de l’action. Exemple : Le maximum de deux ou de trois variables est simple à résoudre« le nombre de test est minimum 6 », Mais pour 4,5 …100 variables si le nombre de variables est égal à 100, on ne va pas s’amuser à déclarer 100 variables ni à répéter les instructions si sinon au minimum 100*100 fois. Il est alors fastidieux d'écrire un algorithme qui contient de nombreuses fois la même instruction. De plus, ce nombre peut dépendre du déroulement de l'algorithme. Il est alors impossible de savoir à l'avance combien de fois la même instruction doit être décrite. 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. 1. La boucle TantQue Syntaxe tantque condition faire instruction 1 instruction 2 ... Fintantque Fonctionnement : 1. la condition est tout d'abord calculée, 2. si le calcul de la condition donne vrai, les instructions comprises entre tant que et fin tant que sont exécutées, 3. puis l'exécution recommence au point 1, 4. la suite, s'il y en a une après fin tant que, est exécutée dès que le calcul de la condition effectué au point 1 donne faux. Remarques les variables qui apparaissent dans l'expression doivent donc toutes avoir une valeur avant. Les instructions contenues dans l’instruction tant que peuvent ne jamais être exécutées, si dès la première fois, l'expression booléenne a la valeur fausse. Il est obligatoire que la condition puisse être changée par les instructions, sinon notre algorithme ne terminerait jamais. Page | 1 Informatique I 1ere Année- MI -2013/2014 Université de Khenchela Département d’Informatique Exemple 1 : afficher la somme des 10 premiers nombres entiers positifs. Algorithme exemple1 Variables I, somme : entier Début Initialisation du compteur I1 Somme0 Condition à vérifier Tantque I<=10 faire Somme somme+I Incrémentation du compteur Ii+1 Fintantque Ecrire (somme) Fin. Trace de l’algorithme I<=10(condition) vrai vrai vrai vrai vrai vrai vrai vrai vrai vrai faux I 1 2 3 4 5 6 7 8 9 10 11 somme 1 3 6 10 15 21 28 36 45 55 Le résultat : affichage sur écran la valeur de la variable somme=55 Exemple2 : Un professeur veut calculer la moyenne des notes des étudiants à un module, le nombre d’étudiants est inconnu à l’avance : si le professeur veut calculer la moyenne des notes des étudiants présents à un module , il n’a pas compté le nombre de présents avant de lancer le programme et le programme doit continuer tant qu’il reste des copies. Dans ce cas on ne peut même pas estimer le nombre de variables qu’on va utiliser. Algorithme moyenne du module Variables NOTE : Réel {note d'un étudiant} NB : Entier {nombre d'étudiants présents} RESTE : Chaîne de caractères {critère de continuation} CUMUL : Réel {cumul des notes des étudiants} MOY : Réel {moyenne du module} Début RESTE "OUI" CUMUL 0 NB 0 Tantque RESTE = "OUI" faire Écrire ("Note de l'étudiant ?") Lire(NOTE) CUMUL CUMUL + NOTE NB NB + 1 Écrire ("Reste-t-il des copies ?") Lire (RESTE) FinTantQue MOY CUMUL / NB Écrire ("Moyenne du module = " ; MOY) Fin. Page | 2 Informatique I 1ere Année- MI -2013/2014 Université de Khenchela Département d’Informatique Trace de l'algorithme Le professeur a des copies qu'il n'a pas comptées (notes respectives 12, 14, 10, 8 et 11) RESTE : "Oui" CUMUL : 0 NB : 0 Trace de l’algorithme vrai vrai vrai Condition vrai vrai vérifiée note 12 14 10 8 11 cumul 12 26 36 44 55 NB 1 2 3 4 reste OUI OUI OUI OUI Le résultat : affichage sur écran : Moyenne du module = 11 5 NON 2. La boucle Pour L’instruction pour permet de répéter n fois un traitement ; elle permet de plus de faire évoluer une variable (appelée "compteur"), en lui affectant pour chacune des exécutions une nouvelle valeur (augmentée de 1 à chaque fois). Syntaxe Pour compteur de valeurdebut à valeurfin faire instruction 1 instruction 2 ... Fin pour Dont le fonctionnement est le suivant : 1. les instructions comprises entre pour et finpour sont exécutées une première fois, avec la variable compteur valant valeurdebut 2. ces instructions sont réexécutées, avec la variable compteur valant valeurdebut+1 3. ... 4. les instructions sont exécutées une dernière fois, avec la variable compteur valant valeurfin 5. les instructions suivant la construction pour sont exécutées ensuite. Remarque : on voit que la boucle pour ne nécessite pas d’incrémentation ni d’initialisation au préalable. Les instructions sont exécutées autant de fois qu'il y a d'entiers entre valeurdebut et valeurfin : c'est-à-dire en particulier 1 fois si valeurdebut=valeurfin, 0 fois si valeurdebut>valeurfin. la variable compteur ne doit pas être modifié par les instructions contenues dans l’instruction pour, sa valeur s’incrémente automatiquement. Page | 3 Informatique I 1ere Année- MI -2013/2014 Université de Khenchela Département d’Informatique Exemple 3 : afficher la somme des 10 premiers nombres entiers positifs. Algorithme exemple3 Variables I, somme : entier Début Somme0 Pour I de 1 à 10 faire Somme somme+I Fin pour Ecrire (somme) Fin. 3. La boucle Répéter Syntaxe Répéter Instruction 1 Instruction 2 ... Jusqu’à condition Dont le fonctionnement est le suivant : 1. les instructions comprises entre répéter et jusqu'à sont exécutées 2. la condition est alors calculée, 3. si le calcul de la condition donne faux, l'exécution recommence au point 1; si le calcul de la condition donne vrai, l'exécution continue avec la suite, s'il y en a une après jusqu'à. Remarques Les instructions contenues dans l’instruction répéter sont toujours exécutées au moins une fois. Il est obligatoire que la condition puisse être changée par les instructions, sinon notre algorithme ne terminerait jamais. la condition d’une instruction répéter est aussi appelée « condition d’arrêt ». Il est nécessaire qu'au moins une variable intervenant lors de l'évaluation de fin de boucle soit sujette à modification à l'intérieur de la structure exécutive interne à la boucle. Page | 4 Informatique I 1ere Année- MI -2013/2014 Université de Khenchela Département d’Informatique Exemple 4 : afficher la somme des 10 premiers nombres entiers positifs. Algorithme exemple4 Variables I, somme : entier Début Somme0 i1 Répéter Somme somme+I II+1 Jusqu’à i>10 Ecrire (somme) Fin. 4. L'imbrication des boucles Comme les structures conditionnelles, les boucles peuvent être imbriquées. Cette partie n'apporte pas de notion nouvelle mais permet de souligner certains aspects délicats. Le morceau d'algorithme suivant permet simplement d'afficher 5 étoiles. Il n'y a pas d'imbrication pour l'instant. Pour i de 1 jusqu'à 5 Faire Ecrire («*") Finpour * * * * * * Si on inclut cette séquence à l'intérieur d'une boucle qui se répète 3 fois, on va effectuer 3 fois l'affichage de 5 étoiles donc on va obtenir l'affichage de 15 étoiles. Pour j de 1 jusqu'à 3 Faire Pour i de 1 jusqu'à 5 Faire Afficher "*" Finpour * * * * * * * * * * * * * * * Finpour Remarque TRES importante: Lorsque l'on imbrique des boucles, IL FAUT UTILISER DES COMPTEURS DIFFERENTS pour chaque boucle. Pour pouvoir afficher 3 lignes de 5 étoiles, au lieu de 15 étoiles à la suite, il suffit d'ajouter un saut de ligne après le Pour le plus imbriqué. ***** ***** ***** Exemple Pascal : For j := 1 to 3 do begin For i := 1 to 5 do Write( "*" ) ; Writeln ; Page | 5 Informatique I 1ere Année- MI -2013/2014 Université de Khenchela Département d’Informatique End ; La boucle la plus imbriquée s'exécute 5 fois alors que la "grande" boucle s'exécute seulement 3 fois. Le compteur i varie 5 fois plus vite que le compteur j. Tous les types de boucles peuvent s'imbriquer entre eux. La seule règle à respecter est que les boucles ne doivent pas se chevaucher: elles doivent s'emboîter. Si vous respectez bien la règle des décalages, vous ne pouvez pas vous tromper. Ok TantQue a>b faire Pour i de 1 à n faire ….. Fin pour FinTantQue TantQue a>b faire Pour i de 1 à n faire ….. FinTantQue Finpour 1. Choix d'un type de boucle Si on peut déterminer le nombre d'itérations avant l'exécution de la boucle, il est plus naturel d'utiliser la boucle Pour. S'il n'est pas possible de connaître le nombre d'itérations avant l'exécution de la boucle, on fera appel à l'une des boucles TantQue ou répéter jusqu'à Pour le choix entre TantQue et jusqu'à: Si on doit tester la condition de contrôle avant de commencer les instructions de la boucle, on utilisera TantQue. Si la valeur de la condition de contrôle dépend d'une première exécution des instructions de la boucle, on utilisera répéter jusqu'à. Exercice d’application N°1 Ecrire l’algorithme qui permet de calcule X à la puissance n ( x ,n entiers ) Exercice d’application Ecrire l’algorithme qui affiche les 100 premiers entiers positifs Exercice d’application N°3 Ecrire un algorithme qui permet de trouver les diviseurs d’un nombre entier positif. Exercice d’application N°4 Ecrire un algorithme qui permet de tester si un nombre N est premier ou non. Exercice d’application N°5 Ecrire un algorithme qui permet d’afficher les nombres premiers inferieur à 1000. Exercice d’application N°6 Écrire un algorithme qui détermine si un entier N est parfait ou non. Un entier est dit parfait s’il est égal à la somme de ses diviseurs. Exemple : 6=3+2+1. 28= 1+2+4+7+14 Exercice d’application N°7 Ecrire un algorithme qui renverse un nombre quelconque. Exemple : reverser 52423 = 32425. Page | 6