CATEGORII DOCUMENTE |
Pentru a rezolva probleme mai complexe, executia secventiala a instructiunilor nu este intotdeauna solutia optima. Sunt necesare anumite comenzi pentru a schimba ordinea de executie a instructiunilor. In acest scop, FOXPRO contine functiile si comenzile de baza de programare structurata, care permit:
Executarea repetata a unui grup de instructiuni: FOR.ENDFOR, DO WHILE.ENDDO, SCAN.ENDSCAN;
Executarea unor instructiuni conditionata de rezultatul evaluarii unei expresii logice: IF.ENDIF, IIF ( ), DO CASE.ENDCASE.
IF.ENDIF
sintaxa: IF <expL>
<secventa 1 de instructiuni>
[ELSE]
<secventa 2 de instructiuni>
ENDIF
efect: Inainte de a incepe executarea comenzilor, se evalueaza expresia logica <expL>. Daca <expL> este adevarata (.T.), se va executa <secventa 1 de instructiuni>; daca <expL> este falsa (.F.), avem doua posibilitati:
Daca clauza ELSE este prezenta in comanda, se va executa <secventa 2 de instructiuni> si comanda se incheie;
Daca clauza ELSE este absenta, nu se executa nimic si comanda se incheie.
Se poate lucra cu decizii multiple, folosind o combinatie de comenzi IF.ENDIF imbricate (incluse unele in altele).
IIF ( )
sintaxa: IIF ( <expL>, <expr1>, <expr2>)
efect: Aceasta functie evalueaza expresia logica <expL> si, in functie de rezultatul evaluarii, returneaza: valoarea expresiei <expr1>, daca <expL> este adevarata (.T.), si valoarea expresiei <expr2>, daca <expL> este falsa (.F.). Expresiile <expr1> si <expr2> pot fi de tipuri diferite (Character, Date, Logical sau Numeric).
DO CASE.ENDCASE
Unele programe trebuie sa decida intre mai multe posibilitati (si nu numai doua, asa cum permite instructiunea IF.ENDIF; solutia in astfel de situatii este data de comanda DO CASE.ENDCASE.
sintaxa: DO CASE
CASE <expL1>
<secventa 1 de instructiuni>
[ CASE <expL2>
<secventa 2 de instructiuni>
.
CASE <expLn>
<secventa n de instructiuni>]
[ OTHERWISE
<secventa (n+1) de instructiuni>]
ENDCASE
efect: Comanda declanseaza executarea secventei de instructiuni corespunzatoare expresiei logice care este evaluata ca fiind adevarata (.T.). Executia comenzii are loc in modul urmator: este evaluata prima expresie logica, <expL1>; daca valoarea obtinuta este .T., se executa <secventa 1 de instructiuni>; altfel, urmatoarea expresie logica este evaluata. Dupa identificarea primei expresii logice adevarate si executarea secventei de instructiuni corespunzatoare, comanda se incheie, iar programul continua cu prima instructiune de dupa ENDCASE.
Daca toate expresiile <expL1>, <expL2>, . <expLn> sunt false, avem doua posibilitati: atunci cand clauza OTHERWISE este prezenta, se executa secventa corespunzatoare de instructiuni, <secventa (n+1) de instructiuni> si se trece la prima comanda de dupa ENDCASE; atunci cand clauza OTHERWISE este absenta, executia comenzii se incheie.
Exemplu: Dorim sa cream un program cu cateva optiuni posibile (legate de operatii cu o baza de date). Ideea este ca utilizatorul sa poata alege din lista de optiuni, programul urmand a executa operatii diferite in functie de alegerea utilizatorului. Sa presupunem ca avem definite urmatoarele optiuni:
CLEAR
? ' 1. Introducere de inregistrari noi'
? ' 2. Listarea inregistrarilor'
? ' 3. Editarea unei inregistrari'
? ' 4. EXIT "
Acesta este menu-ul de optiuni; cu ajutorul comenzii INPUT, utilizatorul isi introduce optiunea proprie din menu:
INPUT 'Introduceti optiunea dvs. ' TO OPT
Apoi, in functie de alegerea facuta, programul va executa operatii diferite:
DO CASE
CASE OPT = 1
APPEND
CASE OPT = 2
LIST TO PRINT
CASE OPT = 3
BROWSE
OTHERWISE
QUIT
ENDCASE
FOR.ENDFOR
sintaxa: FOR <var> = <expN1> TO <expN2> [step <expN3>]
<secventa de instructiuni>
[EXIT]
[LOOP]
efect: Secventa de instructiuni precizata este executata de mai multe ori, numaratoarea fiind facuta de variabila <var>. Valoarea initiala a variabilei <var> este obtinuta prin evaluarea expresie numerice <expN1>; dupa fiecare executie a <secventei de instructiuni>, valoarea variabilei <var> este incrementata sau decrementata, cu o valoare constanta, obtinuta prin evaluarea expresiei numerice <expN3>, atunci cand clauza STEP este prezenta, sau cu 1, atunci cand clauza STEP lipseste. Cand valoarea variabilei <var> devine mai mare decat valoarea expresiei numerice <expN2> (cand valoarea <expN3> este pozitiva), sau mai mica decat valoarea <expN2> (cand valoarea <expN3> este negativa) iesim din acest ciclu, iar programul continua cu urmatoarea instructiune de dupa ENDFOR.
Parametri:
EXIT: Folosind acest parametru, putem iesi din ciclu si continua executia programului cu prima comanda de dupa ENDFOR, fara a mai testa valoarea variabilei contor, <var>;
LOOP : Folosind acest parametru putem sari peste urmatoarele instructiuni din ciclu (intre LOOP si ENDFOR); contorul <var> va fi incrementat sau decrementat, si incepe o noua parcurgere a <secventei de instructiuni>, daca conditia de ramanere in ciclu este verificata).
SCAN.ENDSCAN
sintaxa: SCAN
[<domeniu>] [FOR <conditie>]
<secventa de instructiuni>
[LOOP]
[EXIT]
ENDSCAN
efect: Aceasta comanda este similara cu FOR . ENDFOR, fiiind insa specializata pentru lucrul cu baze de date. Baza de date curenta este inspectata, iar <secventa de instructiuni> este executata pentru fiecare inregistrare care cade in interiorul domeniului specificat de <domeniu>, sau care face adevarata conditia FOR <conditie>.
Parametri:
EXIT
LOOP
(au acelasi efect ca in comanda anterioara).
DO WHILE.ENDDO
sintaxa: DO WHILE <expL>
<secventa de instructiuni>
[LOOP]
[EXIT]
ENDDO
efect: Aceasta comanda duce la executarea repetata a <secventei de instructiuni>, atata timp cat valoarea expresiei logice <expL.> este adevarat (.T.). Se evalueaza <expL>; daca valoarea obtinuta este fals (.F.), executia secventei de instructiuni se incheie. Altfel, aceasta se executa si, la intalnirea instructiunii ENDDO se face salt inapoi la prima linie, DO WHILE, si se evalueaza din nou <expL>.
Acest ciclu continua pana cand <expL> devine falsa (.F.); in acest moment executia este stopata, iesim din ciclu iar programul continua cu prima instructiune de dupa ENDDO.
Parametri:
EXIT
LOOP
(au acelasi efect ca in comanda anterioara).
Exemplu: Daca dorim sa listam toate inregistrarile unei baze de date (numai cateva campuri ale acestora), o solutie adecvata ar putea fi urmatoarea secventa de comenzi (de obicei o astfel de secventa este folosita in interiorul unui program):
DO WHILE .NOT. EOF ( )
? NUME, ADRESA
SKIP
ENDDO
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1189
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved