Sunteți pe pagina 1din 4

6. Structuri repetitive în Pascal ( For, While, Repeat ).

Corespunz•tor celor trei structuri repetitive Pentru, Cât_Timp •i Repet•,


limbajul Pascal ofer• trei instruc•iuni (care permit execu•ia repetat• a unui grup
de instruc•iuni) : For, While •i Repeat.

6.1. Instruc•iunea For.

Aceast• instruc•iune permite execu•ia repetat• a unei instruc•iuni în


func•ie de valoarea unui contor. Ea are sintaxa

For <v> := <e1> To <e2> Do <ins>


sau
For <v> := <e1> DownTo <e2> Do <ins>

Aici <v> este un identificator de variabil• numit contor, iar <e1> •i <e2> sunt
expresii, toate trei având acela•i tip ordinal (deci nu pot avea tipul real). Valorile
vi •i vf ale expresiilor <e1> •i <e2> se calculeaz• o singur• dat• la începutul
execu•iei instruc•iunii For. Variabila contor <v> va lua valori între limitele vi •i
vf, cresc•tor dac• în instruc•iune figureaz• cuvântul To •i descresc•tor dac• în
instruc•iune figureaz• cuvântul DownTo. Semnifica•ia acestei instruc•iuni este
dat• prin urm•torul algoritm:

Calculeaz• valorile vi •i vf ale expresiilor e1, respectiv e2;


Dac• c1 Atunci
Fie v := vi;
Repet•
ins.
Dac• c2 Atunci v:=e3 Sf_Dac•
Pân•_Când c3
Sf_Dac•

45
Condi•iile c1, c2 •i c3 •i expresia e3 sunt definite în tabelul urm•tor:

To DownTo
c1 vi <= vf vi >= vf
c2 v < vf v > vf
c3 v >= vf v <= vf
e3 Succ (v) Pred (v)

Contorul v poate fi folosit în instruc•iunea <ins> ,dar nu este permis•


modificarea valorii sale.
Astfel, în mediul Turbo-Pascal nu se consider• eroare modificarea
variabilei contor, dar execu•ia unui astfel de program devine imprevizibil•.

Ca un prim exemplu de folosire al instruc•iunii For d•m un program care


tip•re•te to•i divizorii proprii ai num•rului natural n>2.

Program Divizori;
Var n, i : Integer;
Begin
Writeln(’Se tiparesc divizorii lui n’);
Write(’Dati n=’); Readln(n);
For i:=2 To n Div 2 Do
If n Mod i = 0 Then Writeln(i);
End.

46
6.2. Instruc•iunea While.

Aceast• instruc•iune are sintaxa

While <cond> Do <ins>

unde <cond> este o expresie logic•, iar <ins> este o instruc•iune Pascal.
Semnifica•ia instruc•iunii While este aceea•i cu a propozi•iei Pseudocod

Cât_Timp <cond> Execut• <ins> Sf_Cât_Timp

Deci, execu•ia instruc•iunii While cere urm•toarele:


1. evaluarea expresiei logice <cond>;
2. dac• valoarea expresiei este True ,atunci se execut• instruc•iunea <ins> •i
se revine la pasul 1, altfel execu•ia se termin•.
Cu alte cuvinte, ea cere execu•ia repetat• a unei instruc•iuni Pascal în func•ie de
valoarea de adev•r a unei expresii logice. Dac• ini•ial expresia logic• este fals•
execu•ia instruc•iunii respective nu va avea loc niciodat•.
Programul urm•tor determin• primele n (n dat de la tastatur•) numere
prime.

Program Prime_While; { Primele n numere Prime }


Var n, i, p, d : Integer;
Begin
Write (’ Dati n : ’); Readln(n); { primele n numere prime p =2,3,5, ... }
i:=0; p:=2; { i reprezinta al catelea numar prim a fost gasit }
While i<n Do Begin { se verifica daca p este prim doar daca i<n }
d:=2; { p este prim ? }
While (d<Sqrt(p)) And (p Mod d > 0) Do d:=d+1; {cauta pana la √ p}
If d>Sqrt(p) Then Begin i:=i+1; { p este prim ! }
Writeln (i:13,p:5) End;
If p=2 Then p:=p+1 Else p:=p+2 { verifica numerele impare 3,... }
End; Readln
End.

47
6.3. Instruc•iunea Repeat.

Aceast• instruc•iune permite execu•ia repetat• a unui grup de instruc•iuni.


Ea are sintaxa
Repeat <ins> { ; <ins> } Until <cond>

unde <ins> este o instruc•iune Pascal, iar <cond> este o expresie logic•.
Instruc•iunea este echivalent• cu propozi•ia Pseudocod Repet•, deci semnifica•ia
instruc•iunii este urm•toarea:
1. se execut• instruc•iunile scrise între cuvintele Repeat •i Until;
2. se evalueaz• expresia logic• <cond>. Dac• valoarea expresiei este True
atunci execu•ia se termin•, altfel se revine la pasul 1.

Ca exemplu de folosire al instruc•iunii Repeat vom scrie un program care


determin• cel mai mare num•r n de patru cifre pentru care este îndeplinit•
condi•ia:
Oglindit (n) + Suma_Cifrelor(n) = n + 99 ( Oglinditul lui 123 este 321). De
exemplu pentru n = 4014 egalitatea este adevarat• pentru c•
4104 + 9 = 4014 + 99 (4+0+1+4=9).
Programul corespunz•tor este:
Program Numar_Repeat; { Cel mai mare numar n de patru cifre : }
Var n, Ogl, Sc, { Ogl (n) + Sc (n) = n + 99 }
Cat, Uc : Integer; { Cat= n Div 10; Uc= n Mod 10 }
Begin n:=9999;
Repeat n:=n−1;
Cat:=n; Sc:=0; Ogl:=0; { Primul Cat este n }
Repeat
Uc :=Cat Mod 10 { Determin Ultima cifra a numarului }
Sc :=Sc + Uc; { Adun Ultima cifra la Suma cifrelor }
Ogl :=Ogl*10+ Uc; { Adaug Ultima cifra la Oglindit }
Cat :=Cat Div 10 { Sterg Ultima cifra din numar }
Until Cat=0;
Until (Ogl+Sc=n+99) Or (n=999);
If n>999 Then Write (Ogl,’+’,Sc,’=’,n,’+99’,’ (’,Ogl+Sc,’=’,n+99,’)’)
Else Write (’ Nu exista ! ’);
Readln
End.

48