Scrigroup - Documente si articole

     

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


PROGRAMAREA STRUCTURATA

fox pro



+ Font mai mare | - Font mai mic



PROGRAMAREA STRUCTURATA

In FOXPRO au fost implementate principalele comenzi si functii ale programarii structurate, care permit :

executarea unui grup de instructiuni de mai multe ori ;



executarea conditionata a unor instructiuni in functie de rezultatul evaluarii unei expresii logice.

Primul tip de comenzi, care determina executarea repetata a uneia sau mai multor instructiuni, alcatuiesc asa numitele "bucle" si este reprezentat de comenzile : FORENDFOR, DO WHILEENDDO si SCANENDSCAN. Al doilea tip, conditionind executarea unor instructiuni de rezultatele evaluarii unor expresii logice, este reprezentat de instructiunile conditionale, de decizie, avind in componenta : IFENDIF, IIF (),    DO CASEENDCASE. Comanda IFENDIF are doua forme, care vor permite :

- executarea unor instructiuni numai daca este respectata o conditie data ;

- executarea fie a unui grup de instructiuni, fie a altui grup de instructiuni, in functie de rezultatul evaluarii unei expresii logice.

Comanda are urmatoarea sintaxa :

IF <expL>

<instructiuni 1>

[ELSE]

<instructiuni 2>

ENDIF

La inceputul executiei comenzii se va evalua expresia logica <expL> si in functie de rezultatul evaluarii, vom avea :

- daca <expL> este.T. se va executa grupul de instructiuni <instructiuni 1>, dupa care executia comenzii se va termina.

- in cazul valorii.F. a expresiei logice apar doua cazuri : daca exista clauza ELSE in comanda, se vor executa instructiunile din grupul <instructiuni 2> dupa care executia se termina ; in absenta clauzei ELSE nu se executa nici o instructiune, comanda terminindu-se imediat.

Exemplul

SET TALK OFF

CLEAR

a=0

b=0

4,10 SAY ' Primul numar' GET a PICTURE '9999'

5,10 SAY ' Al doilea numar' GET b PICTURE '9999'

READ

IF a>b

? 'Primul numar este mai mare'

ELSE

? ' Al doilea numar este mai mare sau numerele sunt egale'

ENDIF

IF b>0

?',a,':',b,'=',a/b

ENDIF

Un efect asemanator, de selectie dintre doua variante se obtine prin functia IIF(), avind sintaxa:

IIF (<expL>, <expr1>, <expr2>)

Aceasta functie evalueaza expresia logica <expL> si in functie de rezultatul obtinut, returneaza valoarea uneia din expresiile <expr1> si <expr2> :

- returneaza valoarea obtinuta prin evaluarea expresiei <expr1> daca <expL> este evaluata la.T.

- returneaza rezultatul evaluarii expresiei <expr2> cind <expL> se evalueaza la.F.

Cele doua expresii, <expr1>, <expr2> nu trebuie neaparat sa aiba acelasi tip, acestea putind fi de tip sir de caractere, data calendaristica,logic sau numeric.

Exemplul

SET TALK OFF
CLEAR
a=0

b=0

4,10 SAY 'Primul numar ' GET a PICTURE '9999'

5,10 SAY ' Al doilea numar ' GET b PICTURE '9999'

READ

sir1 = 'Primul numar este mai mare'

sir2 = 'Al doilea numar este mai mare sau numerele sint egale'

? IIF (a>b,sir1,sir2)

Mai multe comenzi IF..ENDIF pot fi imbricate, incluse una in alta,obtinindu-se conditionarea unui grup de instructiuni prin mai multe expresii logice, sau obtinindu-se selectii diverse intre mai multe grupuri de instructiuni.

Exemplul

SET TALK OFF

CLEAR
a=0

b=0

4,10 SAY 'Primul numar ' GET a PICTURE '9999'

5,10 SAY ' Al doilea numar ' GET b PICTURE '9999'

READ

sir1 = 'Primul numar este mai mare'

sir2 = 'Al doilea numar este mai mare sau numerele sint egale'

sir3 = 'Numerele sint egale'

IF a>b

sir1 &&In acest exemplu structura de comenzi IFENDIF poate fi inlocuita cu:

&& ?IIF(a>b,sir1,IIF(a<b,sir2,sir3))

ELSE

IF a<b

? sir2

ELSE

? sir3

ENDIF

ENDIF

Un tip de selectie intre mai multe grupuri de instructiuni este dat de comanda DO CASE. ENDCASE avind sintaxa:

DO CASE

CASE <expL1>

<instructiuni1>

CASE <expL2>

<instructiuni2>

.

CASE <expLN>

<instructiuniN>

OTHERWISE

<instructiuni>

ENDCASE

Comanda va determina executia grupului de instructiuni pentru care expresia logica corespunzatoare are valoarea.T.

Observatie: Numai unul dintre grupurile de instructiuni <instructiuni1>, <instructiuniN> si <instructiuni> va fi executat.

Executarea repetata a unui grup de instructiuni reprezinta unul dintre principalele avantaje ale elaborarii de programe. Comenzile care realizeaza "bucle" sint FOR ENDFOR, DO WHILE ENDDO si SCAN ENDSAN, acestea impartindu-se,la rindul lor in doua grupe :

comenzi pentru bucle cu un numar dat de pasi, in care un grup de instructiuni se executa de un numar dat de ori : FOR, SCAN ;

comenzi folosite pentru bucle cu un numar nedefinit de pasi    in care numarul de executari a grupului de instructiuni este variabil, fiind dependent de o conditie asociata comenzii : DO WHILE.

Comanda FORENDFOR cu sintaxa:

FOR <var> = <expN1> TO <expN2>[STEP<expN3>

<instructiuni>

EXIT

[LOOP

ENDFOR | NEXT

determina executarea repetata a grupului de instructiuni <instructiuni>, contorizarea acestor pasi fiind facuta printr-o variabila <var>. Valoarea initiala a variabilei contor va fi data de evaluarea expresiei <expN1>. Dupa fiecare executie a grupului de instructiuni <instructiuni> variabila va fi incrementata sau decrementata, cu o valoare constanta, data de evaluarea expresiei <expN3>,daca este prezenta clauza STEP, sau 1 cind STEP lipseste (absenta clauzei STEP este echivalenta cu constructia STEP 1). Deci la prima executie a grupului de instructiuni, <var> va avea valoarea <expN1>, la a doua executie <expN1> + <expN3>, la a treia executie <expN1>    +<expN2> + <expN3> si asa mai departe.Cind 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>(strict mai mica) pentru o valoare negativa a expresiei <expN3>, se va iesi din bucla, programul continuind cu urmatoarea comanda dupa ENDFOR.

Exemplul

FOR i=1 TO 4

ENDFOR   

este echivalenta cu grupul de comenzi:

comanda     FOR i=4 TO 1 STEP -2

ENDFOR este echivalenta cu grupul:

Observatie. Cele 3 expresii numerice,<expN1>, <expN2> si <expN3> sint evaluate doar la intrarea in bucla FOR, modificarea acestora in cadrul buclei neavind nici un efect asupra numarului de executari ale instructiunilor.

Exemplul

a=3

FOR i=1 TO a    &&i va lua valorile 1,2,3

a=10

? i*2

ENDFOR

In schimb modificarea valorii contorului in interiorul buclei va influenta numarul de executii a grupului de instructiuni, testarea variabilei contor facindu-se la fiecare noua executie a <instructiuni>.

Exemplul

FOR i=1 TO 10

?i

i=15

ENDFOR

Comanda ?i va fi executata o singura data.

Clauza EXIT determina iesirea fortata din bucla si continuarea executiei programului cu prima comanda care urmeaza dupa ENDFOR, indiferent de valoarea variabilei contor. Clauza LOOP 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 raminere in bucla.

Exemplul

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=1 TO 10

IF i=5

LOOP

ENDIF

suma=suma+1

ENDFOR

ENDFOR poate fi inlocuit cu NEXT, cu aceeasi semnificatie. Un tip special de bucla, foarte asemanatoare cu FOR ENDFOR dar specializata in lucrul pe o baza de date este reprezentata de comanda SCAN ENDSCAN cu sintaxa :

SCAN [NOOPTIMIZE]

[<domeniu>][FOR<expL1>][WHILE<expL2>]

[LOOP]

[EXIT]

ENDSCAN

Aceasta comanda realizeaza parcurgerea bazei de date curente si executarea grupului de instructiuni <instructiuni> pentru fiecare inregistrare care apartine domeniului specificat prin <domeniu>, FOR sau WHILE. Clauzele LOOP si EXIT au acelasi efect ca in cazul comenzii FOR ENDFOR.

Exemplul

SCAN <instructiuni>

ENDSCAN

are acelasi    efect cu

FOR i=1 TO RECCOUNT()

GOTO i

<instructiuni>

ENDFOR

SCAN    NEXT 10 FOR MOD(RECNO(),2)=0

<instructiuni>

ENDSCAN

este echivalent cu:

FOR i=RECNO() TO RECNO()+9

IF MOD(RECNO(),2)=0

<instructiuni>

ENDIF

ENDFOR

Expresia MOD(RECNO(),2)=0 are valoarea.T. daca inregistrarea curenta are un numar par si valoarea.F. in caz contrar.

Cel    de-al doilea tip de bucla,cu numar nedefinit de pasi este implementat prin DO WHILE ENDDO cu sintaxa:

DO WHILE <expL>

<instructiuni>

[LOOP]

[EXIT]

ENDDO

Executia comenzii se va desfasura astfel: se evalueaza expresia <expL> si daca aceasta are valoarea.F. executia comenzii se incheie. Daca valoarea acesteia este.T. se vor executa instructiunile din <instructiuni>. La intilnirea lui ENDDO se sare la linia continind DO WHILE si expresia <expL> este reevaluata. Acest ciclu se continua pina cind o evaluarea a expresiei logice <expL> va conduce la valoarea.F. cind executia comenzii DO WHILE ENDDO se incheie, programul continuind cu prima instructiune de dupa ENDDO. Comenzile LOOP si EXIT au aceeasi semnificatie ca si la comanda FOR

Exemplul

suma=0

p=1

DO WHILE suma > 100

suma = suma+p

p=p+1

ENDDO

SET SAFETY ON | OFF

-vom fi (ON) sau nu (OFF) avertizati inainte de stergerea fisierului sau de o eventuala scriere peste continutul unui fisier existent pe disc.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 909
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