Sunteți pe pagina 1din 10

Algoritmi

124

5. ALGORITMI
5.1. Algoritmi. Noiuni de baz
Conceptul fundamental al informaticii este acela de algoritm. ntr-o definiie
aproximativ, algoritmul este un set de pai prin care poate fi dus la ndeplinire o sarcin. De
exemplu, putem vorbi despre algoritmul de construire al unei cldiri, despre algoritmul de
utilizare al unei maini de splat, despre algoritmul realizrii unui numr de magie sau despre
algoritmul de determinare al celui mai mare divizor comun, prezentat n continuare.
Algoritmul lui Euclid pentru determinarea celui mai mare divizor comun a 2
numere naturale.
Pasul 1. Se noteaz cu M cea mai mare, iar cu N cea mai mic dintre cele 2 valori.
Pasul 2. Se mparte M la N i se noteaz restul cu R.
Pasul 3. Dac R este diferit de zero, se atribuie lui M valoarea N i lui N valoarea R,
apoi se revine la pasul 2; n caz contrar cel mai mare divizor al celor 2 numere este valoarea
notat cu N.
n domeniul calculatoarelor, algoritmii sunt reprezentai prin programe. Aceste
programe formeaz ceea ce se numete software. Pentru ca un calculator s poat rezolva o
anumit problem, trebuie ca mai nti s se descopere i s se reprezinte sub form de
program un algoritm de rezolvare a problemei respective. La nceput studiul algoritmilor a
fcut parte din matematic. Cu mult nainte de apariia calculatoarelor, cutarea unor algoritmi
a fost una dintre activitile importante ale matematicienilor. Principalul obiectiv al acestora
era descoperirea unui set mic de instruciuni care s descrie modul de rezolvare al oricrei
probleme dintr-o anumit categorie de probleme. Unul dintre cele mai cunoscute rezultate
obinute n acest domeniu este algoritmul lui Euclid, prezentat anterior, care permite
determinarea celui mai mare divizor comun a 2 numere ntregi pozitive.
Dup descoperirea algoritmului, efectuarea sarcinii repetitive nu va mai necesita
nelegerea principiilor care stau la baza acestuia, ci doar urmarea instruciunilor. Datorit
acestei posibiliti de captare i transmitere a informaiei prin intermediul algoritmilor,
oamenii au putut s construiasc maini cu comportament inteligent. Prin urmare nivelul de

Algoritmi

125

cunoatere al unei maini este limitat de nivelul de cunotine care poate fi transmis prin
intermediul algoritmilor. Astfel, putem construi o main care s realizeze o anumit sarcin,
dac i numai dac gsim un algoritm care s precizeze modul n care sarcina respectiv poate
fi dus la bun sfrit. Prin urmare, dac nu exist un astfel de algoritm, efectuarea sarcinii
respective nu st n puterea unei maini.
Dup descoperirea unui algoritm care rezolv o anumit problem, pasul urmtor este
ca algoritmul respectiv s fie reprezentat ntr-o form n are s poat fi comunicat unei maini.

5.2. Definiia i proprietile algoritmului


Un algoritm reprezint o succesiune finit de pai, bine determinai, prin care din
mulimea datelor de intrare ale unei probleme ce aparine unei clase de probleme se produc
date de ieire corecte.
Proprietile algoritmilor
1) Determinarea
Un algoritm trebuie astfel conceput nct operaiile sale i succesiunea executrii lor s
fie descrise clar, precis, fr ambiguiti sau neclariti.
2) Generalitatea
Algoritmul va fi conceput astfel nct s asigure rezolvarea unei clase de probleme i
nu a unei probleme particulare.
3) Finititudinea - executarea algoritmului trebuie s cuprind un numr finit de
operaii, chiar dac numrul acestora este foarte mare.

5.3. Obiectele cu care lucreaz algoritmii

Constantele sunt date a cror valoare nu se modific pe parcursul algoritmului.


Constantele pot fi:
- numerice;
- alfanumerice;
- logice.

Variabile sunt date a cror valori se pot modifica pe parcursul execuiei algoritmului.
Variabilele pot fi numere ntregi, reale, logice sau iruri de caractere. Ele se noteaz cu litere
sau simboluri care s le sugereze semnificaia.
Operaiile

- aritmetice: +, -, *, /
- logice:

- NOT (negaia logic)

- AND (SI logic)

- OR (SAU logic)

Algoritmi

126

x
y
x
y
xy
xy
f
f
f
f
f
f
f
a
a
f
f
a
f
a
f
a
f
f
a
a
a
a
a
a
a
a
Operaiile logice se aplic unor operanzi logici, care pot avea valorile adevrat i fals.
Tabelele de adevr corespunztoare acestor operaii sunt prezentate n cele ce urmeaz.
x
a
f

- relaionale: , , , , =, .

Expresiile sunt formate din constante i variabile legate ntre ele prin operaii i

paranteze care s prezinte ordinea de evaluare a operaiilor. Nu se vor folosi dect paranteze
( ). Expresiile pot fi: - aritmetice;
- relaionale;
- logice.
Operaiile de baz realizate de ctre un algoritm

citirea unei variabile;

scrierea unei variabile;

atribuirea v expresie, unde este operator de atribuire;

decizia - prin care se verific o condiie a crei valoare de adevr determin


ramificarea algoritmului.

5.4. Reprezentarea (descrierea) algoritmilor


1. Schema logic - constituie un mijloc foarte sugestiv (intuitiv) de a descrie un
algoritm prin intermediul unor figuri geometrice numite blocuri care au o semnificaie bine
precizat. Schemele logice sunt foarte uor de urmrit pentru algoritmi simpli, dar mai greu de
urmrit pentru algoritmi lungi.
2. Limbajul convenional numit i limbaj pseudocod - este limbaj cu reguli sintactice
foarte simple care permit exprimarea neambigu a ordinii de execuie a pailor algoritmilor.

Algoritmi

127
Descrierea algoritmilor prin scheme logice

Schema logic este o transcriere grafic a pailor unui algoritm. Fiecrui pas i se
ataeaz un simbol numit bloc, sensul de parcurgere fiind indicat prin sgei. Blocurile folosite
ntr-o schem logic sunt urmtoarele:
Bloc delimitator:
- marcheaz nceputul/sfritul algoritmului.
Blocul de citire/scriere:

Blocul de atribuire:
Blocul de decizie:
NU
fals

condiie

Blocul de procedur:

DA
adevrat

Nume procedur

Sgeat:

Conector de blocuri:
Exemplu: Algoritmul pentruSTART
rezolvarea ecuaiei de gradul I, ax + b = 0, este prezentat
n figura 5.1.
a,b

NU

a=0

NU

x -b/a

Scrie
x

DA

Scrie Ecuaia
nu are soluie

b=0

DA

Scrie Ecuaia are o


infinitate de soluii

STOP

Fig. 5.1. Algoritmul pentru rezolvarea ecuaiei de gradul I.

Algoritmi

128

5.5. Principiile de baz ale programrii structurate


Programarea structural iniial de E.W. Dijkstra i C.A.R. Hoare reprezint o metod
de elaborare a algoritmilor care impune reguli extrem de severe de concepere a algoritmilor.
Una dintre metodele curente de elaborare a algoritmilor este metoda programrii structurate.
Programarea structurat are la baz urmtoarele principii:

1) Proiectarea descendent a algoritmilor care consider c algoritmul are o structur


complex care se obine prin descompuneri succesive, astfel la fiecare pas de descompunere
un element de structur se descompune n conformitate cu una dintre schemele de
descompunere fundamentale.
2) Utilizarea n algoritmi a doar 3 structuri de control: secvenial, alternativ i
repetitiv.
Algoritmii proiectai conform acestor principii se numesc algoritmi structurai.
Programarea structural are la baz teorema de structur a lui Bhm i Jacopini care
precizeaz c un algoritm cu un singur punct de nceput i un singur punct de sfrit poate fi
descris cu ajutorul celor 3 structuri de control, prezentate n figura 5.2.
a) Structura secvenial:

b) Structura alternativ:

fals

condiie adevrat
a

c) Structura repetitiv:

condiie

NU

DA
a

Fig. 5.2. Structuri de control utilizate n programarea structurat.

Algoritmi

129

Exemple
1. Un exemplu pentru structura alternativ l constituie algoritmul pentru
determinarea minimului a 3 valori a, b, c, a crui reprezentare prin schem logic este
prezentat n figura 5.3.
2. Determinarea minimului unui ir de numere care se ncheie cu valoarea 0, are
algoritmul prezentat n figura 5.4.
Observaii:
Dei structura ciclic prezentat este suficient pentru a descrie un algoritm ciclic,
totui n anumite situaii
se mai utilizeaz i structura ciclic cu test
final, prezentat n figura
START
START
5.5.
Citete
Citete
Ciclul cu test final
conform figurii 5.6.
a,b,c poate fi transformat n ciclul cu test iniial,
a
NU

ab

DA

min b

max a

min a

a0

NU

DA

NU

min c

DA

Citete
a

Scrie
max
STOP

min c

a max

DA

max a
Scrie
min
STOP

Fig. 5.3. Determinarea minimului a trei


numere.

Fig. 5.4. Determinarea maximului unui


ir de numere.
a

a
cond
NU

cond

NU

DA
DA
a

Fig. 5.5. Structura ciclic cu test


final.

Fig. 5.6. Structura ciclic cu test


final.

Algoritmi

130

5.6. Descrierea algoritmilor n limbaj pseudocod


Exist mai multe variante de limbaj pseudocod, care ns nu difer esenial. Un limbaj
pseudocod nu este standardizat i conine, n general urmtoarele comenzi (comenzi care
corespund structurilor de control utilizate n programarea structurat):
1) de atribuire:
variabil expresie
2) de citire:
citete lista de variabile
3) de scriere:
scrie list de expresii
4) de ramificare:
dac condiie
atunci operaie 1
...
operaie n
altfel

operaie1

...

operaie n

sfrit dac
5) de ciclare:
a)

ct timp condiie execut


operaie 1
...
operaie n
sfrit ct timp
repet

b)

operaie 1
...
operaie n

Algoritmi

131
pn cnd condiie
pentru contor val_initial, val_final execut
operaie 1
...
operaie n
sfrit pentru

c)

6) de oprire:
stop

5.7. Erorile n algoritmi


Un algoritm devine eficient n msura n care ntre resursele de calcul utilizate 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, acestea fiind obinute n urma unor observaii,
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
parametrii iniiali genereaz erori n datele iniiale.
O parte din parametrii utilizai n formulele de calcul nu au o valoare exprimabil
printr-un numr finit de zecimale (ex.

3, ,e, etc.).

Erorile de aproximare a lor sunt

cunoscute i vor fi astfel alese nct s fie corelate cu precizia dorit pentru calculele n care
intr aceti parametri.
O clas important de erori o constituie erorile de rotunjire. Ele apar ca urmare a
limitrii numrului de zecimale cu care se poate reprezint un numr n calculator. La
rezolvarea, mai ales numeric a unei probleme se folosete o metod matematic. De multe ori
fenomenul analizat este supus unor condiii simplificatoare, fapt ce poate genera erori de
metod.
O alt categorie de erori sunt cele introduse n calculator de prezena unor funcii
crora n analiza matematic le corespund serii infinite. Aceste erori se numesc erori
reziduale.
Exemplu: Calculul funciei trigonometrice sin(x) se face prin dezvoltare n serie
Taylor:

sin x x

x3 x5

...
3!
5!

Algoritmi

132

5.8. Proiectarea algoritmilor


Conceptele principale care s-au cristalizat n domeniul programrii structurate sunt:
proiectarea top-down, proiectarea modular i proiectarea structural. Cele trei tipuri nu se
exclud una pe cealalt ci se intercoreleaz n obinerea unor produse program.
Proiectarea top-down (de sus n jos) presupune descompunerea de la general la
particular a problemei date n subprobleme sau funcii de prelucrat conducnd la realizarea
algoritmului n mai multe faze succesive, fiecare faz fiind o detaliere a fazei anterioare pn
cnd algoritmul este suficient de rafinat (detaliat) pentru a putea fi codificat.
Proiectarea modularizat presupune descompunerea problemelor n pri numite
module, astfel nct fiecare din acestea s ndeplineasc anumite funcii bine definite.
Descompunerea se poate face n mai multe faze (la mai multe niveluri) prin metoda topdown. Criteriile de descompunere depind n mare msur de experiena proiectanilor

(programatorilor). Proiectarea modularizat presupune pe lng identificarea modulelor i a


relaiilor dintre ele i precizarea modului i a ordinii n care sunt puse n lucru. Reprezentarea
modularizat a programelor se realizeaz prin intermediul diagramelor (organigramelor) de tip
arbore (figura 5.7.) .
A

B2

B1

B11

B12

C1

C3

C2

C21

C22

Figura 5.7. Reprezentarea modularizat a programelor

Se disting modulele apelatoare: A, B, B1, C, C2 i module apelate (B11, B12, B2, C1,
C3).
n implementarea n programe modulele pot fi interne sau externe dup modul de apel
i locul de plasare fa de unitatea apelatoare. Modulele interne sunt integrate n programul din
care sunt apelate i au acces la toate datele acestuia. Modulele externe nu sunt integrate n
programele de care sunt apelate.

Algoritmi

133

Att modulele interne ct i cele externe pot fi constituite n blocuri cu semnificaie de


subprograme.
Modul de lucru cu module difer semnificativ de la un limbaj de programare la altul.
Proiectarea structurat a algoritmilor const dintr-o mulime de reguli i restricii care
foreaz proiectantul (programatorul) s urmeze o form strns de reprezentare i codificare.

5.9. Verificarea corectitudinii algoritmilor


n procesul de elaborare al algoritmilor se pot structura formulri imprecise sau
eronate. Verificarea corectitudini ar nsemna verificarea faptului c pentru oricare set de date
algoritmul furnizeaz rezultate corecte, lucru imposibil de realizat n practic.
n practic se recomand urmtoarele verificri ale corectitudinii algoritmilor simpli:
1.
ncheierea algoritmilor dup un numr finit de pai.
2.
Modul n care au fost construite seleciile.
3.
Asigurarea valorilor pentru toate variabilele referite n operaii.
Dac cele trei tipuri de verificri au condus la concluzia de corectitudine se procedeaz
la un test care presupune parcurgerea atent operaie cu operaie a algoritmului pentru seturi de
date de obicei cazuri limit.

5.10. Analiza algoritmilor


Aceast etap const n:
1.
Determinarea necesarului de memorie;
2.
Determinarea timpului necesar execuiei algoritmului;
3.
Determinarea optimalitii algoritmului.