Algoritmi
Algoritmii exist de cnd exist civilizaia uman. Orice activitate se supune unui algoritm,
mai concret spus trebuie respectate anumite reguli. Denumirea a venit destul de trziu; n
anul 825 un matematician persan, Abu Jafar ibn Musa al Khowarizmi, a scris o carte de
exerciii. Titlul crii, Kitab al-jabr wal-maqubala, a introdus n matematic denumirea de
algebr, iar numele autorului cea de algoritm. Literar al Khowarizmi semnific din oraul
Khowarazm. Astzi acest ora se numete Khiva i se afl n Uzbekistan.
Semnificaia algoritmului a devenit deosebit de important n informatic, unde el reprezint
ceea ce trebuie s fac un calculator pentru rezolvarea unei probleme.
Prin algoritm se nelege o mulime finit de reguli de calcul folosite ntr-o anumit
succesiune, cu ajutorul crora se poate obine soluia unei probleme prin executarea unui
numr finit de operaii. O alt definiie a algoritmului este: sistemul de reguli conform crora o
informaie iniial numit i informaie admisibil, este transformat n informaie final
trecnd printr-un numr finit de transformri intermediare. Toate informaiile admisibile ale
unui algoritm formeaz domeniul algoritmului.
ntr-un algoritm trebuie ca la fiecare moment s fie executat o anumit aciune. Aceast
aciune care se realizeaz se numete pas de algoritm: o secven finit de operaii
(aciuni) care se pot efectua ntr-o unitate stabilit de timp. Un pas trebuie s conin cel
puin o aciune.
Algoritmul este considerat un mod de reprezentare a procesului de dezvoltare a programelor
i un suport dup care se realizeaz programele. n activitatea de rezolvare a problemelor cu
ajutorul calculatorului, elaborarea algoritmilor reprezint o etap deloc uoar, important, i
obligatorie. De calitatea algoritmului proiectat depinde, n mare msur, calitatea
programelor i succesul execuiei acestora. Astfel, fiecare propoziie din descrierea
algoritmului se introduce printr-o comand ce trebuie executat de cineva (calculator, om
etc.).
Algoritmii se caracterizeaz prin:
Unicitatea presupune c transformrile, precum i ordinea n care se desfoar,
ncepnd de la informaia iniial, reprezentate de datele de intrare, pn la informaia
final, datele de ieire, sunt determinate de regulile algoritmului.
Finitudinea se refer la faptul c un algoritm se ncheie dup un numr finit de pai,
furniznd rezultatul dorit, deci operaiile trebuie astfel concepute nct algoritmul s se
termine ntr-un numr finit de pai, cunoscut sau necunoscut.
Corectitudinea reprezint faptul c algoritmul ofer rezultatul dorit.
Claritatea: un algoritm trebuie s prevad modul de soluionare a tuturor situaiilor care
pot aprea n rezolvarea problemei respective, ntr-o manier fr ambiguiti sau
neclariti, lucru impus de caracterul automat al calculatorului.
Generalitatea reprezint proprietatea algoritmului de fi aplicat unei clase de probleme i
nu unei probleme particulare. Un algoritm nu trebuie conceput pentru o singur
problem particular, ci pentru o clas general de probleme.
Iterativitatea reprezint 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 programului.
Indiferent de situaie, numrul de iteraii trebuie s fie totdeauna finit.
Recursivitatea reprezint procesul iterativ prin care valoare 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 mult valori anterioare, procesul este unirecursiv, respectiv
multirecursiv. Recursivitatea presupune definirea uneia sau mai multor formule de start n
funcie de numrul de valori anterioare de care depinde valoarea curent i a unei formule
recursive (de recuren).
2. Reprezentarea algoritmilor
Pentru reprezentarea unui algoritm este necesar un anumit limbaj. Pentru oameni, acesta
poate fi, n principiu, orice limbaj natural. Totui, limbajele naturale nu sunt suficient de
riguroase pentru a fi folosite n acest scop, astfel c au fost introduse diferite limbaje
artificiale destinate special pentru reprezentarea algoritmilor. Cele mai rspndite dintre
acestea, n cazul cnd algoritmii respectivi sunt destinai oamenilor, sunt pseudocodul i
schema logic. Reprezentarea algoritmilor destinai calculatoarelor se face prin intermediul
limbajelor de programare.
Un limbaj pseudocod este un cadru de reprezentare a soluiilor unei probleme formulate
ntr-un anumit limbaj (matematic, natural etc.) permind transcrierea lor ulterioar ntr-un
limbaj de programare real, folosind n acest scop un set strict limitat de construcii sintactice
bine definite, astfel nct s nu poat da natere la interpretri diferite. Un limbaj pseudocod
traduce problema de rezolvat ntr-o succesiune de aciuni numite operaii sau instruciuni.
Schema logic este reprezentarea grafic a algoritmului, n care pentru fiecare tip de
aciune se folosesc anumite simboluri grafice specifice, iar pentru a indica ordinea executrii
aciunilor se folosesc sgei.
Avantajul schemei logice fa de pseudocod este c, n cazul algoritmilor mici, permite o mai
bun urmrire a fluxurilor de instruciuni. Acest avantaj se pierde ns atunci cnd numrul
instruciunilor este mare.
2.1.
if...then...(dac...atunci...)
if...then...else...(dac...atunci...altfel...)
read (citete) corespunde introducerii datelor
write (afieaz) corespunde afirii rezultatelor
START marcheaz nceputul pseudocodului
STOP marcheaz sfritul pseudocodului
v:=0 sau v0 iniializri
v:=a+b sau va+b calcule
2.2.
Schema logic reprezint o transcriere grafic a etapelor unui algoritm. Fiecrui pas i
corespunde cte un simbol numit bloc, iar sensul de parcurgere a etapelor este indicat prin
sgei. Blocurile utilizate ntr-o schem logic sunt:
Bloc delimitator, numit i bloc de nceput i sfrit de organigram, se utilizeaz pentru
a marca nceputul i sfritul unui algoritm.
Bloc de decizie (ramificare), utilizat pentru ramificri ale algoritmului. Condiia scris n
interiorul blocului determin ce ramur va fi executat.
n interiorul fiecrui bloc, cu excepia lui START i STOP, se indic operaiile ce trebuie
efectuate n etapa pe care o marcheaz. n blocul de calcul este scris expresia ce trebuie
calculat i variabila creia i se atribuie aceast valoare, n acest scop utilizndu-se simbolul
:=, numit simbol de atribuire.
Pe baza celor enumerate se poate da urmtoarea definiie: se numete schem logic un
graf orientat n care:
exist un singur bloc de START i un singur bloc de STOP;
orice arc este etichetat cu una din urmtoarele informaii:
START sau STOP;
o citire sau o scriere;
o atribuire;
un predicat, n care caz extremitatea iniial a arcului este extremitatea iniial a unui
bloc de ramificaie;
orice arc face parte din cel puin un drum care ncepe cu blocul START i se termin cu
blocul STOP.
Orice algoritm poate fi descris printr-o schem logic format cu ajutorul a trei structuri
elementare numite structuri de baz. Aceste structuri sunt:
1. Structuri secveniale sau lineare.
2. Structuri alternative.
3. Structuri repetitive sau cu ciclu.
Reprezentrile grafice ale celor trei tipuri de structuri sunt ilustrate n figura 3.1.
Structura Case-Of este o selecie multipl, i este utilizat n situaia n care valoarea
selectorului poate lua mai mult dect dou valori.
Structura repetitiv reprezentat n figura 3.1.c. numit While-Do (Atta timp ct Execut)
este o structur repetitiv condiionat anterior i se efectueaz astfel: atta timp ct (While)
expresia logic C este ndeplinit se execut (Do) aciunea A. Alte tipuri de structuri
repetitive sunt:
Structura repetitiv condiionat posterior, notat cu Do-Until (figura 3.2.a)
Structura repetitiv cu numrtor, notat cu Do-For (figura 3.2.b)
2.3.
Exemple de algoritmi
IF (a<>0) THEN
BEGIN
X:=-b/a
WRITE X
END
Exemplul II. S se realizeze schema logic i s se scrie pseudocodul pentru calculul sumei
primelor n numere naturale. Schema general a acestei sume este: S=1+2+3+4+.+n, iar
ca date de intrare avem doar valoarea lui n.
START
READ n
FOR i:=1 TO n DO
READ ai
ENDFOR
S:=0
FOR i:=1 TO n DO
S:=S+ ai
ENDFOR
WRITE S
STOP