Cours 6 Cours sur les boucles ou instructions répétitives Structure répétitive, dite aussi itérative ou boucle permet, de répéter une ou plusieurs actions un certain nombre de fois. On identifie en règle générale trois types de répétitive : Pour Tantque Répéter …. Jusqu'A 1. Pour (for) , Boucler en comptant, ou compter en bouclant Il arrive très souvent qu’on ait besoin D’effectuer un nombre déterminé de passages. Or, a priori, notre structure TantQue ne sait pas à l’avance combien de tours de boucle elle va effectuer: C’est pourquoi une autre structure de boucle est à notre disposition : Les répétitives où le nombre d‟itération est fixée une fois pour toute. 1.1 Syntaxe : Pour compteur De : Initial A : Final Pas = ValeurDuPas debut Instruction1 ; Instruction2 ; …. Instructionn ; Suivant (Compteur ) ; FinPour 2. 1.2 Organigramme Pour (for), Il s'agit de l'instruction : POUR compteur De : Initial A : Final Pas = ValeurDuPas debut BLOC D'INSTRUCTIONS Suivant (Compteur); (*modification*) FinPour De : Initial (*condition de début*) A : Final (*condition de continuité*) 1 Remarques : Les 3 instructions du Pour ne portent pas forcément sur la même variable. Une instruction peut contenir l'opérateur séquentiel afin de pouvoir mettre deux instructions à la place de l'initialisation, la condition de continuité ou la modification. Attention, ceci affecte gravement la lisibilité du code. Une ou plusieurs des 3 instructions peuvent être omises, mais pas les ; Pour : est une boucle infinie (répétition infinie du bloc d'instructions). 2. Tantque ( while), Tant que Les répétitives où la condition d’arrêt est placée au début. 2.1 Syntaxe : Tant que condition faire debut Instruction1 ; Instruction2 ; …. Instructionn ; FinTantque Ce qui signifie : tant que la condition est vraie, on exécute la séquence d‟instructions. 2.2 Organigramme Tantque (while), TANTQUE (condition est vraie) FAIRE Debut BLOC D'INSTRUCTIONS FinTantque Remarque : comme le test se fait avant le bloc d'instructions, celui-ci n'est pas forcément exécuté. Attention : il faut que le résultat du test puisse être modifié d’une manière ou d’une autre si on ne veut pas faire une boucle sans fin. On peut rencontrer la construction tant que (expression); sans la présence du bloc d'instructions. Cette construction signifie: "tant que l'expression est vraie attendre". 2 3. Repeter( repeat) La condition d‟arrêt est placée à la fin 3.1 Syntaxe de La boucle " Repeter ": Répéter Instruction1 ; Instruction2 ; …. Instructionn ; Jusqu’A <expression logique ou critère d’arret> 3.2 Organigramme de La boucle " Repeter " Il s'agit de l'instruction : REPETER BLOC D'INSTRUCTIONS JUSQU’A (condition est vraie) Remarque : Le test se fait après le bloc d'instructions, celui-ci est exécuté au moins une fois. 3 Serie TD N6 Exercice1 Ecrire un algorithme qui demande à l’utilisateur un nombre compris entre 1 et 3 jusqu’à ce que la réponse convienne. Exercice 2 Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu’à ce que la réponse convienne. En cas de réponse supérieure à 20, on fera apparaître un message : « Plus petit ! », et inversement, « Plus grand ! » si le nombre est inférieur à 10. Exercice 3 Ecrire un algorithme qui demande un nombre de départ, et qui ensuite affiche les dix nombres suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de 18 à 27. Exercice 4 Ecrire un algorithme qui demande un nombre de départ, et qui ensuite écrit la table de multiplication de ce nombre, présentée comme suit (cas où l'utilisateur entre le nombre 7) Table de 7 : 7x1=7 7 x 2 = 14 7 x 3 = 21 … 7 x 10 = 70 Exercice 5 Ecrire un algorithme qui demande un nombre de départ, et qui calcule la somme des entiers jusqu’à ce nombre. Par exemple, si l’on entre 5, le programme doit calculer : 1 + 2 + 3 + 4 + 5 = 15 NB : on souhaite afficher uniquement le résultat, pas la décomposition du calcul. Exercice 6 Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa factorielle. NB : la factorielle de 8, notée 8 !, vaut 1x2x3x4x5x6x7x8 Exercice 7 Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur, et qui lui dise ensuite quel était le plus grand parmi ces 20 nombres : Entrez le nombre numéro 1: 12 Entrez le nombre numéro 2: 14 etc. Entrez le nombre numéro 20 : 6 Le plus grand de ces nombres est : 14 Modifiez ensuite l’algorithme pour que le programme affiche de surcroît en quelle position avait été saisie ce nombre : C’était le nombre numéro 2 Exercice8 Réécrire l’algorithme précédent, mais cette fois-ci on ne connaît pas d’avance combien l’utilisateur souhaite saisir de nombres. La saisie des nombres s’arrête lorsque l’utilisateur entre un zéro. 4 Correction de la série TD N6 Exercice1 Program ex1 Variable N :Entier ; Debut N←0; Ecrire ("Entrez un nombre entre 1 et 3") ; TantQue N < 1 ou N > 3 Lire (N) ; Si N < 1 ou N > 3 Alors Ecrire "Saisie erronée. Recommencez” FinSi FinTantQue Fin. Exercice 2 Program ex2 Variable N : Entier ; Debut N←0; Ecrire( "Entrez un nombre entre 10 et 20") TantQue N < 10 ou N > 20 Lire (N) ; Si N < 10 Alors Ecrire "Plus grand !" SinonSi N > 20 Alors Ecrire "Plus petit !" FinSi FinTantQue Fin. Exercice 3 Program ex3 Variables N, i : Entier ; Debut Ecrire ("Entrez un nombre : ") ; Lire (N) ; Ecrire ("Les 10 nombres suivants sont : ") ; Pour i ← N + 1 à N + 10 Ecrire (i) ; Suivant (i) ; Fin. Exercice 4 Program ex4 Variables N, i : Entier ; Debut Ecrire ("Entrez un nombre : ") ; Lire( N) ; Ecrire ("La table de multiplication de ce nombre est : ") ; Pour i ← 1 à 10 Ecrire (N, " x ", i, " = ", n*i) ; Suivant (i) ; Fin. Exercice 5 Program ex5 Variables N, i, Som : Entier Debut Ecrire ("Entrez un nombre : ") ; Lire (N) ; Som ← 0 ; Pour i ← 1 à N Som ← Som + i ; Suivant (i) ; Ecrire ("La somme est : ", Som) ; Fin. Exercice 6 Program ex6 Variables N, i, F : Entier Debut Ecrire ("Entrez un nombre : ") ; Lire( N) ; F←1; Pour i ← 2 à N F←F*i; Suivant (i) ; Ecrire ("La factorielle est : ", F) ; Fin. 5 Exercice8 Exercice 7 Proram exo 8 Variables N, i, PG, IPG : Entier Proram exo 71 Variables N, i, PG :Entier ; Debut N←1: Debut PG ← 0 ; i←0: Pour i ← 1 à 20 PG ← 0 : Ecrire ("Entrez un nombre : ") ; TantQue N <> 0 Lire( N) ; Ecrire ("Entrez un nombre : ") ; Si (i = 1 ou N > PG) Alors Lire (N) ; PG ← N ; i←i+1; Si i = 1 ou N > PG Alors FinSi Suivant (i) ; PG ← N ; Ecrire( "Le nombre le plus grand était : ", PG) ; IPG ← i ; Fin. FinSi En ligne 3, on peut mettre n’importe quoi dans FinTantQue PG, il suffit que cette variable soit affectée pour Ecrire( "Le nombre le plus grand était : ", PG) ; que le premier passage en ligne 7 ne provoque Ecrire( "Il a été saisi en position numéro ", pas d'erreur. IPG) ; Fin. Pour la version améliorée, cela donne : Proram exo 72 Variables N, i, PG, IPG : Entier Debut PG ← 0 : Pour i ← 1 à 20 Ecrire ("Entrez un nombre : ") ; Lire (N) ; Si (i = 1 ou N > PG) Alors PG ← N ; IPG ← i ; FinSi Suivant (i) ; Ecrire ("Le nombre le plus grand était : ", PG) ; Ecrire ("Il a été saisi en position numéro ", IPG) ; Fin. 6 7