• Aucun résultat trouvé

Les structures de contrôle itératives

N/A
N/A
Protected

Academic year: 2022

Partager "Les structures de contrôle itératives"

Copied!
7
0
0

Texte intégral

(1)

Les structures de contrôle itératives

I. INTRODUCTION

Le traitement conditionnel, combinant test et séquence, permet d’exécuter chaque action 0 ou 1 fois. Nous aurons parfois besoin d’exécuter une séquence d’actions, plusieurs fois. Le nombre de fois peut être quelconque. C’est l’objet des structures répétitives ou itératives ou boucles.

II. LA STRUCTURE ITERATIVE COMPLETE (La boucle Pour)

1. N

OTATION

Notation au niveau de l’analyse et

en algorithmique Notation en Turbo Pascal [Init]

Pour Compteur De Vi À Vf Répéter Inst1

Inst2

……

Inst n FinPour

[Init] ;

For Compteur := Vi To Vf Do Begin

Inst1 ; Inst2 ;

…… ; Inst n ; End ;

2. R

EMARQUES RELATIVES À LA STRUCTURE

P

OUR

 La boucle POUR est considérée comme une structure répétitive complète car le nombre d’itérations est connu au préalable. En effet on dispose de :

 (Vf – Vi+1) itérations dans le cas où le compteur est du type entier.

 (Ord (Vf) – Ord (Vi) + 1) itérations dans le cas où le compteur est du type caractère.

 La partie INIT contient les éventuelles initialisations des variables qui seront mises à jour au niveau du traitement répétitif.

 Le compteur doit être de type scalaire simple.

 Vi et Vf sont respectivement la valeur initiale et la valeur finale du compteur.

 L'avancement du compteur est automatique.

 Il se fait par un pas = 1 (Pour Compteur De Vi À Vf Répéter) ; avec Vi ≤ Vf

 Il se fait par un pas = -1 (Pour Compteur De Vf A Vi Répéter) ; avec Vi ≤ Vf

 Lorsque le pas = -1; la notation en Turbo Pascal change : For Compteur := Vf Downto Vi Do

 Le traitement répétitif de la boucle Pour peut s'exécuter n fois (n≥1).

(2)

 Lorsque le traitement répétitif est composé de plus qu'une instruction, les expressions Begin et End sont nécessaires.

3. L

A NOTION DE TRACE D

EXÉCUTION

La notion de trace d'exécution permet de bien comprendre la notion de boucle (itérations).

Exemple :

4. A

PPLICATION

Soit à afficher la moyenne arithmétique ma d’une classe de n élèves dont les moyennes me sont saisies au clavier.

a. Pré analyse

Il s’agit d’afficher la moyenne arithmétique d’une classe de n élèves. Cette moyenne est égale au total des moyennes générales divisé par le nombre des élèves n. Ce total est obtenu ainsi :

 initialiser le total à 0

 pour chaque élève, il s’agit de saisir sa moyenne et mettre à jour le total.

 Le nombre des élèves n est une donnée.

b. Analyse

Résultat = Ecrire (Moyenne) Moyenne  Total / n

Total = [Total  0 ]

Pour i de 1 à n répéter

Ecrire (" Introduire une moyenne ") ME = Donnée (" ME",i, "= ") Total  Total + ME

FinPour

n = Donnée("Donner le nombre d’élève")

c. Algorithme

0- Début Calcul_moy

1- Ecrire (" Introduire le nombre des élèves : "), Lire (n) T  0

Pour i de 1 à n répéter Prenons la structure Pour suivante

S 0

Pour i De 1 A 5 Répéter S - S + 2 * i

FinPour

La trace d’exécution sera la suivante : Etat initial: S = 0

N° de l’itération 1 2 3 4 5

Valeur de i 1 2 3 4 5

Valeur de S 2 6 12 20 30 On quitte la boucle Pour avec i = 5 et S = 30

(3)

Ecrire (" Introduire une moyenne : ") Lire (ME) T  T + ME

FinPour 2- M  T / n 3- Ecrire (M) 4- Fin Calcul_moy

Tableau de déclaration des objets

Objet Code Type/Nature Rôle

ME n

i Total Moyenne

ME n

i T M

Réel Entier Entier Réel Réel

Saisie de la moyenne d’u élève Saisie du nombre des élèves Compteur

Calcul du total des moyennes Calcul de la moyenne arithmétique

d. Traduction en Pascal

Program Calcul_moyenne ; Uses wincrt ;

Var me,Total, Moyenne :real ; n,i:integer;

Begin

Writeln(‘introduire le nombre d’’eleves : ’) ; Readln(n) ;

Total :=0 ;

For i := 1to n do begin

Writeln(‘introduire une moyenne’);

Readln (me);

Total :=Total+me ; End ;

Moyenne :=Total/n ;

Writeln(‘la moyenne de la classe est : ‘,Moyenne) ; End.

III. LA STRUCTURE ITERATIVE A CONDITION D’ARRET (La boucle Répéter)

1. N

OTATION

Notation au niveau de la grille et en algorithmique

Notation en Turbo Pascal [Init]

Répéter Inst1 Inst2 …..

Instn Jusqu’à condition

[Init] ; Repeat

Inst1 ; Inst2 ; ….. ; Instn ; Until condition ;

(4)

2. R

EMARQUES RELATIVES A LA STRUCTURE REPETER

 S'il y a un éventuel compteur, il faut l'initialiser avant la boucle ; de même on doit assurer son avancement au sein de la boucle.

 Le traitement répétitif de la boucle Répéter peut s'exécuter 1 ou n fois (n ≥ 2).

 La condition à vérifier à chaque fois est considérée comme une condition de sortie car elle nous permet de quitter la boucle.

 Même si le traitement répétitif est composé de plusieurs instructions, on n'a jamais besoin des expressions Begin et End.

 La boucle répéter est utilisée entre autres dans le contrôle des données saisies.

3. A

PPLICATION

Soit à saisir une suite de réels et d’afficher la partie entière de chaque nombre.

Remarque : On suppose que la suite contient au moins un élément.

a. Analyse

Résultat = Affichage Affichage = [ ] Répéter

Elément = Donnée ("Introduire un réel ")

Ecrire ("La partie entière de",Elément,"est:",INT(Elément)) Répéter

Réponse = Donnée (" Y a t il un autre réel à saisir ? ") Jusqu’à ( Majus ( réponse ) Dans ["O","N"] )

Jusqu’à ( Majus ( réponse ) = " N" ) Remarque :

Pour éviter d’écrire Jusqu’à (réponse Dans ["o","O","n","N"]), on utilise la fonction Majus qui transforme un caractère en un caractère majuscule si c’est possible.

b. Algorithme

0- Début Partie_entière 1- Répéter

Ecrire (" Introduire un réel : "), Lire (E)

Ecrire (" La partie entière de ", E , " est : ",INT(E) ) Répéter

Ecrire ("Y a t il un autre réel à saisir ? "),Lire(R) Jusqu’à ( Majus ( R ) Dans ["O","N"] )

Jusqu’à ( Majus ( R ) = " N " ) 2- Fin Partie_entière

Tableau de déclaration des objets

Objet Code Type/Nature Rôle

Elément Réponse

E R

Réel Caractère

Saisie d’un réel

Saisie de la réponse ( O pour oui et N pour non )

(5)

c. Traduction en Pascal

Program Partie_entiere ; Uses wincrt ;

Var e :real ; r :char ; begin

Repeat

Writeln(‘introduire un reel: ‘); readln (e);

Writeln (‘la partie entiere de ‘,e,’est’,int(e));

Repeat

Writeln(‘y a-t-il un autre reel a saisir ? ‘) ; readln(r) ; Until (upcase(r) in [‘O’,’N’]);

Until (upcase(r) =’N’); //Fin de la saisie//

End.

IV. LA STRUCTURE ITERATIVE A CONDITION D’ARRET ( La boucle Tant que )

1. N

OTATION

Notation au niveau de la grille et en algorithmique

Notation en Turbo Pascal Init

Tant que condition Faire Inst1

Inst2

…..

Instn Fin Tant que

Init ;

While condition Do Begin

Inst1 ; Inst2 ;

….. ; Instn ;

End ;

2. R

EMARQUES RELATIVES A LA STRUCTURE

T

ANT QUE

 S'il y a un éventuel compteur, il faut l'initialiser avant la boucle; de même on doit assurer son avancement au sein de la boucle.

 Le traitement répétitif de la boucle Tant que peut s'exécuter 0 ou n fois ( n > l ). 0 fois, lorsque dés le début, la condition n'est pas vérifiée.

 La condition à vérifier à chaque fois est considérée comme une condition d'entrée car elle nous permet d'accéder au corps de la boucle.

 Si le traitement répétitif est composé de plusieurs instructions, on doit utiliser les expressions Begin et End.

3. A

PPLICATION

Soit à saisir une suite de réels et d'afficher la partie entière de chaque nombre.

Remarque : On suppose que la suite peut être vide.

(6)

a. analyse

Résultat = Affichage

Affichage = [ ] Tant Que Majus (réponse)= "O" Faire Ecrire("Introduire un réel :")

Elément = Donnée

Ecrire("La partie entière de",élément, "est: ",INT(élément) ) Répéter

Ecrire("Y a t il un autre réel à saisir ? (O/N) ") Réponse = Donnée

Jusqu’à (Majus (réponse) Dans ["O", "N"]

Fin Tant Que Réponse = [ ] Répéter

Ecrire("Y a t il un autre réel à saisir ? (O/N) ") Réponse = Donnée

Jusqu'à (Majus(réponse) Dans ["O","N"] )

b. Algorithme

0- Début Composante_entière 1- Répéter

Ecrire("Y a t il un autre réel à saisir ? (O/N) ") Lire ( R )

Jusqu'à ( Majus( R ) Dans ["O","N"] ) 2- Tant Que Majus ( R ) = "O" Faire

Ecrire("Introduire un réel :") , LIRE ( E )

Ecrire("La partie entière de", E , "est: ",INT( E ) ) Répéter

Ecrire("Y a t il un autre réel à saisir ? (O/N) ") Lire ( R )

Jusqu’à ( Majus ( R ) Dans ["O", "N"] ) Fin Tant Que

3- Fin Composante_entière Tableau de déclaration des objets

Objet Code Type/Nature Rôle

Elément

Réponse E

R Réel

Caractère Saisie d’un réel

Saisie de la réponse ( O pour oui et N pour non )

c. Traduction en Pascal

Program Partie_entiere ; Uses wincrt ;

Var e :real ; r :char ; begin

Repeat

Writeln(‘y a-t-il un autre reel a saisir (O/N) ? ‘) ; readln(r) ;

Until (upcase(r) in [‘O’,’N’]);

While upcase(r) =’O’ do begin

Writeln(‘introduire un reel: ‘); readln (e);

Writeln (‘la partie entiere de ‘,e,’est’,int(e));

(7)

Repeat

Writeln(‘y a-t-il un autre reel a saisir (O/N) ? ‘) ; readln(r) ; Until (upcase(r) in [‘O’,’N’]);

End;

Writeln(‘ **** Fin de la saisie ******’);

End.

Exercice 5 page 141 ; program mots;

uses wincrt;

var ch:string;

i,c:integer;

begin repeat

writeln('Donner une chaine');

readln(ch);

until length(ch)<50;

c:=1;

for i:=1 to length(ch) do if ch[i]=' ' then

begin repeat i:=i+1;

until ch[i]<>' ';

c:=c+1;

end;

writeln('La chaine cotient ',c, ' mots');

end.

Exercice 4 page 141 ; uses wincrt;

var ch:string;

i,c:integer;

trouve:boolean;

begin repeat

writeln('Donner une chaine');

readln(ch);

until length(ch)<50;

i:=1;

repeat

if ch[i]=ch[i+1] then begin

writeln(ch[i]);

trouve:=true ; end

else i:=i+1;

until (trouve) or (i>length(ch));;

(8)

end.

Références

Documents relatifs

Une condition nécessaire et suffisante pour qu’il existe un triangle admettant pour longueurs de côtés trois réels strictement positifs donnés est que le plus grand des trois

Rappelons les résultats significatifs de l’évaluation nationale réalisée à l’entrée en 6 e : 20 % des enfants accèdent à ce que l’on appelle la lecture

Aussi, une fonction Python récursive terminale étant souvent plus complexe, sera en général plus lente qu’une implémentation non récursive terminale.. Dans d’autres langages,

4. Je me suis demandé, ensuite, si l'on pouvait étendre les caractérisations B et C aux anneaux et demi-groupes non commutatifs « intégralement clos », c'est-à-dire aux «

La structure itérative complète Les structures itératives à condition d’arrêt Prb Afficher 10 fois le mot « bonjour »..

Faire l'analyse d'un programme qui permet de calculer la paye hebdomadaire d'un ouvrier. • La solution doit nous permettre

La condition à vérifier à chaque fois est considérée comme une condition de sortie car elle nous permet de quitter la boucle. Même si le traitement répétitif est composé

 La condition à vérifier à chaque fois est considérée comme une condition d'entrée car elle nous permet d'accéder au corps de la boucle.  Lorsque le traitement répétitif