Sunteți pe pagina 1din 12

Etapele rezolvării problemelor cu calculatorul

Rezolvarea unei probleme cu ajutorul calculatorului este o activitate complexă, care


impune o abordare sistematică, bazată pe o succesiune riguroasă de operaţii, în realizarea
cărora se folosesc tehnici şi instrumente specifice. Etapele rezolvării problemelor cu ajutorul
calculatorului sunt:
 Formularea problemei. Se precizează rezultatele care trebuie obţinute şi forma lor de
prezentare, datele de intrare şi modul lor de organizare, precum şi transformările şi
prelucrările aplicate asupra datelor de intrare pentru a obţine rezultatele. Formularea clară,
corectă şi completă a problemei este o cerinţă importantă pentru finalizarea cu bune
rezultate a activităţii de proiectare şi realizare a programelor. În cazul aplicaţiilor de mari
dimensiuni, a căror rezolvare se abordează de către o echipă de analiză-proiectare-
programare, formularea problemei poate fi primită de programator de la analistul-
proiectant, sub forma de specificaţii de problemă.
 Formalizarea matematică şi alegerea metodei numerice. Se exprimă matematic toate
transformările şi prelucrările la care sunt supuse datele de intrare pentru a obţine
rezultatele, se pun în evidenţă condiţiile iniţiale şi restricţiile referitoare la soluţie. La
alegerea metodei numerice de rezolvare trebuie analizate cu atenţie stabilitatea şi
convergenţa metodei, tipul, mărimea ş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 solicitării acestor resurse
peste limitele admisibile. Se recomandă ca în etapa formalizării matematice să se
stabilească şi ordinea de efectuare a prelucrărilor, să se reţină informaţiile necesare
următoarei etape (variaţia indicilor, momentul introducerii/extragerii datelor, iniţializarea
variabilelor şi masivelor etc.).
 Elaborarea (proiectarea) algoritmului. Este o etapă complexă, care presupune analiza
riguroasă a problemei şi a formalizării ei matematice. Una dintre metodele uzuale de
elaborare a algoritmilor este proiectarea structurată, ale cărei 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.), simplificând 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ă respectând strict
algoritmul elaborat (eventual se pot face modificări şi detalieri ale acestuia) urmărindu-se,
în acelaşi timp, optimizarea utilizării resurselor calculatorului (timp, unitate centrală,
memorie internă şi echipamente periferice). În cazul programelor interactive, este necesară
realizarea unor interfeţe prietenoase, care să lanseze solicitări clare, precise şi complete.
 Testarea şi definitivarea programului. Programul scris într-un limbaj sursă va fi
compilat şi consolidat. În procesul compilării, programele sunt testate sintactic, iar în
procesul consolidării (editării de legături) se validează, în principal, modul în care au fost
apelate, implicit sau explicit, procedurile utilizatorului sau ale sistemului. La unele sisteme
de programare, faza consolidării este lansată o dată cu prima execuţie. După parcurgerea
acestor faze, programul este testat în execuţie, pe baza unor seturi stabilite de date de
control. Programul este considerat corect dacă rezultatele obţinute sunt cele scontate
(pentru datele de test, programatorii trebuie să determine dinainte rezultatele, valorile şi
forma lor de prezentare).
 Definitivarea documentaţiei programului. Deşi mai puţin spectaculoasă, chiar
„birocratică“, această etapă este obligatorie pentru exploatarea, dezvoltarea şi adaptarea
programului, mai ales dacă face parte dintr-un sistem. S-a arătat că, pe măsura desfăşurării
etapelor precedente, s-au realizat anumite documente necesare exploatării 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 restricţiilor de utilizare;
- schemele logice structurate (sau alte forme de reprezentare a algoritmului;
- modul de apel al procedurilor/funcţiilor şi structura datelor/parametrilor ce se
transferă între apelator şi apelat;
- instrucţiuni de utilizare (procedura de punere în lucru, lista şi forma întrebărilor şi
răspunsurilor în conversaţia cu utilizatorii, lista programelor care trebuie executate
în amonte etc.);
- exemple de utilizare.
Trebuie menţionată, de asemenea, în special pentru dezvoltările ulterioare, utilitatea
autodocumentării programelor, realizată sub forma unor comentarii incluse în programul
sursă.
 Exploatarea curentă. După punerea la punct, programele intră în utilizare, fiind
urmărite în vederea depistării unor erori care nu au putut fi sesizate iniţial. Această etapă
asigură menţinerea în funcţiune şi dezvoltarea programelor, proces care poate continua pe
tot parcursul utilizării lor.

2.2. Noţiunea de algoritm. Caracteristici şi forme de reprezentare

Algoritmul desemnează o mulţime exhaustivă şi univoc determinată de operaţii,


împreună cu succesiunea de aplicare a lor asupra datelor iniţiale, pentru a obţine soluţia
problemei. În activitatea de rezolvare a problemelor cu ajutorul calculatorului, elaborarea
algoritmilor este o etapă importantă şi obligatorie. De calitatea algoritmilor depinde, în
mare măsură, calitatea programelor şi succesul execuţiei acestora.
În practica programării se utilizează diverse forme de reprezentare a algoritmilor,
dintre care menţionăm: în cuvinte – pe paşi; 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 ecuaţiei 2x2 – 5x + 3 = 0, ci pentru o
ecuaţie de forma ax2 + bx + c = 0; a, b, c  R; a  0.
Determinare (claritate): algoritmul trebuie să prevadă modul de soluţionare a
tuturor situaţiilor care pot apărea în rezolvarea problemei respective, fără ambiguităţi sau
neclarităţi, aspect impus de caracterul de automat al calculatorului electronic. Situaţiile pot
fi grupate, după nevoie, în clase, indicându-se modul de tratare pentru fiecare dintre
acestea; orice situaţie trebuie să fie cuprinsă într-o clasă şi numai în una.

Exemplu:
Pentru rezolvarea ecuaţiei:
ax2 + bx + c = 0, a, b, c, x  R
există patru situaţii posibile, care trebuie cuprinse în algoritm:
1. a  0, ecuaţie de gradul II;
2. a = 0 şi b  0, ecuaţie de gradul I;
3. a = 0 şi b = 0 şi c  0, ecuaţie imposibilă;
4. a = 0 şi b = 0 şi c = 0, ecuaţie nedeterminată.
Rămâne să fie rezolvate fiecare dintre aceste situaţii sau ca unele dintre ele să fie
grupate, în funcţie de cerinţe.
Finitudine: operaţiile trebuie astfel concepute încât algoritmul să se termine într-un
număr finit de paşi.

Iterativitatea şi recursivitatea în algoritmi

Iterativitatea este procesul prin care rezultatul este obţinut ca urmare a execuţiei
repetate a unui set de operaţii, de fiecare dată cu alte valori de intrare.
Numărul de iteraţii poate fi cunoscut sau necunoscut, dar determinabil pe parcursul
execuţiei. Indiferent de situaţie, numărul de iteraţii trebuie să fie totdeauna finit. În cazul în
care numărul de repetări nu este cunoscut iniţial, oprirea ciclării se face combinând
instrucţiunile de calcul cu limitarea la un număr prestabilit de paşi. Utilizarea iterativităţii
în descrierea algoritmilor este uneori o cale simplificatoare, alteori singura alternativă de a
preciza modul de desfăşurare a unui proces de calcul. În general, când numărul de iteraţii
nu este cunoscut sau este variabil de la o execuţie la alta, construcţia algoritmului
presupune folosirea iterativităţii.
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
funcţie de numărul valorilor anterioare de care depinde valoarea curentă – şi a unei formule
recursive (de recurenţă).

Exemple:
 A număra înseamnă a adăuga o unitate la valoarea anterior calculată. Dacă se
notează v0 = 0 valoarea iniţială, numărarea se desfăşoară după următorul proces recursiv:
v1 = v0 + 1
v2 = v1 + 1
v3 = v2 + 1
........
vi = vi–1 + 1
........
vn = vn–1+1
Valoarea care interesează este vn. În procesul descris anterior, se disting:
v0 = 0  formula de start;
vi = vi–1 + 1  formula recursivă, pentru i = 1, 2, …, n.

Când nu este necesară păstrarea în memorie a valorilor obţinute prin


numărare, nu sunt necesare mai multe locaţii, ci una singură, care va fi suprascrisă la
fiecare iteraţie:
K=0  formula de start
K=K+1  formula recursivă, pentru i = 1, 2, …, n.

 A însuma cele n elemente ale unei mulţimi A, înseamnă a calcula sumele s1,
s2, ..., sn, presupunând s0 = 0, după relaţiile:
s1 = s0 + a1
s2 = s1 + a2
s3 = s2 + a3
.........
si = si–1 + ai
.........
sn = sn–1 + an
Deoarece sumele parţiale nu interesează şi, în plus, ocupă inutil memorie
internă, însumarea se va raliza în aceeaşi locaţie de memorie, cu adresa S, în care se
vor depune sumele parţiale.
S=0  formula de start;
S = S + ai  formula recursivă, pentru i = 1, 2, …, n.

 A înmulţi cele n elemente ale unei mulţimi A, înseamnă a calcula produsele p1,
p2, ..., pn.. Produsul celor n elemente ale unei mulţimi se determină folosind formula de
start p0=1 şi formula recursivă pi=pi–1 · ai, pentru i = 1, 2, …, n.

Când şirul produselor parţiale nu interesează, înmulţirea se poate face


folosind o singură locaţie de memorie, care va fi suprascrisă la fiecare iteraţie:
P=1  formula de start;
P = P * ai  formula recursivă, pentru i = 1, 2, …, n.

Erorile în algoritmi

Un algoritm este eficient şi devine operaţional în măsura în care între resursele de


calcul utilizate (timp şi memorie calculator) şi precizia rezultatelor se stabileşte un raport
acceptabil. Cu toată precizia oferită de calculatoarele electronice, calitatea rezultatelor este
influenţată de mulţi alţi factori.
Soluţia unei probleme depinde de datele iniţiale, care se obţin în urma unor
observaţii şi măsurători, sau pe baza altor calcule prealabile. Precizia instrumentelor cu care
se fac observaţiile, condiţiile în care au loc acestea, precizia calculelor necesare
determinării unor parametri iniţiali generează erori în datele iniţiale. În general, pentru
această clasă de erori se stabilesc limite de eroare.

Exemplu:
Pentru măsurătorile fizice, mărimea observată este însoţită de limitele erorii: 250g±5g;
0,35mm±0,01mm etc.

Mulţi dintre parametrii utilizaţi în formulele de calcul nu au o valoare exprimabilă


printr-un număr finit de zecimale (exemple: 2 ,  etc). Erorile de aproximare a acestora
sunt cunoscute şi vor fi astfel alese încât să fie corelate cu precizia dorită pentru calculele în
care intră aceşti parametri.
O altă clasă importantă de erori o constituie cele de rotunjire. Ele apar ca urmare a
limitării numărului de zecimale cu care se poate reprezenta un număr în calculator. Aceste
erori depind de modul de reprezentare a numerelor în calculator, de sistemul de numeraţie
folosit în calcule, precum şi de conversiile dintr-un sistem de numeraţie în altul.

Exemplu:
Gama de reprezentare în calculator a numerelor în virgulă mobilă pe 6 octeţi este, în cazul
microcalculatoarelor, de [2.9*10–39, 1.7*1038]. Precizia de reprezentare corespunde la 12
zecimale.

La rezolvarea, mai ales numerică, a unei probleme se foloseşte o metodă


matematică. De multe ori, fenomenul modelat este supus unor condiţii simplificatoare, în
funcţie de care sunt alase una sau alta dintre metodele de rezolvare existente. Alegerea
metodei poate introduce aşa numitele erori de metodă.
Erorile introduse prin prezenţa în calculator a unor funcţii cărora în analiza
matematică le corespund serii infinite se numesc erori reziduale. Ele se explică prin
imposibilitatea calculării unei serii infinite într-un număr finit de paşi ai algoritmului.
Programatorul trebuie să analizeze tipul şi mărimea erorilor acceptate şi să estimeze
precizia rezultatelor obţinute.

Reprezentarea algoritmilor prin scheme logice

Practica programării calculatoarelor dovedeşte că schema logică este una dintre


formele cele mai utilizate de reprezentare a algoritmilor. Ea se dovedeşte utilă în special în
iniţierea în programare, deoarece oferă o „vizualizare“ mai bună, o redare expresivă şi
sintetică, uşor de urmărit, a algoritmilor.
Într-o schemă logică apar o serie de operaţii exprimate sub formă grafică, numite
blocuri, etichetate cu informaţii specifice şi legate între ele prin arce orientate (săgeţi).
Săgeţile indică sensul parcurgerii schemei logice, de la primul bloc până la ultimul.
 Blocul de început este etichetat cu cuvântul START. El apare o singură dată, la
începutul schemei logice, iar din el arcele doar pleacă.
 Blocul de sfârşit este etichetat cu cuvântul STOP. El apare o singură dată, la sfârşitul
schemei logice, iar în el arcele doar sosesc.

 Blocul de citire este etichetat cu informaţia de transfer al datelor de pe suportul extern


şi înscrierea lor în locaţii de memorie internă. Lista_de_intrare conţine variabile care
precizează zonele de memorie internă receptoare. Operaţia este necesară, deoarece datele
pot fi prelucrate numai dacă sunt prezente în memoria internă. Cuvântul „citeşte“ poate fi
înlocuit cu simbolul „→“.

Citeşte lista_de_intrare

 Blocul de scriere este etichetat cu informaţia de transfer al datelor din locaţiile de


memorie internă pe suportul extern. Lista_de_ieşire conţine variabile, constante sau
expresii care corespund unor zone de memorie internă emiţătoare. Cuvântul „scrie“ poate fi
înlocuit cu simbolul „←“.

Scrie lista_de_ieşire

 Blocul de atribuire este etichetat cu informaţia de evaluare a unei expresii e şi


înscrierea (atribuirea) rezultatului în locaţia de memorie corespunzătoare unei variabile v.
Simbolul = este operator de atribuire şi nu operatorul relaţional din matematică.
Deci, de exemplu, prin r = t se va înţelege că valoarea lui t este atribuită variabilei r (se
mută conţinutul lui t în r).

 Blocul de ramificare este etichetat cu condiţia ce trebuie evaluată; rezultatul returnează


două posibilităţi – adevărat sau fals – cu expresiile corespunzătoare.

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

Citeşte 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 lăţime 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

Citeşte 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 citeşte de la tastatură). Raza se va exprima printr-un număr cu două zecimale. Se
cere şi afişarea unităţilor de măsură.
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

Citeşte 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

Citeşte 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
6. Să se realizeze schema logică şi programul pentru evaluarea expresiei: E  ,
a2  b  c2
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 afişa rezultatul (E). Schema logică este:
START

a = 0, b = 0, c = 0

Citeşte a, b, c

E = (a + 2b3 - c)/(a2 – b + c2)

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”

S-ar putea să vă placă și