Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




NOTIUNI GENERALE DESPRE PROGRAMARE foxpro

Informatica


NOTIUNI GENERALE DESPRE PROGRAMARE

-CONTINUARE-

STRUCTURILE LIMBAJULUI DE PROGRAMARE



Limbajul utilizat de FOXPRO este un limbaj procedural ce permite scrierea unor programe care respecta principiile programarii structurate.Programarea structurata are la baza o teorie matematica complexa care in esenta sustine ca orice actiune poate fi realizata prin utilizarea a trei tipuri de structuri de intructiuni : secventa , selectia si itertia .

Un program se compune din instructiuni sprcifice grupate astfel incat se pot identifica cele trei componente specifice ale programarii structurate.Orice program poate contine alternativ toate cele trei categorii mentionate mai sus , in orice ordine si de oricate ori logica de executie a programului o cere .Un program mai complex va contine toate tipurile de structuri . Cel mai simplu program contine doar o insiruire de instructiuni ,adica din punct de vedere al programarii structurate , o secventa.

Secventa

Secventa este un element al programarii structurate care presupune executia instructiunilor in ordinea scierii lor. Dupa executia completa a unei instructiuni se trece la executia urmatoarei instructiuni ,proces care continua pana cand acest element de structura al programului se termina . Programul poate continua cu o selectie sa iteratie sau se poate termina .

Selectia

Selectia are la baza o decizie care trebuie luata prin program , in functie de ne / realizarea unor conditii . Conditiile se tasteaza la inceputul structurii de selectie .Selectia presupune o ramificare in program , determinata de rezultatul evaluarii conditiei de selectie .

Programatorul trebuie sa se asigure de posibilitatea aveluarii conditiei de selectie impuse ; toate componentele conditiei de selectie trebuie sa fie accesibile din program in momentul evaluarii conditiei.

Cea mai simpla selectie se bazeaza pe o bifurcatie a programului.In acest caz daca este adevarata conditia se executa o secventa de intructiuni ,iar daca conditia este 151f510b falsa se executa o alta secventa de instructiuni .In particular a doua secventa de instructiuni poate fi vida ,adica , conditia fiind falsa un se executa nimic si se termina selectia .Cele prezentate anterior se transpun in limbaj de programare astfel :

IF conditie

instructiuni_1

ELSE

instructiuni_2

ENDIF

Conditia precizata dupa IF poate fi o conditie aritmetica sau logica care se evalueaza. Daca este ineplinita se executa grupa de instructiuni_1 . Daca un este indeplinita conditia se executa grupa de instructiuni_2.Orice structura de selectie se termina printr-o instructiune specifica ENDIF .Neterminarea corecta a selectiei produce erori de programare si de prelucrare a datelor .

Asupra grupelor instructiuni_1 si instructiuni_2 un se impun nici un fel de restrictii adica pot fi de tip secventa, selectie sau iteratie.Daca una din grupele de instructiuni mentionate este de tip selectie , atunci structura este de tip "imbricare" . Imbricarea trebuie folosita cu precautie ,deoarece structurile imbricate pot provoca erori de programare greu de detectat .

Exemplu de imbricare :

IF conditie_1

IF conditie_2

instructiuni_21

ELSE

instructiuni_22

ENDIF

ELSE

instructiuni_11

ENDIF

In exemplul de mai sus s-a folosit scrierea "indentata" .Scrierea indentata presupune evidentierea structurilor utilizate prin alinierea pe coloane a instructiunilor ce fac parte din aceasi structura .Prin scrierea indentata programul devine mai usor e citit si depanat .In exemplul de mai sus oricare din grupele de instructiuni poate contine la randul sau secvente , selectii sau iteratii .Se obtin astfel selectii multiple , imbricate la nivele de imbricare mai "adanci". Selectiile multiple pot complica logica unui program , motiv pentru care se ecomanda sa un se depaseasca 2-3 nivele de imbricare.

S-a mentionat anterior ca selectia poate contine o ramura vida .Ramura vida ( care se omite ) este cea care contine grupa instructiuni_2.Daca acea conditie specificata un este indeplinita , un se executa nimic , se trece peste selectie si se prelucreaza urmatoarea instructiune din program .In acest caz sintaxa selectiei devine :

IF conditie

instructiuni

ENDIF

Marcarea sfarsitului de selectie este obligatorie .Grupa de instructiuni se supune regulilor prezentate anterior ( in particular poate contine o selectie ) . In cazul prezentat , daca acea conditie un este indeplinita , un se executa nimic, deoarece grupa de instructiuni de pe ramura alternativa ( ELSE ) lipseste .

Exemplul 1 :

IF media >=5

? nume + " admis"

ELSE

? nume + " respins"

ENDIF

Daca media candidatului din articolul curent este mai mare decat 5 , se afiseaza numele si textul "admis", in caz contrar se afiseaza numele si textul "respins".

Exemplul 2 :

IF nota_1 > 0

IF nota_2 >0

IF nota_3 > 0

Media = (nota_1 + nota_2 + nota_3 ) / 3

? nume + " " + str (media , 5 , 2 )

ELSE

? nume + "absent la proba 3 "

ENDIF

ELSE

? nume + " absent la proba 2"

ENDIF

ELSE

? nume + "absent la proba 1 "

ENDIF

Exemplul de mai sus prezinta o selectie imbricata .Daca toate notele obtinute sunt mai mari decat 0,candidatul s-a rpezentat la toate examenele ,I se calculeaza si afiseaza media aritmetic a notelor obtinute , in caz contrar candidatul a lipsit la cel putin un examen .

Pentru cresterrea flexibilitatii programelor si pentru o programare comoda ,se ofera posibilitatea unor selectii multiple fara utilizarea imbricarilor: instructiunea DO CASE . Aceasta instructiune se caracterizeaza prin faptul ca permite selectarea unei singure alternative din oricate posibile. Sintaxa ei este :

DO CASE

CASE conditie_1

instructiuni_1

CASE conditie_2

instructiuni_2

CASE conditie_3

instructiuni_3

........

CASE conditie_n

instructiuni_n

[ OTHERWISE

instructiuni ]

ENDCASE

Sistemu;l de gestiune a bazelor de date evalueaza fiecare conditie in parte . Prima conditie care este adevarata determina executia grupei de instructiuni aferenta ei.Dupa executarea instructiunilor aferente primei conditii adevarate ,selectia este terminata , iar urmatoarele un mai sunt evaluate.De aceea in cazul unei selectii multiple utilizatorul trbuie sa stabileasca conditii disjuncte astfel incat numai ua din conditiile instructiunii CASE sa fie adevarata .

Daca nici una din conditiile impuse un este adevarata , se executa grupa de instructiuni aflata dupa OTHERWISE . Aceasta ramura a selectiei multiple poate lipsi , caz in care daca nici o conditie un este indeplinita , un se executa nimic si se trece peste secventa de selectie multipla .

Fiecare instructiune DO CASE trebuie sa se termine printr-o instructiune ENDCASE - instructiune de incheiere a selectiei multiple.Lipsa instructiunii ENDCASE produce erori in programare.Grupele de instructiuni ce se executa la indeplinirea conditiilor specificate pot fi de orice tip (secvente , selectii , iteratii ). Instructiunea DO CASE poate fi imbricata dar urmarirea derularii programului cu instructiuni imbricate este dificila si un este recomandata.

Exemplu :

* Exemplul trnscrie secventa de program

* realizata cu secvente imbricate de

* IF ... ENDIF

DO CASE

CASE nota_1 < 1

? nume + "absent la proba 1"

CASE nota_2 < 1

? nume + "absent la proba 2 "

CASE nota_3 < 1

? nume + "absent la proba 3 "

OTHERWISE

media=(nota_1 + nota_2 + nota_3 ) / 3

? nume + " " + str ( media , 5 , 2 )

ENDCASE

Iteratia

Iteratia permite efectuarea repetitiva ( iterativ) a unei secvente de instructiuni . Iteratia poate fi conditionata adica repetarea secventei de instructiuni poate avea loc doar daca se indeplinesc anumite conditii sau poate fi controlata prin valoarea unui contor ( contorul poate lua valori cuprinse intre o valoare initiala si o valoare finala , prin incrementare cu un anumit pas ) .

Iteratia conditionata

Logica de executie a iteratiei conditionate este urmatoarea : atata timp cat conditia este adevarata se executa o secventa de instructiuni ; pentru anumite cazuri iteratia poate fi abandonata , indiferent de rezultatul evaluarii conditiei , sau programatorul are posibilitatea de a forta reevaluarea conditiei printr-un salt la inceputul structurii repetitive . Sintaxa iteratiei conditionate este :

DO WHILE conditie

instructiuni

[ LOOP ]

[ EXIT ]

ENDDO

Iteratia conditionata se termina in mod obligatoriu cu instructiunea ENDDO. Iesirea fortata din iteratie se face cu instructiunea EXIT . Prin utilizarea acestei instructiuni ( care poate fi plasata oriunde intre DO WHILE si ENDDO ) , iteratia este abandonata si controlul programului trece la prima instructiune aflata dupa ENDDO . Pentru reevaluarea fortata a conditiei de executie a iteratiei se foloseste instructiunea LOOP .Utilizarea ei determina numai tastarea conditiei de executie a iteratiei , iar in continuare controlul programului este preluat de structura iterativa , in conformitate cu rezultatul evaluarii conditiei .

Daca conditia din DO WHILE un este adevarata , se abandoneaza iteratia si controlul programului se transfera la prima instructiune executabila aflata dupa ENDDO .Dupa fiecare parcurgere a instructiunilor aflate in corpul structurii iterative , , conditia de executie a iteratiei este reevaluata automat .De obicei , conditia se modifica prin executarea instructiunilor din bucla .Stabilirea conditiei de executie a iteratiei trebuie facuta cu atentie , deoarece o conditie gresit stabilita poate cauza alterarea sau distrugerea automata a datelor din baza de date .

O eroare de programare des intalnita este cea prin care se realizeaza o conditie permanent adevarata si programul intra intr-un "ciclu infinit" sau o "bucla infinita".Alta eroare o reprezinta folosirea unei conditii care prin evaluare este permanent falsa si instructiunile din corpul iteratiei un se executa niciodata .

Prelucrarea iterativa a articolelor din baza de date este o activitate frecventa .De obicei parcurgerea tuturor articoleleor din baza de date se realizeaza printr-o structura iterativa care testeaza intalnirea marcajului de sfarsit de fisier (EOF).

Exemplul 1 :

* programul isi propune listarea tuturor ;

* cursantilor promovati

USE cursanti

DO WHILE . NOT . EOF ( )

IF media >= 5

? nume + " " + str (media , 5 , 2 )

ENDIF

SKIP

ENDDO

USE

Exemplul 2 :

*programul listeaza cursantii retrasi

*si numarul primului test la cre au lipsit

USE cursanti

DO WHILE .NOT. EOF ( )

IF nota_1 < 1

? nume + " absent la proba 1 "

ELSE

IF nota_2 <1

? nume + " absent la proba 2 "

ELSE

IF nota_3 <1

? nume + "absent la proba 3 "

ENDIF

ENDIF

ENDIF

SKIP

ENDDO

USE

FOXPRO ofera insa pentru parcurgerea unei baze de date o instructiune specializata :

SCAN [ domeniu ] [ FOR conditie_1 ] [ WHILE conditie_2 ]

Instructiuni

[ LOOP ]

[ EXIT ]

ENDSCAN

Instructiunea SCAN produce o deplasare prin baza de date si efectueaza grupul de instructiuni din corpul ei pentru fiecare articol ce indeplineste conditiile specificate prin clauzele FOR sau WHILE . Trecerea la articolul urmator si tastarea indeplinirii conditiilor se face automat .

Domeniul implicit al instructiunii SCAN este ALL , adica se parcurg toate articolele bazei de date , dar poate fi precizat explicit un alt domeniu .De asemenea articolele ce vor fi prelucrate de instructiunile din corpul lui SCAN pot fi filtrate prin clauze FOR sau WHILE

Parasirea corpului unei instructiuni SCAN inaintea terminarii domeniului se face prin instructiunea EXIT . Controlul programului se da instructiunii care urmeaza lui ENDSCAN .

Instructiunea LOOP plasata in corpul unei instructiuni SCAN , forteaza reluarea buclei scan de la inceput .

Exemplu :

*transpunerea primului exemplu de DO ... WHILE

*programul isi propune listarea tuturor cursantilor promovati

USE cursanti

SCAN FOR media >=5

? nume + " " + str ( media , 5 , 2 )

ENDSCAN

USE

Iteratia prin contor

Executarea unui grup de instructiuni de un anumit numar de ori se realizeaza prin instructiune :

FOR contor = val_initiala TO val_finala [STEP pas ]

Instructiuni

[ LOOP ]

[ EXIT ]

ENDFOR | NEXT

Iteratia incepe la intalnirea instructiunii FOR si se termina la executia instructiunii ENDFOR . Variabila de memorie se utilizeaza ca si un contor al numarului de executii al grupului de instructiuni din corpul instructiuii FOR .Aceasta variabila de memorie un trebuie initializata in prealabil .

Val_initiala este valoarea initiala a contorului iar val_finala este valoarea finala a contorului .

Executia unei instructiuni FOR presupune urmatorii pasi :

Se initializeaza contorul cu valoarea initiala ( contor = val_initiala )

Se executa instructiunile din corpul instructiunii FOR ( cuprinse intre FOR si ENDFOR )

contorul este incrementat cu valoarea indicata prin pas ( contor = contor + pas ) . Daca optiunea STEP un este inclusa , contorul este incrementat cu 1 ( contor = contor +1 )

se compara contorul cu valoarea finala astfel :

daca val_initiala < val_finala si pas > 0 atunci comparatia este contor <= val_finala

daca val_initiala > val_finala si pas < 0 atunci comparatia este contor >= val_finala

daca in urma evaluarii conditiei rezultatul este "adevarat ", atunci instructiunile din corpul 

instructiunii FOR se vor executa din nou ; in caz contrar se va da controlul instructiunii care urmeaza lui ENDFOR

IMPORTANT :

Valorile val_initiala , val_finala si pas se citesc o singura data la inceputul buclei si valorile lor pot fi modificate in interiorul buclei fara a afecta numarul de reluari al buclei .Uneori schimbarea valorii contorului in interiorul buclei afecteaza numarul de reluari al buclei .

O instructiune EXIT in interiorul unei bucle FOR are ca efect transferarea controlului programului , instructiunii care urmeaza instruciunea ENDFOR inainte ca variabila contor sa ajunga la val_finala.

Instructiunea LOOP plasata in interiorul unei bucle FOR are ca efect returnarea controlului programului instructiunii FOR fara a executa instructiunile din corpul lui FOR .

Exemplu :

*program de numarare

FOR i = 1 TO 10

? i

NEXT

Exemplu :

Programul isi propune afisarea paginata pe ecran a numelui , notelor si mediei obtinute de cursanti .( se poate da programului numele LISTA )

*program afisare paginata a notelor si mediei cursantilor

SET TALK OFF

USE cursanti

Pag = 0

Lin = 24

DO WHILE .NOT. EOF ( )

IF lin >=24 && se considera ecranul plin cu informatie

Pag = pag +1

*urmatoarea secventa afiseaza antetul si capul de tabel al listei

CLEAR && se sterge ecranul

? "Curs FOXPRO "

? padc ( "Lista cursanti ", 79 )

? padl ("Data editarii : "+ dtoc (date ( ) ) + "/ Pag . "+ str (pag , 1 ) , 79)

? replicate ( "- ", 79 )

? space ( 36) + padc ( "Nota la ", 15 ) + " "+ padc ( "Nota la ", 15 )

? padc("Nume si Prenume ",35) + " "+ "proba teoretica"+" "+ "proba practica "+ " "+ "Media"

? replicate ( "- ", 79)

lin = 7

ENDIF

? nume + " "+ space(5)+ str (pt ,5 ,2 ) + space (11) +str(pp ,5 ,2 )+" "+ str (media , 5 , 2 )

lin=lin+1

SKIP

IF lin >= 24

WAIT "Continuati afisarea ? ( D / N ) " ;

to raspuns

IF .NOT. UPPER (raspuns ) = "D"

EXIT

ENDIF

ENDIF

ENDDO

USE


Document Info


Accesari: 3096
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )