Sunteți pe pagina 1din 12

Etapele rezolvrii problemelor cu calculatorul Rezolvarea unei probleme cu ajutorul calculatorului este o activitate complex, care impune o abordare

sistematic, bazat pe o succesiune riguroas de operaii, n realizarea crora se folosesc tehnici i instrumente specifice. Etapele rezolvrii problemelor cu ajutorul calculatorului sunt: Formularea problemei. Se precizeaz rezultatele care trebuie obinute i forma lor de prezentare, datele de intrare i modul lor de organizare, precum i transformrile i prelucrrile aplicate asupra datelor de intrare pentru a obine rezultatele. Formularea clar, corect i complet a problemei este o cerin important pentru finalizarea cu bune rezultate a activitii de proiectare i realizare a programelor. n cazul aplicaiilor de mari dimensiuni, a cror rezolvare se abordeaz de ctre o echip de analiz-proiectareprogramare, formularea problemei poate fi primit de programator de la analistulproiectant, sub forma de specificaii de problem. Formalizarea matematic i alegerea metodei numerice. Se exprim matematic toate transformrile i prelucrrile la care sunt supuse datele de intrare pentru a obine rezultatele, se pun n eviden condiiile iniiale i restriciile referitoare la soluie. La alegerea metodei numerice de rezolvare trebuie analizate cu atenie stabilitatea i convergena metodei, tipul, mrimea i propagarea erorilor, precizia rezultatelor. De asemenea, este necesar s se estimeze necesarul de memorie i timpul de prelucrare, deoarece anumite metode nu pot fi aplicate, tocmai din cauza solicitrii acestor resurse peste limitele admisibile. Se recomand ca n etapa formalizrii matematice s se stabileasc i ordinea de efectuare a prelucrrilor, s se rein informaiile necesare urmtoarei etape (variaia indicilor, momentul introducerii/extragerii datelor, iniializarea variabilelor i masivelor etc.). Elaborarea (proiectarea) algoritmului. Este o etap complex, care presupune analiza riguroas a problemei i a formalizrii ei matematice. Una dintre metodele uzuale de elaborare a algoritmilor este proiectarea structurat, ale crei reguli se vor aplica, de asemenea, n faza de scriere a programelor. Algoritmul va fi reprezententat ntr-o anumit form standard (schem logic structurat, pseudocod etc.), simplificnd eforturile de scriere, testare i definitivare a programelor. Etapa trebuie ncheiat, obligatoriu, cu testarea algoritmului. Stabilirea resurselor. Pe baza analizei algoritmilor se precizeaz echipamentele periferice necesare, limbajul n care urmeaz s fie scris programul, seturile de date ce vor fi folosite la testare, se aproximeaz necesarul de memorie intern, suport extern, timp de prelucrare etc. Scrierea programului. Scrierea programului trebuie s se fac respectnd strict algoritmul elaborat (eventual se pot face modificri i detalieri ale acestuia) urmrindu-se, n acelai timp, optimizarea utilizrii resurselor calculatorului (timp, unitate central, memorie intern i echipamente periferice). n cazul programelor interactive, este necesar realizarea unor interfee prietenoase, care s lanseze solicitri clare, precise i complete. Testarea i definitivarea programului. Programul scris ntr-un limbaj surs va fi compilat i consolidat. n procesul compilrii, programele sunt testate sintactic, iar n procesul consolidrii (editrii de legturi) se valideaz, n principal, modul n care au fost apelate, implicit sau explicit, procedurile utilizatorului sau ale sistemului. La unele sisteme de programare, faza consolidrii este lansat o dat cu prima execuie. Dup parcurgerea

acestor faze, programul este testat n execuie, pe baza unor seturi stabilite de date de control. Programul este considerat corect dac rezultatele obinute sunt cele scontate (pentru datele de test, programatorii trebuie s determine dinainte rezultatele, valorile i forma lor de prezentare). Definitivarea documentaiei programului. Dei mai puin spectaculoas, chiar birocratic, aceast etap este obligatorie pentru exploatarea, dezvoltarea i adaptarea programului, mai ales dac face parte dintr-un sistem. S-a artat c, pe msura desfurrii etapelor precedente, s-au realizat anumite documente necesare exploatrii corecte a programelor. Acestea se completeaz, se redacteaz i se ordoneaz, constituind un dosar de prezentare i exploatare, care cuprinde: - descrierea problemei (rezultate, date de intrare, procesul de prelucrare, formalizarea matematic i modelul matematic, precizia algoritmului etc.); - descrierea resurselor necesare i a restriciilor de utilizare; - schemele logice structurate (sau alte forme de reprezentare a algoritmului; - modul de apel al procedurilor/funciilor i structura datelor/parametrilor ce se transfer ntre apelator i apelat; - instruciuni de utilizare (procedura de punere n lucru, lista i forma ntrebrilor i rspunsurilor n conversaia cu utilizatorii, lista programelor care trebuie executate n amonte etc.); - exemple de utilizare. Trebuie menionat, de asemenea, n special pentru dezvoltrile ulterioare, utilitatea autodocumentrii programelor, realizat sub forma unor comentarii incluse n programul surs. Exploatarea curent. Dup punerea la punct, programele intr n utilizare, fiind urmrite n vederea depistrii unor erori care nu au putut fi sesizate iniial. Aceast etap asigur meninerea n funciune i dezvoltarea programelor, proces care poate continua pe tot parcursul utilizrii lor. 2.2. Noiunea de algoritm. Caracteristici i forme de reprezentare Algoritmul desemneaz o mulime exhaustiv i univoc determinat de operaii, mpreun cu succesiunea de aplicare a lor asupra datelor iniiale, pentru a obine soluia problemei. n activitatea de rezolvare a problemelor cu ajutorul calculatorului, elaborarea algoritmilor este o etap important i obligatorie. De calitatea algoritmilor depinde, n mare msur, calitatea programelor i succesul execuiei acestora. n practica programrii se utilizeaz diverse forme de reprezentare a algoritmilor, dintre care menionm: n cuvinte pe pai; scheme logice (nestructurate i structurate); tabele de decizie; arbori de programare; pseudocoduri sau limbaje de prezentare; pe niveluri de incluziune, prin acolade (Warnier) etc. 2.2.1. Caracteristicile algoritmilor Principalele caracteristici ale unui algoritm sunt: Generalitate: un algoritm nu trebuie conceput pentru o problem particular, ci pentru o clas general de probleme. Exemplu:

Nu se va concepe un algoritm pentru rezolvarea ecuaiei 2 x2 5x + 3 = 0, ci pentru o ecuaie de forma ax2 + bx + c = 0; a, b, c R; a 0. Determinare (claritate): algoritmul trebuie s prevad modul de soluionare a tuturor situaiilor care pot aprea n rezolvarea problemei respective, fr ambiguiti sau neclariti, aspect impus de caracterul de automat al calculatorului electronic. Situaiile pot fi grupate, dup nevoie, n clase, indicndu-se modul de tratare pentru fiecare dintre acestea; orice situaie trebuie s fie cuprins ntr-o clas i numai n una. Exemplu: Pentru rezolvarea ecuaiei: ax2 + bx + c = 0, a, b, c, x R exist patru situaii posibile, care trebuie cuprinse n algoritm: 1. a 0, ecuaie de gradul II; 2. a = 0 i b 0, ecuaie de gradul I; 3. a = 0 i b = 0 i c 0, ecuaie imposibil; 4. a = 0 i b = 0 i c = 0, ecuaie nedeterminat. Rmne s fie rezolvate fiecare dintre aceste situaii sau ca unele dintre ele s fie grupate, n funcie de cerine. Finitudine: operaiile trebuie astfel concepute nct algoritmul s se termine ntr-un numr finit de pai. Iterativitatea i recursivitatea n algoritmi Iterativitatea este procesul prin care rezultatul este obinut ca urmare a execuiei repetate a unui set de operaii, de fiecare dat cu alte valori de intrare. Numrul de iteraii poate fi cunoscut sau necunoscut, dar determinabil pe parcursul execuiei. Indiferent de situaie, numrul de iteraii trebuie s fie totdeauna finit. n cazul n care numrul de repetri nu este cunoscut iniial, oprirea ciclrii se face combinnd instruciunile de calcul cu limitarea la un numr prestabilit de pai. Utilizarea iterativitii n descrierea algoritmilor este uneori o cale simplificatoare, alteori singura alternativ de a preciza modul de desfurare a unui proces de calcul. n general, cnd numrul de iteraii nu este cunoscut sau este variabil de la o execuie la alta, construcia algoritmului presupune folosirea iterativitii. Recursivitatea este procesul repetitiv prin care valoarea unei variabile se determin pe baza uneia sau mai multora dintre propriile ei valori anterioare. Dup cum valoarea curent a variabilei depinde de una sau mai multe valori anterioare, procesul este unirecursiv, respectiv multirecursiv. Recursivitatea presupune definirea uneia sau mai multor formule de start n funcie de numrul valorilor anterioare de care depinde valoarea curent i a unei formule recursive (de recuren). Exemple: A numra nseamn a aduga o unitate la valoarea anterior calculat. Dac se noteaz v0 = 0 valoarea iniial, numrarea se desfoar dup urmtorul proces recursiv: v1 = v0 + 1 v2 = v1 + 1

v3 = v2 + 1 ........ vi = vi1 + 1 ........ vn = vn1+1 Valoarea care intereseaz este vn. n procesul descris anterior, se disting: v0 = 0 formula de start; vi = vi1 + 1 formula recursiv, pentru i = 1, 2, , n. Cnd nu este necesar pstrarea n memorie a valorilor obinute prin numrare, nu sunt necesare mai multe locaii, ci una singur, care va fi suprascris la fiecare iteraie: K=0 formula de start K=K+1 formula recursiv, pentru i = 1, 2, , n.

A nsuma cele n elemente ale unei mulimi A, nseamn a calcula sumele s1, s2, ..., sn, presupunnd s0 = 0, dup relaiile: s1 = s0 + a1 s2 = s1 + a2 s3 = s2 + a3 ......... si = si1 + ai ......... sn = sn1 + an Deoarece sumele pariale nu intereseaz i, n plus, ocup inutil memorie intern, nsumarea se va raliza n aceeai locaie de memorie, cu adresa S, n care se vor depune sumele pariale. S=0 formula de start; S = S + ai formula recursiv, pentru i = 1, 2, , n. A nmuli cele n elemente ale unei mulimi A, nseamn a calcula produsele p1, p2, ..., pn.. Produsul celor n elemente ale unei mulimi se determin folosind formula de start p0=1 i formula recursiv pi=pi1 ai, pentru i = 1, 2, , n.
Cnd irul produselor pariale nu intereseaz, nmulirea se poate face folosind o singur locaie de memorie, care va fi suprascris la fiecare iteraie: P=1 formula de start; P = P * ai formula recursiv, pentru i = 1, 2, , n. Erorile n algoritmi Un algoritm este eficient i devine operaional n msura n care ntre resursele de calcul utilizate (timp i memorie calculator) i precizia rezultatelor se stabilete un raport acceptabil. Cu toat precizia oferit de calculatoarele electronice, calitatea rezultatelor este

influenat de muli ali factori. Soluia unei probleme depinde de datele iniiale, care se obin n urma unor observaii i msurtori, sau pe baza altor calcule prealabile. Precizia instrumentelor cu care se fac observaiile, condiiile n care au loc acestea, precizia calculelor necesare determinrii unor parametri iniiali genereaz erori n datele iniiale. n general, pentru aceast clas de erori se stabilesc limite de eroare. Exemplu: Pentru msurtorile fizice, mrimea observat este nsoit de limitele erorii: 250g5g; 0,35mm0,01mm etc. Muli dintre parametrii utilizai n formulele de calcul nu au o valoare exprimabil printr-un numr finit de zecimale (exemple: 2 , etc). Erorile de aproximare a acestora sunt cunoscute i vor fi astfel alese nct s fie corelate cu precizia dorit pentru calculele n care intr aceti parametri. O alt clas important de erori o constituie cele de rotunjire. Ele apar ca urmare a limitrii numrului de zecimale cu care se poate reprezenta un numr n calculator. Aceste erori depind de modul de reprezentare a numerelor n calculator, de sistemul de numeraie folosit n calcule, precum i de conversiile dintr-un sistem de numeraie n altul. Exemplu: Gama de reprezentare n calculator a numerelor n virgul mobil pe 6 octei este, n cazul microcalculatoarelor, de [2.9*1039, 1.7*1038]. Precizia de reprezentare corespunde la 12 zecimale. La rezolvarea, mai ales numeric, a unei probleme se folosete o metod matematic. De multe ori, fenomenul modelat este supus unor condiii simplificatoare, n funcie de care sunt alase una sau alta dintre metodele de rezolvare existente. Alegerea metodei poate introduce aa numitele erori de metod. Erorile introduse prin prezena n calculator a unor funcii crora n analiza matematic le corespund serii infinite se numesc erori reziduale. Ele se explic prin imposibilitatea calculrii unei serii infinite ntr-un numr finit de pai ai algoritmului. Programatorul trebuie s analizeze tipul i mrimea erorilor acceptate i s estimeze precizia rezultatelor obinute. Reprezentarea algoritmilor prin scheme logice Practica programrii calculatoarelor dovedete c schema logic este una dintre formele cele mai utilizate de reprezentare a algoritmilor. Ea se dovedete util n special n iniierea n programare, deoarece ofer o vizualizare mai bun, o redare expresiv i sintetic, uor de urmrit, a algoritmilor. ntr-o schem logic apar o serie de operaii exprimate sub form grafic, numite blocuri, etichetate cu informaii specifice i legate ntre ele prin arce orientate (sgei). Sgeile indic sensul parcurgerii schemei logice, de la primul bloc pn la ultimul. Blocul de nceput este etichetat cu cuvntul START. El apare o singur dat, la nceputul schemei logice, iar din el arcele doar pleac.

Blocul de sfrit este etichetat cu cuvntul STOP. El apare o singur dat, la sfritul schemei logice, iar n el arcele doar sosesc.

Blocul de citire este etichetat cu informaia de transfer al datelor de pe suportul extern i nscrierea lor n locaii de memorie intern. Lista_de_intrare conine variabile care precizeaz zonele de memorie intern receptoare. Operaia este necesar, deoarece datele pot fi prelucrate numai dac sunt prezente n memoria intern. Cuvntul citete poate fi nlocuit cu simbolul .

Citete lista_de_intrare

Blocul de scriere este etichetat cu informaia de transfer al datelor din locaiile de memorie intern pe suportul extern. Lista_de_ieire conine variabile, constante sau expresii care corespund unor zone de memorie intern emitoare. Cuvntul scrie poate fi nlocuit cu simbolul .

Scrie lista_de_ieire

Blocul de atribuire este etichetat cu informaia de evaluare a unei expresii e i nscrierea (atribuirea) rezultatului n locaia de memorie corespunztoare unei variabile v.

Simbolul = este operator de atribuire i nu operatorul relaional din matematic. Deci, de exemplu, prin r = t se va nelege c valoarea lui t este atribuit variabilei r (se mut coninutul lui t n r). Blocul de ramificare este etichetat cu condiia ce trebuie evaluat; rezultatul returneaz dou posibiliti adevrat sau fals cu expresiile corespunztoare.

Exemple: 1. S se realizeze schema logic i programul pentru calculul mediei aritmetice a dou numere, a i b. Din analiza problemei se observ c trebuie citite dou date (a,b), evaluat expresia i scris rezultatul calculat (m). Schema logic este:

SET TALK OFF CLEAR

STORE 0 TO a, b @2,2 SAY a= GET a PICT 999 @3,2 SAY b= GET b PICT 999 READ m = (a+b)/2 @4,2 SAY media = + STR(m) 2. S se realizeze schema logic i programul pentru calculul mediei aritmetice a patru numere, a, b, c, d, ce au valori cuprinse n intervalul [100, 500]. Din analiza problemei se observ c trebuie citite patru date (a,b, c, d), evaluat expresia i scris rezultatul calculat (m). Schema logic este:

START

a=0, b=0, c=0, d=0

Citete a, b, c,d

m = (a+b+c+d)/4

Scrie m

STOP

SET TALK OFF CLEAR STORE 0 TO a, b, c, d @2,2 SAY a= GET a PICT 999 RANGE 100, 500 @3,2 SAY b= GET b PICT 999 RANGE 100, 500 @4,2 SAY c= GET c PICT 999 RANGE 100, 500 @5,2 SAY d= GET d PICT 999 RANGE 100, 500 READ m = (a+b+c+d)/4 @6,2 SAY media = + STR(m) 3. S se realizeze schema logic i programul pentru calculul perimetrului, ariei i diagonalei unui dreptunghi de lungime a i lime b (a i b se citesc de la tastatur).

Din analiza problemei se observ c trebuie citite patru date (a, b, c, d), evaluate cele trei expresii i scrise rezultatele calculate (p, d i s). Schema logic este:

START

a=0, b=0

Citete a, b

p = 2 * (a +b) d = sqrt (a2 + b2) s=a*b


Scrie p, d, s

STOP

SET TALK OFF CLEAR STORE 0 TO a, b @2,2 SAY a= GET a PICT 999 @3,2 SAY b= GET b PICT 999 READ p = 2*(a+b) d = SQRT (a^2 + b^2) s=a*b @4,2 SAY perimetrul = + STR(p) @5,2 SAY diagonala = + STR(d) @6,2 SAY aria = + STR(s) 4. S se realizeze schema logic i programul pentru calculul lungimii i ariei unui cerc (raza se citete de la tastatur). Raza se va exprima printr-un numr cu dou zecimale. Se cere i afiarea unitilor de msur. Din analiza problemei se observ c trebuie citit raza (sau diametrul), evaluate cele dou expresii i scrise rezultatele calculate (l i s). Schema logic este:

START

r=0

Citete r

l = 2 * pi * r s = pi * r^2
r

Scrie l, s STOP

l=2* SET TALK OFF pi * r CLEAR s = pi * STORE 0 TO r r^2 @2,2 SAY raza = GET a PICT 99,99 READ l = 2 * PI() * r s = PI() * r^2 @3,2 SAY lungimea = + STR(l) + cm @4,2 SAY aria = + STR(s) + cmp 5. S se realizeze schema logic i programul pentru calculul ariei unui triunghi oarecare, folosind formula lui Heron. Din analiza problemei se observ c trebuie citite cele trei date (laturile triunghiului), evaluate cele dou expresii (semiperimetrul i aria), apoi scris rezultatul. Schema logic este:

START

a = 0, b = 0, c = 0

Citete a, b, c

p = (a +b+c)/2 s =sqrt (p(p-a)(p-b)(p-c))


r

Scrie s STOP

SET TALK OFF CLEAR STORE 0 TO a, b, c @2,2 SAY a= GET a PICT 999 @3,2 SAY b= GET b PICT 999 @4,2 SAY c= GET c PICT 999 READ p = (a +b+c)/2 s =sqrt (p*(p-a)*(p-b)*(p-c)) @6,2 SAY aria = @6,8 SAY s
a + 2b 3 c , a2 b + c2

6. S se realizeze schema logic i programul pentru evaluarea expresiei: E =

unde a [20, 50], b [200, 400], c [1, 9]. Din analiza problemei, se observ c sunt trei date de intrare: a, b i c. Se va calcula expresia i va afia rezultatul (E). Schema logic este:

START

a = 0, b = 0, c = 0

Citete a, b, c

E = (a + 2b3 - c)/(a2 b + c2) r Scrie E STOP

SET TALK OFF CLEAR STORE 0 TO a, b, c @2,2 SAY a= GET a PICT 99 @3,2 SAY b= GET b PICT 999 @4,2 SAY c= GET c PICT 9 READ e = (a +2*b^3-c) / (a^2 b +c^2) @6,2 SAY expresia = @6,12 SAY e PICT 999999, 999