Sunteți pe pagina 1din 4

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

Corespunztor celor trei structuri repetitive Pentru, Ct_Timp i Repet, limbajul Pascal ofer trei instruciuni (care permit execuia repetat a unui grup de instruciuni) : For, While i Repeat.

6.1. Instruciunea For.

Aceast instruciune permite execuia repetat a unei instruciuni n funcie 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 avnd acelai tip ordinal (deci nu pot avea tipul real). Valorile vi i vf ale expresiilor <e1> i <e2> se calculeaz o singur dat la nceputul execuiei instruciunii For. Variabila contor <v> va lua valori ntre limitele vi i vf, cresctor dac n instruciune figureaz cuvntul To i descresctor dac n instruciune figureaz cuvntul DownTo. Semnificaia acestei instruciuni este dat prin urmtorul 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 Pn_Cnd c3 Sf_Dac

45

Condiiile c1, c2 i c3 i expresia e3 sunt definite n tabelul urmtor:

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

DownTo vi >= vf v > vf v <= vf Pred (v)

Contorul v poate fi folosit n instruciunea <ins> ,dar nu este permis modificarea valorii sale. Astfel, n mediul Turbo-Pascal nu se consider eroare modificarea variabilei contor, dar execuia unui astfel de program devine imprevizibil. Ca un prim exemplu de folosire al instruciunii For dm un program care tiprete toi divizorii proprii ai numrului 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. Instruciunea While.


Aceast instruciune are sintaxa While <cond> Do <ins> unde <cond> este o expresie logic, iar <ins> este o instruciune Pascal. Semnificaia instruciunii While este aceeai cu a propoziiei Pseudocod Ct_Timp <cond> Execut <ins> Sf_Ct_Timp Deci, execuia instruciunii While cere urmtoarele: 1. evaluarea expresiei logice <cond>; 2. dac valoarea expresiei este True ,atunci se execut instruciunea <ins> i se revine la pasul 1, altfel execuia se termin. Cu alte cuvinte, ea cere execuia repetat a unei instruciuni Pascal n funcie de valoarea de adevr a unei expresii logice. Dac iniial expresia logic este fals execuia instruciunii respective nu va avea loc niciodat. Programul urmtor 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. Instruciunea Repeat.


Aceast instruciune permite execuia repetat a unui grup de instruciuni. Ea are sintaxa Repeat <ins> { ; <ins> } Until <cond> unde <ins> este o instruciune Pascal, iar <cond> este o expresie logic. Instruciunea este echivalent cu propoziia Pseudocod Repet, deci semnificaia instruciunii este urmtoarea: 1. se execut instruciunile scrise ntre cuvintele Repeat i Until; 2. se evalueaz expresia logic <cond>. Dac valoarea expresiei este True atunci execuia se termin, altfel se revine la pasul 1. Ca exemplu de folosire al instruciunii Repeat vom scrie un program care determin cel mai mare numr n de patru cifre pentru care este ndeplinit condiia: 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 corespunztor 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:=n1; 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 } { Adaug Ultima cifra la Oglindit } Ogl :=Ogl*10+ Uc; 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

S-ar putea să vă placă și