Sunteți pe pagina 1din 8

Capitolul 1.

Introducere

1.4. Proiectarea programelor


Programele modific[, memoreaz[ =i transfer[ datele cu ajutorul variabilelor. Variabila este, din punct de vedere al implement[rii, o zon[ de memorie destinat[ memor[rii unei date. Din punct de vedere logic, o variabil[ pote reprezenta (]n func\ie de problema de rezolvat) o presiune, o densitate, o durat[ de timp etc. Prin declara\ii ]n cadrul programelor se stabilesc atributele variabilelor. Principalele atribute ale unei variabile sunt: identificatorul (numele) variabilei; tipul variabilei; structura variabilei. Tipul unei variabile este atributul care precizeaz[ domeniul de valori pe care le poate lua variabila precum =i opera\iile care se pot efectua cu aceste valori. Structura unei variabile este atributul care precizeaz[ dac[ variabila con\ine date simple sau date structurate. 1.4.1. Etapele proiect[rii unui program Pentru rezolvarea unei probleme se parcurg urm[toarele etape: analiza problemei proiectarea programului implementarea programului ]ntre\inerea =i documentarea programului Analiza problemei }n aceast[ etap[: se identific[ datele de intrare =i datele de ie=ire; se precizeaz[ tipul =i structura variabilelor care con\in datele de intrare; se precizeaz[ tipul =i structura variabilelor care con\in datele de ie=ire; se precizeaz[ tipul =i structura variabilelor auxiliare; se stabile=te func\ia programului (modul ]n care se ob\in datele de ie=ire din datele de intrere). }n majoritatea cazurilor func\ia programului este precizat[ sub forma unui model matematic. Modelul matematic este ansamblul de rela\ii =i principii pe baza c[rora se calculeaz[ datele de ie=ire din datele de intrare. Rezultatul etapei de analiz[ se nume=te specifica\ia programului. Proiectarea programului Scopul acestei etape este ob\inerea algoritmului de rezolvare a problemei. Algoritmul constituie re\eta de rezolvare a problemei. Pentru reperezentarea algoritmului se utilizeaz[: limbajul natural; schema logic[; pseudocodul limbaje de programare.

1.7

Capitolul 1. Introducere Implementarea programului }n acest[ etap[ se codific[ algoritmul ]n limbajul de programare ales. Programul ob\inut ]n urma codific[rii se depaneaz[ (eventual) =i se testeaz[. Depanarea este opera\ia prin care se elimin[ eventualele erori din program. Pricipalele tipuri erori sunt: erori sintactice; erori de link-editare; erori ]n faza de execu\ie; erori logice. Majoritatea erorilor sunt u=or de eliminat av`nd ]n verere faptul c[ mediile integrate utilizate ]n realizarea programelor ofer[ instrumente pentru identificarea lor. Cele mai dificile sunt erorile logice. Pentru eliminarea lor se utilizeaz[ de obicei simulatoare sau depanatoare specializate. Testarea programului ]nsemn[ execu\ia lui cu un set de date de intrare astfel ales ]nc`t datele de ie=ire s[ fie previzibile sau u=or de calculat. Testarea constituie un instrument foarte bun pentru ]nl[turarea erorilor logice. }ntre\inerea =i documentarea programului }ntre\inerea programului ]nseamn[ operarea unor mici modific[ri ]n program (care nu schimb[ specifica\ia programului), pe baza observa\iilor f[cute de utilizator asupra modului de func\ionare. Documentarea programului presupune elaborarea unei documenta\ii care precizeaz[ modul de instalare, condi\iile de func\ionare, modul de utilizare =i de ]ntre\inere a programului. Un alt nivel de documentare ]l constituie comentarea programului care se realizeaz[ ]n programul surs[ prin utilizarea comentariilor. 1.4.2. Algoritmi Algoritmul este o succesiune finit[ de pa=i care se execut[ ]ntr-un timp finit =i ]ntr-o ordine bine stabilit[. Pa=ii unui algoritm se mai numesc =i (pseudo-)instruc\iuni. Un algoritm este alc[tuit din: opera\ii de baz[; structuri de control. Opera\iile de baz[ sunt cele care permit prelucrarea, memorarea =i transferul datelor. Cele trei opera\ii de baz[ sunt: atribuirea; citirea; scrierea. Opera\ia de atribuire are forma general[ ve ]n care v este o variabil[ iar e este o expresie. Atribuirea se execut[ ]n dou[ etape: mai ]nt`i se evalueaz[ expresia e dup[ care, valoarea expresiei este atribuit[ variabilei v. Opera\iile de citire =i scriere permit citirea datelor de intrare, respectiv scrierea datelor de ie=ire. Structurile de control precizeaz[ ordinea ]n care se execut[ pa=ii algoritmului. Teorema Bohm Jacopini precizeaz[ c[ orice algoritm poate fi realizat cu numai trei structuri de control numite structuri de control fundamentale: secven\a, decizia =i itera\ia. Secven\a este o succesiune de pa=i care se execut[ ]n ordinea scrierii lor. 1.8

Capitolul 1. Introducere Decizia permite ramificarea algoritmului ]n func\ie de ]ndeplinirea unei anumite condi\ii. Decizia poate fi simpl[ sau cu alternativ[. Itera\ia permite execu\ia repetat[ a unei secven\e, numit[ corpul ciclului. Exist[ trei tipuri de itera\ii: itera\ia cu test ini\ial; itera\ia cu test final; itera\ia cu contor. Itera\ia cu test ini\ial execut[ corpul ciclului c`t timp este ]ndeplinit[ o anumit[ condi\ie. Itera\ia cu test final execut[ corpul ciclului p`n[ c`nd este ]ndeplinit[ o anumit[ condi\ie. Itera\ia cu contor permite execu\ia corpului ciclului pentru toate valorile unei variabile speciale (numit[ variabil[ contor) ]ntr-un interval dat. 1.4.3. Reprezentarea algoritmilor Cele mai utilizate modalit[\i de reprezentare a algoritmilor sunt pseudocodul =i schema logic[. Pseudocodul Este o modalitate de reprezentare a algoritmului sub form[ de text. Pa=ii algoritmului, numi\i pseudoinstruc\iuni, sunt reprezenta\i prin cuvinte-cheie. Cuvintele-cheie utilizate ]n pseudocod sunt: ALTFEL, ATUNCI, CITETE, CT TIMP, DAC, ENDSEQ, EXECUT, PENTRU, PN CND, REPET, SCRIE, SEQ, START, STOP. Opera\iile de intrare-ie=ire se reprezint[ ]n pseudocod astfel: CITETE <list variabile> SCRIE <list variabile> ]n care list[ variabile este o succesiune de identificatori (de variabil[) separa\i prin virgul[. Atribuirea se codific[ astfel: ve ]n care v este un identificator de variabil[ iar e este o expresie cu valori de acela=i tip cu variabila. Pentru reprezentarea unei secven\e se utilizeaz[ cuvintele-cheie SEQ =i ENDSEQ pentru a marca ]nceputul, respectiv sf`r=itul secven\ei. Secven\a este numit[ =i (pseudo-)instruc\iune compus[. Decizia simpl[ se codific[ astfel: DAC c ATUNCI instr ]n care c este o expresie cu valori de tip logic (numit[ condi\ie logic[) iar instr este orice instruc\iune (inclusiv una compus[). Decizia cu alternativ[ are sintaxa: DAC c ATUNCI instr1 ALTFEL instr2 ]n care c este o expresie cu valori de tip logic iar instr1 =i instr2 sunt instruc\iuni. Itera\ia cu test ini\ial se codific[ ]n pseudocod astfel: CT TIMP c EXECUT instr ]n care c este o expresie cu valori de tip logic iar instr este orice instruc\iune (corpul ciclului). Itera\ia cu test final se codific[ astfel: 1.9

Capitolul 1. Introducere REPET instr PN CND c ]n care c este o expresie cu valori de tip logic iar instr este orice instruc\iune (corpul ciclului). Sintaxa itera\iei cu contor cresc[tor este: PENTRU v=e1,e2 EXECUT instr ]n care v este un identificator de variabil[ (variabil[-contor), e1 =i e2 sunt expresii cu valori de acela=i tip cu v iar instr este orice instruc\iune (corpul ciclului). Sintaxa itera\iei cu contor descresc[tor este: PENTRU v=e1e2 EXECUT instr }n ambele cazuri, corpul ciclului se execut[ pentru toate valorile variabilei v, cuprinse ]ntre valorile e1 =i e2. }n primul caz, contorul este incrementat la fiecare parcurgere a ciclului iar ]n al doilea caz, contorul este decrementat. Cuvintele-cheie START =i STOP se utilizeaz[ pentru a marca ]nceputul, respectiv sf`r=itul algoritmului. Schema logic[ Este o modalitate grafic[ de reprezentare a unui algoritm. Simbolurile utilizate ]n reprezentare sunt:
START

Blocul de start. Marcheaz[ ]nceputul algoritmului. Blocul de stop. Marcheaz[ sf`r=itul algoritmului. Bloc de calcul. Con\ine una sau mai multe instruc\iuni de atribuire. Bloc de intrare-ie=ire

DA

NU

Bloc de decizie

STOP

Simbol utilizat ]n definirea =i apelul subprogramelor. Simboluri utilizate la interconectarea diverselor p[r\i ale schemei logice.

Opera\iile de baz[ de intrare-ie=ire se reprezint[ prin blocuri de intrare-ie=ire iar opera\iile de atribuire utilizeaz[ blocuri de calcul. Secven\a nu necesit[ un simbol special pentru reprezentare ]n schema logic[. }n figurile 1.1 =i 1.2 se prezint[ modul de reprezentare ]n schema logic[ a deciziei.

DA

instr

NU

Figura 1.1. Reprezentarea deciziei simple. 1.10

Capitolul 1. Introducere

DA

NU

instr1

instr2

Figura 1.2. Reprezentarea deciziei cu alternativ[. Principalul dezavantaj al schemei logice este faptul c[ nu ofer[ simboluri specifice pentru reprezenatrea structurilor de control de tip iterativ. Itera\iile se reprezint[ ]n schema logic[ prin combina\ii de blocuri. }n figurile 1.3 =i 1.4 sunt prezentate schemele logice echivalente pentru itera\ia cu test ini\ial, respectiv pentru itera\ia cu test final.
instr

C NU

DA

Figura 1.3. Itera\ia cu test ini\ial.

instr

C DA

NU

Figura 1.4. Itera\ia cu test final. }n figura 1.5 este exemplificat[ itera\ia cu contor cresc[tor: PENTRU i=1,n EXECUT instr

1.11

Capitolul 1. Introducere
i=1

instr i=i+1

i n NU

DA

Figura 1.5. Exemplu de itera\ie cu contor cresc[tor.

1.12

Capitolul 1. Introducere

1.5. Limbaje de programare


O categorie important[ de programe o constituie limbajele de programare. Un limbaj de programare permite utilizatorului s[ creeze propriile programe (numite programe utilizator). Limbajul de programare este un intermediar ]ntre problema de rezolvat =i calculator.
Asamblor Compilator

Problem[

Algoritm

Limbaj de programare

Calculator

Figura 1.6. Rezolvarea unei probleme cu ajutorul calculatorului. Algoritmul face trecerea de la problem[ la limbajul de programare iar asamblorul sau compilatorul realizeaz[ trecerea de la limbaj la calculator. Limbajele de programare se clasific[ dup[ apropierea de limbajul natural ]n limbaje de nivel ]nalt =i limbaje de nivel cobor`t. Limbajele de nivel ]nalt permit programarea independent[ de arhitectura calculatorului =i sunt mai apropiate de specificul problemei. Ele ofer[ urm[toarele avantaje: portabilitatea programelor; sunt mai apropiate de limbajul natural. Principalele dezavantaje sunt: necesit[ configura\ii hardware complexe; vitez[ mic[ de execu\ie. Limbajele de nivel cobor`t, numite =i limbaje de asamblare, depind de structura calculatorului =i descriu opera\ii specifice acestuia. Ele ofer[ urm[toarele avantaje: vitez[ mare de execu\ie; utilizarea la maximum a resurselor hardware. Principalele dezavantaje ale limbajelor de nivel cobor`t sunt: lipsa portabilit[\ii programelor; tehnicitatea program[rii. 1.5.1. Etapele compil[rii Prima form[ a programului utilizator este programul surs[. Acesta este un fi=ier text realizat cu ajutorul unui editor de text. Programul surs[ con\ine instruc\iunile necesare rezolv[rii problemei, scrise ]n limbajul de programare ales. El este tradus (translatat) ]n instruc\iuni recunoscute de calculator fie cu ajutorul asamblorului, fie cu ajutorul compilatorului. Forma ob\inut[ ]n urma translat[rii se nume=te program obiect relocabil. Programul obiect relocabil este o form[ intermediar[ a programului care nu este direct executabil[. El are proprietatea de a putea fi a=ezat oriunde ]n memoria calculatorului (este relocabil). Programul obiect relocabil este transformat ]n program obiect absolut (sau executabil) cu ajutorul link-editorului. Pentru a putea fi executat, programul obiect absolut trebuie ]nc[rcat ]n memoria principal[ cu ajutorul ]nc[rc[torului de programe. Utilizarea formei intermediare de program obiect relocabil ofer[ c`teva avantaje care sunt prezentate ]n continuare. 1.13

Capitolul 1. Introducere }n primul r`nd, programele complexe pot fi sparte ]n mai multe module ce pot fi compilate =i testate separat. Aceast[ tehnic[ se nume=te programare modularizat[. Utilizarea program[rii modularizate conduce la cre=terea eficien\ei program[rii =i, ]n plus, permite reutilizarea codului. Un modul, odat[ compilat =i testat, poate fi utilizat ]n mai multe proiecte, f[r[ a fi necesar[ recompilarea sa. Pe de alt[ parte, modulele precompilate pot fi organizate ]n biblioteci de programe. }n acest fel, utilizatorul ]=i poate construi propriile biblioteci de programe care pot fi utilizate ]n faza de link-editatare, al[turi de bibliotecile sistem (bibliotecile furnizate de limbajul de programare). De men\ionat c[ exist[ o deosebire ]ntre utilizarea unui modul precompilat =i a unei biblioteci. La linkeditarea unui modul precompilat, modulul este incorporat ]n ]ntregime ]n program pe c`nd, ]n cazul unei biblioteci, sunt incluse doar func\iile utilizate de program. }n figura 1.7 sunt prezentate principalele faze ale compil[rii unui program.
Editor

file2.asm

main.c

file1.c

mod1.obj

Asamblor

Compilator

Bibliotecar

file2.obj

main.obj

file1.obj

mylib.lib

mod2.obj

Link-editor

syslib.lib

prog.exe

Figura 1.7. Compilarea unui program. 1.5.2. Medii integrate de programare Un mediu integrat pentru dezvoltarea programelor (Integrated Development Environment - IDE) con\ine toate instrumentele necesare realiz[rii unui program utilizator: editor de text, asamblor, compilator, link-editor, bibliotecar, ]nc[rc[tor de programe, depanator, simulator etc.

1.14