Chapitre 4

Les Structures De Contrôles Itératives

LYCEE  DISCIPLINE : Informatique Chapitre 4 I. 1

PROFESSEUR :

Les Structures De Contrôles Itératives STRUCTURE ITÉRATIVE COMPLÈTE : LA BOUCLE « POUR »
Activité

On se propose d’écrire un programme pascal intitulé MOY_CLASSE permettant de calculer et d’afficher la moyenne d’une classe de 10 élèves. Pour résoudre ce problème, on a déjà proposé de déclarer un tableau de 10 éléments pour saisir les moyennes au lieu d'utiliser 10 variables différentes. Mais nous avons vu aussi que la lecture d'un tableau se fait élément par élément, ce qui demande de répéter 10 fois l'écriture des instructions de lecture. Quelle est donc la solution ?  On doit utiliser une structure répétitive pour réduire le nombre d'instructions de lecture. Pré-analyse BUT : Afficher à l’écran la moyenne de la classe. La tâche de ce programme consiste à : 1) Répéter le traitement suivant :  saisir dans un tableau de 10 éléments les moyennes de 10 élèves,  d’ajouter la moyenne de chaque élève à la variable SOM. 2) Calculer MC SOM/10. Analyse S 4 3 2 1 5 Grille d’analyse NOM : MOY_CLASSE L.D.E Résultat = Écrire ("La moyenne de la classe est : ", MC :5 :2) MC  SOM/10 SOM = [ SOM0] Pour i de 1 à 10 répéter SOMSOM+ MOY[i] FinPour MOY= [ ] Pour i de 1 à 10 répéter MOY[i] = Donnée ("Saisir l'élément N° ",i) FinPour Fin MOY_CLASSE

O.U MC SOM i MOY

Tableau de déclaration de nouveaux types TYPE TAB= tableau de nmax réels Tableau de déclaration des objets Objet MC SOM i MOY Nature / Type Réel Réel Entier. TAB
-1-

Nmax est une constante = 10

Chapitre 4

Les Structures De Contrôles Itératives

Algorithme 0) Début MOY_CLASSE 1) Pour i de 1 à 10 répéter Faire Ecrire ("Saisir l'élément N° ", i) Lire (MOY[i]) Fin Pour 2) SOM0 Pour i de 1 à 10 répéter SOMSOM+MOY[i] FinPour 3) MC  SOM/10 4) Ecrire ("La moyenne de la classe est : ", MC :5 :2) 5) Fin MOY_CLASSE Traduction en Pascal PROGRAM MOY_CLASSE; USES WINCRT; CONST Nmax=10; TYPE TAB= ARRAY [1. .nmax] OF REAL; VAR MC: REAL; I: INTEGER; MOY: TAB; BEGIN FOR i: =1 TO 10 DO BEGIN WRITELN ('Saisir l'élément N° ',i); READLN (MOY[i]); END; SOM:= 0; FOR i: = 1 TO 10 DO BEGIN SOM := SOM+ MOY [i]; END; MC := SOM/10; WRITELN ('La moyenne de la classe est : ', MC :5 :2); END.

-2-

Chapitre 6 contrôle itératives

Les structures de

2

Définition Un résultat a une structure itérative complète si le nombre de répétition est connu à l’avance.

3

Vocabulaire et syntaxe Au niveau de l’analyse et de Au niveau de Turbo Pascal ...... ; {Init}; For compteur := Vi To Vf Do Begin Instruction 1 ; Instruction 2 ; ……..... ; Instruction N ; End ;

l’algorithme [Init] Pour compteur de Vi à Vf Faire Instruction 1 Instruction 2 ….. Instruction N FinPour

Remarques : • Vi : Valeur initiale du compteur. • Vf : Valeur finale du compteur. • Le compteur doit être de type scalaire (Entier, caractère). • Le traitement de la boucle « Pour » s’arrête lorsque le compteur atteint la valeur finale (Vf). • Les instructions entre « Pour » et « FinPour » représentent le traitement à répéter. • Dans la boucle « Pour », le nombre de répétitions est fini. • Dans le cas où Vi > Vf, pour qu’il aura exécution du traitement de cette boucle, on utilise en Pascal « DOWNTO » au lieu de « TO » Exemple : For i := 8 Downto 2 Do … OU For i := 2 to 8 Do … • A chaque répétition, le compteur de la boucle sera automatiquement Incrémenté (augmenté) d’une unité si Vi < Vf Décrémenté (retranché) d’une unité si Vi > Vf II. STRUCTURE ITÉRATIVE A CONDITION D’ARRÊT 1 La boucle « Répéter » On se propose d’écrire un programme Pascal intitulé MOY_CLASSE permettant de calculer et d’afficher la moyenne d’une classe de 10 élèves. La moyenne des élèves varie entre 0 et 20. Pré-analyse BUT : Afficher à l’écran la moyenne de la classe. La tâche de ce programme consiste à: 1) Répéter le traitement suivant :  Remplir le tableau Moy par des moyennes entre 0 et 20. Si la moyenne saisie ne vérifie pas la condition (0<=moy<=20), alors le programme redemande la saisie et ainsi de suite jusqu’à ce qu’une bonne valeur soit donnée.  Parcourir le tableau MOY élément par élément, ajouter la moyenne de chaque élève à la variable SOM.
-3-

a / Activité

Chapitre 6 contrôle itératives

Les structures de

2) Calculer MC SOM/10. Analyse Grille d’analyse NOM : MOY_CLASSE S 4 3 2 1 L.D.E Résultat = Écrire ("La moyenne de la classe est : ", MC :5 :2) MC  SOM/10 SOM = [ SOM0] Pour i de 1 à 10 répéter SOMSOM+MOY[i] FinPour MOY= [ ] Pour i de 1 à 10 répéter MOY= [ ] Répéter MOY[i] = Donnée ("Saisir l'élément N° ",i) Jusqu’à (MOY[i]>=0) ET (MOY[i] <=20) FinPour Fin MOY_CLASSE O.U MC SOM i MOY

5

Tableau de déclaration de nouveaux types TYPE TAB= tableau de nmax réels Tableau de déclaration des objets Objet MC SOM i MOY 0)
1)

Nmax est une constante = 10

Nature / Type Réel Réel Entier. TAB

Algorithme Début MOY_CLASSE Pour i de 1 à 10 répéter Répéter Ecrire ("Saisir l'élément N° ",i) Lire (MOY[i]) Jusqu’à (MOY[i]>=0) ET (MOY[i] <=20) FinPour 2) SOM0 Pour i de 1 à 10 répéter SOMSOM+MOY[i] FinPour 3) MC  SOM/10 4) Ecrire ("La moyenne de la classe est : ", MC :5 :2) 5) Fin MOY_CLASSE

-4-

Chapitre 6 contrôle itératives

Les structures de

Traduction en Pascal PROGRAM MOY_CLASSE; USES WINCRT; CONST Nmax=10; TYPE TAB= ARRAY[1. .nmax] OF REAL; VAR MC : REAL ; i : INTEGER; MOY : TAB; BEGIN FOR i :=1 TO 10 DO BEGIN Repeat WRITELN ('Saisir l'élément N° ',i); READLN (MOY[i]) ; Until (MOY[i]>=0) AND (MOY[i] <=20); END; SOM:= 0; FOR i := 1 TO 10 DO BEGIN SOM := SOM+ MOY [i] END; MC := SOM/10; WRITELN ('La moyenne de la classe est : ', MC :5 :2); END. a / Définition Un résultat a une structure itérative à condition d’arrêt (Répéter) si le nombre de répétition n’est pas connu à l’avance et l’action devance la condition. Dans cette boucle, les instructions du traitement seront tout d’abord exécutées puis la condition sera évaluée. Si la condition est VRAI alors le traitement de la boucle ne se répète plus (la boucle s’arrête) sinon ce traitement sera de nouveau exécuté et ainsi de suite. b /Vocabulaire et syntaxe Au niveau de l’analyse et de l’algorithme [Init] Répéter Instruction 1 Instruction 2 ….. Instruction N Jusqu’à Condition ...... ; {Init}; Repeat Instruction 1 ; Instruction 2 ; ….. ; Instruction N ;
-5-

Au niveau de Turbo Pascal

Chapitre 6 contrôle itératives

Les structures de

Until Condition ;

c / Application Ecrire un programme Pascal intitulé Factorielle permettant de calculer et d’afficher le factoriel d’un entier N positif. Exemple : N= 4 Pré-analyse BUT : Afficher à l’écran le factoriel de N. La tâche de ce programme consiste à: 1) Saisir un entier N en faisant un contrôle. Si N n’est pas positif alors le programme redemande la saisie et ainsi de suite jusqu’à ce qu’une bonne valeur soit donnée. 2) Tester N : Si N= 1, alors Fact1, Si N>1 , alors Fact N*(N-1)*(N-2)*…*1 Analyse Grille d’analyse NOM : Factorielle S 3 1 2 L.D.E Résultat = Écrire (N, " != ", Fact) N= [ ] Répéter N = Donnée ("Taper un entier") Jusqu’à (N>=0) Fact = [ ] Si N= 0 alors Fact1 Sinon [Fact1] Pour i de N à 1 répéter FactFact*i FinPour Finsi Fin Factorielle Nature / Type Entier. Entier. Entier. O.U N Fact i N != 4*3*2*1=24.

4

Tableau de déclaration des objets Objet N Fact i

Algorithme 0) Début Factorielle 1) Répéter Ecrire ("Taper un entier ") Lire (N) Jusqu’à (N>=0) 2) Si N= 0 alors Fact1 Sinon Fact1
-6-

Chapitre 6 contrôle itératives

Les structures de

Pour i de N à 1 répéter FactFact*i FinPour Finsi 3) Écrire (N, " != ", Fact) 4) Fin Factorielle Traduction en Pascal PROGRAM Factorielle; USES WINCRT; VAR N,Fact,i : INTEGER; BEGIN Repeat WRITELN ('Taper un entier '); READLN (N) ; Until (N>=0); IF N=0 THEN Fact:= 1 ELSE BEGIN Fact:= 1; FOR i := 1 TO N DO BEGIN Fact := Fact*i; END; END; WRITELN (N, ' != ', Fact); END. 2 La boucle « Tant que » a / Activité On se propose d’écrire un programme pascal intitulé SERIE permettant de calculer et d’afficher la somme d’une série d’entiers positifs terminé par un entier négatif. Pré-analyse BUT : Afficher à l’écran la somme d’une série d’entiers positifs La tâche de ce programme consiste à répéter la saisie d’une série d’entiers positifs, d’ajouter l’entier saisi à la variable SOM tant que on n’a pas saisi un entier négatif. Analyse Grille d’analyse NOM : SERIE S 2 1 L.D.E Résultat = Écrire ("La somme est : ", SOM) SOM = [ SOM0, N= Donnée ("Donner le premier entier") ] Tant que N >= 0 faire SOMSOM+N N = donnée ("Donner un autre entier") Fin Tant que Fin SERIE
-7-

O.U SOM N

3

Chapitre 6 contrôle itératives

Les structures de

Tableau de déclaration des objets Objet Nature / Type SOM Entier N Entier Algorithme 0) Début SERIE 1) Ecrire ("Donner le premier entier :") 2) lire (N) 3) SOM0 4) Tant que N ≥ 0 faire SOMSOM+N Ecrire ("Donner un autre entier ") Lire (N) Fin Tant que 5) Ecrire ("La somme est : ", SOM) 6) Fin SERIE Traduction en Pascal PROGRAM SERIE; USES WINCRT; VAR N, SOM : INTEGER; BEGIN WRITELN ('Donner le premier entier '); READLN (N) ; SOM:= 0; WHILE N>= 0 DO BEGIN SOM := SOM+ N ; READLN (N) ; END; WRITELN ('La somme est : ', SOM);
END.

b /Définition Un résultat a une structure itérative à condition d’arrêt (Tant que)si le nombre de répétition n’est pas connu à l’avance et la condition devance l’action. Dans cette boucle, la condition sera tout d’abord évaluée. Si elle est VRAIE alors le traitement de la boucle sera exécuté sinon ce traitement ne s’exécute jamais. c / Vocabulaire et syntaxe Au niveau de l’analyse et de l’algorithme [Init] Tant que Condition faire Instruction 1 Instruction 2 ….. Instruction N Fin Tant que Au niveau de Turbo Pascal ...... ; {Init}; While Condition Do Begin Instruction 1 ; Instruction 2 ; …… ;
-8-

Chapitre 6 contrôle itératives

Les structures de

Instruction n ; End ; Remarque : Pour les structures itératives à condition d’arrêt, le traitement de la boucle « Répéter » s’exécute dans tous les cas au moins une fois alors que pour la boucle « Tant que », on peut tomber dans un cas où le traitement correspondant ne s’exécute aucune fois et ceci dès que la condition est fausse. Exemple : S := 2 ; S := 2 ; I := 0 ; I := 0 ; Repeat While I = 1 Do I := I + 1 ; Begin S := S + I ; I := I + 1 ; Until I = 1 ; S := S + I ; End ; La boucle est exécutée une seule fois. La boucle n’est pas exécutée. S =3 et I=1 S =2 et I= 0 d /Application Ecrire un programme Pascal intitulé PGCD permettant de calculer et d’afficher le PGCD(Plus Grand Commun Diviseur) de deux entiers positifs A et B par la méthode de différence. Exemple : PGCD(12,30) = ? A<> B Si A>B alors A A-B SI A <B alors B B-A PGCD(12,30) = 6 Pré-analyse BUT : Afficher à l’écran le PGCD de deux entiers positifs A et B. La tâche de ce programme consiste à: 1)Saisir deux entiers positifs A et B en faisant un contrôle. Si A et B ne sont pas positifs alors le programme redemande la saisie et ainsi de suite jusqu’à ce qu’une bonne valeur soit donnée. 2)Calculer le PGCD en testant A et B. Analyse NOM : PGCD S 3 2 Grille d’analyse O.U A B

1

L.D.E Résultat = Écrire ("Le PGCD est ",A) A = [ ] Tantque A<>B faire Si A>B alors A A-B Finsi Si A<B alors B B-A Finsi FinTantque A,B= [ ] Répéter A = Donnée ("Taper un premier entier")
-9-

Chapitre 6 contrôle itératives

Les structures de

4

B = Donnée ("Taper un deuxième entier") Jusqu’à (A>=0) ET (B>=0) Fin PGCD

Tableau de déclaration des objets Objet A B Nature / Type Entier. Entier.

Algorithme 0) Début PGCD 1) Répéter Ecrire ("Taper un premier entier "), Lire (A) Ecrire ("Taper un deuxième entier "), Lire (B) Jusqu’à (A>=0) ET (B>=0) 2) [ ] Tantque A<>B répéter Si A>B alors A A-B Finsi Si A<B alors B B-A Finsi FinTantque 3) Écrire ("Le PGCD est ",A) 4) Fin PGCD Traduction en Pascal PROGRAM PGCD; USES WINCRT; VAR A,B: INTEGER; BEGIN Repeat WRITELN ('Taper un premier entier '); READLN(A) ; WRITELN ('Taper un deuxième entier '); READLN(B) ; Until (A>=0) AND (B>=0) ; While A<>B DO BEGIN IF A> B THEN A:= A-B; IF A <B THEN B:= B-A; END; WRITELN (' Le PGCD est ', A); END.
- 10 -

Chapitre 6 contrôle itératives

Les structures de

III.

SELECTION D'UNE BOUCLE REPETITIVE Sélection d’une boucle

Nombre de répétitions connu à l’avance

NON

OUI OUI

L’action se fait au
moins une fois et l’action devance la condition

NON

Boucle «Pour»

Boucle « Répéter»

Boucle « Tant que»

- 11 -