Sunteți pe pagina 1din 8

III.

Programarea calculatoarelor
_______________________________________________________________________________________________________________

III.2.5.5
III.2.5.5.1

Exemple/cazuri caracteristice reutilizabile n aplicaii


Gruparea de operaii n proceduri; exemplu cu structuri alternative imbricate

De multe ori, o aplicaie complex necesit rezolvarea unei mulimi de operaii, care prin prisma naturii lor - pot fi grupate n dou sau mai multe grupuri, fiecare din acestea tratnd o anumit problematic distinct. Astfel de grupuri pot fi tratai drept algoritmi de sine stttori, cu intrri i ieiri, fiind nglobai ca atare n algoritmul ntregii aplicaii. Reprezentarea n ordinogram urmeaz aceleai reguli ale schemelor logice. Se recomand ns explicitarea (n blocul de start) a denumirii procedurii, iar n blocul de final, rentoarcerea (RETURN) n algoritmul principal.

b 2 450 sinx f = tgx a b + b

pt : x < 0 pt : 0 < x < 2 pt : 2 < x < 4 pt : 4 < x < 10 8


START_Func ie
Citete: a, b Citete: x

Tem. S se creeze o schem logic pentru algoritmul de calcul al funciei alturate. Sunt 4 domenii de definiie distincte. Se poate utiliza o structur expandat, explicit, sau se pot grupa situaiile n proceduri, aa cum este artat n figura nr. III.19a) i respectiv b).

START_Funcie2 (x) NU

START_Func ie Citiri NU x < 2 DA Funcie1(x)

DA NU

x <2

DA

x<0

DA

x < 4

NU

Funcie2(x) f = b450 +x f = sin(x) f = tg(x) f = ab +x^(1/2)

Scrie: f Scrie: f

RETURN a) RETURN Figura nr. III.19

RETURN b)

Cu linii ntrerupte se indic modalitatea n care se grupeaz mai multe operaii n proceduri, respectiv cum se desfoar procedurile. La subcapitolul II.2.5.6.2. (problema mpririi cu rest) este de asemenea utilizat o astfel de modalitate de lucru. Exerciiu: s se completeze algoritmul pentru o aplicaie la care s se calculeze valorile funciei pentru o mulime de valori x cuprinse intre xmin i xmax cu un pas dx (parametrii citii interactiv); s se traseze graficul funciei pentru domeniul evideniat.

149

Utilizarea i programarea calculatoarelor


_________________________________________________________________________________________________________________

III.2.5.5.2

Variabilele indexate i tratarea lor cu structuri repetitive

Un caz tipic pentru structurile repetitive este cel al lucrului cu variabilele indexate, iar exemplul tipic pentru acestea sunt vectorii i matricile, la care elementele au aceeai denumire, dar indici diferii. Presupunnd cazul cel mai general n care astfel de variabile sunt necesare pentru rezolvarea unei aplicaii/probleme oarecare, operaiile legate de aceasta sunt plasate ntr-unul sau n mai multe module intermediare (care poate fi constituit din proceduri sau structuri fundamentale) ntre cele de intrri i ieiri, denumite module de lucru/aplicaie Variabile indexate Posibiliti de tratare
Soluie inadecvat Soluie utilizat i admis dar nerecomandat

START
Citete: n

Soluie recomandat !

i j:=1 j : =j +1
Modul_ciclu WHILE-DO

START
Citete: x1, x2, ., xn Module de lucru/aplicaie: M1,..,m Scrie: x1, x2, ., xn

START
Citete: n, x(j); j=1,2,,n Module de lucru/aplicaie: M1,..,m Scrie: n, x(j); j=1,2,,n

Citete: x(j)

j<=n !Sunt variabile indexate de variabil- contor = j NU o i1


Module de lucru/aplicaie: M1,..,m

DA d: Condiionare anterioar !!

Structurile pot fi transpuse direct n programe

om i j:=1
Modul_ciclu WHILE-DO

STOP a)
Nu sunt variabile indexate!

STOP b)
Nu se poate transpune direct n programe

c)

j : =j +1
Scrie: x(j)

j<=n NU o

DA d: Condiionare anterioar !!

Figura nr. III.20

STOP

aa cum se evideniaz n figura nr. III.20. Algoritmul trebuie s faciliteze transpunerea n limbaje de programare. Pentru valabilitate general conform figurii nr. III.20 c), recomandate, se gestioneaz indexul printr o variabil- contor care este argument al variabilei indexate din punct de vedere formal. Prin aceasta se pot introduce elementele (indiferent de numrul lor) printr-o singur structur repetitiv n care figureaz doar elementul generic (prin simbolurile variabil + index). Se mai observ c se aplic de dou ori o astfel de structur: o dat la intrare i o dat la ieire, 150

III. Programarea calculatoarelor


_______________________________________________________________________________________________________________

Se prezint n figura nr. III.22 a) algoritmul de cutare binar (denumit n unele surse bibliografice i divide et impera). Acesta const n prim faz (Iteraia_1) n compararea valorii-int cu un element situat la mijlocul listei (denumit uneori i pivot). Dac valoarea este mai mic dect acesta, se caut exclusiv n jumtatea inferioar a listei. Altfel, n cea superioar. n faza a doua (Iteraia_2) se reproduce mecanismul enunat pentru jumtatea selectat a listei i se continu apoi n aceeai manier, pn la gsirea intei (dac aparine listei) sau pn la epuizarea ntregii liste (n caz contrar). Indiferent de metod, rezultatul afiat prin mesaje - poate fi: un succes: gsirea i localizarea exact (prin poziie) a valorii-int cutate n list; un eec: valoarea-int nu se gsete n list. n figura nr. III.22 b) se exemplific situaia listei la primele iteraii de cutare. III.2.5.6 Aplicaii n continuare se prezint algoritmii de rezolvare a unor aplicaii clasice, care se regsesc des n manualele de programare. Majoritatea sunt din domeniul matematic. Alte aplicaii (ghieul de banc, procesele de nvare a programrii din subcapitolul nr. III.1) sunt foarte utile pentru nsuirea modului logic, algoritmic de judecare i rezolvare a oricrui tip de problem.
III.2.5.6.1 Algoritmul ecuaiei de gradul 2

a fost prezentat deja n limbaj natural la subcapitolul nr. III.2.2, Tabelul nr. III.4. Schema logic este situat n figura nr. III.23, relaiile fiind scrise pentru limbajul Qbasic. START_ A-Ec2
Citete: a, b, c

a=0 NU

DA DA b=0 NU x : = c/b
Scrie: x Scrie: Incompatibil

d : = b ^2 4* a* c NU d<0
Re : = -b/(2*a) Im :=(-d) ^ (1/2)/(2*a) Scrie: x1,2=f(Re, Im)

DA

NU c=0

DA

x1:= (-b+d ^ (1/2)) /(2*a) x2:= (-b-d ^ (1/2)) /(2*a) Scrie: x1, x2

Scrie: Nedefinit

STOP

Figura nr. III. 23

153

Utilizarea i programarea calculatoarelor


_________________________________________________________________________________________________________________

III.2.5.6.2

mprirea cu rest

Pentru dou numere naturale date, d (de_mprit) i (mpritor), algoritmul ImpRest (structurat, cu procedur) din figura nr. III.24 utilizeaz scderi succesive din d i contorizarea lor prin variabila ct c, ultima valoare d < fiind restul r. Este de reinut faptul c n Qbasic exist operatori speciali pentru mprire ntreag i restul mpririi (a se vedea Tabelul nr.III.9). START_ ImpRest( d, , c, r) c:=0 DA d>= NU DA d:=d- c:=c+1 r:=d STOP Figura nr. III.24 START
Citete: n

START
Citire: d,

NU

> 0

Scrie:

ImpRest ( d, , c, r)
Scrie:

este 0 c, r

RETURN

III.2.5.6.3 naturale

Problema sumei primelor n numere

s:=0 i:=0

i< n NU Scrie_nnat(1n)
Scrie:

DA nnat(i+1) : = i s:=s+i i:=i+1

n ipoteza procesului de generare secvenial a numerelor se rezolv conform algoritmului din figura nr. III.25. Relaia de calcul direct nu este utilizat, dar poate fi aplicat pentru verificare. Se observ c generatorul de numere este chiar variabila-contor i. Suplimentar, sunt gestionate individual numerele generate prin intermediul variabilei indexate nnat. Observaie Procedura de scriere trebuie evident explicitat, pentru o reprezentare complet. Este vorba de afiarea repetat (de n ori) a elementului generic al mulimii nnat (conform structurii prezentate la subcapitolul nr. II.2.5.5.2)!

n, s STOP Figura nr. III.25

154

III. Programarea calculatoarelor


_______________________________________________________________________________________________________________

START
III.2.5.6.4 Problema celui mai mare divizor (cmmdc) comun
Citete: a,

a dou numere oarecare (a i b) se rezolv conform algoritmului (denumit al lui Euclid) prezentat n figura nr. III.26. n prim faz se efectueaz o evaluare a modulelor celor dou numere pentru a se putea poziiona (reciproc) descresctor dup valoare (semnul neavnd importan n acest caz). Numerele sunt apoi asignate n ordine cu d i . Se aplic n continuare procedura mpririi cu rest (ImpRest prezentat anterior). Urmeaz o structur repetitiv condiionat anterior la care un rest r nenul determin reatribuirea de valori pentru d i i o nou aplicare a ImpRest. Dac restul are valoare zero, algoritmul se ncheie cu succes i declar valoarea drept cmmdc. Observaie n algoritmul prezentat, se utilizeaz din motive didactice procedura ImpRest dezvoltat n ordinograma din figura nr. III.24. Se poate simplifica algoritmul dac n locul acesteia se dispun relaii de calcul-atribuire direct pentru ct i rest cu ajutorul operatorilor disponibili n Qbasic (mprire intreag i respectiv modulo): c:=d| i respectiv r : = d MOD .

b DA d : =| a| : =| b|

NU d : =| b| : =| a|

|a|>|b|

DA >0 NU ImpRest ( d, , c, r)
Scrie:

[ a|b] = 0! r=0 DA cmmdc : = NU d:= := r ImpRest ( d, , c, r)


Scrie:

cmmdc

Figura nr. III.26 STOP

Relaiile pot fi folosite i pentru verificarea corectitudinii procedurii ImpRest.

155

Utilizarea i programarea calculatoarelor


_________________________________________________________________________________________________________________

III.2.5.6.5 Alegerea mulime de n numere date

maximului

dintr-o

START

Citete: n se desfoar dup algoritmul prezentat n figura nr. III.27. Introducerea (citirea) datelor este gestionat prin elementele C(i) ale Citire_C(1n) variabilei indexate C(1n). Poate fi Figura nr. III.27 reprezentat i simplificat, dar o transpunere max : = C(1) direct n limbaje de programare reclam imax : = 1; i : =2 utilizarea structurii prezentate la subcapitolul nr. III.2.5.5.2 (procedura nemaifiind explicitat). Se declar elementul iniial C(1) drept maxim (variabila max) i se compar DA succesiv valoarea max cu cea a fiecrui i < = n element al variabilei n cadrul unei structuri NU repetitive (ncepnd cu cel de-al doilea DA element). Dac aceasta este mai mare dect C(i) >max max, se reatribuie noua valoare variabilei max. NU La ncheierea ultimei iteraii, se scriu toate max : = C( i) valorile C (prin procedur!) i maximul Scrie_C(1n) imax : = i depistat. Suplimentar, s-a prevzut i identificarea indicelui imax al elementului de Scrie: valoare maxim. max, imax Observaie i:=i+1 Se atrage atenia c procedurile de citire i scriere trebuie explicitate, pentru o START reprezentare complet. Este vorba de citirea/afiarea repetat (de n ori) a elementului generic al mulimii C (conform structurii prezentate la subcapitolul nr. II.2.5.5.2)!

III.2.5.6.6

Evidena situaiei zilnice la un ghieu (pentru depuneri) la banc

ntr-o situaie ipotetic, simplificat, pe msura sosirii clienilor la un ghieu de banc, pn la sfritul programului de lucru, se cere crearea algoritmului care d posibilitatea nregistrrii numelui i prenumelui clienilor, apoi a sumelor depuse i a perioadei preconizate de depozit. Se calculeaz dobnda anual funcie de aceast perioad; spre exemplu: pentru perioade de 1, 2, 3 ani clientului se ofer o dobnd de respectiv 2, 3, 4%. Se adaug dobnda anual la suma depus pentru total capital. Se mai cere afiarea/scrierea situaiei la sfritul programului precum i a unui mesaj n trei variante, dependent de totalul general zilnic depunere (spre exemplu, de gen: astzi a fost o zi slab pentru mai puin de 100.000 RON, binior pentru intervalul urmtor, de pn la 200.000 RON, foarte bine pentru depirea acestei limite). Pentru ca intrrile i prelucrrile s nu se piard se impune o gestiune cu variabile indexate! n figura nr. III.28 se poate consulta ordinograma algoritmului la care pot exista i alternative (referitor la introducerea procentului printr-un bloc de intrare, sau includerea ntregii structuri repetitive ntr-o procedur separat, ceea ce ar mri gradul de structuralitate). Este prevzut i o extensie a temei: posibilitatea de ordonare n ordinea sumelor depuse (n versiune simplificat) sau, ordonare dup oricare din variabilele implicate; se va

156

III. Programarea calculatoarelor


_______________________________________________________________________________________________________________

START
Citete: prcnt1,2,3 Posibil prin procedur separat

i : =1 ; sumt : = 0 i=i+1 client ? NU NU


sfrit program

DA
Citete: nume( i), pren$ (i), suma( i), period( i)

DA Scrie_ghieu Scrie_Mesaj Extensie Ordonare_ghieu Fisier_ghieu STOP Figura nr. III.28

period( i)=1 NU period( i)=2 NU

DA
procent: = prcnt1

DA

procent: = prcnt2

procent: = prcnt3

dob(i) : = suma( i)*procent sumt : = sumt + suma( i) capit( i) : = suma( i) + dob( i)

lucra cu procedura de la subcapitolul nr. III.2.5.5.3. De asemenea se poate prevedea posibilitatea de salvare ntr-un fiier a situaiei zilnice (conform leciei L.10). III.2.5.7 Concluzii i observaii nc de la primele consideraii moderne asupra teoriei rezolvrii problemelor i implicit a algoritmilor, s-a constatat c nu poate exista o regul general valabil de rezolvare/creare. Mai mult, c n desfurarea procesului n sine pentru multe aplicaii exist o mare apropiere de art cu aport substanial de intuiie. Exist de asemenea probleme care nu pot fi tratate algoritmic. Pentru cele mai multe probleme de tip tehnic uzuale, conceptul de algoritm clasic prezentat - este cel cu care poate fi gestionat o rezolvare, dac sunt respectate toate proprietile necesare i modalitatea de judecat logic a etapelor coninute. Concluzie Este esenial pentru un algoritm s fie descris cu mare rigurozitate din punctul de vedere al impunerii structurilor logice fundamentale corecte n contextul proprietilor definitorii pentru corectitudine general i eficien. O descriere grafic, simbolic poate oferi rapid indicii vizuale relevante pentru eventuale greeli i poate oferi rigurozitate algoritmilor.

157

Utilizarea i programarea calculatoarelor


_________________________________________________________________________________________________________________

Observaii Dac se analizeaz riguros entitatea-algoritm, se va constata c aceasta reprezint n fond un sistem cu intrri i ieiri (figura nr.III.10).
Teoria sistemelor definete sistemul drept o mulime ordonat i structurat de elemente ntre care exist conexiuni bine determinate. Sistemele sunt net delimitate de mediul nconjurtor prin frontiera lor i sunt caracterizate printr-un set de mrimi, atributele, crora le sunt conferite valori. Atributele statice sunt caracterizate de valori fixe (constante) i poart denumirea de parametrii sistemului. Atributele dinamice primesc diferite valori la momente diferite i n puncte diferite din spaiu, purtnd denumirea de variabile descriptive ale sistemului: de intrare, ieire i de stare (sau interne). Modificrile survenite la intrare provoac modificri n starea sistemului, care, la rndul lor, sunt observate prin modificrile de la ieire. Se presupune c ieirea nu influeneaz intrarea (a se vedea i [Sav00]).

Privit prin aceast prism, cea mai general definiie a conceptului de algoritm relev faptul c acesta este un sistem care i poate modifica starea. Denumirea particular consacrat este cea de proces (care dealtfel figureaz i n definiia iniial de algoritm de la nceputul capitolului). Avnd n vedere faptul c n mod obinuit schemele logice sunt denumite i ordinograme, reprezentare simbolic, dar i organigrame, este de semnalat faptul c o interpretare mai riguroas conduce la utilizarea noiunii de: ordinogram pentru scheme logice de algoritmi, adic aa cum s-a accentuat mai sus - sisteme care-i modific starea intern (= procese cu operaii executate n ordinea lor); organigram pentru oglindirea celuilalt aspect esenial, al structurii (cu elementele componente ale) unui sistem! Chiar dac pn i n [DEX98] sensul noiunii este legat (greit, dup prerea autorului) de algoritm Dealtfel, cuvntul generic organ i n context tehnic are semnificaie anatomic doar prin similitudine. Desemneaz un element component (intern) al unui ansamblu i definete obiectul de studiu al unei discipline din domeniul mecanic: organe de maini care se ocup cu prile constitutive ale mainilor. Se mai ntlnesc i termenii organologie, organolog. O a doua interpretare a cuvntului-prefix poate proveni de la organizare care nu mai necesit explicaii. n context ns i aceast noiune pare s aibe acelai tip de semnificaie ca i cel anterior. Recomandarea este s nu se utilizeze termenul organigram pentru desemnarea algoritmilor ci exclusiv pentru a releva prile constitutive ale unui ntreg, printr-o schem grafic care este similar ca form cu schemele logice, dar esenial i funcional diferit de acestea! Pot fi date numeroase exemple: organigrame ale unor societi comerciale cu compartimentele sale (relev organizarea sa), ale unor linii de fabricaie (relev componentele unui ntreg) etc... Exist i contra-argumente: starea se modific prin elementele de structur Sunt cazuri n care reprezentarea grafic poate fi o combinaie a celor dou tipuri relevate. Fiind vorba de rigurozitate, noiunea de avans utilizat n explicaii - pentru desemnarea modului de parcurgere a diferitelor etape este de asemenea improprie n cazul salturilor la etape anterioare. Expresia dedus din exemple: avans cu salt napoi reprezint o contradicie n termeni, contradicie asumat de autor. Care poate fi ns rezolvat dac se definete n mod particular doar n context avansul ca fiind procedura de trecere de la o etap la alta indiferent de sensul de parcurgere al fiecrui pas. Avnd nelesul de element de contorizare a etapelor de rezolvare a aplicaiei n cauz.

158