Construirea si utilizarea structurii de iteratie REPEAT-UNTIL

În privinta polivalentei, iteratiile REPEAT-UNTIL sunt aproape similare iteratiilor WHILE. Exista multe situatii în care cele doua structuri de iteratie "lucreaza" identic, alegerea uneia dintre structuri ramânând o problema personala, de preferinta. Exista însa si situatii în care numai una din aceste structuri trebuie folosita.

Priviti exemplul urmator. Analizati si rezultatele executiei programului. Ce observati ?

PROGRAM repeat_until;
VAR
...n,sum:integer;
BEGIN
...sum:=0;
...n:=0;
...repeat
......sum:=sum+5;
......n:=n+1;
......writeln(’Suma este ’,sum);
......writeln(n)
...until sum>12;
...writeln(’La revedere!’)
END {repeat_until}.

Rezultatele executiei programului

Suma este 5
1
Suma este 10
2
Suma este 15
3
La revedere!

Asemenea bucla este o structura de control care întâi executa (actioneaza) si dupa aceea pune întrebari (sum<12). Corpul buclei (enunturile dintre cuvintele cheie REPEAT-UNTIL) este executat pâna când o expresie booleana (sum<12) asociata devine true. Din moment ce testul de iesire din bucla este la sfârsitul buclei si nu la început, structura REPEAT este executata cel putin o data, spre deosebire de bucla WHILE care poate sa nu fie executata niciodata. Diagrama de sintaxa a structurii REPEAT-UNTIL este ilustrata mai jos.

Diagrama de sintaxa a structurii de iteratie REPEAT-UNTIL

Remarci:
  • Corpul iteratiei nu necesita prezenta delimitatorilor BEGIN si END, deoarece cuvintele cheie REPEAT si UNTIL marcheaza începutul si sfârsitul corpului iteratiei;
  • Nu este nevoie de ";" dupa enuntul cheie REPEAT si nici dupa enuntul care precede imediat cuvântul cheie UNTIL. Întreaga iteratie, însa, trebuie separata cu ";" de enuntul ce o urmeaza;
  • Corpul buclei poate fi o succesiune de enunturi de orice tip, incluzând si perechi REPEAT-UNTIL (nested) câte sunt necesare.

Bucla din exemplul urmator va determina ca procedura aga sa fie executata o data,

REPEAT aga UNTIL true

iar bucla urmatoare va determina ca procedura aga sa fie executata întotdeauna (sau cel putin cât o veti "lasa").

REPEAT aga UNTIL false

Observatie. Nici unui programator nu-i va place sa foloseasca un true sau false explicit, dar orice expresie booleana trebuie, în schimb evaluata la una din aceste valori. Astfel, daca o bucla WHILE sau REPEAT se executa o data sau tot timpul, în loc sa se execute de un numar de ori urmarit, prevazut, locul unde trebuie sa privim este expresia booleana care controleaza bucla.

Remarca. Reluam observatia facuta la ciclul WHILE în privinta mecanismelor break si continue; break determina parasirea neconditionata a ciclului, iar continue impune reluarea sa. Ambele pot fi folosite si într-un ciclu REPEAT-UNTIL.