Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Structura repetitiva

fox pro



+ Font mai mare | - Font mai mic



Structura repetitiva

a) 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]

[LOOP]

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

? 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 LOOP si ENDFOR ), incrementarea sau decrementarea contorului si trecerea la o noua executare a grupului de instructiuni, daca se respecta conditia de ramanerein bucla.

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

LOOP

ENDIF

Suma=suma+1

ENDFOR

Primul program din acest exemplu functioneaza astfel: se executa comanada suma=suma+1 de 5 ori, pentru i=1,2,3,4 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,7,8,9 si 10, se va executa comanda LOOP care determina ignorarea comenzilor urmatoare din bucla, deci a comenzii suma=suma+1.Se va iesi din buclain mod normal, cand i=11.

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>

[ LOOP ] [ EXIT ]

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>

[ LOOP ]

{ 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.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1164
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved