Foxpro
Structura repetitivaa) Structura clclica aceasta foloseste un contor de ciclu care va determina numarul de repetari al executarii actiunilor din cadrul corpului ciclului ( grup de actiuni care se pot repeta de mai multe ori).
Unde: c –contor de ciclu inc – expresie sf – expresie Instructiunea FOR In unele situatii trebuie ca un grup de instructiuni sa fie repetat de un anumit numar de ori bine precizat si dinainte cunoscut. In aceasta situatie se utilizeaza instructiunea FOR. Sintaxa instructiunii este: a) Instructiunea FOR pentru valori crescatoare ale variabilei contor: FOR <var> = <expN1> TO <expN2> [ STEP <expN3>] <instructiuni> [EXIT] [ ENDFOR La utilizarea instructiunii FOR trebuie sa se tina seama de urmatoarele observatii: Nu este indicat modificarea variabilei contor in cadrul ciclului. La iesirea din ciclu, variabila contor va avea valoarea sfarsit ( in cazul in care iesirea din ciclu s-a facut in pasul normal). Iesirea fortata din ciclul FOR se poate realiza cu instructiunea EXIT (prezenta in corpul ciclului ). In acest caz, contorul va avea valoarea cu care a fost surprins de instructiunea EXIT. Daca inceput > sfarsit ( sau sfarsit < inceput ) este fals, se executa instructiunea imediat urmatoare dupa FOR. Instructiunea FOR functioneaza dupa urmatorul algoritm: Valoarea initiala a variabilei contor va fi data de evaluarea expresiei <expN1>. Dupa fiecare executie a grupului de instructiuni <instrucsiuni> variabila va fi incrementata sau decrementata cu o valoare constanta, data de evaluarea expresiei <expN3>, daca este prezenta clauza STEP, sau 1 cand STEP lipseste (absenta clauzei STEP este echivalenta cu constructia STEP 1 ) Cand valoarea variabilei <var> creste peste valoarea expresiei <expN2> ( strict mai mare), in cazul unei valori pozitive a lui <expN3>, sau scade sub valoarea expresiei <expN2>, pentru o valoare negativa a expresiei <expN3>, se va iesi din bucla, programul continuand cu urmatoarea comanda de dupa ENDFOR. Exemplu: comanda FOR i = 1 TO 4 ? i ENDFOR
Este echivalenta cu grupul de comenzi: ? 1 ? 2 ? 3 ? 4 In exemplul de mai sus i este variabila contor, 1 este valoarea initiala a variabilei, iar 4 este valoarea finala a acesteia. La fiecare executie a lui ENDFOR variabila i va fi incrementata cu 1. La ultima executie a comenzii ? i valoarea lui i va fi 4. executia lui ENDFOR are ca efect cresterea lui i cu 1, deci valoarea lui i va fi 5, dupa care depaseste valoarea finala 4. programul va continua cu prima instructiune de dupa ENDFOR. Comanda: FOR i=4 to 1 STEP -2 ? i ENDFOR Este echivalenta cu : ? 4 ? 2 Atentie! : cele trei expresii numerice, <expN1>, <expN2>, <expN3> sunt evaluate doar la intrarea in bucla FOR, modificarea acestora in cadrul buclei neavand nici un efect asupra numarului de executari ale instructiunilor. Exemplu: a=3 FOR i=1 TO a a=10 ? i*2 ENDFOR In acest exemplu comenzile a=10 si ? i*2 vorfi executate de 3 ori ( i va lua pe rand valorile 1, 2 si 3), chiar daca la prima executie a acestora o noua eveluare a lui <expN2> ar duce la o noua valoare finala a contorului ( aceasta evaluare nu mai are loc). In schimb modificarea valorii contoruluiin interiorul buclei va inflyenta numarul de executii ale grupului de instructiuni, testarea valorii contor facandu-se la fiecare noua executie a <instructiuni>. Exemplu: FOR i = 1 TO 10 ?i i = 15 ENDFOR Comanda ? i va fi executata o singura data ( pentru i = 1 ), dupa care datorita valorii 15 a contorului, care depaseste valoarea finala 10, se va iesi din bucla continuandu-se cu prima instructiune de dupa ENDFOR. Doua comenzi speciale pot fi folositein interiorul buclei FOR . .. ENDFOR: EXIT determina iesirea fortata din bucla ;i continuarea executiei programului cu prima comanda care urmeaza dupa ENDFOR, indiferent de valoarea variabilei contor; LOOP care determina saltul peste
urmatoarele instructiuni ale buclei ( dintre Exeplme: Suma=0 FOR i=1 To 10 Suma=suma+1 IF i=5 EXIT ENDIF ENDFOR Urmatorul program este identic ca rezultat, cu cel precedent: Suma=0 FOR i=0 TO 10 IF i>5 ENDIF Suma=suma+1 ENDFOR Primul program din acest exemplu functioneaza astfel: se executa comanada suma=suma+1 de 5 ori, pentru i=1 si 5.La i=5 este respectata conditia comenzii IF si deci fa executata comanda EXIT caredetermina saltul la ultima instructiunea programului. Cel de-al 2 lea program din exemplul
are urmatoarea functionare: se executa comanada suma=suma+1 de 5 ori, pentru
i=1,2,3,4 si 5, atata timp cat nu este respectata conditia comenzii IF.
Candaceasta conditie devine adevarata, pentru i=6
si 10, se va executa comanda Un tip special de bucla, foarte asemanatoare cu FOR . . . .ENDFOR, dar specialiazatain lucrul pe o baza de date, este reprezentata de comanada SCAN . . .ENDSCAN, cu sintaxa de forma: SCAN [ NOOPTIMIZE [ <domeniu> ] [ FOR <exoL1> ] [ WHILE <expL2> ] <instructiuni> [ ENDSCAN Aceasta comanda realizeaza parcurgerea bazei de date curente si executarea grupului de unstructiuni <instructiuni>,pentru fiecare inregistrare care aparatine domeniului specificat prin <domeniu>, FOR sau WHILE. Clauzele LOOP si Exit au acelasi efect cain cazul comenzi FOR . . ENDFOR, iar clauza NOOPTIMIZE inhiba optimizarea RUSHMORE. Exemplu: avem urmatoarele 4 echivalente: SCAN 2. FOR I=1 TO RECCOUNT ( ) <instructiuni> GOTO i ENDSCAN <instructiuni> ENDFOR SCAN; NEXT 10 FOR MOD(RECNO( ),2)=0 <instructiuni> ENDSCAN FOR i= RECNO ( ) TO RECNO ( ) +9 IF MOD(RECNO( ),2)=0 <instructiuni> ENDIF ENDFOR Cel de-al doilea tip de bucla, cu numar nedefinit de pasi, este implementat in FoxPro prin comanda DO WHILE . . ENDDO, avand sintaxa: DO WHILE <expL> <instructiuni> [ { EXIT ] ENDDO Aceasta comanda determina executia repetata a grupului de instrctiuni <instructiuni>, atata timp cat valoarea expresiei logice <expl> este adevarata . Executia comenzii se va desfasura astfel:se evalueaza expresia <expl > si, daca acesta are valoarea .F. , executia comenzii se incheie. Daca valoarea acesteia este .T. se vor executa instructiunile din <instructiuni>. La intalnirea lui ENDDO se sare la linia continand DO WHILE si expresia <expL> este reevaluata. Acest ciclu se continua pana cand o evaluare a expresiei logice <expL> va conduce la valoarea .F., cand executia comenzii DO WHILW . . ENDDO se incheie, programul continuand cu prima instructiune de dupa ENDDO. Comenzile LOOP si EXIT au aceeasi semnificatie ca si la comanda FOR, prima determinand ignorarea restului de comenzi si reevaluarea lui <expL>, iar cea de-a doua determinand iesirea fortata din bucla, indiferent de valoarea expresiei logice <expL>. Exemplu: Suma=0 P=1 DO WHILE suma < 100 suma= suma + p p= p+ 1 ENDDO suma= suma + p a= p- 1 ? ‘ S-au adunat primele ‘ , a , ‘ numere naturale’ ? ‘ obtinandu-se suma de ‘, suma acest program calculeaza suma a p numere naturale, p fiind numarul maxim de asemenea numere astfel incat suma lor sa nu depasesca 100.
|