I-Scurta introducere in teoria programarii Programarea calculatoarelor e o disciplina destul de noua,dar suportul sau matematic este ceva mai vechi.In teoria programarii calculatoarelor se specifica mai multi pasi in creearea unui program care sa rezolve o anumita problema.Acesto pasi merg de la formularea si specificarea problemei la definirea unei solutii,la implementare,testare si documentare si,in fine,la evaluarea solutiei.Daca anumite aspecte ale problemei deprinse din analiza problemei se pot reprezenta formal,este bine sa se procedeze astfel,deoarece o problema,o data formalizata,e mai usor de analizat prin prisma existentei unui mod de rezolvare(in cazul nostru,acest mod de rezolvare se concretizeaza in programul informatic).
Daca problema noastra are un model matematic,pasul urmator consta in gasirea solutiei sub forma
algoritmului.Vom spune,pe scurt,ca un algoritm e o suita bine definita de
instructiuni "clare" care se pot executa "cu o cantitate finita de efort si intr-o perioada finita de timp" si care "duc intotdeauna la obtinerea unui rezultat".
In tehnica programarii calculatoarelor,algoritmul actioneaza intotdeauna asupra unor
date de intrare,ducand la obtinerea
datelor de iesire.Intr-un algoritm,aceste date se impart in
variabile si
constante,dupa modul in care isi modifica sau nu valoarea pe parcursul executiei algoritmului.Daca datele de intrare sunt numerice,atunci prelucrarile pe care le va realiza algoritmul sunt numerice;daca e vorba de texte,prelucrarile vor fii simbolice.Cat despre instructiune,aceasta e o operatie care,cel putin teoretic,nu poate fii descompusa in operatii de nivel mai mic fara a-si pierde sensul.Astfel,adunarea nu poate fii descompusa,dar inmultirea poate fii considerata o suita de adunari repetate.Practic,in informatica,elementare sunt numai instructiunile "turnate" in circuitele procesorului la proiectarea acestuia,dar programatorii s-au obisnuit sa numeasca instructiuni si operatii de un nivel ceva mai mare,ca de exemplu suita de operatii necesare transferului unui text din memoria interna pe ecranul monitorului.Unii vorbitori(si scriitori) folosesc notiunile
comanda si
instructiune ca sinonime,dar acestea nu sunt chiar astfel.Asadar,o comanda are o sfera mai larga decat o instructiune.De exemplu,o comanda de creare a unei tabele din Visual FoxPro sau o comanda de cautare a unor date intr-o tabela lanseaza de fapt un intreg algoritm.La fel se intampla si cu o comanda a sistemului de operare(de exemplu COPY,care,desi acest lucru nu este evident,exista chiar si in Windows).
Intr-un algoritm avem urmatoarele
tipuri de instructiuni:
* de atribuire;
* de calcul;
* de decizie;
* de intrare-iesire;
II-Structuri de control Instructiunile algoritmului urmeaza cai de executie numite
structuri de control.Am folosit aici pluralul deoarece,in functie de anumite conditii,prelucrarea datelor poate lua cai(ramificatii) diferite.Structurile de control fundamentale sunt SECVENTA,SELECTIA si LITERATIA.
In 1965,Boehm si Jacopini au fundamentat teorema care le poarta numele,conform careia orice algoritm poate fii reprezentat prin combinarea celor trei tipuri de structuri de control fundamentale.
Asadar in programarea structurata avem urmatoarele posibilitati:
* instructiunile se executa secvential in ordinea in care apar (de sus in jos) pana la ultima (secventa)
* in functie de evaluarea unei conditii la un moment dat,se executa un grup de instructiuni sau altul(selectia sau structurile alternative).Trebuie precizat aici ca putem avea structuri alternative cu o ramura vida,ceea ce vrea sa insemne ca,in functie de evaluarea unei conditii,se poate executa sau nu un anumit grup de instructiuni;
* un grup de instructiuni se executa de un anumit numar(finit) de ori,cunoscut dinainte sau cat timp o conditie e indeplinita(iteratia sau structurile repetitive).
* structuri repetitive conditionate anterior,caracterizate prin faptul ca mai intai se verifica o conditie si,daca e adevarata,se executa o secventa de instructiuni,dupa care bulca se reia.
* structuri repetitive conditionate posterior,caracterizate prin faptul ca mai intai se executa o secventa de instructiuni ,apoi se verifica o conditie si,daca e adevarata,bucla se reia.
Primii algoritmi cu aplicabilitate in domeniul prelucrarii automate a datelor se datoreaza,se pare,lui Charles Babbage,proiectantul "masinii analitice" din anii 1830.O data cu aparitia calculatoarelor electronice,programatorii s-au aplecat asupra algoritmilor ca baze ale conceperii programelor.Aceste preocupari au devenit tot mai intense pe masura ce limbajele de programare s-au perfectionat.
* prima generatie(cod masina) este etapa programarii "artizanale" a calculatoarelor,in care programatorul putea fii usor asemuit cu un "mare preot".
* generatia a doua(limbaje de asamblare) simuleaza structurile de control prin instructiuni de salt (JUMP) si apeluri de proceduri (CALL).
* generatia a treia(limbaje de nivel inalt) dispune de instructiuni puternice pentru codificarea structurilor de control,pentru atribuire si pentru calcul.Totodata apare programarea structurata,conform careia o problema mare e descompusa in module mai mici,ce pot fi atacate separat,urmand a fii recombinate.
* generatia a patra adauga la puterea limbajelor de generatia a treia instrumente de asistare a programatorului capabile sa genereze cod-sursa conform unor specificatii grafice si textuale intocmite de programator
Am folosit aici notiunea de cod-sursa.Acesta e codul scris de om intr-un anumit limbaj de programare,traducand instructiunile algoritmului in instructiuni ale respectivului limbaj.Trecerea de la codul-sursa la codul executabil are loc printr-un proces de interpretare(instructiunile din codul sursa sunt traduse si executate pe rand) sau de compilare.
Codificarea structurilor de control in Visual FoxPro Este de la sine inteles ca nu se poate concepe un program in programarea structurata fara a face apel la instructiunile care codifica structuri de control.Visual FoxPro implementeaza asemenea structuri prin cateva sintaxe specifice.
Structura alternativa(selectia) se codifica prin:
IF [THEN]
...
[ELSE]
[...]
ENDIF
sau,pentru structura alternativa generalizata:
DO CASE
CASE
...
CASE
[...]
CASE
[...]
[OTERWHISE]
[...]
ENDCASE
Tot aici avem si varianta functiei IF(
,,),care se poate folosi atat in programare,cat mai cu seama in scrierea regulilor de validare la nivel de camp ori de inregistrare pe care le-am vazut in capitolul 2.
Structurile repetitive se codifica prin DO WHILE...ENDDO,fie prin FOR...ENDFOR:
DO WHILE
...
[LOOP]
[EXIT]
ENDDO
Clauza LOOP trimite executia programului inapoi la DO WHILE,iar EXIT la urmatoarea instructiune dupa ENDDO(cu LOOP se poate relua,iar cu EXIST se poate parasi bucla atunci cand in interiorul acesteia se atinge o anume conditie,alta decat cea de ciclare).Instructiunile din corpul buclei se executa atat timp cat conditia precizata este adevarata.
Instructiunea FOR serveste la codificarea structurii repetitive cu un numar finit de pasi:
FOR VariabilaControl = ValoareInitiala TO ValoareFinala [STEP increment]
...
[EXIT]
[LOO{]
ENDFOR | NEXT
Clauzele LOOP si EXIT au aceleasi roluri ca la instructiunea DO WHILE de mai sus.
Visual FoxPro,ca orice produs xBase, dispune si de o instructiune SCAN...ENDSCAN,care permite executia unor anumite instructiuni concomitent cu parcurgerea secventiala a unor tabele .DBF:
SCAN [ FOR WHILE ]
...
[LOOP]
[EXIT]
ENDSCAN
Toate acestea vor fii exemplificate prin cod sursa in cursurile urmatoare.
Urmeaza:
*Variabile si constante.Instructiuni de atribuire.
*Instructiuni de intrare-iesire.
*Proceduri si functii
*Macrosbustitutia
...si multe altele.