Sunteți pe pagina 1din 12

M.

Medeleanu Utilizarea i programarea calculatoarelor*

3. Algoritmi i scheme logice Algoritmi


No iunea de algoritm este fundamental pentru programare. Din aceast cauz pentru a putea da o defini ie este util s se porneasc de la un exemplu: S se determine concentra ia procentual a unei solu ii de acid sulfuric ob inut prin amestecarea a 50g solu ie de concentra ie 98% cu 80g solu ie de concentra ie 10%. Se urmrete rezolvarea pas cu pas i nu aplicarea formulei, pentru a se eviden ia clar etapele construirii modului de rezolvare. Se noteaz: A - solu ia de 98% (concentra ia cA) B - solu ia de 10% (concentra ia cB) - conform datelor problemei mA = 50g mB = 80g (DATE)

- cantitatea total de solu ie ob inut : mT = mA + mB = 50 + 80 = 130g (REZOLVARE, VALORI INTERMEDIARE) - cantitatea de acid sulfuric hA n solu ia A i hB n solu ia B hA = cA mA = 0,98 50 = 49g H2SO4 pur hB = cB mA = 0,10 80 = 8g H2SO4 pur - cantitatea total de acid sulfuric hT hT = hA + hB = 49 + 8 = 57g - concentra ia final (cF) a solu iei va fi :
cF = hT 100 mT

cF = 43,85 % (REZULTAT FINAL)

Descrierea etapelor 1. - a atribuit simboluri distincte mrimilor cu care a lucrat: mA, mB, cA, cB, hA, hB, cF, mT. Totodat a fcut distinc ie ntre datele ini iale, (mA, cA, mB, cB), valorile intermediare calculate (hA, hB, ht i mT) i rezultatul final la care a ajuns (cF). 2. - a calculat succesiv mrimile selec ionate ca valori intermediare i apoi mrimea final. 3. - n final a prezentat rezultatul cerut. n urma rezolvrii acestei probleme i a detalierii etapelor parcurse s-a ob inut pe de o parte rezultatul cerut i totodat o succesiune de reguli, care trebuie parcurse dup o anumit secven (care implic i mrimile selec ionate pentru lucru). Aceast succesiune poate fi aplicat i altor cazuri similare.
1

M. Medeleanu Utilizarea i programarea calculatoarelor*

IN ATEN IA CHIMITILOR! Deoarece majoritatea problemelor care necesit o rezolvare numeric i are originea n fenomene naturale este necesar ca programatorii s fie aten i ca rezultatele ob inute s fie concordante cu realitatea (de exemplu nu poate exista o solu ie apoas de acid clorhidric de 90%, pentru a ne limita doar la tipul de problem men ionat mai sus). Reguli asemntoare celor aplicate n cazul problemei de mai sus pot fi dezvoltate i n alte situa ii (din chimie, fizic, biologie, astronomie etc.), cnd este necesar o rezolvare numeric sau doar logic a unei anumite probleme. Cteva exemple din diverse domenii sunt foarte utile : matematic - reguli pentru adunare (i pentru celelalte opera ii aritmetice), calculul combinrilor, factorialelor, radicalii etc. Chiar citirea unui numr format din mai multe cifre impune existen a unor reguli. Astfel cnd citim anul 1974, de fapt facem urmtoarele opera ii :

1 10 3 + 9 10 2 + 7 101 + 4 10 0
chimie - n afar de problemele strict numerice, se pot stabili reguli clare i eficiente pentru analiza calitativ a ionilor dintr-un amestec (a se vedea chimia analitic analiza calitativ), pentru succesiunea optim a etapelor unei sinteze organice, etc. alte domenii (probleme care nu necesit o rezolvare numeric): - orientarea n teren cu ajutorul unei hr i - execu ia unei piese muzicale (coresponden a not muzical - sunet real - instrument). - problema traversrii unei ape de ctre o persoan care are un lup, o capr i o varz (cele trei elemente fiind incompatibile cte dou din diverse motive). In concluzie, dup analiza celor prezentate mai sus se poate da o defini ie: Succesiunea regulilor care permit rezolvarea unei probleme se numete ALGORITM. Unul dintre primii matematicieni care s-au ocupat de eviden ierea regulilor dup care se efectuau calculele a fost savantul persan Muhammed Ibn Musa Horezmi cunoscut mai ales sub numele Al-Horezmi (~780 ~850 e.n.). Opera sa principal a fost KITAB AL-DJABR WA'L-MUQUABALA (Scurt carte despre calculul prin completare i reducere) a lsat n urm pe lng metodele descrise i cuvntul care a desemnat un ntreg domeniu matematic: algebra. Numele matematicianului a dat prin adaptare termenul algoritm. Modul schematic n care "func ioneaz" un algoritm este redat n Figura 1 care este foarte asemntoare cu schema prezentat la descrierea calculatoarelor i a sistemelor de operare:

DATE

ALGORITM

REZULTATE

Fig. 1. Descrierea schematic a unui algoritm

M. Medeleanu Utilizarea i programarea calculatoarelor*

Pentru ca o succesiune de evenimente (secven e, etape, calcule, etc.) s poat fi considerat algoritm sunt necesare cteva condi ii : 1. - Un algoritm trebuie s fie general. El nu trebuie conceput pentru o problem particular dect dac prin aplicarea lui timpul de lucru normal este sczut sau precizia rezultatului mai bun. Problema concentra iilor ar trebui formulat n felul urmtor : S se calculeze concentra ia procentual a unei solu ii ob inute prin amestecarea a mi grame din i solu ii de concentra ii procentuale ci (i = 1,2,...,n). Particularizarea problemei se va face n momentul calculului. Generalizarea unei probleme permite simplificarea activit ii ulterioare prin utilizarea aceluiai program de lucru n situa ii cu date diferite. 2. - Un algoritm trebuie s aibe un timp finit de calcul (un numr finit de etape). De exemplu nu poate fi scris un algoritm pentru calcularea tuturor zecimalelor unor numere ca , e, 2 , etc., numerele avnd o infinitate de zecimale. Acest gen de situa ii nu sunt singulare i atunci trebuie prevzut un criteriu de oprire a algoritmului: numrul de zecimale, numrul de termeni lua i n lucru etc. Nerespectarea acestei cerin e poate duce la blocarea calculatorului datorit neexisten ei unui criteriu de oprire a caclulelor. 3. - Toate opera iile dintr-un algoritm trebuie s fie definite. Aceasta nseamn c n momentul calculului toate mrimile de lucru trebuie s aibe valori efective. De exemplu, n problema concentra iilor, aflarea valorii concentra iei finale necesit cunoaterea tuturor valorilor intermediare. Nerespectarea acestei cerin e conduce la apari ia erorilor n timpul calculului de exemplu mpr ire cu zero, ceea ce duce la suspendarea execu iei programului i/sau la afiarea unor mesaje de eroare. 4. - Algoritmii trebuie s aibe claritate adic trebuie s prevad modul de solu ionare a tuturor situa iilor care pot aprea n rezolvarea problemei propuse, fr ambiguit i astfel nct sistemul de calcul pe care se vor implementa s poat efectua opera iile cerute. Un exemplu util l reprezint rezolvarea ecua iei de gradul II :

a x 2 + b x + c = 0,
Condi iile cerute pentru a nu se crea ambiguit i sunt : 1. dac a 0 2. dac a = 0 i b 0 3. dac a = 0 i b = 0 atunci c = 0 nonsens

a, b, c

ecua ie de gradul II ecua ie de gradul I n cazul n care c ar fi diferit de zero ar aprea un

Aceste prime trei condi ii sunt condi ii de existen ale ecua iilor de gradul I i II. Urmtoarele trei condi ii privesc cile pe care trebuie s fie parcurs algoritmul n cazul ecua iei de gradul II, n func ie de valorile intermediare ale discriminantului. 4. 5. 6. b2 - 4ac > 0 b2 - 4ac = 0 b2 - 4ac < 0 rdcini reale distincte rdcini reale egale rdcini complexe conjugate

Algoritmul de rezolvare a unei probleme nu este unic. Se poate gsi cel pu in nc o metod pentru rezolvare, chiar dac aceast modificare presupune inversarea unor etape. i o ultim observa ie legat de algoritmi : Nu exist un algoritm de scriere a algoritmilor !

M. Medeleanu Utilizarea i programarea calculatoarelor*

Scheme logice Algoritmii pot fi descrii foarte convenabil cu ajutorul schemelor logice. Schema logic este o niruire de semne grafice care descriu diversele etape ale calculelor, care descriu algoritmul de la datele ini iale (citirea lor) i pn la rezultate (afiarea sau tiprirea lor). Elementele grafice principale ale schemelor logice: - Orice schem logic ncepe cu semnul i se ncheie cu - Citirea datelor - Tiprirea rezultatelor - Calculele efectuate - Bloc de decizie - Apelul unui subprogram - Conector (ntreruperea schemei logice) , unde x este un numr sau o liter START STOP

Aceste semne nu sunt unice, neexistnd momentan un standard universal acceptat. Elementele grafice prezentate mai sus se leag ntre ele prin linii drepte terminate cu sge i care indic sensul de parcurgere a schemei (sensul de circula ie a informa iilor). Fiecare dintre aceste elemente are o singur intrare i o singur ieire. Excep ie face blocul de decizie care are dou ieiri, corespunztoare rspunsurilor posibile la condi ia marcat n interior: este adevrat (rspuns DA), sau este fals (rspuns NU). Pentru exemplificare sunt redate schemele logice corespunztoare algoritmului problemei concentra iilor i cel al rezolvrii ecua iei de gradul 2. START
MA,MB,CA,CB

- citirea datelor (ini ializarea lor)

HA

CAMA

HB

CBMB

- blocul de calcule
HT HA+HB -tiprirea rezultatului

MT CF

MA+MB HT/MT100 CF

STOP

Schema logic pentru problema concentra iilor 4

M. Medeleanu Utilizarea i programarea calculatoarelor*

.
START

A,B,C NU A0 NU B0 X - C/B
X1, X2 C

DA DA

DELTABB-4AC

DA NU DELTA 0 DA

EROARE

X1(-B- DELTA )/2/A

X2(-B+ DELTA )/2/A

X1,X2

STOP

Schema logic pentru ecua ia de gradul 2

Dup cum se poate constata, fa de modul uzual de reprezentare a opera iilor matematice apar o serie de modificri: Pentru semnele celor patru opera ii de baz se vor folosi: +, - pentru adunare, respectiv scdere , / pentru nmul ire respectiv mpr ire. pentru ridicarea la putere, n schema logic se permite utilizarea semnului ^ (a^3 = a 3 ), dar numai n schema logic, aceast opera ie nefiind permis ca atare n limbajul PASCAL.

n locul semnului de egalitate se scrie o sgeat orientat spre stnga, semnifica ia acesteia fiind diferit de egalitatea matematic propriu-zis. Acest lucru este necesar deoarece calculatoarele i stocheaz datele n memoria lor, memorie constituit, aa cum s-a artat n capitolul precedent, din loca ii sau celule, fiecare avnd o anumit adres (un numr dup care le recunoate calculatorul). Utilizatorul nu are nevoie s cunoasc adresele loca iilor de memorie, ci este suficient s cunoasc numele variabilelor folosite n program. Printr-un procedeu specific de declarare a variabilelor de lucru (i care nu se simbolizeaz n schema logic), prin program, calculatorul va denumi loca iile de memorie cu numele variabilelor a cror mrime o vor nregistra n aceleai loca ii. Astfel atunci cnd utilizatorul va ac iona (prin program) asupra unei variabile care are de exemplu numele x1, va ac iona n realitate asupra
5

M. Medeleanu Utilizarea i programarea calculatoarelor*

con inutului loca iei de memorie care se numete tot x1. Prin urmare, semnul de egalitate prin care o variabil primete o anumit valoare (de exemplu x1=5) se nlocuiete cu avnd semnifica ia de atribuire. Astfel expresia: x1 5 are semnifica ia: variabilei x1 i se atribuie valoarea 5 i n loca ia de memorie denumit x1 se va gsi valoarea 5. Deoarece de acum nainte nu se va mai face distinc ie n mod special ntre numele variabilei i numele loca iei de memorie n care se stocheaz valoarea acesteia se va utiliza expresia variabilei x i se atribuie valoarea y, i se va reprezenta: x y (valoarea y se poate ob ine i n urma evalurii unei expresii matematice, aa dup cum se poate remarca i din schema logic precedent). n cazul rezolvrii ecua iei de gradul 2 se noteaz cu A,B,C coeficien ii ecua iei, cu DELTA discriminantul, i cu X1, X2 rdcinile. n plus se mai noteaz cu X rdcina ecua iei de gradul 1 atunci cnd aceasta se poate calcula. Observa ie: Variabilele se pot nota fie cu liter mare, fie cu liter mic, din punct de vedere al sistemului de operare i al limbajului PASCAL fiind acelai lucru. Pentru rigurozitate i pentru aspectul unui program sau a unei scheme logice, este bine s se foloseasc acelai tip de reprezentare de la nceput la sfrit. De asemenea trebuie notat faptul c atunci cnd se scriu programe pentru calculatoare se folosete setul de caractere din standardul ASCII (adic doar caracterele care sunt pe tastaturile computerelor i au un anumit cod de reprezentare American Standard Code for Information Interchange), astfel c nu sunt admise reprezentri cu indice sau exponent. Prin urmare este necesar s se renun e i n schemele logice la acest gen de reprezentare. Evaluarea unei expresii dintr-un bloc de calcul ncepnd cu partea dreapt a blocului, de la stnga la dreapta, n ordinea priorit ii aritmetice a opera iilor. Ordinea poate fi modificat prin folosirea parantezelor. Rezultatul evalurii se va atribui variabilei din partea stng a semnului de atribuire. X1 a*(b+c)/(2*z) se evalueaz valoarea expresiei din partea dreapt (valorile intermediare sunt depozitate n memoria RAM n loca ii temporare, n ordinea priorit ii calculelor, iar rezultatul final se atribuie mrimii X1 (se va gsi la adresa corespunztoare loca iei de memorie care stocheaz mrimea X1).

M. Medeleanu Utilizarea i programarea calculatoarelor*

Tipuri de algoritmi n func ie de existen a sau inexisten a unor reveniri n interiorul algoritmilor se diferen iaz n algoritmi cu bucl, respectiv fr bucl (se mai numesc i liniari ). O bucl (ciclu) reprezint parcurgerea complet a unui set de opera ii cu revenire la un punct ini ial. Algoritmii prezenta i anterior sunt algoritmi fr bucl, rezolvarea efectundu-se ntr-un singur sens, eventual cu ramificri datorate condi iilor aprute pe parcurs. Algoritmii cu bucl se mpart n dou categorii: - algoritmi iterativi - algoritmi recursivi

Algoritmi iterativi Iterativitatea este procesul prin care rezultatul unei probleme se ob ine ca urmare a execu iei repetate a unui set de opera ii (repetarea unei bucle sau a unui ciclu), folosind de fiecare dat alte valori de intrare. Un exemplu concludent n acest sens l reprezint calcularea puterilor a doua i a treia a N numere citite de la tastatura calculatorului. Schema logic pentru acest algoritm este urmtoarea:
START

N I1 K K KK K2 KKK K,K1,K2 NU I=N DA


STOP

I I+1

citete numrul de date ini ializeaz ciclurile (I este variabila de control sau contorul ciclului) citete un numr k calculeaz ptratul (K1) numrului K calculeaz puterea a III-a (K2) a numrului K tiprete rezultatele verific dac s-au parcurs toate ciclurile cerute (N) avanseaz contorul cu 1 i se ntoarce la citire sau se oprete

Exemplu de schem logic pentru un algoritm iterativ

M. Medeleanu Utilizarea i programarea calculatoarelor*

Algoritmi recursivi Recursivitatea este procesul prin care rezultatul unei probleme se ob ine ca urmare a execu iei repetate a unui set de opera ii, folosind de fiecare dat rezultatul execu iei anterioare. Un exemplu tipic de algoritm recursiv este calcul factorialului unui numr: F = N! F = 123N, considernd c 0! = 1

Calculul se efectueaz succesiv, nmul ind valoarea F calculat n ciclul anterior cu valoarea curent a numrului N (notat cu K). Pentru a evita anularea rezultatului, F se ini ializeaz cu valoarea 1:
START

citete numrul al crui factorial trebuie calculat ini ializeaz factorialul cu valoarea 1

F1

K1

ini ializeaz contorul cu valoarea 1 efectueaz calculul

FFK NU K=N DA N, F KK+1

verific dac s-a ajuns la numrul dorit. Dac nu, contorul se avanseaz cu o unitate i se reia calculul pornind de la valoarea precedent calculat tiprete rezultatul i se oprete

STOP

Exemplu de schem logic pentru un algoritm recursiv

n cazul algoritmilor recursivi se pot stabili n anumite situa ii modalitti bine definite de efectuare a calculelor sau de oprire a lor. n exemplele anterioare criteriul de oprire a constat din numrul de termeni implica i (valoarea numrului N). Un alt criteriu de oprire poate fi precizia calculelor, atunci cnd rezultatul tinde spre o limit. Alte situa ii deosebite pot fi atunci cnd sunt cerute dou criterii de oprire (sau chiar mai multe). Acestea pot fi simultane (i unul i cellalt), succesive (unul sau cellalt) exclusive (sau unul sau cellalt).

n ceea ce privete modul propriu-zis de calcul se remarc algoritmii cu termen general (to i termenii pot fi reda i printr-o formul care depinde de regul de valoarea variabilei de control), respectiv cei la care evolu ia lor se bazeaz pe utilizarea unui termen cu expresie constant necesar modificrii valorii curente (fiecare termen nou se ob ine din cel vechi opernd cu termenul constant asupra lui). Exemplele ulterioare vor fi edificatoare n acest sens.
8

M. Medeleanu Utilizarea i programarea calculatoarelor*

Aplica ii 1. S se calculeze suma seriei : x3 x5 E=x+ + + ... 3 5 pentru n termeni, utiliznd un termen general. Valorile x i n se citesc, iar rezultatul se afieaz. innd seama de condi iile specificate n textul problemei, termenul general este: x 2k1 , k = 1,2,,n Tg = (2k 1) (n i x se particularizeaz n momentul calcului)

Modul de lucru presupune parcurgerea de ctre variabila k a ntreg domeniului [1,n], cu pasul unitar i nsumarea la rezultatul precedent a valorii curente. Valoarea x trebuie citit nainte de nceputul ciclurilor, la fel i variabila n, care limiteaz suma seriei la un numr finit de termeni (face ca algoritmul s devin posibil). Schema logic este redat n figura urmtoare.
START

n,x E 0

k 1

Tg x^(2k-1)/(2k-1)

E E + Tg NU k=n DA
n,E

kk+1

STOP

Calculul sumei unei serii cu termen general i oprire cu numr de cicluri

M. Medeleanu Utilizarea i programarea calculatoarelor*

2.

S se calculeze suma seriei:

x3 x5 + ... , (suma serie da valoarea func iei sin(x) pentru valoarea x citit) 3! 5! pentru n termeni, utiliznd metoda calculrii termenului curent din termenul anterior. Valorile x i n se citesc, iar rezultatul se tiprete. Fcnd abstrac ie de semnele din fa a frac iilor, se constat c fiecare dintre acestea se poate scrie dup cum urmeaz: E =x-

x1 1! x x2 x2 T2 = = T1 1 23 23 x3 x2 x2 T3 = = T2 3! 4 5 45 T1 =
Fiecare termen curent k se poate ob ine din precedentul prin nmul ire cu o cantitate cunoscut, care depinde de x i k. Calculul ciclic ncepe cu al doilea termen, iar suma se ini ializeaz cu primul. Alternan a semnelor se realizeaz nmul ind la fiecare ciclu, cantitatea calculat cu -1, astfel nct dac un termen a fost pozitiv cel curent va deveni negativ i invers. Schema logic este redat n figura de mai jos:
START

n,x T x E x K1 T -Txx/(2k)/(2k+1) EE+T DA k=n


n,E

NU kk+1

STOP

Calculul sumei unei serii cu termen curent calculat din cel anterior

10

M. Medeleanu Utilizarea i programarea calculatoarelor*

3. S se rezolve problema anterioar, utiliznd ca i criteriu de oprire o valoare impus pentru precizie, fr se cunoasc numrul de termeni. Se cere i determinarea numrului de termeni la sfritul calculelor. Se definete precizia de calcul, pentru problema precedent, valoarea absolut a diferen ei dintre dou calcule succesive: = E k E k 1 Dac valoarea calculat este mai mic sau egal cu valoarea preciziei impuse, atunci calculele se opresc, iar numrul de cicluri efectuate este chiar numrul de termeni cerut n enun ; n caz contrar, variabila de control se avanseaz cu o unitate i se efectueaz un nou ciclu. Pentru acest tip de calcule este necesar o variabil suplimentar (notat aici E0), care s stocheze, la fiecare ciclu valoarea anterior calculat. Valoarea x i precizia impus notat EPS se citesc. Precizia calculat s-a notat cu D. n calculele chimice, n special n cele care trateaz aspecte legate de determinarea unor mrimi derivate din mecanica cuantic (energii orbitale, electronegativit i atomice sau orbitale, clduri de formare, etc.) se folosesc pe scar larg calcule la care criteriul de oprire l constituie precizia impus. O situa ie asemntoare apare i cazul multor calcule de inginerie chimic, cu precdere n calcule legate de transferul termic sau de mas.
START

x, EPS

E x

T x

K1

E0 E

T -Txx/(2k)/(2k+1)

EE+T

D ABS(E E0) DA D EPS NU kk+1

k,E

STOP

Calculul sumei unei serii cu oprirea calculelor prin precizie

11

M. Medeleanu Utilizarea i programarea calculatoarelor*

4. S se rezolve problema dezvoltrii n serie anterior prezentat, folosind dou criterii de oprire a calculelor. Valorile n, EPS i x se citesc. Aceast situa ie poate aprea adeseori n cadrul algoritmilor ciclici, oprirea calculelor putnd fi fcut fie atunci cnd unul dintre criterii este ndeplinit, fie cnd sunt amndou. Aceste necesit i sunt rezultate din fenomenele naturale studiate. Pentru a exemplifica problema anterioar se vor folosi criteriile utilizate i anterior: numrul de termeni i precizia calculelor. Acetia pot fi amndoi ndeplini i (i numrul de termeni i precizia calculelor), sau doar unul dintre ei (numrul de termeni sau precizia calculelor). Din punct de vedere formal nu are importan care dintre criterii este controlat primul. Schema de mai jos exemplific numrul de termeni i precizia calculelor (tem: varianta n sau EPS).
START

x, n, EPS

T x

E x

K1

E0 E

T -Txx/(2k)/(2k+1)

EE+T

D ABS(E E0) NU D EPS DA k=n DA k,E NU


STOP

kk+1

Calculul sumei unei serii folosind dou criterii de oprire a calculelor

*M. Medeleanu, M. Geant Programare pentru ingineri chimiti. Aplica ii Turbo Pascal, Ed. POLITEHNICA, Timioara, 1999
Jeff Edmonds http://www.cse.yorku.ca/~jeff/notes/3101/slides.html http://computer.howstuffworks.com/question717.htm http://en.wikipedia.org/wiki/Algorithm

12

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