Comparatie intre iteratiile WHILE-DO si REPEAT-UNTIL

Singura mare diferenta între iteratiile REPEAT-UNTIL si WHILE-DO este aceea ca, la REPEAT, corpul va fi întotdeauna executat cel putin o data, pe când corpul unei iteratii WHILE poate sa nu fie executat niciodata. Cauza acestei diferente este aceea ca, într-o iteratie WHILE, testul este la începutul corpului iteratiei, în timp ce la iteratia REPEAT-UNTIL, testul este la sfârsitul corpului iteratiei. Deci, iteratiile WHILE-DO sunt mai generale si totodata mai sigure.

Negarea conditiei. Legatura generala dintre conditia ce apare într-o structura WHILE si conditia ce apare într-o structura REPEAT-UNTIL este aceea ca una este negarea celeilalte. În continuare se prezinta comparativ conditiile din structurile REPEAT-UNTIL si WHILE-DO pentru programul de calcul al seriei Ulam.

REPEAT WHILE n<>1 DO
... ...
UNTIL n=1;  

Test.

Precizati rezultatele executiei urmatoarelor programe (Borland) PASCAL.

a)
PROGRAM a;
VAR
...x:integer;
BEGIN
...x:=0;
...REPEAT
......writeln (x);
......x:=x+1
...UNTIL x=5
END.{a}

 

b)
PROGRAM b;
VAR
...x:integer;
BEGIN
...x:=0;
...REPEAT
......x:=x+1;
......writeln(x)
...UNTIL x=5
END.{b}
c)
PROGRAM c;
VAR
...x:integer;
BEGIN
...x:=0;
...REPEAT
......x:=x+1;
......writeln(x)
...UNTIL x<=5
END.{c}
d)
PROGRAM d;
VAR
...x,y:integer;
BEGIN
...x:=0;
...y:=0;
...REPEAT
......x:=x+2;
......y:=y-2;
......writeln(x,' ',y)
...UNTIL y>5
END.{d}
e)
PROGRAM e;
VAR
...m,n:integer;
BEGIN
...m:=5;
...n:=9;
...REPEAT
......writeln(m,' ',n);
......m:=m+2; n:=n+1
...UNTIL m>n;
...writeln(m,' ',n)
END.{e}
f)
PROGRAM f;
VAR
...ch:char;
BEGIN
...ch:='A';
...REPEAT
......write(ch);
......ch:=succ(ch)
...UNTIL ch>'z';
...writeln
END.{f}

Aplicatii

PROGRAM test;
VAR
...val,s:real;
BEGIN;
...s:=0;
...writeln('Ultima valoare pe care o introduceti trebuie sa fie zero');
...writeln;
...REPEAT
......writeln;
......write('Introduceti un numar oarecare');readln(val);
......s:=s+val
...UNTIL val:=0;
...writeln;
...write(Suma:',s:6:2)
END.{test}

Problema. Scrieti un program (Borland) PASCAL care calculeaza radacina patrata dintr-un numar N, cu relatia:

x(n) = 1/2[x(n-1) + n/x(n-1)].

Comparati programul realizat de dumneavoastra cu cel prezentat în cele ce urmeaza.

PROGRAM radical;
VAR
...val,x:real;
BEGIN;
...write('Introduceti un numar pozitiv');
...readln(val);
...x:=1;
...REPEAT
......x:=0.5*(x+val/x)
...UNTIL abs(x*x-val)<1/100000;
...writeln;
...writeln('Radacina patrata din ',val:6:2,' este ',x:6:3)
END {radical}.