Sunteți pe pagina 1din 164

Structuri de date i algoritmi

_______________________________________________________________________________
CUPRINS
BAZELE ALGORITMILOR
Introducere
Descrierea Algoritilor
!algorit" #rogra" #rograare
!sc$ee logice
!li%a&ul Pseudocod
!calculul e'ectuat de un algorit
!ra'inare in #asi succesi(i
!#ro%lee #ro#use
!test
Su%algoriti
!conce#tul de su%algorit
!a#elul unui su%algorit
!ela%orarea algoritului
!#roiectarea ascendenta si descendenta
!#roiectarea odulara
!a#el recursi(
!#rograare structurata
!#ro%lee #ro#use
!test de (eri'icare
Li%a&ul Pascal
!ediul de #rograare Tur%o Pascal
!#rograe #ascal si#le
!su%#rograe
!ti#uri de date
!#ro%lee #ro#use
!test de (eri'icare
STRUCTURI DE DATE
Introducere
Lista si#lu inlantuita
Teorie generala
!de'initia co#onentelor listei
!etoda statica
!etoda dinaica
!o#eratii s#eci'ice listei
Test de (eri'icare
Lista du%lu inlantuita
Teorie generala
!de'initia co#onentelor listei
________________________________________________________________________________
1
Structuri de date i algoritmi
_______________________________________________________________________________
!etoda statica
!etoda dinaica
!o#eratii s#eci'ice listei
Test de (eri'icare
Sti(a
Teorie generala
!de'initia co#onentelor sti(ei
!etoda statica
!etoda dinaica
!o#eratii s#eci'ice sti(ei
Siularea sti(ei
Pro%lee #ro#use
Test de (eri'icare
Pro%lee re)ol(ate
Coada
Teorie generala
!re'eritor la coada
!alocarea sec(entiala
alocarea dinaica
Siularea 'unctionarii co)ii
Pro%lee #ro#use
Pro%lee re)ol(ate
Ar%orele Binar
Teorie generala
!generalitati
!de'initia eleentelor ar%orelui
!i#leentarea in #ascal
!o#eratii s#eci'ice
Siularea o#eratii
Test de (eri'
Pro%lee re)ol(ata
Gra'ul
Teorie generala
E*e#le
COMPLE+ITATEA ALGORITMILOR
!eta#ele re)ol(arii unei #ro%lee
!notiune de algorit si de #rogra
!odelul a%stract al asinii Turing
!te)a Turing!C$urc$
!anali)a " #roiectarea si i#leentarea algoritilor
!o#eratia de %a)a c$eia studiului co#le*itatii
!clase de algoriti
!e'icienata algoriti
________________________________________________________________________________
2
Structuri de date i algoritmi
_______________________________________________________________________________
!'unctii de co#le*itate
!a#artenenta la o clasa de co#le*itate
!liita iiala sau e'ort inial
!algorit o#tial
!di'icultatea #ro%leelor
!co#le*itatea de ti#
!#ro%lee re)ona%ile si #ro%lee nere)ona%ile,
!#ro%lee de deci)ie si de o#tii)are
!clasa #ro%leelor NP
!reductia #olinaiala a #ro%leelor
!ec$i(alarea #ro%leelor #rin reductie #olino#iala
!teorea lui Coo-
!clasa #ro%lee NP
!area intre%are a co#le*itatii algoritilor
!algoriti a#ro*iati(i
!#ro%lee insol(a%ile algoritic
!co#le*iatea algoritilor " calculatorul si (iitorul
!test de (eri'icare
TE.NICI DE CAUTARE
Cautare sec(entiala
Teorie generala
!descrierea generala a etodei
!descrierea algoritului in #seudocod
!i#leentarea algoritului in Pascal
!i#leentarea algoritului in C
!#er'oranta etodei de cautare
Pro%lee re)ol(ate
Pro%lee #ro#use
Siularea etodei de cautare
Cautare %inara
Teorie generala
!descrierea generala a etodei
!descrierea algoritului de cautare in Pseudocod
!i#leentarea algoritului in Pascal
!i#leentarea algoritului in C
!#er'oranata etodei de cautare %inara
Pro%lee re)ol(ate
Pro%lee #ro#use
Siularea etodei de cautare %inara
Test de (eri'icare
Ar%ori
________________________________________________________________________________
3
Structuri de date i algoritmi
_______________________________________________________________________________
Ar%ore %inar %alansat in inaltie
!introducere
!descriere generala
!descrierea algoritului in Pseudocod
!i#leentarea algoritului in Pascal
!i#leentarea algoritului in C
!#er'oranata ar%ore %inar %alansat in inaltie
!siularea cautarii in ar%orele %alansat in inaltie
!test de (eri'icare
Ar%ore /!0
!descriere generala
!descrierea algoritului de cautare in Pseudocod
!i#leentarea alg in Pascal
!#er'oranata ar%orelui /!0
!siularea ar%orelui /!0 in algoritul de cautare
test de (eri'icare
Ar%ore %alansat in greutate
!descrierea generala a ar%orelui
!descrierea algoritului de cautare in Pseudocod
!i#leentarera algoritului in Pascal
!#er'oranta ar%orelui %alansat in greutate
!siularea ar%orelui %alansat in greutate in algoritul cautarii
!test de (eri'icare
Pro%lee re)ol(ate
Pro%lee #ro#use
Ta%lele .asing
Introducere
1unctia .as$
!generalitati a 'unctiilor $as$
!etoda I#artirii
!etoda Patrat Mediu
!etoda Indoirii
!etoda Digit Anal2sis
!etoda de#endenta de lungiea c$eii
!etoda codarii alge%rice
!etoda .as$ing Multi#licati(
Per'oranta 'unctiei $as$
Siularea etodei I#artirii
Test de (eri'icare
Te$nici de re)ol(are a cole)iunilor
Introducere
Pro%area liniara
!descrierea generala a etodei
________________________________________________________________________________
4
Structuri de date i algoritmi
_______________________________________________________________________________
!descrierea lagorotului de cautare inserare in Pseudocod
!i#leentarea algoritului in Pascal
!i#leentarea algoritului in C
!#er'oranta etodei
Pro%area aleatoare
!descrierea generala a etodei
!descrierea algoritului de cautare inserare in Pseuducod
!i#leentarea algoritului in Pascal
.as$ing ulti#licati(
!descrierea generala a etodei
!descrierea algoritului de cautare inserare in Pseuducod
!i#leentarea algoritului in Pascal
!i#leentarea algoritului in C
!#er'oranta etodei
Inlantuire se#arata 3Se#arate C$aining4
!descrierea generala a etodei
!descrierea algoritului de cautare inserare in Pseuducod
!i#leentarea algoritului in C
!#er'oranta etodei
Buc-ets
!descrierea generala a etodei
!descrierea algoritului de cautare inserare in Pseuducod
!i#leentarea algoritului in C
Pro%lee #ro#use
Siularea te$nicii Pro%arii aleatoare
Test de (eri'icare
TE.NICI DE SORTARE
Istoric
Pre)entare generala
Bu%leSort
!descrierea generala etodei
!i#leentarea algoritului in Pascal si C
!co#le*itatea algoritului
!#ro%lee re)ol(ate
!#ro%lee #ro#use
!siulare
!test de (eri'icare
SelectionSort
!descrierea generala etodei
!i#leentarea algoritului in Pascal si C
!co#le*itatea algoritului
________________________________________________________________________________
5
Structuri de date i algoritmi
_______________________________________________________________________________
!#ro%lee re)ol(ate
!#ro%lee #ro#use
!siulare
!test de (eri'icare
InsertSort
!descrierea generala etodei
!i#leentarea algoritului in Pascal si C
!co#le*itatea algoritului
!#ro%lee re)ol(ate
!#ro%lee #ro#use
!siulare
!test de (eri'icare
S$ellSort
!descrierea generala etodei
!i#leentarea algoritului in Pascal si C
!co#le*itatea algoritului
!#ro%lee re)ol(ate
!#ro%lee #ro#use
!siulare
!test de (eri'icare
5uic-Sort
!descrierea generala etodei
!i%unatatiri
!#ro%lee re)ol(ate
!#ro%lee #ro#use
!siulare
!test de (eri'icare
MergeSort
!descrierea generala etodei
!i%unatatiri
!#ro%lee re)ol(ate
!#ro%lee #ro#use
!siulare
!test de (eri'icare
.ea#Sort
!descrierea generala etodei
!#ro%lee re)ol(ate
!#ro%lee #ro#use
!siulare
!test de (eri'icare
________________________________________________________________________________
6
Structuri de date i algoritmi
_______________________________________________________________________________
Radi*Sort
!descrierea generala etodei
!#ro%lee re)ol(ate
!#ro%lee #ro#use
!siulare
!test de (eri'icare

TE.NICI DE PROGRAMARE
Bac-trac-ing
Greed2
Prograarea dinaica
Branc$6Bound
Test de (eri'icare
E*e#le
Introducere

________________________________________________________________________________
7
Structuri de date i algoritmi
_______________________________________________________________________________
Progresele tehnologice n domeniul informaticii au condus la creterea puterii de calcul i a
memoriei calculatoarelor electronice, la ieftinirea acestor calculatoare, permi!nd a"ordarea unor
pro"leme e#trem de comple#e, din toate sferele acti$it%ii umane& 'alculatorul a de$enit un
instrument indispensa"il pentru $iaa omului modern& Penetrarea (nternetului i a accesului la
resursele informatice mondiale, l%rgirea considera"il% a spectrului de aplicaii a contri"uit i
contri"uie la impunerea calculatorului ca instrument de lucru $ital n acti$itatea omului& )n
consecin%, cerina de noi programe n toate domeniile acti$it%ii umane a crescut mereu&
*e aceea, se impune tot mai pregnant creterea importanei metodologilor de reali+are a
produselor program, necesitatea unei instruiri corespun+%toare a noilor generaii de specialiti i de
utili+atori ai calculatoarelor& )n formarea specialitilor n informatic% este important% do"!ndirea
unor cunotine i deprinderi de a reali+a produse program de o comple#itate $ariat%, care s%
satisfac% cerinele "eneficiarului& Pentru aceasta este necesar% respectarea unei discipline de lucru i
cunoaterea unei metodologii adec$ate de proiectare i reali+are a acestor produse soft,are& )n
trecutul nu prea ndep%rtat, n acti$itatea de instruire a specialitilor n informatic% s-a pus un mai
mare accent pe n$%area unor lim"a.e de programare i pe programarea propriu-+is%, acord!ndu-se
o pondere mai mic% anali+ei i proiect%rii programelor& Speciali+area n informatic% nu nseamn%
doar cunoaterea lim"a.elor de programare, ci n primul r!nd nsuirea metodelor moderne de
anali+% i proiectare a aplicaiilor soft&
Scopul acestei c%ri este de a contri"ui la n$%area program%rii ca o disciplin% unitar% a$!nd
o fundaie tiinific% solid%, necesar% programatorilor& Pentru aceasta este ne$oie s% ncerc%m s%
definim mai clar noiunea de programare&
'onform cu Sedge,it+ /10012, programarea poate fi pri$it% ca o acti$itate general% de a
e#tinde sau a de a modifica funcionalit%ile unui sistem& 3ste o acti$itate general% deoarece ea
poate fi efectuat% at!t de specialiti 4programatori5 c!t i de nespecialiti 4setarea unui telefon
celular sau a unei alarme de acces ntr-o nc%pere5& *in acest punct de $edere acti$itatea de
programare const% din dou% elemente fundamentale6 o component% tehnologic% i o component%
tiinific%& Partea tiinific% include elemente printre care se reg%sesc structurile de date i algoritmii
necesari descrierii operaiilor de manipulare a acestor structuri de date& 7ceast% a"ordare ne permite
o independena a acestor structuri de date fa% de lim"a.ele de programare i fa% de tehnologiile de
proiectare utili+ate in acti$itatea de programare&
Programele sunt f%cute pentru a re+ol$a pro"leme din $iaa de +i cu +i& (nformaia prelucrat%
de un program este stocat% cu a.utorul structurilor de date& 7ceste structuri de date grupea+% ntr-o
form% eficient% datele& 8 structur% de date corect definit% poate simplifica operaia care prelucrea+%
acele date sau o poate complica& *e aceea structurile de date au o importan% ma.or% n acti$itatea
de proiectare si programare&
Programele prelucrea+% informaii& (nformaiile sunt organi+ate su" form% de structuri de
calcul& 9odul n care repre+ent%m structurile de date afectea+% claritatea, conci+iunea, $ite+a de
rulare i capacitatea de stocare a programului& *e+$oltarea unui program comple# este dificil% dac%
programatorul nu posed% cunotine n domeniul structurilor de date, algoritmicii i a tehnicilor de
programare&
*ac% nu se cunoate o soluie pentru re+ol$area unei pro"leme nu e#ist% o soluie magic% de
a scrie un program care s% re+ol$e acea pro"lema& :n pro$er" afirm% c% dac% nu tii cum s% a.ungi
ntr-un anumit loc atunci nu are importan% cum a.ungi n acel loc& 9ai mult chiar 9urphi afirm% c%
________________________________________________________________________________
;
Structuri de date i algoritmi
_______________________________________________________________________________
orice pro"lem% comple#% are o soluie simpl% eronat%& *e aceea, nainte de a implementa un
program ntr-un anumit lim"a. de programare, este necesar% nelegerea pro"lemei, descrierea pas
cu pas a soluiei, cu alte cu$inte este necesar a descrie pro"lema prin intermediul unui algoritm&
*in p%cate nu e#ist% un algoritm care s% aleag% algoritmul care re+ol$% orice pro"lem%& 'eea
ce e#ist% sunt o serie de tehnici de de+$oltare a algoritmilor, numite n general tehnici de
programare7
Scopul principal al lucr%rii de fa% este familiari+area celor care doresc s% o n$ee, cu
acti$itatea de programare& <om $edea n ce const% aceast% acti$itate i $om remarca accentul pus pe
g!ndirea omului, pe proiectarea algoritmilor i corectitudinea lor, calculatorul fiind doar unealta
care e#ecut% ceea ce =dictea+%= programatorul& Pentru a putea dicta calculatorului a$em ne$oie de
un lim"a. neles de am"ele p%ri> lim"a.ul ales n acest scop este lim"a.ul Pascal& *e asemenea,
$om pre+enta metodele de programare cunoscute n pre+ent i discutate n literatura de specialitate&
<om n$%a s% anali+%m algoritmii, dar $om fi mai puin preocupai de m%surarea comple#it%ii unui
program, accentul fiind pus pe modul n care el poate fi o"inut& ?oiunile i conceptele pre+entate
sunt nsoite de e#emple simple, n care s-au folosit6 lim"a.ul Pseudocod n descrierea algoritmilor,
un lim"a. de specificare informal n descrierea tipurilor a"stracte de date i lim"a.ul Pascal pentru
codificare&
I7 BAZELE ALGORITMILOR
I787 DESCRIEREA ALGORITMILOR
I78787 Algorit" #rogra" #rograare
'e este un algoritm@ 8 definiie matematic%, riguroas%, este greu de dat, chiar imposi"il% f%r%
a introduce i alte noiuni 4Aiumale /211425& <om ncerca n continuare o descriere a ceea ce se
nelege prin algoritm&
<om constata c% un algoritm este un te#t finit, o sec$en% finit% de propo+iii ale unui lim"a.&
*in cau+% c% este in$entat special n acest scop, un astfel de lim"a. este numit lim"a. de descriere a
algoritmilor& Biecare propo+iie a lim"a.ului preci+ea+% o anumit% regul% de calcul, aa cum se $a
o"ser$a atunci c!nd $om pre+enta lim"a.ul Pseudocod&
7lgoritmii au urm%toarele caracteristici6 generalitate, finitudine i unicitate 4Ci$o$schi /10;125
)n descrierea algoritmilor se folosesc mai multe lim"a.e de descriere, dintre care cele mai des
folosite sunt6
- lim"a.ul schemelor logice>
________________________________________________________________________________
0
Structuri de date i algoritmi
_______________________________________________________________________________
- lim"a.ul Pseudocod&

I787/7 Sc$ee logice
Schema logic% este un mi.loc de descriere a algoritmilor prin repre+entare grafic%& Degulile
de calcul ale algoritmului sunt descrise prin "locuri 4figuri geometrice5 repre+ent!nd operaiile
4paii5 algoritmului, iar ordinea lor de aplicare 4succesiunea operaiilor5 este indicat% prin s%gei&
Biec%rui tip de operaie i este consacrat% o figur% geometric% 4un "loc tip5 n interiorul c%reia se $a
nscrie operaia din pasul respecti$ 4Ci$o$schi /10;15&&
Prin e#ecuia unui algoritm descris printr-o schem% logic% se nelege efectuarea tuturor
operaiilor preci+ate prin "locurile schemei logice, n ordinea indicat% de s%gei&
)n descrierea unui algoritm, deci i ntr-o schem% logic%, inter$in $aria"ile care marchea+%
at!t datele cunoscute iniial, c!t i re+ultatele dorite, precum i alte re+ultate intermediare necesare
n re+ol$area pro"lemei& )ntruc!t $aria"ila .oac% un rol central n programare este "ine s% definim
acest concept&
<aria"ila definete o m%rime care i poate schim"a $aloarea n timp& 3a are un nume i o
$aloare& 3ste posi"il ca $aria"ila nc% s% nu ai"% asignat% o $aloare, situaie n care $om spune c% ea
este neiniiali+at%&
<alorile pe care le poate lua $aria"ila aparin unei mulimi D pe care o $om numi domeniul
$aria"ilei& <aria"ila este folosit% cu un anumit scop, ea notea+% o anumit% m%rime, cu o anumit%
semnificaie& )n conclu+ie o $aria"il% este cunoscut% prin 4nume, domeniul D, $aloare,
semnificaie5, unde $aloarea aparine mulimii D EnedefinitF&
Pentru claritatea te#tului unui algoritm este important s% se cunoasc% semnificaia fiec%rei
$aria"ile, s% fie menionat% e#pres aceast% semnificaie& )n nici un ca+ nu se recomand% s% se
foloseasc% acelai nume pentru $aria"ile cu semnificaii diferite, ca+ care pro$oc% confu+ii i chiar
erori gra$e& <om enuna acestea su" forma unor reguli cu care e "ine s% ne o"inuim i s% le
respect%m n acti$itatea de programare&
I78707 Li%a&ul PSEUDOCOD
Cim"a.ul Pseudocod este un lim"a. folosit n scopul proiect%rii algoritmilor i este format
din propo+iii asem%n%toare propo+iiilor lim"ii rom!ne, care corespund structurilor de calcul
folosite n construirea algoritmilor& 7cesta $a fi lim"a.ul folosit de noi n proiectarea algoritmilor i
$a fi definit n cele ce urmea+%&
Gin!nd seama c% reali+area unui algoritm pentru re+ol$area unei pro"leme nu este
ntotdeauna o sarcin% simpl%, c% n acest scop sunt folosite anumite metode pe care le $om descrie
n capitolele urm%toare, n etapele intermediare pentru o"inerea algoritmului $om folosi propo+iii
curente din lim"a rom!n% 4Brentiu, Aro+e /10;625&
7cestea sunt considerate elemente nefinisate din algoritm, asupra c%rora tre"uie s% se re$in%
i le $om numi propo+iii nestandard& *eci lim"a.ul Pseudocod are dou% tipuri de propo+iii6
propo+iii standard, care $or fi pre+entate fiecare cu sinta#a i semnificaia 4semantica5 ei i
________________________________________________________________________________
11
Structuri de date i algoritmi
_______________________________________________________________________________
propo+iii nestandard& 7a cum se $a ar%ta mai t!r+iu, propo+iiile nestandard sunt te#te care descriu
p%ri ale algoritmului nc% incomplet ela"orate, nefinisate, asupra c%rora urmea+% s% se re$in%& 3le
se recunosc prin faptul c% ncep ntotdeauna cu semnul HIH i se termin% cu punctul o"inuit
4caracterul H&H5&
Pe l!ng% aceste propo+iii standard i nestandard, n te#tul algoritmului $om mai introduce
propo+iii e#plicati$e, numite comentarii& Pentru a le distinge de celelalte propo+iii, comentariile
$or fi nchise ntre acolade& Dolul lor $a fi e#plicat puin mai t!r+iu&
Prin e#ecuia unui algoritm descris n Pseudocod se nelege efectuarea operaiilor preci+ate
de propo+iiile algoritmului, n ordinea citirii lor 4de sus n .os i de la st!nga spre dreapta5&
Propo+iiile standard ale lim"a.ului Pseudocod folosite n aceast% lucrare, corespund
structurilor de calcul pre+entate n Bigura 1&1 i $or fi pre+entate n continuare&
)n Bigura (&1, prin 7, J s-au notat su"scheme logice, adic% sec$ene de oric!te structuri
construite conform celor trei reguli menionate n continuare&
Structura sec$enial% 4Bigura (&1&a5 este redat% prin concatenarea propo+iiilor, simple sau
compuse, ale lim"a.ului Pseudocod, care $or fi e#ecutate n ordinea nt!lnirii lor n te#t&
Propo+iiile simple din lim"a.ul Pseudocod sunt '(K3LK3, K(P7D3LK3, B(3 i apelul de
su"program& Propo+iiile compuse corespund structurilor alternati$e i repetiti$e&
Structura alternati$% din Bigura (&1&" este redat% n Pseudocod prin propo+iia *7'M,
pre+entat% n seciunea 2&3&2, iar structura repetiti$% din Bigura (&1&c este redat% n Pseudocod prin
propo+iia 'NKK(9P, pre+entat% n seciunea 2&3&3&
JOhm i Pacopini /10662 au demonstrat c% orice algoritm poate fi descris folosind numai
aceste trei structuri de calcul&
Propo+iiile *7K3 i D3Q:CK7K3 sunt folosite n fa+a de specificare a pro"lemelor, adic%
enunarea riguroas% a acestora&

Figura 1.1. Structuri eleentare de calcul7
________________________________________________________________________________
11
Structuri de date i algoritmi
_______________________________________________________________________________
Biecare propo+iie standard ncepe cu un cu$!nt cheie, aa cum se $a $edea n cele ce
urmea+%& Pentru a deose"i aceste cu$inte de celelalte denumiri, construite de programator, n acest
capitol $om scrie cu$intele cheie cu litere mari& 9enion%m c% propo+iiile simple se termin% cu
caracterul H>H n timp ce propo+iiile compuse, deci cele n interiorul c%rora se afl% alte propo+iii, au
un marca. de sf!rit propriu& *e asemenea, menion%m c% propo+iiile lim"a.ului Pseudocod $or fi
luate n seam% n ordinea nt!lnirii lor n te#t, asemenea oric%rui te#t al lim"ii rom!ne&
Propo+iia *7K3 se folosete pentru preci+area datelor iniiale, deci a datelor considerate
cunoscute n pro"lem% 4numite i date de intrare5 i are sinta#a6
*7K3 list >
unde list conine toate numele $aria"ilelor a c%ror $aloare iniial% este cunoscut%&
)n general, prin list% se nelege o succesiune de elemente de acelai fel desp%rite prin
$irgul%& *eci n propo+iia *7K3, n dreapta acestui cu$!nt se $or scrie acele $aria"ile care
marchea+% m%rimile cunoscute n pro"lem%&
Pentru preci+area re+ultatelor dorite se folosete propo+iia standard6
D3Q:CK7K3 list>
n construcia =list= ce urmea+% dup% cu$!ntul D3Q:CK7K3 fiind trecute numele $aria"ilelor care
marchea+% 4conin5 re+ultatele cerute n pro"lem%&
7cum putem preci+a mai e#act ce nelegem prin cunoaterea complet% a pro"lemei de
re+ol$at& 3$ident, o pro"lem% este cunoscut% atunci c!nd se tie care sunt datele de intrare ce
definesc pro"lema dat% i re+ultatele ce tre"uiesc o"inute&
*eci pentru cunoaterea unei pro"leme este necesar% preci+area $aria"ilelor care marchea+%
datele considerate cunoscute n pro"lem%, care $a fi reflectat% printr-o propo+iie *7K3 i
cunoaterea e#act% a re+ultatelor pro"lemei, care se $a reflecta prin propo+iia D3Q:CK7K3&
<aria"ilele pre+ente n aceste propo+iii au anumite semnificaii, presupuse cunoscute&
'unoaterea acestora, scrierea lor e#plicit%, formea+% ceea ce $om numi n continuare specificarea
pro"lemei& Specificarea unei pro"leme este o acti$itate foarte important% dar nu i simpl%&
*e e#emplu, pentru re+ol$area ecuaiei de gradul al doilea, specificarea pro"lemei, poate
fi6
*7K3 a,",c> E 'oeficienii ecuaiei F
D3Q:CK7K3 #1,#2> E D%d%cinile ecuaiei F
7ceast% specificaie este ns% incomplet%& ?u ntotdeauna ecuaia are r%d%cini reale& )n ca+ul
________________________________________________________________________________
12
Structuri de date i algoritmi
_______________________________________________________________________________
n care r%d%cinile sunt comple#e putem nota prin #1, #2 partea real%, respecti$ partea imaginar% a
r%d%cinilor& Sau pur i simplu, nu ne interesea+% $aloarea r%d%cinilor n acest ca+, ci doar faptul c%
ecuaia nu are r%d%cini reale&
'u alte cu$inte a$em ne$oie de un mesa. care s% ne indice aceast% situaie, sau de un
indicator, fie el numit ind& 7cest indicator $a lua $aloarea 1 dac% r%d%cinile sunt reale i $aloarea 1
n ca+ contrar& *eci specificaia mai complet% a pro"lemei este6

*7K3 a,",c> E 'oeficienii ecuaiei F
D3Q:CK7K3 ind, Eind R 1 pt& r%d%cini reale, 1 pt comple#eF
#1,#2> ED%d%cinile ecuaiei, n ca+ul ind R 1, respecti$F
Epartea real% i cea imaginar% n ca+ul ind R 1F

3$ident c% specificarea pro"lemei este o etap% important% pentru g%sirea unei metode de
re+ol$are i apoi n proiectarea algoritmului corespun+%tor& ?u se poate re+ol$a o pro"lem% dac%
aceasta nu este "ine cunoscut%, adic% nu a$em scris% specificarea pro"lemei&
S'unoate complet pro"lemaT este prima regul% ce tre"uie respectat% pentru a o"ine c!t mai
repede un algoritm corect pentru re+ol$area ei&
I7870787 Algoriti liniari
Propo+iiile '(K3LK3 i K(PMD3LK3 sunt folosite pentru iniiali+area $aria"ilelor de
intrare cu datele cunoscute n pro"lem%, respecti$ pentru tip%rirea 4aflarea5 re+ultatelor o"inute& )n
etapa de programare propriu-+is% acestor propo+iii le corespund ntr-un lim"a. de programare
instruciuni de intrare-ieire&
Propo+iia '(K3LK3 se folosete pentru preci+area datelor iniiale, deci a datelor
considerate cunoscute n pro"lem% 4numite i date de intrare5 i are sinta#a6
'(K3LK3 list >
unde list conine toate numele $aria"ilelor a c%ror $aloare iniial% este cunoscut%&
*eci n propo+iia '(K3LK3, n dreapta acestui cu$!nt se $or scrie acele $aria"ile care apar
n propo+iia *7K3 n specificarea pro"lemei& Se su"nelege c% aceste $aria"ile sunt iniiali+ate cu
$alorile cunoscute corespun+%toare&
Pentru aflarea re+ultatelor dorite, pe care calculatorul o $a face prin tip%rirea lor pe h!rtie
sau afiarea pe ecran, se folosete propo+iia standard6
K(PMD3LK3 list >
________________________________________________________________________________
13
Structuri de date i algoritmi
_______________________________________________________________________________
n construcia list ce urmea+% dup% cu$!ntul K(PMD3LK3 fiind trecute numele $aria"ilelor a c%ror
$alori dorim s% le afl%m& 3le sunt de o"icei re+ultatele cerute n pro"lem%, specificate i n
propo+iia D3Q:CK7K3&
Jlocului de atri"uire dintr-o schem% logic% i corespunde n Pseudocod propo+iia standard6
/B(32 $ar 6R expresie >
7ceast% propo+iie este folosit% pentru a indica un calcul alge"ric, al expresiei care urmea+%
dup% sim"olul de atri"uire =6R= i de atri"uire a re+ultatului o"inut $aria"ilei var& 3#presia din
dreapta semnului de atri"uire poate fi orice e#presie alge"ric% simpl%, cunoscut% din manualele de
matematic% din liceu i construit% cu cele patru operaii6 adunare, sc%dere, nmulire i mp%rire
4notate prin caracterele U, -, V, respecti$ W5&
Prin scrierea cu$!ntului B(3 ntre parante+e drepte se indic% posi"ilitatea omiterii acestui
cu$!nt din propo+iie& 3l s-a folosit cu g!ndul ca fiecare propo+iie s% nceap% cu un cu$!nt al lim"ii
rom!ne care s% repre+inte numele propo+iiei& *e cele mai multe ori $om omite acest cu$!nt& 7tunci
c!nd $om scrie succesi$ mai multe propo+iii de atri"uire $om folosi cu$!ntul B(3 numai n prima
propo+iie, omi!ndu-l n celelalte&
*in cele de mai sus re+ult% c% o $aria"il% poate fi iniiali+at% at!t prin atri"uire 4deci dac%
este $aria"ila din st!nga semnului de atri"uire 6R5 c!t i prin citire 4c!nd face parte din lista
propo+iiei '(K3LK35& 8 greeal% frec$ent% pe care o fac ncep%torii este folosirea $aria"ilelor
neiniiali+ate& 3$ident c% o e#presie n care apar $aria"ile care nu au $alori nu poate fi calculat%, ea
nu este definit%& *eci nu folosii $aria"ile neiniiali+ate&
Pentru a marca nceputul descrierii unui algoritm $om folosi propo+iia6

7CA8D(K9:C nume 3SK36
*e asemenea, prin propo+iia6
SB7CA8D(K9
$om marca sf!ritul unui algoritm&
7lgoritmii care pot fi descrii folosind numai propo+iiile pre+entate mai sus se numesc
algoritmi liniari&
'a e#emplu de algoritm liniar pre+ent%m un algoritm ce determin% $ite+a v cu care a mers
un auto$ehicul ce a parcurs distana D n timpul T&
Exemplul I.1.
7CA8D(K9:C <(K3Q7 3SK36 E 7lgoritmul 16 'alculea+% $ite+a F
________________________________________________________________________________
14
Structuri de date i algoritmi
_______________________________________________________________________________
E * R *istana 4spaiul5 F
E K R Kimpul> < R <ite+a F
'(K3LK3 *,K> E $6R spaiuWtimp F
B(3 <6R*WK>
K(PMD3LK3 <
SB7CA8D(K9
I78707/7 Algoriti cu rai'ica9ii
Boarte muli algoritmi e#ecut% anumite calcule n funcie de satisfacerea unor condiii&
7ceste calcule sunt redate de structura alternati$% pre+entat% n Bigura (&1&", c%reia i corespunde
propo+iia Pseudocod6
*7'M cond
7K:?'( 7
7CKB3C J
SB*7'M
sau $arianta redus% a ei6
*7'M cond
7K:?'( 7
SB*7'M
folosit% n ca+ul n care grupul de propo+iii J este $id&
7ceste propo+iii redau n Pseudocod structura alternati$% de calcul& )n primul r!nd este
necesar% $erificarea condiiei scrise dup% cu$!ntul *7'M& )n ca+ul c% aceast% condiie este
ade$%rat% se $a e#ecuta grupul de propo+iii 7& )n ca+ul n care aceast% condiie este fals% se $a
e#ecuta grupul de propo+iii J, dac% este pre+ent% ramura 7CKB3C& (ndiferent care dintre
sec$enele 7 sau J a fost e#ecutat%, se $a continua cu propo+iia urm%toare propo+iiei *7'M, ce
urmea+% dup% marcatorul de sf!rit SB*7'M&
8 generali+are a structurii alternati$e reali+at% de propo+iia *7'M este structura selecti$%6
S3C3'K37QM i *(?KD3
$16 71>
$26 72>
& & &
________________________________________________________________________________
15
Structuri de date i algoritmi
_______________________________________________________________________________
$n6 7n
SBS3C3'K37QM
structur% echi$alent% cu urm%torul te#t Pseudocod6
*7'M i R $1
7K:?'( 71
7CKB3C
*7'M i R $2
7K:?'( 72
7CKB3C
& & &
*7'M i R $n
7K:?'( 7n
SB*7'M
&&&
SB*7'M
SB*7'M
'u propo+iiile pre+entate p!n% acum putem descrie un num%r nsemnat de algoritmi&
7cetia se numesc algoritmi cu ramificaii&
*e e#emplu, $om descrie un algoritm pentru re+ol$area ecuaiei de gradul al doilea& 7m
pre+entat n (&1&3 aceast% pro"lem% i am preci+at semnificaia $aria"ilelor respecti$e& Pe l!ng%
aceste $aria"ile, pentru re+ol$area pro"lemei mai a$em ne$oie de dou% $aria"ile au#iliare6
delta - pentru discriminantul ecuaiei>
r - pentru $aloarea radicalului folosit n calculul r%d%cinilor&
Exemplul I.2.
7CA8D(K9:C 3'AD*8( 3SK36 E 7lgoritmul 26 De+ol$area F
E ecuaiei de gradul doi F
'(K3LK3 a,",c> E a,",c R coeficienii ecuaiei F
B(3 delta6R "V"-4VaVc>
*7'M delta X 1
________________________________________________________________________________
16
Structuri de date i algoritmi
_______________________________________________________________________________
7K:?'( ind6R 1> E'a+ul r%d%cini comple#e F
Ir6Rradical din 4-delta5>
#16R-"W4aUa5>
#26R rW4aUa5>
7CKB3C ind6R1> Eca+ul r%d%cini reale F
Ir6Rradical din delta>
#16R4-"-r5W4aUa5>
#26R4-"Ur5W4aUa5>
SB*7'M
K(PMD3LK3 ind, #1,#2>
SB7CA8D(K9

I787070 Algoriti ciclici
)n re+ol$area multor pro"leme tre"uie s% efectu%m aceleai calcule de mai multe ori, sau s%
repet%m calcule asem%n%toare& *e e#emplu, pentru a calcula suma a dou% matrice $a tre"ui s%
adun%m un element al primei matrice cu elementul de pe aceeai po+iie din a doua matrice, aceast%
adunare repet!ndu-se pentru fiecare po+iie n parte& 7lte calcule tre"uiesc repetate n funcie de
satisfacerea unor condiii&
)n acest scop n lim"a.ul Pseudocod e#ist% trei propo+iii standard6 'NKK(9P, D3P3KM i
P3?KD:& Propo+iia 'NKK(9P are sinta#a6

'NKK(9P cond 3Y3':KM 7 SB'NK
i cere e#ecuia repetat% a grupului de propo+iii 7, n funcie de condiia =cond=& 9ai e#act, se
e$aluea+% condiia =cond=> dac% aceasta este ade$%rat% se e#ecut% grupul 7 i se re$ine la e$aluarea
condiiei& *ac% ea este fals% e#ecuia propo+iiei se termin% i se continu% cu propo+iia care
urmea+% dup% SB'NK&
*ac% de prima dat% condiia este fals% grupul 7 nu se $a e#ecuta niciodat%, altfel se $a repeta
e#ecuia grupului de propo+iii 7 p!n% c!nd condiia $a de$eni fals%& *in cau+% c% nainte de
e#ecuia grupului 7 are loc $erificarea condiiei, aceast% structur% se mai numete structur
repetitiv condiionat anterior& 3a repre+int% structura repetiti$% pre+entat% n Bigura (&1&c&
'a e#emplu de algoritm n care se folosete aceast% structur% ciclic% s% re+ol$%m algoritmul
lui 3uclid pentru calculul celui mai mare di$i+or comun a dou% numere&
________________________________________________________________________________
17
Structuri de date i algoritmi
_______________________________________________________________________________
Exemplul I.3.
7CA8D(K9:C 3uclid 3SK36 E7lgoritmul 36 'el mai mare di$i+or comunF
'(K3LK3 n1,n2> E'ele dou% numere a c%ror di$i+or se cereF
B(3 d6Rn1> i6Rn2>
'NKK(9P i Z1 3Y3':KM
r6Rd modulo i> d6Ri> i6Rr
SB'NK
K(PMD3LK3 d> E dR cel mai mare di$i+or comunF
SB7CA8D(K9 Eal numerelor n1 i n2 F
)n descrierea multor algoritmi se nt!lnete structura repetiti$% condiionat% posterior6
D3P3KM 7 PN?M'N?* cond SBD3P
structur% echi$alent% cu6

7
'NKK(9P not 4cond5 3Y3':KM 7 SB'NK
*eci ea cere e#ecuia necondiionat% a lui 7 i apoi $erificarea condiiei =cond=& <a a$ea loc
repetarea e#ecuiei lui 7 p!n% c!nd condiia de$ine ade$%rat%& *eoarece condiia se $erific% dup%
prima e#ecuie a grupului 7 aceast% structur% este numit% structura repetitiv condiionat
posterior, prima e#ecuie a "locului 7 fiind necondiionat%&
'a e#emplu de algoritm n care se folosete aceast% propo+iie $om scrie un algoritm pentru
apro#imarea num%rului e cu o preci+ie dat% de num%rul eps po+iti$, folosindu-ne de de+$oltarea n
serie6
e R 1 U 1W1[ U 1W2[ U 1W3[ U &&& U 1Wn[ U &&&
Specificaia pro"lemei n Pseudocod este6
*7K3 eps > E eps\1 F
D3Q:CK7K3 $e> E apro#imarea seriei cu o eroare X eps F
E deci rR]e-$e]Xeps F
Pentru re+ol$area pro"lemei tre"uie s% tim c% restul rn din scrierea
________________________________________________________________________________
1;
Structuri de date i algoritmi
_______________________________________________________________________________
e R 1 U 1W1[ U 1W2[ U 1W3[ U &&& U 1Wn[ U &&&
R sn U rn
este mai mic dec!t ultimul termen adunat la sn, deci rnXtn, unde tnR1Wn[& <aria"ilele au#iliare
folosite n descrierea algoritmului sunt6
n - preci+ea+% ultima fracie adunat%>
t - este $aloarea acestei fracii&
Exemplul I.4.

7CA8D(K9:C ?D3 3SK36 E 7lgoritmul 46'alculul lui e cu preci+ia eps F
'(K3LK3 eps> E eps \ 1 F
B(3 $e6R2&5> t6R1&5> n6R2>
D3P3KM
n6RnU1
t6RtWn>
$e6R$eUt>
PN?M'N?* t X eps SBD3P
K(PMD3LK3 $e>
SB7CA8D(K9
8 alt% propo+iie care cere e#ecuia repetat% a unei sec$ene 7 este propo+iia
P3?KD: c6Rli> lf />p2 3Y3':KM 7 SBP3?KD:
3a definete o structura repetiti$% predefinit%, cu un num%r determinat de e#ecuii ale
grupului de propo+iii 7 i este echi$alent% cu sec$ena6
c6Rli > final6Rlf >
D3P3KM
7
c6RcUp
PN?M'N?* 4c\final i p\15 sau 4cXfinal i pX15 SBD3P

Se o"ser$% c%, n sinta#a propo+iiei P3?KD:, pasul p este nchis ntre parante+e drepte&
Prin aceasta indic%m faptul c% el este opional, put!nd s% lipseasc%& )n ca+ul n care nu este pre+ent,
$aloarea lui implicit% este 1&
________________________________________________________________________________
10
Structuri de date i algoritmi
_______________________________________________________________________________
Semnificaia propo+iiei P3?KD: este clar%& 3a cere repetarea grupului de propo+iii 7
pentru toate $alorile contorului c cuprinse ntre $alorile e#presiilor li i lf 4calculate o singur% dat%
nainte de nceperea ciclului5, cu pasul p& Se su"nelege c% nu tre"uie s% modific%m $alorile
contorului n nici o propo+iie din grupul 7& *e multe ori aceste e#presii sunt $aria"ile simple, iar
unii programatori modific% n 7 $alorile acestor $aria"ile, nc%lc!nd semnificaia propo+iiei
P3?KD:& *eci,
Obs: ?u recalcula limitele i nu modifica $aria"ila de ciclare 4contorul5 n interiorul unei structuri
repetiti$e P3?KD:&
S% o"ser$%m, de asemenea, c% prima e#ecuie a grupului 7 este o"ligatorie, a"ia dup%
modificarea contorului $erific!ndu-se condiia de continuare a e#ecuiei lui 7&
'a e#emplu, s% descriem un algoritm care g%sete minimul i ma#imul componentelor unui
$ector de numere reale&
<om nota prin Y acest $ector, deci Y R 4#
1
, #
2
, &&& , #
n
5&
Specificaia pro"lemei este urm%toarea6
*7K3 n,4#/i2 ,iR1,n5>
D3Q:CK7K3 $almin,$alma#>
iar semnificaia acestor $aria"ile se nelege din cele scrise mai sus& Pentru re+ol$area pro"lemei
$om e#amina pe r!nd cele n componente& Pentru a parcurge cele n componente a$em ne$oie de un
contor care s% preci+e+e po+iia la care am a.uns& Bie i acest contor& :or se a.unge la urm%torul
algoritm6
Exemplul I.5.

7CA8D(K9:C 9(?97Y 3SK36 E 7lgoritmul 56 'alculul F
E $alorii minime i ma#ime F
'(K3LK3 n,4 #/i2,iR1,n5>
B(3 $almin6R#/12> $alma#6R#/12>
P3?KD: i6R2>n 3Y3':KM
*7'M #/i2X$almin
7K:?'( $almin6R#/i 2>
SB*7'M
*7'M #/i2\$alma#
7K:?'( $alma#6R#/i2>
SB*7'M
________________________________________________________________________________
21
Structuri de date i algoritmi
_______________________________________________________________________________
SBP3?KD:
K(PMD3LK3 $almin,$alma#>
SB7CA8D(K9

:n rol important n claritatea te#tului unui algoritm l au denumirile alese pentru $aria"ile&
3le tre"uie s% reflecte semnificaia $aria"ilelor respecti$e& *eci alege denumiri sugesti$e pentru
$aria"ile, care s% reflecte semnificaia lor& Putem formula astfel regula de mai .os6
Obs:. 7lege denumiri sugesti$e pentru $aria"ile[ )n e#emplul de mai sus denumirile $almin i
$alma# spun cititorului ce s-a notat prin aceste $aria"ile&
I787: Calculul e'ectuat de un algorit
Bie Y
1
, Y
2
, &&&, Y
n
, $aria"ilele ce apar n algoritmul A& )n orice moment al e#ecuiei
algoritmului, fiecare $aria"il% are o anumit% $aloare, sau este nc% neiniiali+at%&
<om numi stare a algoritmului A cu $aria"ilele menionate $ectorul s R 4 s
1
,s
2
,&&&,s
n
5 format
din $alorile curente ale celor n $aria"ile ale algoritmului&
3ste posi"il ca $aria"ila Y
.
s% fie nc% neiniiali+at%, deci s% nu ai"% $aloare curent%, ca+ n
care $aloarea s
.
este nedefinit%, lucru notat n continuare prin semnul ntre"%rii H@H&
Prin e#ecutarea unei anumite instruciuni unele $aria"ile i schim"% $aloarea, deci
algoritmul i schim"% starea&
Se numete calcul efectuat de algoritmul 7 o sec$en% de st%ri s
1
, s
1
, s
2
, &&&, s
m
unde s
1
este
starea iniial% cu toate $aria"ilele neiniiali+ate, iar s
m
este starea n care se a.unge dup% e#ecuia
ultimei propo+iii din algoritm&
Exemplul I.6
7lgoritmul ?rdi$i+ori calculea+% num%rul de di$i+ori proprii ai unui num%r dat Y1&
P1 '(K3SK3 Y1>
P2 B(3 Y26R1>
P3 B(3 Y36R1>
P4 'NKK(9P Y1 ^ Y2 3Y3':KM
P5 Y26RY2U1>
P6 *7'M Y1 modulo Y2 R 1
7K:?'( Y36RY3U1
________________________________________________________________________________
21
Structuri de date i algoritmi
_______________________________________________________________________________
SB*7'M
SB'NK
P7 K(PMD3LK3 Y1,Y3
Presupun!nd c% Y1 R 6, atunci st%rile prin care trece acest algoritm, deci calculul efectuat
de el, este redat mai .os&
s1 R 4 @, @, @5
P14s15 R s1 R 4 6, @, @5
P24s15 R s2 R 4 6, 1, @5
P34s25 R s3 R 4 6, 1, 15
P54s35 R s4 R 4 6, 2, 15
P64s45 R s5 R 4 6, 2, 15
P54s55 R s6 R 4 6, 3, 15
P64s65 R s7 R 4 6, 3, 25
P54s75 R s; R 4 6, 4, 25
P64s;5 R s0 R 4 6, 4, 25
P54s05 R s11R 4 6, 5, 25
P64s115R s11R 4 6, 5, 25
P64s115R s12R 4 6, 5, 25
P54s125R s13R 4 6, 6, 25
P74s135R s14R 4 6, 6, 25
3#ecuia 4calculul5 se $a ncheia cu tip%rirea $alorilor 6 i 2 a celor dou% $aria"ile din
propo+iia P7& Se poate o"ser$a c% cele dou% $alori tip%rite repre+int%, prima 4Y15, num%rul citit, iar
a doua 4Y35, re+ultatul o"inut& De+ultatul Y3 repre+int% num%rul di$i+orilor proprii ai lui Y1&

I787; Ra'inare <n #a=i succesi(i
7deseori, algoritmul de re+ol$are a unei pro"leme este re+ultatul unui proces comple#, n
care se iau mai multe deci+ii& 8"ser$aia este ade$%rat% mai ales n ca+ul pro"lemelor complicate,
dar i pentru pro"leme mai simple din procesul de n$%%m!nt& 3ste $or"a de un proces de detaliere
pas cu pas a specificaiei pro"lemei, proces denumit i proiectare descendent, sau rafinare n pai
succesivi& 7lgoritmul apare n mai multe $ersiuni succesi$e, fiecare $ersiune fiind o detaliere a
$ersiunii precedente&
)n $ersiunile iniiale apar propo+iii nestandard, clare pentru cititor, dar nepreci+ate prin
propo+iii standard& :rmea+% ca n $ersiunile urm%toare s% se re$in% asupra lor& 7lgoritmul apare
________________________________________________________________________________
22
Structuri de date i algoritmi
_______________________________________________________________________________
astfel n $ersiuni succesi$e, tot mai complet de la o $ersiune la alta&
'a e#emplu de algoritm o"inut prin rafinare succesi$% $om proiecta un algoritm care s%
re+ol$e urm%toarea pro"lem%6
Exemplul I.
Se dau numerele ntregi Y R 4#1, #2, &&&, #n5& Se cere s% se rein% ntr-un $ector _ toate
componentele distincte ale $ectorului Y 4deci _ are numai componente distincte5&
Specificarea pro"lemei6
*7K3 n, 4#/i2, iR1,n5>
D3Q:CK7K3 4`/.2, .R1,a5> EYR_, unde Y este mulimea ceF
Econine toate numerele #i, iar _ R mulimeaF
Ece conine pe `/.2, .R1,a i `/l2X\`/.2 pentru l^.F
<aria"ilele intermediare folosite i semnificaia lor, precum i metoda folosit% $or fi
re+ultatul rafin%rilor succesi$e i $or fi nelese din $ersiunilor respecti$e&
Exemplul I.!
7CA8D(K9:C *(SK(?'K 3SK36 E <ersiunea 1 F
'(K3LK3 n, 4#/i2, iR1,n5>
B(3 `/126R#/12> a6R1>
I3#aminea+% celelalte numere i dac% tre"uie adaug%-le n _&
K(PMD3LK3 4`/.2, .R1,a5>
SB7CA8D(K9
Pentru a parcurge celelalte numere a$em ne$oie de un contor, fie el i, i de folosirea
propo+iiei P3?KD:& 7.ungem la $arianta6
Exemplul I."
7CA8D(K9:C *(SK(?'K 3SK36 E <ersiunea 2 F
'(K3LK3 n, 4#/i2, iR1,n5>
B(3 `/126R#/12> a6R1>
P3?KD: i6R2>n 3Y3':KM
I<erific% dac% #i aparine mulimii _&
I*ac% nu aparine atunci adaug% pe #i la _&
SBP3?KD:
K(PMD3LK3 4`/.2, .R1,a5>
SB7CA8D(K9
________________________________________________________________________________
23
Structuri de date i algoritmi
_______________________________________________________________________________
*eci+ia ce tre"uie luat% este cum s% $erific%m apartenena unui elementul #
i
la mulimea _
format% din a elemente& Pentru aceasta calcul%m indicatorul r, egal cu 1 dac% r%spunsul este negati$
i egal cu 1 n ca+ contrar& 7ceasta se poate face cu sec$ena de propo+iii6
B(3 r6R1> .6R1>
'NKK(9P 4rR15 i 4.XRa5 3Y3':KM
*7'M #/i2R`/.2
7K:?'( r6R1
7CKB3C .6R.U1
SB*7'M
SB'NK
7.ungem la $ersiunea final% a algoritmului dorit6
Exemplul I.1#
7CA8D(K9:C *(SK(?'K 3SK36 E <ersiunea 3 F
'(K3LK3 n, 4#/i2, iR1,n5>
B(3 `/126R#/12> a6R1>
P3?KD: i6R2>n 3Y3':KM
B(3 r6R1> .6R1>
'NKK(9P 4rR15 i 4.XRa5 3Y3':KM
*7'M #/i2R`/.2
7K:?'( r6R1>
7CKB3C .6R.U1>
SB*7'M
SB'NK
*7'M rR1
7K:?'( a6RaU1> `/a26R#/i2>
SB*7'M
________________________________________________________________________________
24
Structuri de date i algoritmi
_______________________________________________________________________________
SBP3?KD:
K(PMD3LK3 4`/.2, .R1,a5>
SB7CA8D(K9
De+ult% ca o consecin%, o alt% regul% important% n proiectarea algoritmului6
Obs: 7m!n% pe mai t!r+iu detaliile nesemnificati$e> concentrea+%-i atenia la deci+iile importante
ale momentului&
I787>7 Pro%lee #ro#use
S% se scrie algoritmi pentru re+ol$area urm%toarelor pro"leme6
1& Se d% num%rul natural n& S% se determine primele n numere prime&
2& Se d% n?& S% se determine primele n triplete de numere pitagorice& 4Kripletul 4i,.,a5 constituie
numere pitagorice dac% iX.Xa i i
2
U.
2
R a
2
5&
3& Kripletul 4+,l,a5 repre+int% o dat% curent% +i, lun%, an& *eterminai a c!ta +i din an este aceast%
dat%&
4& Se cunoate data curent% 4+c,lc,ac5 i +iua de natere a unei persoane 4+n,ln,an5& *eterminai
$!rsta n +ile a acestei persoane&
5& 'unosc!nd n ce +i din s%pt%m!n% a fost 1 ianuarie, determinai ce +i din s%pt%m!n% $a fi n +iua
preci+at% prin tripletul 4+,l,a5&
I7/7 SUBALGORITMI
I7/787 Conce#tul de su%algorit
8rice pro"lem% poate apare ca o su"pro"lem% S a unei pro"leme mai comple#e '&
7lgoritmul de re+ol$are a pro"lemei S de$ine n acest ca+ o parte din algoritmul de re+ol$are a
pro"lemei ', parte numit% su"algoritm&
Pentru a defini un su"algoritm $om folosi propo+iia standard6
S:J7CA8D(K9:C nume4lpf5 3SK36
unde nume este numele su"algoritmului definit, iar lpf este lista parametrilor formali& 7cetia sunt
formai din $aria"ilele care marchea+% datele de intrare 4cele presupuse cunoscute5 i $aria"ilele
care marchea+% datele de ieire 4re+ultatele o"inute de su"algoritm5&
________________________________________________________________________________
25
Structuri de date i algoritmi
_______________________________________________________________________________
7ceast% propo+iie este urmat% de te#tul efecti$ al su"algoritmului, te#t care preci+ea+%
calculele necesare re+ol$%rii su"pro"lemei corespun+%toare& *escrierea se $a ncheia cu cu$!ntul
SBS:J7CA8D(K9 sau SB-nume&
Exemplul I.11
S% consider%m ca e#emplu un su"algoritm cu numele 97Y(9, care determin% ma#imul
dintre componentele $ectorului Y R 4#
1
, #
2
, &&&, #
n
5&
*atele cunoscute pentru acest su"algoritm sunt $ectorul Y i num%rul n al componentelor
$ectorului Y& 'a re+ultat $om o"ine ma#imul cerut, pe care-l $om nota cu ma#& )n conclu+ie
specificarea su"pro"lemei este6
*7K3 n, Y
D3Q:CK7K3 ma#
*eci lista parametrilor formali conine trei $aria"ile, n, Y i ma#& Pentru a g%si ma#imul
parcurgem toate componentele $ectorului Y, rein!nd n $aria"ila ma# $aloarea cea mai mare
nt!lnit%& 3$ident, tre"uie s% ncepem cu ma# R #1& Su"algoritmul este pre+entat n continuare&
S:J7CA8D(K9:C ma#im4n,Y,ma#5 3SK36 E'alculea+% $aloarea ma#im%F
Edintre cele n componente ale lui YF
B(3 ma#6R#/12>
P3?KD: i6R2>n 3Y3':KM
*7'M #/i2\ma#
7K:?'( ma#6R#/i2>
SB*7'M
SBP3?KD:
SB-ma#im

:na dintre greelile frec$ente ale ncep%torilor const% n introducerea n corpul
su"algoritmului a unor instruciuni de citire a datelor presupuse cunoscute, sau de tip%rire a
re+ultatelor o"inute& 7cest lucru denot% o nenelegere a conceptului de su"algoritm i a rolului
su"algoritmilor n programare& Su"algoritmul re+ol$% o su"pro"lem% - care e o parte dintr-o
pro"lema comple#% de re+ol$at&
*e o"icei, datele presupuse cunoscute pentru su"pro"lem%, nu sunt datele iniiale cunoscute
n pro"lema iniial%> ele sunt re+ultatul unor calcule efectuate nainte de apelul su"algoritmului& )n
general, ele nu sunt cunoscute de programator, fiind re+ultatul unor calcule f%cute de algoritm&
7nalog, re+ultatele o"inute de su"algoritm sunt adesea doar $alori intermediare, necesare n
continuare, f%r% a fi ns% o"ligatoriu i re+ultate ale pro"lemei iniiale& *e aceea nu este necesar s%
le tip%rim> este sarcina algoritmului apelant s% trate+e re+ultatele o"inute de su"algoritm cum crede
de cu$iin%&
Obs. 3$it% s% citeti i s% tip%reti ntr-un su"algoritm&
3#cepie de la aceast% regul% o fac su"algoritmii dedicai citirilor unor date, sau tip%ririlor
unor re+ultate& )n acest ca+, citirea, respecti$ tip%rirea unor date este cerut% e#pres n enunul
________________________________________________________________________________
26
Structuri de date i algoritmi
_______________________________________________________________________________
su"pro"lemelor corespun+%toare& 9ai mult, un su"algoritm este scris pentru a re+ol$a su"pro"lema
corespun+%toare indiferent de locul, timpul sau comple#itatea pro"lemei n care este folosit& *e
aceea, tre"uie s% concepem su"algoritmii cu g!ndul la refolosirea lor&
Obs. 'oncepe un su"algoritm indiferent de conte#tul n care $a fi folosit&
S% consider%m n cele ce urmea+%, urm%torul e#emplu& )n cadrul multor algoritmi este
necesar calculul $alorilor unei funcii n diferite puncte& 3ste necesar s% definim funcia printr-un
su"algoritm de tip funcie&
Pentru definirea unui su"algoritm de tip funcie se folosete un antet care preci+ea+% numele
funciei i $aria"ilele de care depinde ea& Su"algoritmul are forma6
B:?'G(7 nume4lpf5 3SK36 E7ntetul funcieiF
e#t Ecorpul funcieiF
SB-nume Emarca de sf!ritF
)n corpul funciei tre"uie s% e#iste cel puin o instruciune de atri"uire n care numele
funciei apare n mem"rul st!ng, deci prin care funcia primete o $aloare&

Exemplul I.12
S% consider%m funcia numar 6 D b E2,3,4,5F, definit% matematic astfel6

)n Pseudocod descrierea este urm%toarea6
B:?'G(7 numar4#5 3SK36
*7'M #X1&2
7K:?'( numar6R2
7CKB3C
*7'M #X1&5
7K:?'( numar6R3
7CKB3C
*7'M #X1&0
7K:?'( numar6R4
7CKB3C numar6R5
SB*7'M
________________________________________________________________________________
27
Structuri de date i algoritmi
_______________________________________________________________________________
SB*7'M
SB*7'M
SB-numar
7m $%+ut c% definiia unei funcii const% dintr-un antet i dintr-un "loc care $a defini
aciunile prin care se calculea+% $aloarea funciei& )n antet se preci+ea+% numele funciei i lista
parametrilor formali&
)n conclu+ie, e#ist% dou% categorii de su"algoritmi6 de tip funcie i su"algoritmi propriu-
+ii, c%rora li se mai spune i proceduri& (mportana lor $a fi su"liniat% prin toate e#emplele care
urmea+% n acest curs& )n ncheiere menion%m c% su"programele de tip funcie se folosesc n scopul
definirii funciilor, aa cum sunt cunoscute ele din matematic%, n timp ce su"algoritmii de tip
procedur% se refer% la re+ol$area unor pro"leme ce apar ca su"pro"leme, fiind algoritmi de sine
st%t%tori&

I7/7/7 A#elul unui su%algorit
7m $%+ut c% un su"algoritm este dedicat re+ol$%rii unei su"pro"leme S care apare ntr-o
pro"lem% mai comple#% '& 7lgoritmul corespun+%tor pro"lemei ' $a folosi toate operaiile
necesare re+ol$%rii pro"lemei S, deci $a folosi ca parte ntregul su"algoritm conceput pentru
re+ol$area su"pro"lemei S& Spunem c% el $a apela acest su"algoritm&
)n Pseudocod apelul unei funcii se face scriind ntr-o e#presie numele funciei urmat de lista
parametrilor actuali& Kre"uie s% e#iste o coresponden% "iuni$oc% ntre parametrii actuali i cei
formali folosii n definiia funciei& *ei denumirile $aria"ilelor din cele dou% liste pot s% difere,
rolul $aria"ilelor care se corespund este acelai& 9ai e#act, parametrul formal i parametrul actual
corespun+%tor tre"uie s% se refere la aceeai entitate, tre"uie s% ai"% aceeai semnificaie, s%
repre+inte aceeai structur% de date& Putem considera c% n timpul e#ecuiei algoritmului cei doi
parametri de$in identici&
Bolosirea unui su"algoritm n cadrul unui algoritm se face apel!nd acest su"algoritm prin
propo+iia standard6
'c379M nume4lpa5>
unde nume este numele su"algoritmului apelat, iar lpa este lista parametrilor actuali& 7ceast% list%
conine toate datele de intrare 4cele cunoscute n su"pro"lema corespun+%toare5 i toate re+ultatele
o"inute n su"algoritm& Li n acest ca+ ntre lista parametrilor formali din definiia su"algoritmului
i lista parametrilor actuali din propo+iia de apel tre"uie s% e#iste o coresponden% "iuni$oc%, ca i
n ca+ul funciilor&
'a o prim% $erificare a respect%rii acestei corespondene, su"liniem c% num%rul parametrilor
actuali tre"uie s% coincid% cu num%rul parametrilor formali&
'a e#emplu de apelare a funciilor, pre+ent%m n continuare un algoritm pentru a calcula a
c!ta +i din anul curent este +iua curent% 4+i, luna, an5& 3l folosete un su"algoritm de tip funcie
pentru a o"ine num%rul +ilelor lunii cu num%rul de ordine i i un altul pentru a $erifica dac% un an
________________________________________________________________________________
2;
Structuri de date i algoritmi
_______________________________________________________________________________
este "isect sau nu& 7ceste dou% funcii sunt6
- ?DQ(C34i5 furni+ea+% num%rul +ilelor e#istente n luna i a unui an ne"isect>
- J(S3'K4an5 ade$%rat% dac% anul dintre parante+e este "isect&
Exemplul I.13
7CA8D(K9:C ?:9MD_Q(C3 3SK36 E7 c!ta +i dintr-un an@F
'(K3LK3 +i, luna, an> Eintroducei data curent%F
B(3 nr6R+i> Enr $a fi num%rul care repre+int% a c!ta +i F
Edin an este data curent%F
*7'M luna\1 7K:?'(
P3?KD: i6R1, Cuna-1 3Y3':KM
nr6RnrU?DQ(C34i5
SBP3?KD:
SB*7'M
*7'M luna\2 7K:?'(
*7'M J(S3'K4an5 7K:?'(
nr6RnrU1
SB*7'M
SB*7'M
K(PMD3LK3 nr>
SB7CA8D(K9

S% o"ser$%m c% n proiectarea acestui algoritm nu este necesar s% cunoatem detaliat
su"algoritmii folosii, ci doar specificarea acestor su"algoritmi, numele lor i lista parametrilor
formali& Ca acest ni$el accentul tre"uie s% cad% pe proiectarea algoritmului apelant, urm!nd s% se
re$in% ulterior la proiectarea su"algoritmilor apelai, conform specificaiei acestora& )n ca+ul de fa%
este necesar% descrierea funciilor ?DQ(C34i5 i J(S3'K4an5& C%s%m aceast% descriere ca e#erciiu
pentru cititor&
Exemplul I.14
:n alt e#emplu de apelare a unei proceduri este algoritmul care efectuea+% suma a dou%
polinoame&
:n polinom P4Y5 este determinat prin gradul s%u, m, i prin $ectorul coeficienilor P R 4p
1
,
p
1
, &&&, p
m
5 4prin p
i
s-a notat coeficientul lui Y
i
5&
Procedura S:97P8C4m,P,n,d,r,S5 tre"uie s% efectue+e suma S4Y5 R P4Y5Ud4Y5, unde P
este un polinom de gradul m, iar d este un polinom de gradul n, date& Suma lor, S, $a fi un polinom
de gradul r calculat de su"algoritm& Pentru efectuarea acestui calcul este util% folosirea unui alt
su"algoritm care adun% la suma S4Y5 un alt polinom, K4Y5, de grad mai mic sau egal dec!t gradul
polinomului S4Y5& :n astfel de su"algoritm se pre+int% n continuare&
S:J7CA8D(K9:C S:97P8C14n,K,r,S5 3SK36 E n e rF
________________________________________________________________________________
20
Structuri de date i algoritmi
_______________________________________________________________________________
ES4Y56RS4Y5UK4Y5F
P3?KD: i6R1>n 3Y3':KM
s/i2 6R s/i2 Ut/i2>
SBP3?KD:
SB-S:97P8C1
Su"algoritmul S:97P8C apelea+% acest su"algoritm, aa cum se poate $edea n
continuare&
S:J7CA8D(K9:C S:97P8C4m,P,n,d,r,S5 3SK36 ES4Y56RP4Y5Ud4Y5F
*7'M mXn
7K:?'( r6Rn> S6Rd>
'c379M S:97P8C14m,P,r,S5
7CKB3C r6Rm> S6RP>
'c379M S:97P8C14n,d,r,S5
SB*7'M
SB-S:97P8C

S% o"ser$%m c% n te#tul acestui su"algoritm am e#tins semnificaia propo+iiei de atri"uire,
permi!nd atri"uirea S6Rd& 7cest lucru este normal ntruc!t S corespunde unui polinom, iar d este
un polinom cunoscut> prin atri"uire S primete o $aloare iniial%, cea dat% de polinomul d&
Su"liniem c% atri"uirea $ 6R u $a fi corect% n ca+ul n care $aria"ilele u i $ repre+int%
aceleai o"iecte matematice, deci au aceeai semnificaie&

I7/707 Ela%orarea algoritilor7 Pro#o)i9ii nestandard
Prin ela"orarea 4proiectarea5 unui algoritm nelegem ntreaga acti$itate depus% de la enunarea
pro"lemei p!n% la reali+area algoritmului corespun+%tor re+ol$%rii acestei pro"leme&
)n ela"orarea unui algoritm deose"im urm%toarele acti$it%i importante 47ndonie i A!r"acea
/1005256
specificarea pro"lemei>
descrierea metodei alese pentru re+ol$area pro"lemei>
proiectarea propriu-+is%& 3a const% n descompunerea pro"lemei n su"pro"leme, o"inerea
algoritmului principal i a tuturor su"algoritmilor apelai, conform metodelor pre+entate n
seciunile urm%toare& 3a se termin% cu descrierea algoritmului principal i a su"algoritmilor
menionai, dar i cu preci+area denumirilor i semnificaiilor $aria"ilelor folosite>
$erificarea algoritmului o"inut&
7stfel, s% consider%m urm%torul e#emplu, calculul radicalului de ordinul 2 din #&

a& )n partea de specificare a pro"lemei $om meniona6
Se d% un num%r real notat prin #, care tre"uie s% fie nenegati$& Se cere s% g%sim un alt num%r
________________________________________________________________________________
31
Structuri de date i algoritmi
_______________________________________________________________________________
po+iti$ r astfel nc!t x R r&
<om folosi un algoritm de apro#imare a lui r& *eci specificarea f%cut% nu este complet%,
neput!nd g%si un algoritm care s% re+ol$e direct pro"lema n forma enunat%& <om modifica aceast%
specificare, cer!nd s% se calcule+e r apro#imati$, cu o eroare ce nu dep%ete un num%r real po+iti$
eps presta"ilit& 7.ungem astfel la urm%toarea specificare6
*7K3 eps,#> E eps, D x , eps\1 i # Z 1 F
D3Q:CK7K3 r> E
x r
X eps F
"& :rmea+% s% preci+%m metoda de re+ol$are a pro"lemei& Se tie c% e#ist% mai multe metode de
calcul al radicalului& 9enion%m urm%toarele dou% posi"ilit%i6
- ca limit% a unui ir con$ergent la r 4definit printr-o relaie de recuren%5>
- prin apro#imarea soluiei ecuaiei x R r&
7legem pentru e#emplificare metoda a doua, deci l $om calcula pe r re+ol$!nd ecuaia x
R r&
Pentru re+ol$area ecuaiei generale f 4#5 R 1 e#ist% mai multe metode& 7legem pentru
re+ol$are metoda coardei i a tangentei&
7ceast% metod% const% n micorarea repetat% a inter$alului /a,"2 care conine r%d%cina r
c%utat%, la inter$alul /aH,"H2, aa cum se poate $edea n Bigura 1&2& <aria"ilele folosite n descrierea
algoritmului sunt6
a i ", repre+ent!nd capetele inter$alului n care se afl% r%d%cina>
r mi.locul inter$alului 4a,"5 n momentul n care "-a X eps, deci $aloarea c%utat%&


Figura 1.2.: Gra'ic #entru etoda coardei =i a tangentei&
7lgoritmul propriu-+is 4sec$ena de propo+iii care o"ine re+ultatele dorite pornind de la
________________________________________________________________________________
31
Structuri de date i algoritmi
_______________________________________________________________________________
datele iniiale5 este descris n continuare6

Exemplul I.15
E7lgoritmul 3&36 9etoda coardei i a tangenteiF
I(niiali+ea+% pe a i "&
D3P3KM
I7tri"uie lui a a"scisa punctului de intersecie a a#ei 8Y cu coarda ce unete punctele
4a,f4a55 i 4",f4"55&
I7tri"uie lui " a"scisa punctului de intersecie a a#ei 8Y cu tangenta n punctul 4",f4"55
dus% la graficul funciei f4t5 R t - # &
PN?M'N?* "-aXeps SBD3P
B(3 r6R4aU"5W2>
)n te#tul de mai sus apar trei propo+iii nestandard care sugerea+% ns% foarte "ine ce aciuni
tre"uiesc ntreprinse& Prima sta"ilete inter$alul iniial n care se afl% r%d%cina, care depinde de
m%rimea lui #6 4#,15 c!nd # este mai mic dec!t 1 sau 41,#5 n ca+ contrar& *eci ea se $a transcrie n
propo+iia standard6
*7'M #X1
7K:?'( a6R#> "6R1>
7CKB3C a6R1> "6R#>
SB*7'M
'elelalte dou% propo+iii nestandard se $or transcrie n propo+iiile standard6
B(3 a 6R 31> " 6R 32 >
unde 31 este e#presia care repre+int% a"scisa punctului de intersecie a a#ei 8Y cu coarda ce
unete punctele 4a,f4a55 i 4",f4"55, iar 32 este e#presia care repre+int% a"scisa punctului de
intersecie a a#ei 8Y cu tangenta n punctul 4",f4"55 dus% la graficul funciei f4t5 R t - #&
Se a.unge la urm%toarea $ariant% final%6
Exemplul I.16

7CA8D(K9:C 3YKD7AD7*('7C 3SK36 E Dadical F
E r 6R radical din # F
'(K3SK3 eps,#> E eps, D x , eps\1 i # Z 1 F
*7'M #X1
7K:?'( a6R#> "6R1> E (niiali+ea+% F
7CKB3C a6R1> "6R#> E pe a i " F
SB*7'M
________________________________________________________________________________
32
Structuri de date i algoritmi
_______________________________________________________________________________
D3P3KM
a 6R 31> Ea"scisa punctului de intersecie a a#ei 8Y cuF
Ecoarda ce unete punctele 4a,f4a55 i 4",f4"55F
" 6R 32> Ea"scisa punctului de intersecie a a#ei 8Y cu tangentaF
E n punctul 4",f4"55 dus% la graficul funciei f4t5 R t2-# F
PN?M'N?* "-aXeps SBD3P
B(3 r6R4aU"5W2>
K(PMD3LK3 r> E ]r-rad4#5]Xeps F
SB-3YKD7AD7*('7C

I7/7:7 Proiectarea ascendent? =i #roiectarea descendent?
3#ist% dou% metode generale de proiectare a algoritmilor, a c%ror denumire pro$ine din
modul de a"ordare a re+ol$%rii pro"lemelor6 metoda descendent% i metoda ascendent%& Proiectarea
descendent% 4top-do,n5 pornete de la pro"lema de re+ol$at, pe care o descompune n p%ri
re+ol$a"ile separat& *e o"icei aceste p%ri sunt su"pro"leme independente, care la r!ndul lor pot fi
descompuse n su"pro"leme& Ca prima descompunere accentul tre"uie pus pe algoritmul 4modulul5
principal nu asupra su"pro"lemelor& Ca acest ni$el nu ne interesea+% am%nunte legate de re+ol$area
su"pro"lemelor, presupunem c% le tim re+ol$a, e$entual c% a$em de.a su"algoritmii pentru
re+ol$area lor& :rmea+% s% consider%m pe r!nd, fiecare su"pro"lem% n parte i s% proiect%m 4n
acelai mod5 un su"algoritm pentru re+ol$area ei& )n final, se $a descrie su"algoritmul de re+ol$are
al fiec%rei su"pro"leme, dar i interaciunile dintre aceti su"algoritmi i ordinea n care ei sunt
folosii&
?oiunea de modul $a fi definit% n seciunea urm%toare& *eocamdat% nelegem prin modul
orice su"algoritm sau algoritmul principal& Ceg%tura dintre module se pre+int% cel mai "ine su"
forma unei diagrame numit% ar"ore de programare 4Jlaga P& et al& /107;25& Biec%rui modul i
corespunde n ar"orele de programare un nod, ai c%rui descendeni sunt toate modulele apelate
direct& ?odul corespun+%tor algoritmului principal este chiar nodul r%d%cin%&
7stfel, n ar"orele de programare din Bigura&1&3 e#ist% un algoritm principal 4modulul
PD(?'5, care apelea+% trei su"algoritmi 4modulele '(K*7K3, '7C':C3 i K(PD3Q5& Ca r!ndul
s%u, modulul '7C':C3 apelea+% trei su"algoritmi 4modulele 91, 92 i 935&


________________________________________________________________________________
33
Structuri de date i algoritmi
_______________________________________________________________________________
Figura1.3. Ar%ore de #rograare7
*in ar"orele de programare nu reiese ns% de c!te ori se apelea+% un su"algoritm, sau dac%
doi su"algoritmi se e#clud unul pe cel%lalt& 3ste posi"il% nlocuirea ar"orelui de programare cu o
diagram% de structur% construit% pe concepia ?3SK3*-C8A('& )n construirea unei astfel de
diagrame se folosesc structurile din Bigura&1&4, "a+ate pe urm%toarele reguli 4Ci$o$schi C& /10;1256
a5 8peraia de trecere de la un ni$el superior la unul inferior se interpretea+% prin e#presia
='8?SKM *(?= 4fig&a5>
"5 8peraia de trecere de la un "loc la altul de pe acelai ni$el se interpretea+% cu e#presia
=:D97K *3= 4fig&a5>
c5 'aracterul HoH pre+ent n "loc n colul din dreapta sus este descendentul unui "loc de tip
selecti$ 4fig&"5>
d5 'aracterul HVH pre+ent n "loc n colul din dreapta sus identific% un "loc repetiti$ i se
interpretea+% cu e#presia =97( 9:CK3= 4fig&c5&


Figura. 1.4. Diagrae de structur? construit? #e conce#9ia NESTED!LOGIC7

Keorema de structur% ?3SK3*-C8A(' afirm% c% oricare ar fi schema logic% S e#ist% o
schem% SH de structur% ?3SK3*-C8A(' echi$alent% cu S 4deci care re+ol$% aceeai pro"lem%5&
'a e#emplu de proiectare descendent%, descriem n continuare un algoritm pentru
re+ol$area unui sistem liniar de n ecuaii cu n necunoscute6
7VY R J
Ca primul ni$el de descompunere deose"im trei acti$it%i distincte6
- citirea datelor pro"lemei>
- re+ol$area sistemului menionat>
- tip%rirea re+ultatelor&
Pentru re+ol$area sistemului $om proiecta un su"algoritm, ntruc!t aceast% pro"lem% poate
apare adesea ca su"pro"lem% i dorim s% refolosim su"algoritmul o"inut& Pentru re+ol$area
________________________________________________________________________________
34
Structuri de date i algoritmi
_______________________________________________________________________________
sistemului identific%m dou% su"pro"leme independente6
- reducerea sistemului, prin metoda lui Aauss, la un sistem triunghiular echi$alent>
- re+ol$area sistemului triunghiular o"inut&
9ai mult, su"pro"lema reducerii sistemului conine ca su"pro"leme determinarea ecuaiei
n care r%m!ne #i i care este folosit% la reducerea acestei necunoscute din celelalte ecuaii,
schim"area a dou% ecuaii ntre ele, deci interschim"area a dou% linii din matricea e#tins% i
eliminarea propriu-+is%& Su"algoritmul P(<8K, corespun+%tor primei su"pro"leme, determin% care
dintre ecuaiile de rang i, iU1, &&&, n are coeficientul lui #i ma#im n $aloare a"solut%, ca+ n care
erorile introduse din cau+a apro#im%rilor n calcule cu numere reale sunt minime& Su"algoritmii
(?K3DS'c(9J i 3C(9(? corespund celorlalte dou% su"pro"leme& 7r"orele de programare
corespun+%tor se d% n Bigura&1&5&
Exemplul I.1
7lgoritmul D3QS(SK39 este6
'heam% '(KS(SK394n, 7, J5
'heam% S(SK394n, 7, J, aod5
*ac% aod R 1 atunci 'heam% K(PS8C4n, J5
altfel Kip%rete =Sistemul nu este compati"il determinat&=
sfdac%
sf-De+Sistem


Figura 1.5. Ar%orele de #rograare #entru re)ol(area sisteului
Su"algoritmul S(SK39 pentru re+ol$area unui sistem liniar de n ecuaii cu n necunoscute
este pre+entat n continuare&
________________________________________________________________________________
35
Structuri de date i algoritmi
_______________________________________________________________________________
Su"algoritmul S(SK394n,7,J,aod5 este6 EDe+ol$% sistemul 7YRJ, de n ecuaii cu n
necunoscuteF
E7 este matricea sistemului, J $ectorul termenilor li"eri iF
ESoluia se depune n $ectorul J, iar 7 se distrugeF
Eaod R 1 pentru sistem compati"il, altfel aod R 1 F
'heam% D3*:KD(4n,7,J,aod5> EDeduce sistemul la un sistem triunghiular echi$alentF
*ac% aod R 1 atunci Eaod R 1 c!nd sistemul e compati"ilF
'heam% D3Q8C<4n,7,J,aod5> EDe+ol$% sistemul triunghiularF
sfdac% ESoluia se depune n $ectorul JF
sf-S(SK39

Su"algoritmul D3*:KD(4n,7,J,aod5 este6 EDeduce sistemul liniar 7&YRJ, de n ecuaii cu
n necunoscute la un sistem triunghiular echi$alentF
E 7H&Y R JH, matricea 7H a$!nd su" diagonal% numai +erouriF
E7 este matricea sistemului iar J - $ectorul termenilor li"eriF
Eaod R 1 pentru sistem nedeterminat sau incompati"ilF
Bie aod6R1> E(pote+a sistem determinatF
i6R1>
'!ttimp 4iXn5 i 4aodR15 e#ecut% ESe reduce necunoscuta #
i
din ecuaiile iU1,&&&,nF
'heam% P(<8K4n,7,i,.5> E. R num%rul ecuaiein care se p%strea+% necu-F
*ac% a/i,.2R1 Enoscuta #/.2F
atunci aod6R1 altfel
*ac% .\i
atunci 'heam% (?K3DS'c(9J4i,.,n,7,J5
sfdac%
'heam% 3C(9(?4n,7,J,i5>
sfdac%
Bie i6RiU1>
sfc!t
sf-D3*:KD(

Su"algoritmul D3Q8C<4n,7,J,ind5 este6 EDe+ol$a sistemul triunghiular 7&YRJF
Edeci matricea 7 are su" diagonalaF
________________________________________________________________________________
36
Structuri de date i algoritmi
_______________________________________________________________________________
Enumai +erouri& indR1 pt&sistem determinatF
Ein care ca+ solutia se pune in $ectorul JF
Esi indR1 dac% e nedeterminat sau incompati"ilF
Bie r16R"/n2> ind6R1>
*ac% a/n,n2R1
atunci ind6R1
altfel "/n26Rr1Wa/n,n2
sfdac%
Bie i6Rn-1>
'!ttimp 4indR15 i 4i\R15 e#ecut%
*ac% a/i,i2R1
atunci ind6R1
altfel
r16R"/i2>
Pentru a6RiU1,n e#ecut%
r6Ra/i,a2V"/a2> r16Rr1-r>
sfpentru
"/i26R r1Wa/i,i2
sfdac%
Bie i6R(-1
sfc!t
sf-D3Q8C<

Su"algoritmul P(<8K4n,7,i,.5 este6 E. primete o $aloare \Ri pentru careF
Bie .6Ri> E a/.,i2 e ma#im n $aloare a"solut%F
Pentru l6RiU1, n e#ecut%
*ac% a/l,i2 \ a/.,i2
atunci .6Rl
sfdac%
sfpentru
sf-P(<8K

Su"algoritmul (?K3DS'c(9J4i,.,n,7,J5 este6 ESchim"% ntre ele liniile i i . din matricea
7F
________________________________________________________________________________
37
Structuri de date i algoritmi
_______________________________________________________________________________
E de ordinul n i termenii li"eri corespun+%toriF
Pentru l6R1> n e#ecut%
r6Ra/i,l2> a/i,l26Ra/.,l2> a/.,l26Rr
sfpentru
Bie r6R"/i2> "/i26R"/.2> "/.26Rr
sf-(?K3DS'c(9J>

Su"algoritmul 3C(9(?4n,7,J,i5 este6 E3limin% necunoscuta #/i2 din ecuaiile iU1,&&&,nF
Bie r6Ra/i,i2> E #/i2 din ecuaiile n ipote+a a/i,i2 ^ 1F
Pentru a6Ri,n e#ecut% E(mparte ecuaia nr i cu rF
Bie a/i,a26Ra/i,a2Wr
sfpentru
Bie "/i2 6R "/i2Wr
Pentru .6RiU1,n e#ecut% E3limin% necunoscutaF
Bie r6Ra/.,i2> E#/i2 din ecuaia nr&.F
Pentru a6R1,n e#ecut%
a/.,a26Ra/.,a2-rVa/i,a2>
sfpentru
Bie "/.26R"/.2-rV"/i2
sfpentru
sf-3C(9(?

)n multe c%ri metoda top-do,n este nt!lnit% i su" denumirea step,ise-refinement, adic%
rafinare n pai succesi$i& 3ste $or"a de un proces de detaliere pas cu pas a specificaiei, denumit
proiectare descendent%& 7lgoritmul apare n diferite $ersiuni succesi$e, fiecare fiind o detaliere a
$ersiunii precedente& )n aceste $ersiuni succesi$e apar multe enunuri nestandard ce urmea+% a fi
preci+ate treptat prin propo+iii standard& Se recomand% ca ele s% r%m!n% comentarii n $ersiunea
final%& 7lgoritmul apare n $ersiuni succesi$e, tot mai complet de la o $ersiune la alta& )n $ersiunea
final% n algoritm apar numai propo+iii standard& :n e#emplu de rafinare succesi$% a fost dat n
seciunea 1&5&
*iferena ntre metoda top-do,n i metoda rafin%rii succesi$e este neesenial%, scopul
urm%rit fiind acelai6 concentrarea ateniei asupra p%rilor importante ale momentului i am!narea
detaliilor pentru mai t!r+iu& *ac% ar fi necesar s% le deose"im am spune c% metoda top-do,n se
refer% la ni$elul macro iar metoda rafin%rii succesi$e la ni$el micro& Ca ni$el macro se dorete
descompunerea unei pro"leme comple#e n su"pro"leme& Ca ni$el micro se dorete o"inerea unui
modul n $ersiune final%& )ntr-o $ersiune intermediar% pot fi pre+ente numai p%rile importante ale
acestuia, urm!nd s% se re$in% asupra detaliilor n $ersiunile urm%toare, dup% ce aspectele importante
________________________________________________________________________________
3;
Structuri de date i algoritmi
_______________________________________________________________________________
au fost re+ol$ate&
7$anta.ele proiect%rii top-do,n 4cunoscut% i su" denumirea =Divide et impera=5 sunt
multiple& 7$anta.ul principal const% n faptul c% ea permite programatorului s% reduc% comple#itatea
pro"lemei, su"pro"lemele n care a fost descompus% fiind mai simple, i s% am!ne detaliile pentru
mai t!r+iu& )n momentul n care descompunem pro"lema n su"pro"leme nu ne g!ndim cum se $or
re+ol$a su"pro"lemele ci care sunt ele i cone#iunile dintre ele&
Proiectarea descendent% permite lucrul n echipe mari& Prin descompunerea pro"lemei n
mai multe su"pro"leme, fiecare su"pro"lem% poate fi dat% spre re+ol$are unei su"echipe& Biecare
su"echip% nu cunoate dec!t su"pro"lema pe care tre"uie s% o re+ol$e&
9etoda =*i$ide et (mpera= poate fi folosit% nu numai la mp%rirea pro"lemei n
su"pro"leme ci i la mp%rirea datelor n grupe mai mici de date& )n acest ca+ ea este cunoscut% su"
numele de metoda di$i+%rii metod% pre+entat% n seciunea ;&1& :n astfel de procedeu este folosit de
su"algoritmul duicasort, care $a fi pre+entat n seciunea 7&2&

9etoda ascendent% 4bottom-up5 pornete de la propo+iiile lim"a.ului i de la su"algoritmi
e#isteni, pe care i asam"lea+% n ali su"algoritmi pentru a a.unge n final la algoritmul dorit& 'u
alte cu$inte, n ca+ul metodei ascendente $a fi scris mai nt!i su"algoritmul apelat i apoi cel care
apelea+%& 'a re+ultat al proiect%rii ascendente se a.unge la o mulime de su"algoritmi care se
apelea+% ntre ei& 3ste important s% se cunoasc% care su"algoritm apelea+% pe care, lucru redat
printr-o diagram% de structur%, ca i n ca+ul program%rii descendente&
7ceast% metod% are marele de+a$anta. c% erorile de integrare $or fi detectate t!r+iu, a"ia n
fa+a de integrare& Se poate a.unge a"ia acum la conclu+ia c% unii su"algoritmi, dei coreci, nu sunt
utili&
*e cele mai multe ori nu se practic% o proiectare ascendent% sau descendent% pur% ci o
com"inare a lor, o proiectare mi#t%&

I7/7;7 Proiectarea odular?
Prin proiectare 4programare5 modular% nelegem metoda de proiectare 4programare5 a unui
algoritm pentru re+ol$area unei pro"leme prin folosirea modulelor&
*ar ce este un modul@ 9odulul este considerat 4Brentiu 9& et al& /10;625 o unitate
structural% de sine st%t%toare, fie program, fie su"program, fie o unitate de program& :n modul
poate conine sau poate fi coninut ntr-alt modul& :n modul poate fi format din mai multe
su"module& 7stfel, n Pseudocod fiecare su"algoritm i algoritmul principal sunt considerate
module& )n lim"a.ele de programare cu structur% de "loc, de e#emplu n Kur"o Pascal :?(K-urile
pot fi considerate module& Ca compilarea separat% un grup de su"programe compilate deodat%
constituie un modul, dar acest modul poate fi considerat ca o mulime de su"module din care este
compus&
3ste ns% important ca fiecare modul s%-i ai"% rolul s%u "ine preci+at, s% reali+e+e o funcie
n cadrul ntregului program& 3l apare n mod natural n descompunerea top-do,n&
________________________________________________________________________________
30
Structuri de date i algoritmi
_______________________________________________________________________________
(ndiferent c% pri$im modulul ca un singur su"algoritm, un grup de su"algoritmi, sau un
algoritm de sine st%t%tor ce apelea+% ali su"algoritmi, consider%m modulele relati$ independente,
dar cu posi"ilit%i de comunicare ntre ele& 7stfel, un modul nu tre"uie s% fie influenat de maniera
n care se lucrea+% n interiorul altui modul& 8rice modificare ulterioar% n structura unui program,
dac% funcia pe care o reali+ea+% un modul 9 nc% este necesar%, acest modul tre"uie s% fie util i
folosit n continuare f%r% modific%ri&
De+ult% c% programarea modular% se "a+ea+% pe descompunerea pro"lemei n su"pro"leme
i proiectarea i programarea separat% a su"algoritmilor corespun+%tori& *e altfel, consider%m c%
ntr-o programare serioas% nu se poate a.unge la implementare f%r% a a$ea n preala"il algoritmii
descrii ntr-un lim"a. de descriere 4la noi Pseudocod5& *eci programarea modular% se refer% n
primul r!nd la proiectarea modular% a algoritmilor i apoi la traducerea lor n lim"a.ul de
programare ales, in!nd seama de specificul acestui lim"a.& Programarea modular% este str!ns legat%
de programarea ascendent% i de programarea descendent%, am"ele presupun!nd folosirea
su"algoritmilor pentru toate su"pro"lemele nt!lnite&
7$anta.ele program%rii modulare sunt multiple& 9enion%m n cele ce urmea+% c!te$a dintre
ele6
*escompunerea unei pro"leme comple#e n su"pro"leme este un mi.loc con$ena"il
i eficient de a reduce comple#itatea 4Principiul *i$ide et impera acionea+% i n
programare5& 3ste e$ident c% pro"a"ilitatea apariiei erorilor n conceperea unui
program crete cu m%rimea programului, lucru confirmat i de e#periena practic%&
*e asemenea, re+ol$!nd o pro"lem% mai simpl%, testarea unui modul se poate face
mult mai uor dec!t testarea ntregului algoritm&
7poi, faptul c% tre"uiesc proiectate mai multe su"programe pentru su"pro"lemele
nt!lnite, permite munca mai multor programatori& S-a a.uns astfel la munca n
echip%, modalitate prin care se a.unge la scurtarea termenului de reali+are a
produsului program&
9odulele se pot refolosi ori de c!te ori a$em ne$oie de ele& 7stfel, s-a a.uns la
compilarea separat% a su"programelor i la p%strarea su"programelor o"inute n
"i"lioteci de su"programe, de unde ele se pot refolosi la ne$oie& Sunt cunoscute
ast%+i multe astfel de "i"lioteci de su"programe& Deutili+a"ilitatea acestor
su"programe este o proprietate foarte important% n acti$itatea de programare& 3a
duce la m%rirea producti$it%ii n programare, dar i la creterea siguranei n
reali+area unui produs corect&
:neori, n timpul proiect%rii algoritmului sau a implement%rii lui, se a.unge la
conclu+ia c% proiectarea a fost incomplet% sau c% unele module sunt ineficiente& Li n
aceast% situaie programarea modular% este a$anta.oas%, ea permi!nd nlocuirea
modulului n cau+% cu altul mai performant&

:na din acti$it%ile importante n reali+area unui program este $erificarea corectitudinii
acestuia& 3#periena a ar%tat c% modulele se pot $erifica cu at!t mai uor cu c!t sunt mai mici&
7"ilitatea omului de a nelege i anali+a corectitudinea unui su"algoritm este mult mai mare pentru
te#te scurte& )n unele c%ri chiar se recomand% a nu se folosi su"algoritmi mai mari dec!t 51 de
________________________________________________________________________________
41
Structuri de date i algoritmi
_______________________________________________________________________________
propo+iii& Sigur c% o astfel de limit% nu e#ist%, dar se recomand% descompunerea unui su"algoritm
n ali su"algoritmi oric!nd acest lucru este posi"il n mod natural, deci aceti noi su"algoritmi
re+ol$% su"pro"leme de sine st%t%toare, sau reali+ea+% funcii "ine definite&
'a e#emplu de proiectare modular% ne propunem s% d%m un algoritm pentru re+ol$area
urm%toarei pro"leme6
Exemplul I.1!
S% se $erifice dac% mulimea finit% f, pe care s-au definit dou% operaii, este corp n raport
cu aceste operaii&
)n $ederea proiect%rii unui algoritm pentru re+ol$area ei a$em ne$oie de specificarea
pro"lemei& S% o"ser$%m mai nt!i c% nu a fost preci+at% e#act natura elementelor mulimii f R E a
1
,
a
2
, &&&, a
n
F&
Kre"uie s% specific%m modul de definire al unei operaii 8 peste mulimea f& 3$ident,
pentru a definii o operaie pe mulimea finit% f, tre"uie ca pentru oricare dou% elemente a
i
, a
.
f
s% cunoatem 84a/i2, a/.25 R a/s2 f&
*eci 8 ar fi o matrice p%tratic% de ordinul n cu elemente din f& 'um natura acestor
elemente nu este preci+at%, con$enim s% reinem doar indicii acestor elemente, cu alte cu$inte s%
lucr%m cu mulimea fH R E 1, 2, &&& , n F&
3a este preci+at% prin num%rul n& )n acest ca+ definirea operaiei 8 $a fi simpl%,
e#prim!ndu-se printr-o matrice p%trat% de ordinul n cu elemente din fH& *eci specificarea pro"lemei
este6
*7K3 n, 81, 82> E81, 82 R operaii peste fHF
D3Q:CK7K3 aod Eaod R 1 pentru corp, altfel aod \ 1F
EPrin $aloarea lui aod se poate reine careF
Eproprietate din definiia corpului nu a fost ndeplinit%F
Krec!nd la proiectarea algoritmului, s% o"ser$%m c% la citirea datelor se nt!lnesc dou%
operaii, deci se repet% aceleai operaii de dou% ori& Kip%rirea re+ultatului este mult mai simpl%6 se
tip%rete $aloarea lui aod& *ecidem s% folosim un su"algoritm '(K8P4n,85 pentru citirea unei
operaii, su"algoritm care $a fi apelat n modulul principal de dou% ori6 prima dat% pentru citirea lui
81, apoi pentru citirea lui 82&
)naintea acestor apeluri n modulul principal se $a citi $aloarea lui n& 7poi se $a apela
su"algoritmul '8DP4n,81,82,aod5 pentru $erificarea propriu +is%& 3a const% din trei $erific%ri6
a - este mulimea grup n raport cu operaia 81 @
" - sc%+!nd elementul neutru pentru 81, este noua mulime grup n raport cu 82>
c - este 82 distri"uti$% fa% de 81@
________________________________________________________________________________
41
Structuri de date i algoritmi
_______________________________________________________________________________
Putem reali+a $erific%rile a i " cu acelai su"algoritm AD:P4p,n,8,e,aod5 care $erific%
a#iomele grupului, rein!nd re+ultatul n aod, iar n e elementul neutru& 7ceasta este posi"il dac%
elementul neutru pentru 81 este 1, cele dou% apeluri f%c!ndu-se prima cu pR1, a doua cu pR2 4deci
elementul neutru pentru 81 este eliminat la a doua $erificare5& )n ca+ul n care elementul neutru
pentru operaia 81 este eg1 $om inter-schim"a numerotarea celor dou% elemente, deci 1 $a de$eni
element neutru [
Pentru $erificarea a#iomelor grupului se folosesc patru module6 '89:K7K(<, ?3:KD:,
(?<3DS i 7S8'(7K(<& 3le corespund su"algoritmilor6
'89:K7K(<4n,8,aod5 $erific% dac% operaia 8 e comutati$%>
?3:KD:4n,8,e5 g%sete elementul neutru e pentru 8 4sau eR-15>
(?<3DS4n,8,e,aod5 $erific% e#istena in$erselor>
7S8'(7K(<4n,8,aod5 $erific% dac% 8 este asociati$%&
Se a.unge la ar"orele de programare din Bigura&1&6&


Figura 1.6. Ar%orele de #rograare #entru (eri'icarea a*ioelor cor#ului&
'a un al doilea e#emplu de definire i folosire a su"algoritmilor, s% consider%m urm%toarea
pro"lem%6
Se dau trei mulimi de numere6
7 R E a
1
, a
2
, &&& , a
m
F
J R E "
1
, "
2
, &&& , "
n
F
' R E c
1
, c
2
, &&& , c
p
F
Se cere s% se tip%reasc% n ordine cresc%toare elementele fiec%rei mulimi, precum i a
mulimilor 7J, J', '7&
)n re+ol$area acestei pro"leme se nt!lnesc urm%toarele su"pro"leme6
________________________________________________________________________________
42
Structuri de date i algoritmi
_______________________________________________________________________________
S16 S% se citeasc% elementele unei mulimi>
S26 S% se efectue+e reuniunea a dou% mulimi>
S36 S% se tip%reasc% elementele unei mulimi>
S46 S% se ordone+e cresc%tor elementele unei mulimi&
Presupun!nd c% pentru re+ol$area acestor su"pro"leme am conceput su"algoritmii6

'(K9:C4m,75>
D3:?(:?34m,7,n,J,a,D5>
K(P9:C4m,75>
8D*8?4m,75>
care sunt specificai mai .os 4la locul definirii lor5 prin comentarii, algoritmul de re+ol$are a
pro"lemei de mai sus este dat n continuare& )ntruc!t operaiile respecti$e se folosesc de mai multe
ori 4de 3 ori5, am definit un su"algoritm K(P8D*8?4m,75 care ordonea+% mai nt!i elementele
mulimii 7 i apoi le tip%rete&
7CA8D(K9:C 8P3D-9:CK(9( 3SK36 E 7lgoritmul 3&66 Su"algoritmi F
'c379M '(K9:C4m,75>
'c379M '(K9:C4n,J5>
'c379M '(K9:C4p,'5>
'c379M K(P8D*8?4m,75>
'c379M K(P8D*8?4n,J5>
'c379M K(P8D*8?4p,'5>
'c379M D3:?(:?34m,7,n,J,a,D5>
'c379M K(P8D*8?4a,D5>
'c379M D3:?(:?34n,J,p,',a,D5>
'c379M K(P8D*8?4a,D5>
'c379M D3:?(:?34p,',m,7,a,D5>
'c379M K(P8D*8?4a,D5>
SB7CA8D(K9

Su"algoritmii apelai mai sus sunt definii n continuare&
S:J7CA8D(K9:C '(K9:C4n,95 3SK36 E'itete n i 9F
'(K3LK3 n> EnRnr& elementelor mulimiiF
________________________________________________________________________________
43
Structuri de date i algoritmi
_______________________________________________________________________________
'(K3LK3 4m/i2,iR1,n5> E9Rmulimea cu elementele m
1
,m
2
,&&&,m
n
F
SB-'(K9:C

S:J7CA8D(K9:C 8D*8?4n,95 3SK36 E8rdonea+% cresc%tor cele nF
D3P3KM Eelemente ale mulimii 9F
B(3 ind6R1> E'a+ul 9 este ordonat%F
P3?KD: i6R1>n-1 3Y3':KM
*7'M m/i2\m/i2U1 7K:?'( Eschim"% ordinea celorF
B(3 t 6R m/i2> Edou% elementeF
m/i26R m/i2U1> m/i2U16Rt>
ind6R1> E'a+ul 9 nu era ordonat%F
SB*7'M
SBP3?KD:
PN?M'N?* indR1 SBD3P
SB-8D*8?

S:J7CA8D(K9:C D3:?(:?34m,7,n,J,a,D5 3SK36 E D 6R 7 : J F
E a R num%rul elementelor mulimii D F
B(3 a6Rm> D 6R 7>
P3?KD: .6R1,n 3Y3':KM
B(3 ind6R1> E(pote+a "
.
nu e in 7F
P3?KD: i6R1>m 3Y3':KM
*7'M "/.2Ra/i2 7K:?'(
ind6R1 E"
.
este in 7F
SB*7'M
SBP3?KD:
*7'M indR1 7K:?'(
a6RaU1> r/a26R"/.2>
SB*7'M
SBP3?KD:
SB-D3:?(:?3

S:J7CA8D(K9:C K(P9:C4n,95 3SK36 E Kip%rete cele n elemente F
P3?KD: i6R1>n 3Y3':KM E ale mulimii 9 F
________________________________________________________________________________
44
Structuri de date i algoritmi
_______________________________________________________________________________
K(PMD3LK3 mi
SBP3?KD:
SB-K(P9:C

S:J7CA8D(K9:C K(P8D*8?4n,95 3SK36 E 8rdonea+% i tip%rete F
'c379M 8D*8?4n,95> E elementele mulimii 9 F
'c379M K(P9:C4n,95>
SB-K(P8D*8?

Kot ca e#emplu de folosire a su"algoritmilor, $om scrie un algoritm pentru re+ol$area
urm%toarei pro"leme6
Exemplul I.1"
Dirigintele unei clase de elevi dorete s obin un clasament al elevilor n funcie de media
general. n plus, pentru fiecare disciplin n parte dorete lista primilor ase elevi.

)n re+ol$area acestei pro"leme este necesar% g%sirea ordinii n care tre"uiesc tip%rii ele$ii n
funcie de un anumit re+ultat6 nota la disciplina =.=, sau media general%& 7m identificat prin urmare
dou% su"pro"leme independente, referitoare la6
415 aflarea ordinii n care tre"uie tip%rite n numere pentru a le o"ine ordonate>
425 tip%rirea ele$ilor clasei ntr-o anumit% ordine&

Prima su"pro"lem% se poate specifica astfel6
Dndu-se numerele x
!
, x
"
, ... , x
n
, gsii ordinea o
!
, o
"
, ..., o
n
, n care aceste numere devin
ordonate descresctor, adic
x/o
1
2 Z x/o
2
2 Z &&& Z x/o
n
2 .
Pentru re+ol$area ei $om da un su"algoritm 8D*(?3 n care inter$in trei parametri
formali6
- n, num%rul $alorilor e#istente>
- Y, $ectorul acestor $alori>
- 8, $ectorul indicilor care dau ordinea dorit%&
Primii doi parametri marchea+% datele presupuse cunoscute, iar al treilea, re+ultatele
calculate de su"algoritm&

S:J7CA8D(K9:C 8D*(?34n,Y,85 3SK36 En, num%rul $alorilor e#istente> Y, $ectorul
acestor F
________________________________________________________________________________
45
Structuri de date i algoritmi
_______________________________________________________________________________
E $alor> 8, $ectorul indicilor care dau ordinea dorit% F
P3?KD: i6R1> n 3Y3':KM
8/i2 6Ri >
SBP3?KD:
D3P3KM ind6R1>
P3?KD: i6R1>n-1 3Y3':KM
*7'M #/8/i22 X #/8/iU122 7K:?'(
B(3 ind6R1> t6R8/iU12 >
8/iU12 6R8/i2> 8/i2 6Rt>
SB*7'M
SBP3?KD:
P7?N'N?* indR1 SBD3P
SB-8D*(?3

7 doua su"pro"lem% se poate specifica astfel6
*!ndu-se ordinea o
1
,o
2
, &&&, o
n
, a ele$ilor clasei, numele i mediile acestora, s% se tip%reasc%
numele i mediile primilor a ele$i n ordinea specificat%&
Su"algoritmul K(P7D, dat n continuare, re+ol$% aceast% pro"lem%&
S:J7CA8D(K9:C K(P7D4a, ?:93, 85 3SK36
P3?KD: i6R1>a 3Y3':KM
IKip%rete datele ele$ului de rang oi&
SBP3?KD:
SB-K(P7D

<aria"ilele folosite pentru pro"lema dat% sunt urm%toarele6
- n repre+int% num%rul ele$ilor clasei>
- m este num%rul disciplinelor la care ele$ii primesc note>
- ?:93 este $ectorul care reine numele ele$ilor6 ?:93i este numele ele$ului cu num%rul
de ordine i>
- ?8K3 este matricea notelor ele$ilor, a$!nd n linii i m coloane>
?8K3/i,.2 este nota ele$ului cu numele ?:93/i2 la disciplina cu num%rul de ordine .>
?8K3/.2 este coloana a .-a a matricei ?8K3 i repre+int% notele ele$ilor la disciplina .>
- 93*(( este $ectorul mediilor generale&
________________________________________________________________________________
46
Structuri de date i algoritmi
_______________________________________________________________________________

7lgoritmul este6
7CA8D(K9:C 'C7S793?K 3SK36 E 7lgoritmul 3&76 8rdonare F
'(K3LK3 m, Enum%rul disciplinelor iF
n, Eal ele$ilorF
?:93/i2, iR1,n, Enumele ele$ilorF
?8K3/i,.2, .R1,m, iR1,n> Enotele ele$ilorF
P3?KD: i6R1>n 3Y3':KM E calculea+% media general%F
B(3 S6R1> Ea ele$ului iF
P3?KD: .6R1>m 3Y3':KM
S6RSU?8K3/i,.2>
SBP3?KD:
B(3 93*((/i26RSWm
SBP3?KD:
'c379M 8D*(?34n,93*((,85>
'c379M K(P7D4n,?:93,85
P3?KD: .6R1>m 3Y3':KM
'c379% 8D*(?34n,?8K3&.,85>
'c379M K(P7D4n,?:93,85>
SBP3?KD:
SB-7CA8D(K9

)ntr-un algoritm, parametrii formali i actuali pot fi funcii sau proceduri& )n continuare este
pre+entat un astfel de e#emplu, n care se calculea+% radicalii de ordinul doi i trei din constanta mm
re+ol$!nd ecuaiile6
#
2
- mm R 1, notat% g4#5 R 1,
respecti$
#
3
- mm R 1, notat% h4#5 R 1&

Pentru re+ol$area unei ecuaii se pot folosi mai multe metode& )n program am ales dou%6
metoda n.um%t%irii i metoda coardei& 9etoda coardei este descris% am%nunit n seciunea
urm%toare& 9etoda n.um%t%irii const% n n.um%t%irea inter$alului /a,"2 care conine r%d%cina i
reinerea aceluia n care se afl% r%d%cina, su"inter$al care $a fi noua $aloare a lui /a,"2& 'alculul se
ncheie n momentul n care lungimea inter$alului /a,"2 este mai mic% dec!t h, care ne d% eroarea cu
________________________________________________________________________________
47
Structuri de date i algoritmi
_______________________________________________________________________________
care dorim s% afl%m r%d%cina&
)ntruc!t metoda coardei folosete i prima deri$at%, am notat prin f1, respecti$ g1 deri$atele
funciilor f i g& Prin c i t s-au notat cele dou% e#tremit%i ale inter$alului care conine r%d%cina, t
fiind e#tremitatea n care se duce tangenta&
S:J7CA8D(K9:C coarda4c,t,r,f,f15 3SK36 ESe re+ol$% ecuaia f4#5R1 prin metoda
coardeiF
Ec,t sunt e#tremit%ile inter$alului care conineF
Er%d%cina, iar f1este deri$ata lui f F
Er este r%d%cina care se calculea+%F
D3P3KM
c6Rc-f4c5V4t-c5W4f4t5-f4c55>
t6Rt-f4t5Wf14t5>
PN?M'N?*
c t
X 1&11111>
B(3 r6R4cUt5W2
SB-coarda

S:J7CA8D(K9:C .uma4a,", r, f,f15 3SK36 ESe re+ol$% prin metoda n.um%t%iriiF
Eecuaia f4#5R1, care are o r%d%cin% n /a,"2F
ErR r%d%cina o"inut%, iar f1 este deri$ata lui fF
D3P3KM
r6R4aU"5W2>
*7'M f4a5Vf4r5 X1 7K:?'(
"6Rr
7CKB3C
a6Rr
SB*7'M
PN?M'N?*
a "
X 1&11111 SBD3P3KM
SB-.uma

S:J7CA8D(K9:C De+ec4a,", r, f,f1, met5 3SK36
'c379M met4a,",r,f,f15>
SB-De+ec

7CA8D(K9:C pffunctii 3SK36 E7lgoritmul 3&;F
________________________________________________________________________________
4;
Structuri de date i algoritmi
_______________________________________________________________________________
K(PMD3LK3 H)n.um%t%ire 'oarda H >
'c379M De+ec41,2,r.,g,g1,.uma5>
'c379M De+ec41,2,rc,g,g1,coarda5>
K(PMD3LK3 r.,rc >
'c379M De+ec41,2,r.,h,h1,.uma5>
'c379M De+ec41,2,rc,h,h1,coarda5>
K(PMD3LK3 r.,rc >
SB7CA8D(K9

Prin proiectare 4programare5 modular% nelegem metoda de proiectare 4programare5 a
unui algoritm pentru re+ol$area unei pro"leme prin folosirea modulelor&
*ar ce este un modul@ 9odulul este considerat /Schach01, Breniu042 o unitate structural%
de sine st%t%toare, fie program, fie su"program, fie o unitate de program& :n modul poate conine
sau poate fi coninut ntr-alt modul& :n modul poate fi format din mai multe su"module& 7stfel, n
Pseudocod fiecare su"algoritm i algoritmul principal sunt considerate module& )n lim"a.ele de
programare cu structur% de "loc 4de e#emplu n Kur"o Pascal, pre+entat n capitolul trei5 :?(K-urile
pot fi considerate module& Ca compilarea separat% un grup de su"programe compilate deodat%
constituie un modul, dar acest modul poate fi considerat ca o mulime de su"module din care este
compus&
3ste ns% important ca fiecare modul s%-i ai"% rolul s%u "ine preci+at, s% reali+e+e o funcie
n cadrul ntregului program& 3l apare n mod natural n descompunerea top-do,n&
(ndiferent c% pri$im modulul ca un singur su"algoritm, un grup de su"algoritmi, sau un
algoritm de sine st%t%tor ce apelea+% ali su"algoritmi, consider%m modulele relati$ independente,
dar cu posi"ilit%i de comunicare ntre ele& 7stfel, un modul nu tre"uie s% fie influenat de maniera
n care se lucrea+% n interiorul altui modul& 8rice modificare ulterioar% n structura unui program,
dac% funcia pe care o reali+ea+% un modul 9 nc% este necesar%, acest modul tre"uie s% fie util i
folosit n continuare f%r% modific%ri&
De+ult% c% programarea modular% se "a+ea+% pe descompunerea pro"lemei n su"pro"leme
i proiectarea i programarea separat% a su"algoritmilor corespun+%tori& *e altfel, consider%m c%
ntr-o programare serioas% nu se poate a.unge la implementare f%r% a a$ea n preala"il algoritmii
descrii ntr-un lim"a. de descriere 4la noi Pseudocod5& *eci programarea modular% se refer% n
primul r!nd la proiectarea modular% a algoritmilor i apoi la traducerea lor n lim"a.ul de
programare ales, in!nd seama de specificul acestui lim"a.& Programarea modular% este str!ns legat%
de programarea ascendent% i de programarea descendent%, am"ele presupun!nd folosirea
su"algoritmilor pentru toate su"pro"lemele nt!lnite&
I7/7;7 A#el recursi(
)n e#emplele anterioare se o"ser$% c% apelul unui su"program se face dup% ce el a fost
definit& 3ste ns% posi"il ca un su"algoritm s% se apele+e pe el nsui& )ntr-un astfel de ca+ spunem
________________________________________________________________________________
40
Structuri de date i algoritmi
_______________________________________________________________________________
c% apelul este recursi$, iar su"algoritmul respecti$ este definit recursi$&
'a e#emplu, definim n continuare o funcie care calculea+% recursi$ $aloarea n[& Se $a
folosi formula6
( )

'

>

1 , 1
1 , [ 1
[
n
n n n
n
Decursi$itatea const% n faptul c% n definiia funciei Bactorial n argumentul n se folosete
aceeai funcie Bactorial dar de argument n-1& *eci funcia Bactorial se apelea+% pe ea ns%i& 3ste
important ca num%rul apelurilor s% fie finit, deci ca procedeul de calcul descris s% se termine&
B:?'K(7 Bactorial4n5 3SK36
*7'M nR1 7K:?'(
Bactorial6R1
7CKB3C
Bactorial6R nVBactorial4n-15
SB*7'M
SB-Bactorial>
I7/7>7 Prograarea structurat?
Programarea structurat% este un stil de programare ap%rut n urma e#perienei primilor ani de
acti$itate& 3a cere respectarea unei discipline de programare i folosirea riguroas% a c!tor$a structuri
de calcul& 'a re+ultat se $a a.unge la un algoritm uor de urm%rit, clar i corect&
Kermenul programare, folosit n titlul acestei seciuni i consacrat n literatura de
specialitate, este folosit aici n sens larg i nu este identic cu cel de programare propriu-+is%& 3ste
$or"a de ntreaga acti$itate depus% pentru o"inerea unui program, deci at!t proiectarea algoritmului
c!t i traducerea acestuia n lim"a.ul de programare ales&
JOhm i Pacopini /10662 au demonstrat c% orice algoritm poate fi compus din numai trei
structuri de calcul6
- structura sec$enial%>
- structura alternati$%>
- structura repetiti$%&
I707 Pro%lee #ro#use
I. $escrie%i &n 'seudocod subalgoritmi care calculea() urm)toarele *unc%ii:
1& Pentru n? funcia Prim4n5 calculea+% al n-lea num%r prim&
2& Pentru +,l,a? dai, 1e+e31, 1ele12, 1011Xa, funcia ?DQ(4+,l,a5 spune a c!ta +i din anul a este
data 4+,l,a5>
3& Pentru n? funcia :rmatorPrim4n5 d% num%rul prim imediat superior lui n&
________________________________________________________________________________
51
Structuri de date i algoritmi
_______________________________________________________________________________
4& Pentru polinomul P de gradul n cu coeficieni reali dat i #D funcia <7CP8C4#,n,P5 d%
$aloarea polinomului P n punctul #&
5& Pentru a,n?, 1eaen, funcia '4n,a5 calculea+% num%rul com"in%rilor de n o"iecte luate c!te a&
6& Pentru $ectorii Y i _ cu n componente, funcia 34n,Y,_5 d% $aloarea 1 dac% YR_, respecti$ i
dac% i este cel mai mic indice pentru care #
i
X `
i
&
7& 'unosc!nd mulimile 7 i J funcia (?'C:S47,J5 $erific% dac% mulimea 7 este inclus% n
mulimea J>
;& Bie f o funcie de forma f 6 E1, 2, &&&, mF b E1, 2, &&&, nF&
*efinim K4f5 egal cu 1 dac% f este o funcie in.ecti$%, egal cu 2 dac% f este sur.ecti$%, egal cu 3 dac%
f este "i.ecti$%, i 1 n ca+ contrar& Se d% funcia f prin perechile de elemente 4#,f4#55 care definesc
graficul s%u& S% se calcule+e K4f5&
0& Se d% o relaie "inar% D prin graficul s%u& S% se calcule+e 34D5 prin definiie egal% cu 1 dac% D
este o relaie de recuren% i egal% cu 1 n ca+ contrar&
11& Lirul Bi"onacci este definit astfel6 f
1
Rf
1
R1 i f
n
Rf
n-1
Uf
n-2
, pentru n \1& Pentru n? dat calculai
B4n5Rf
n
&
11& Pentru n? dat calculai .4n5, unde . este funcia lui 3uler, deci .4n5 este num%rul numerelor mai
mici dec!t n i relati$ prime cu n&
12& Pentru n? dat calculai P4n5, unde P4n5 este 1 dac% num%rul n este perfect i 1 n ca+ contrar
4un num%r n este perfect dac% este egal cu suma di$i+orilor s%i mai mici dec!t el nsui& 3#emplu6
6R1U2U35
II. +crie%i subalgoritmi pentru re(ol,area urm)toarelor probleme:
1& 'unosc!nd mulimile 7 i J calculai ' R 7 J>
2& 'unosc!nd mulimile 7 i J calculai ' R 7 J>
3& *!ndu-se $ectorul Y cu n componente, tergei toate componentele care se repet%>
4& *!ndu-se $ectorul Y cu n componente numere ntregi ordonate cresc%tor i aQ inserai pe a n
Y astfel nc!t Y s% r%m!n% ordonat cresc%tor>
5& *!ndu-se dou% polinoame calculai suma lor>
6& *!ndu-se dou% polinoame calculai produsul lor>
________________________________________________________________________________
51
Structuri de date i algoritmi
_______________________________________________________________________________
7& *!ndu-se dou% matrice calculai suma lor>
;& *!ndu-se dou% matrice p%trate de ordinul n calculai produsul lor>
0& *!ndu-se dou% numere 7 i J prin repre+ent%rile lor n "a+a p g%sii suma lor 7UJ prin
repre+entarea ei n "a+a p>
11& *!ndu-se numerele reale #
1
, #
2
,&&& ,#
n
, determinai sec$ena de termeni consecuti$i care are
suma ma#im%&
11& Se dau p,i? i num%rul 7 prin repre+entarea sa n "a+a p& *eterminai repre+entarea sa n
"a+a i&
12& Se d% n?, nZ2& S% se forme+e matricea p%trat% 7 de ordinul n ale c%rei coloane scrise una
dup% alta constituie primii n
2
termeni ai irului
1,2,3,4,5,6,7,;,0,1,1,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,;,1,0,2,1, &&& o"inut din scrierea cifrelor
semnificati$e ale numerelor naturale&
III. 'roiecta%i prin metoda top-do.n algoritmi pentru re(ol,area urm)toarelor probleme:
1& Se d% un ir de numere naturale #
1
, #
2
, &&&, #
n
& Spunem c% dou% numere naturale sunt prietene dac%
scrierea unui num%r 4n "a+a 115 este o"inut% prin scrierea cifrelor celuilalt n ordine in$ers% 4de
e#emplu 367; i ;7635& S% se g%seasc% toate perechile de numere consecuti$e prietene din irul dat
i frec$enele cifrelor n scrierea numerelor date&
2& Se d% un ir de numere naturale #
1
, #
2
, &&&, #
n
& S% se g%seasc% toate su"irurile de elemente
consecuti$e de lungime ma#ima formate din numere prime i toate numerele prime distincte
nt!lnite&
3& Se d% o matrice p%trat% 7 de ordinul n i num%rul natural m\1& Se cere s% se tip%reasc% matricele
7, 7
2
, &&&, 7
m
i suma lor&
4& Se d% polinomul P cu coeficieni ntregi, fie prin monoamele sale, fie prin grad i coeficieni& S%
se scrie un algoritm care determin% r%d%cinile raionale ale polinomului P&
5& Se dau numerele naturale n
1
i n
2
& *eterminai mulimea numerelor prime aflate ntre n
1
i n
2
i
mulimea perechilor de gemeni 4numerele prime p i i se numesc gemeni dac% i-pR25&
6& Biind date mai multe polinoame cu coeficieni reali s% se determine suma lor i polinomul de
grad ma#im& :n polinom se d% fie prin monoamele sale, fie prin grad i coeficieni&
7& Se citesc mai multe iruri de numere naturale& Pentru fiecare ir citit, tip%rii cea mai lung% scar%
4sec$ena de termeni consecuti$i strict cresc%tori5 i depunei aceast% scar% ntr-un ir 4re+ultat5 D&
Ca sf!rit tip%rii cea mai lung% scar% din D& 'itirea unui ir se termin% la nt!lnirea unui num%r
negati$, iar citirea se oprete la ir de lungime 1 4deci f%r% nici un termen5&
________________________________________________________________________________
52
Structuri de date i algoritmi
_______________________________________________________________________________
;& Se dau mai multe mulimi de numere ntregi po+iti$e& S% se determine reuniunea i intersecia
acestor mulimi&
0& Se dau mai multe mulimi de numere naturale& Bie (495 num%rul mulimilor diferite de 9 si care
conin pe 9& S% se determine mulimea pentru care (495 este ma#im&
11& 8 matrice rar% 7 este o matrice n care ma.oritatea termenilor sunt nuli& 8 astfel de matrice se
poate repre+enta prin tripletele 4linie, coloan%, $aloare5 corespun+%toare $alorilor nenule ale
matricei> deci 7/linie,coloan%2 R $aloare& *!ndu-se mai multe matrice rare determinai suma lor&
11& Se dau mai multe numere naturale prin repre+ent%rile lor n "a+a p& A%sii suma lor i ma#imul
acestor numere 4repre+entate n "a+a p i toate operaiile se fac n "a+a p5&
12& Se dau mai multe matrice cu coeficieni ntregi& Se cere suma matricelor care au determinantul
nenul, matricele care au determinantul nul i matricea care are determinantul ma#im&

Co#le*itatea algoritilor
Eta#ele re)ol(?rii unei #ro%lee
3ste cunoscut faptul c% re+ol$area unei pro"leme presupune n principal trei etape6
#. Anali$a problemei
##. %roiectarea soluiei
(((& #mplementarea i testarea soluiei n practic.
)n funcie de gradul de generalitate a anali+ei efectuate, n a doua etap% se nt!lnesc dou%
situaii6 proiectarea unei soluii particulare, $ala"il% doar pentru acea pro"lem%, i proiectarea unei
soluii generale, $ala"il% pentru orice instaniere a acelei pro"leme, soluia generali+at%&
)n timp ce soluia particular% este $ala"il% doar pentru o instan% a pro"lemei, soluia
general% este independent% de parametrii pro"lemei i ofer% o metod general de re$olvare a
pro"lemei&
7stfel, soluionarea imediat% a ecuaiei #
3
U1R1 este particular% fa% de soluionarea ecuaiei
generali+ate a#
3
U"#
2
UcR1&
No9iunea de algorit =i cea de #rogra
7tunci c!nd metoda general% de re+ol$are a unei pro"leme este pre+entat% precis, pe pai ce se
efectuea+% ntr-o ordine "ine preci+at% i care conduc n timp finit la soluia oric%rei instanieri a
pro"lemei, $or"im de algoritmul de re$olvare a problemei.
*e e#emplu, algoritmul de determinare a unei soluii reale a ecuaiei polinomiale P4#5 R 1,
cu o apro#imare dat%, prin metoda tangentei&
________________________________________________________________________________
53
Structuri de date i algoritmi
_______________________________________________________________________________
7$anta.ul ma.or al proiect%rii unui algoritm de soluionare a pro"lemei este dat de faptul c%
efortul de re+ol$are poate fi transferat unei maini automate 4calculator& su" forma programului
e#ecuta"il ce implementea$ algoritmul general de soluionare&
(mplementarea algoritmului general de soluionare a pro"lemei ntr-un program pe
calculator permite o important% economie prin faptul c% efortul ma.or de anali$ i proiectare a
soluiei a fost efectuat o singur% dat% iar re+ol$area pro"lemei se reduce la efortul foarte redus de
executare 'rulare& a programului cu a.utorul calculatorului pentru fiecare instan% diferit% a
pro"lemei&
Modelul a%stract al Ma=inii Turing
Primul model teoretic riguros de main% automat% de calcul este (odelul mainii abstracte
Turing 410365& 7cest model teoretic a stat la "a+a apariiei efecti$e a primei maini electronice de
calcul, denumit% mai t!r+iu computer 4calculator5 dup% denumirea operatorului uman
4tehnicianului5 care era anga.at s% fac% toate calculele inginereti sau conta"ile ale unui proiect sau
ale unei firme&
Te)a Turing!C$urc$
De+ult% c%, n ultim% instan%, puterea de re$olvare a unui calculator se reduce la puterea de
calcul a mainii Kuring& (ar puterea de calcul a acestei maini a"stracte riguroase este e#primat% su"
forma Te$ei Turing-)*urc*+ , main Turing poate face tot ceea ce poate face un computer uman
n$estrat cu creion, oricte foi de *rtie i reguli precise ' mecanice sau automate & de calcul.
3#ist%, pe l!ng% aceast% formulare iniial% a lui Kuring, o serie de alte formul%ri echi$alente
ale acestei te+e unanim acceptate de teoreticienii ce au pus "a+ele teoriei informatice i a tiinei
calculatoarelor 4computer science5& S% o"ser$%m c% aceast% te+% 4propo+iie acceptat% f%r%
demonstraie ca a$!nd $aloarea logic% de adevrat5 sta"ilete o echi$alen% perfect% ntre puterea de
calcul a unui computer uman i puterea de calcul a unui computer main%&
-c*ivalarea su"neles% 4tacit%5 a noiunii teoretice $agi de algoritm cu noiunea matematic%
riguroas% de (ain Turing a nsemnat acceptarea unanim a Ke+ei Kuring-'hurch de c%tre
iniiatorii informaticii& )n consecin%, studiul eficienei unui algoritm n soluionarea unei pro"leme
re$ine n studiul eficienei n funcionare a mainii Kuring i implicit a eficienei n funcionare a
programului ce implementea+% acel algoritm de re+ol$are&
7ceasta este consecina faptului c%, n accepiunea original%, algoritmul de soluionare a unei
pro"leme este destinat unui computer uman, dar puterea de calcul a acestuia este aceeai cu puterea
de calcul a unei maini Turing R computer main care este pus% n micare printr-un program
e#ecuta"il&

Anali)a" Proiectarea =i I#leentarea algoritilor =i Co#le*itatea algoritilor
Delu!nd ideea iniial%, n re$olvarea automat a unei probleme 4adic% re+ol$area cu a.utorul
calculatorului a oricrei instane diferite pro"lemei5 se trece prin cele trei etape6 Anali$a teoretic a
problemei, %roiectarea algoritmului de soluionare i #mplementarea algoritmului ntr-un program
executabil pe calculator.
)n timp ce n prima etap% janali+a pro"lemei - re+ultatul cheie, pe care se concentrea+%
preponderent efortul de anali+%, este demonstrarea corectitudinii soluiei, n a doua etap% j
proiectarea algoritmului de soluionare - cu$!ntul cheie este eficiena de re+ol$are& Studiul cu un
pronunat caracter teoretic coninut n aceast% a doua etap% i propune s% prevad eficiena n
funcionare 4necesarul de timp i spa%iu calculator5 a programului e#ecuta"il ce $a implementa
algoritmul, e$entual prin compararea teoretic% a algoritmilor de soluionare diferii&
________________________________________________________________________________
54
Structuri de date i algoritmi
_______________________________________________________________________________
*e e#emplu, n ca+ul pro"lemei sort%rii unui ir de n chei prin comparaii se poate estima
teoretic comparati$ c% algoritmul de sortare duicaSort este printre cele mai eficiente soluii&
*isciplina informaticii care se ocup% cu studiul teoretic al eficienei algoritmilor este numit%
)omplexitatea algoritmilor&
O#era9ia de %a)?" c$eia studiului co#le*it?9ii
Ca "a+a studierii comple#it%ii unui algoritm st% detectarea n descrierea algoritmului a
operaiei sau a operaiilor de ba$, acea operaie 4acele operaii5 aflat% 4aflate5 n cel mai interior
corp de ciclu repetiti$ i a c%rei 4a c%ror5 contori+are permite estimarea n a$ans, nainte de lansarea
n e#ecuie, a timpului de e#ecuie a programului e#ecuta"il corespun+%tor&
)n ma.oritatea ca+urilor e#ist% o leg%tur% foarte str!ns% ntre operaia de ba$ 4cea mai
repetat% operaie5 i operaia care este dedus% n etapa de anali+% a pro"lemei ca fiind operaia
inevitabil pentru re+ol$area pro"lemei&
*e e#emplu, n ca+ul pro"lemei sort%rii unui ir de n chei prin comparaii este limpede c%
operaia de comparare a Sm%rimiiT cheilor este operaia inevitabil i de asemenea ea $a fi i
operaia de ba$ a c%rei contori+are $a permite estimarea, nainte de e#ecuie, a duratei de
funcionare a programului ce implementea+% algoritmul de sortare respecti$&

Clase de algoriti
)n aceast% situaie, toi algoritmii diferii care soluionea+% aceeai pro"lem% i care se
"a+ea+% pe aceeai operaie de "a+% 4ine$ita"il%5 formea+% clasa algoritmilor de soluionare a
pro"lemei& *e o"icei numele clasei $a fi dat chiar de numele acelei operaii de "a+% ce este
coninut% de fiecare algoritm al clasei n mod ine$ita"il&
*e e#emplu, n ca+ul pro"lemei sort%rii unui ir de n chei prin comparaii, algoritmii diferii
ce soluionea+% pro"lema sunt grupai n clasa algoritmilor de sortare prin comparaii, spre
deose"ire de clasa algoritmilor de sortare prin distribuire ce soluionea+% aceeai pro"lem%
"a+!ndu-se ns% pe alt% operaie de "a+%6 distribuirea cheilor de sortat&
8peraia de "a+% a algoritmilor dintr-o clas% de algoritmi poate fi comparat% cu o vergea
$ertical% pe care sunt nirai toi algoritmii clasei& 3a este cea care permite studiul comparativ a
eficienei algoritmilor din acea clas% 4ea fiind o $erita"il% coloan vertebral a clasei respecti$e5&
E'icien9a algoritilor
'ompararea eficienei a doi algoritmi diferii ce soluionea+% aceeai pro"lem% se face prin
determinarea teoretic% a numrului de repetiii a operaiei de "a+% n fiecare algoritm i
compararea celor dou% $alori& )n final re+ultatul compar%rii $a permite estimarea comparati$% a
duratei de funcionare a programelor i alegerea celui mai "un&
'ompararea eficienei a doi algoritmi, din punct de $edere practic, se face prin compararea
timpilor medii de e#ecuie a celor dou% programe ce i implementea+%& 7ceast% metod% pragmatic%
are de+a$anta.ul c% necesit% rularea programelor care, n anumite situaii, poate dura un timp
surprin+%tor de mare&
1unc9iile de co#le*itate
?um%rul de repetiii al operaiei de "a+% se e#prim% matematic printr-o funcie de
complexitate indi$idual% asociat% algoritmului, funcie ce depinde n mod ine$ita"il de dimensiunea
4m%rimea5 $ectorului datelor de intrare&
________________________________________________________________________________
55
Structuri de date i algoritmi
_______________________________________________________________________________
*e e#emplu, n ca+ul algoritmului de determinare a ma#imului dintr-un ir de n elemente
prin comparaii, este e$ident c% num%rul de comparaii efectuat de orice algoritm de ma#im $a fi o
funcie de n& (at% descrierea n Pseudocod a algoritmului6
)itete n, a
!
, a
"
,., a
n
/ *up% cum se o"ser$% $ectorul de intrare 4irul a5 are dimensiunea n&
(ax +0 a
!
/
%entru i +0 " pn la n execut 3ste e$ident c% operaia de "a+% j comparaia SXT j se e#ecut% de
Dac (ax 1 a
i
atunci (ax +0 a
i
/ n-1 ori, adic% pentru $alorile contorului i cuprinse ntre 2 i n&
2crie (ax/ *eci, funcia care descrie num%rul operaiilor de "a+% este6 f4n5Rn-1
)n studiul comple#it%ii algoritmilor, pentru a permite reali+area comparailor necesare
pentru clasificarea algoritmului din punct de $edere al eficienei, dimensiunea $ectorului de intrare
este Smpins%T spre infinit&
'ompararea comple#it%ii algoritmilor dintr-o clas% de algoritmi cere n mod ine$ita"il
gruparea funciilor de comple#itate n clase de funcii de complexitate i studiul comportamentului
asimptotic al acestora 4c!nd n jdimensiunea $ectorului de intrare tinde c%tre infinit5&
A#artenen9a la o clas? de co#le*itate
)n acest fel, comple#itatea unui algoritm se poate e#prima prin preci+area clasei de
apartenen a funciei de comple#itate a respecti$ului algoritm& ?otaiile clasice care e#prim% felul
apartenenei funciei de comple#itate f'n& a unui algoritm la di$erse clase de funcii sunt , i .
)n aceast% introducere snt pre+entate noiuni de "a+% folosite n capitolele urm%toare ale
lucr%rii& 8 atenie special% este acordat% structurilor de tip graf, care inter$in foarte frec$ent n
ela"orarea algoritmilor geometrici&
$e*ini%ia 1.1. :n algoritm este un set de instruciuni care tre"uie e#ecutate pentru a se o"ine un
r%spuns la o pro"lem% dat%&
:n algoritm are urm%toarele propriet%i 4fnuth /10762, Jurdescu /100;256
finitudine6 tre"uie s% se termine ntotdeauna dup% un num%r finit de pai 4instruciuni5>
determinism6 fiecare pas tre"uie s% fie e#act preci+at, n mod riguros i neam"iguu>
generalitate6 tre"uie s% re+ol$e pro"lema pentru orice date de intrare din domeniul
preci+at>
efecti$itate6 fiecare instruciune tre"uie s% fie e#act% i de durat% finit%&
:ltima proprietate tre"uie nuanat%, a$!nd n $edere faptul c% memoria oric%rui calculator
este limitat%& ?u ntotdeauna operaiile aritmetice se efectuea+% e#act, n unele ca+uri o"in!ndu-se
o apro#imare a re+ultatelor& 3#ist% i soluii propuse pentru respectarea acestei propriet%i, care
presupun implementarea soft,are a operaiilor elementare cu numere ntregi 4Bortune& et al&
/100325, dar acestea duc la sc%derea $ite+ei de prelucrare& *e aceea, a"ord%ri recente iau n
considerare modelul "a+at pe aritmetica n $irgul% mo"il%, implementat pe toate calculatoarele
actuale 4She,chua /100725&
7$!nd un algoritm care re+ol$% o pro"lem% dat%, urmea+% s% determin%m resursele acestuia
4Ci$o$schi i Aeorgescu, /10;625& 'oncret, de c!t% memorie i timp a$em ne$oie ca s% o"inem
soluia pro"lemei@ )n acest scop facem urm%toarele simplific%ri6 fiecare operaie elementar% a
algoritmului se e#ecut% ntr-o unitate de timp, informaiile despre un o"iect elementar se
memorea+% ntr-o locaie de memorie&
________________________________________________________________________________
56
Structuri de date i algoritmi
_______________________________________________________________________________
Bie f : N N o funcie care indic% relaia dintre num%rul de $alori 4date de intrare5
prelucrate de un algoritm, i num%rul de operaii elementare efectuate de acesta pentru o"inerea
re+ultatelor& Buncia f poate a$ea o e#presie analitic% destul de complicat%, de aceea consider%m
nc% o funcie g : N N cu o e#presie analitic% simplificat%&
$e*ini%ia 1.2. Buncia f are ordinul de m%rime cel mult g4n5, notaie6 f 84g4n55, dac% i numai
dac% e#ist% $alori c > 1 i n
1
N astfel nc!t pentru orice n > n
1
s% a$em f4n5 c g4n5&
84g5 E h : ? ? k

c > 1, n
1
? a& &

n > n
1
, h4n5 c g4n5 F&
41&15
$e*ini%ia 1.3. Buncia f are ordinul de m%rime cel puin g4n5, notaie6 f 4g4n55, dac% i numai
dac% e#ist% $alori c > 1 i n
1
N astfel nc!t pentru orice n > n
1
s% a$em f4n5 c g4n5&
4g5 E h : ? ? k

c > 1, n
1
N a& &

n > n
1
, h4n5 c g4n5 F&
41&25
$e*ini%ia 1.4. Buncia f are ordinul de m%rime g4n5, notaie6 f 4g4n55, dac% i numai dac% e#ist%
$alori c
1
, c
2
> 1 i n
1
N astfel nc!t pentru orice n > n
1
s% a$em c
1
g4n5 f4n5 c
2
g4n5&
4g5 E h : ? ? k

c
1
, c
2
> 1, n
1
N a& &

n > n
1
, c
1
g4n5 h4n5 c
2
g4n5 F& 41&35
Pre+ent%m dou% re+ultate remarca"ile care $or fi folosite foarte frec$ent pe parcursul lucr%rii
fnuth /107626
415 Se d% un ir de n $alori dintr-un domeniu pe care este definit% o relaie de ordine total%&
'el mai eficient algoritm de ordonare a irului dat, care se "a+ea+% pe comparaii, are comple#itate
de ordin 4n log n5&
425 Se d% un ir de n $alori ordonate& '%utarea unei $alori 4locali+area po+iiei acesteia sau
o"inerea unui r%spuns negati$5 n irul dat necesit% un timp de ordin 84log n5&
8 categorie special% de pro"leme, numite ?P-complete, se caracteri+ea+% prin urm%toarele6
nu se cunosc algoritmi eficieni 4de comple#itate polinomial%5, se cunosc n schim"
algoritmi de comple#itate e#ponenial% pentru re+ol$area acestora>
pro"lem% ?P-complet% este polinomial transforma"il% ntr-o alt% pro"lem% tot ?P-
complet%6 dac% se re+ol$% o pro"lem% 7, soluia unei alte pro"leme J se poate o"ine
printr-o transformare n timp polinomial din soluia pro"lemei 7&
'ea mai general% pro"lem% ?P-complet% este pro"lema satisfia"ilit%ii6 fiind dat% o e#presie
logic% n forma normal% con.uncti$% cu n $aria"ile, s% se determine dac% pot fi atri"uite $alori
logice $aria"ilelor astfel nc!t e#presia s% fie ade$%rat% 'ooa /10712&
/omplexitatea medie. 'onsider%m un algoritm care procesea+% n $alori date la intrare&
Pentru o anumit% configuraie a $alorilor, pro"a"ilitatea configuraiei fiind p
i
, sunt necesare f
i
4n5
operaii& 'omple#itatea medie a algoritmului este o sum% ponderat%6
( )

i
i i
n f p
&
Exemplul 1.1. 7lgoritmul duica-sort necesit% un timp de ordin ,4n log n5 n ma.oritatea ca+urilor
pentru a ordona un ir de n $alori& 3#ist% ns% c!te$a configuraii 4foarte puine5 care au ne$oie de
un timp de ordin ,4n
2
5 pentru a fi procesate& 'omple#itatea medie a acestui algoritm este de ordin
84n log n5 fnuth /107626
________________________________________________________________________________
57
Structuri de date i algoritmi
_______________________________________________________________________________
)ntr-un mod similar se poate defini noiunea de comple#itate pentru necesarul de memorie&
7ceasta arat% c!t% memorie este necesar% pentru re+ultatele intermediare i cele de ieire&
*efiniiile date mai sus asigur% o estimare a eficienei unui algoritm independent% de o
implementare practic% a acestuia folosind un anumit lim"a. de programare, urm%rindu-se
lascundereaT factorului multiplicati$& Kotui acest factor nu poate fi ntotdeauna ignorat, deoarece
e#ist% pro"leme care admit mai muli algoritmi cu acelai ordin de comple#itate, i atunci tre"uie s%
se efectue+e o lrafinareT a studiului comple#it%ii& De+ultate recente arat% c% aceast% constant% poate
influena eficiena unor implement%ri, de aceea a"ord%rile clasice ale acestui su"iect tre"uie pri$ite
cu re+er$e&
:nele pro"leme de optimi+are se re+ol$% cu a.utorul unor algoritmi de comple#itate mare,
e#emplu6 pro"leme ?P-complete sau de comple#itate 84n
d
5& )n asemenea situaii ne mulumim cu
soluii apro#imati$e o"inute cu a.utorul unor algoritmi euristici, mult mai eficieni i de cele mai
multe ori mai simpli&
8 categorie special%, frec$ent nt!lnit% mai ales n pro"leme de geometrie, este aceea a
algoritmilor incrementali& :n algoritm din aceast% categorie procesea+% $alorile de intrare una c!te
una, la fiecare pas o"in!ndu-se o soluie parial% pentru datele de.a procesate&
*ac% algoritmul de determinare a ma#imului din n chei prin comparaii efectuea+% un
numr liniar de comparaii 4adic% proporional cu n5 atunci se spune c% el este un algoritm 4n5
4adic% are funcia de comple#itate din 4n5 R mulimea funciilor lineare de forma c n5, iar dac%
efectuea+% cel puin, respecti$ cel mult, tot at!tea comparaii 4adic% proporional cu n5 se spune c%
algoritmul este 4n5, respecti$ 4n5&
'lasele de funcii de comple#itate, i implicit clasele de comple#itate a algoritmilor, cele
mai des nt!lnite, n ordine cresc%toare a comple#it%ii sunt6 'ln n& - clasa algoritmilor cu
comple#itate logaritmic 4timpul de e#ecuie $a fi egal cu c ln n5, 'n& - liniar 4timpul de
e#ecuie $a fi egal cu c n5, 'n ln n& - liniar-logaritmic 4timpul de e#ecuie $a fi egal cu c n ln
n5, '%'n&& - polinomial 4timpul de e#ecuie $a fi egal cu c %'n&5, 'e
x
& - exponenial 4timpul de
e#ecuie $a fi egal cu c -xp'n&5 sau 'n3& - factorial 4timpul de e#ecuie $a fi egal cu c n35& Peste
tot c este o constant% de proporionalitate care depinde de calculatorul pe care se rulea+%
programele&
(at% cte un e#emplu de algoritm din literatura de specialitate, corespun+%tor fiec%rei clase6
algoritmul de c%utare "inar% 4inar5n2earc* - 4log n5, algoritmul de determinare a ma#imului
(ax - 4n5, algoritmul de sortare prin comparaii 6uic72ort - 4n log n5, algoritmul comun de
nmulire a matricelor - 4n
3
5, algoritmul de colorare optim% cu 7 culori a unui graf cu n noduri prin
ncerc%ri repetate - 4a
n
5, respecti$, algoritmul de generare a permut%rilor - 4n[5, toi algoritmii
a$!nd $ectorul de intrare cu n elemente 4de dimensiune n5&
Liita in'erioar? sau e'ortul inial
7tunci c!nd ntr-o clas% de algoritmi, toi "a+ai pe aceeai operaie de "a+%, se poate sta"ili
o limit inferioar a num%rului de operaii de "a+% ine$ita"ile ce tre"uiesc efectuate pentru
soluionarea pro"lemei, putem $or"i despre efortul minimal de re+ol$are i despre algoritmul
optimal de re+ol$are a pro"lemei respecti$e&
Algorit o#tial
Algoritmul optimal este acel algoritm care efectuea+% cel mai mic num%r de operaii de "a+%
dintre toi algoritmii clasei sale, cunoscui sau neinventai nc% 4o clas% de algoritmi prin criteriul
________________________________________________________________________________
5;
Structuri de date i algoritmi
_______________________________________________________________________________
s%u de apartenen% - pre+ena operaiei de "a+% ine$ita"ile - include o"ligatoriu n acea clas% toi
algoritmii ce re+ol$% pro"lema "a+!ndu-se pe operaia respecti$%, chiar i algoritmii nedescoperii
nc% [5&
*e e#emplu, n clasa algoritmilor de sortare prin comparaii se nelege c% este aparin%tor
orice algoritm de sortare "a+at pe comparaii cunoscut sau necunoscut nc%& )n plus, limita
inferioar a numrului de comparaii necesar pentru sortarea listei de n elemente 4efortul minimal5
prin comparaii este demonstrat riguros ca fiind log
"
n3 dar un algoritm optimal care s% efectue+e
e#act at!tea operaii de "a+% 4comparaii5 nu se cunoate&
)n clasa algoritmilor de determinare a maximului prin comparaii, algoritmul clasic de
determinare a ma#imului este un algoritm optimal ntruc!t el efectuea+% un num%r minimal de
comparaii ine$ita"ile6 n-!.
Co#le*itatea algoritilor =i di'icultatea #ro%leelor
*in perspecti$a re+ol$%rii pro"lemelor cu a.utorul calculatorului putem studia i compara
dificultatea problemelor studiind i compar!nd complexitatea algoritmilor optimali de soluionare a
acestora&
7stfel, pro"lema sortrii prin comparaii cere un efort minimal liniar-logaritmic& 3a nu este
totui o pro"lem% de efort liniar-logaritmic 4 'n log n&5 ntruc!t ea poate fi soluionat% cu efort
liniar 4 'n& operaii5 atunci c!nd cheile de sortare pot fi distri"uite folosind un algoritm de sortare
prin distri"uire&
Co#le*itatea de ti#
9%surarea n practic% a duratei de e#ecuie 4adic% a complexitii de timp5 a implement%rii
algoritmilor a condus la urm%toarea conclu+ie categoric%6 singurii algoritmi ce soluionea+% n mod
eficient o pro"lem% oarecare sunt acei algoritmi care au comple#itatea polinomial 4sau mai mic
dect exponenial5& 8 astfel de soluie se numete soluie re$onabil, fa% de cealalt% situaie cu
soluie nere$onabil a$!nd o comple#itate de timp e#ponenial% sau factorial% 4total ineficient% ca
durat% de e#ecuie5.
*e e#emplu, dac% pentru colorarea unui graf cu n $!rfuri cu doar trei culori, se ncearc%
toate cele 3
n
$ariante de colorare 4printr-un algoritm de tip "acatracaing5, timpul necesar unui
program pentru epui+area tuturor ca+urilor, n ca+ul n care n0!88, este direct proporional cu
uriaa $aloare de 3
111
R 3;74214;0
11
ceea ce face acel program cu totul inutili+a"il 4chiar dac% am
presupune c% o instruciune s-ar e#ecuta ntr-o pico-secund% R 11
-12
s5&

Pro%lee re)ona%ile =i #ro%lee nere)ona%ile7 Clasa #ro%leelor P!#olinoiale
*up% efortul de re+ol$are necesar, reducti"il n ultim% instan% la durat% de e#ecuie a
programului, pro"lemele se pot mp%ri n probleme re$onabile i nere$onabile& Gin!nd cont de cele
de mai sus, pro"lemele re+ona"ile sunt pro"lemele de dificultate polinomial i ele sunt grupate n
clasa problemelor % 4)lasa problemelor %olinomiale5& Pentru fiecare pro"lem% din aceast% clas% se
cunoate un algoritm de soluionare cu comple#itate polinomial%, adic% programul ce
implementea+% acest algoritm are o durat% de e#ecuie proporional% cu o funcie polinomial% de n,
unde n este dimensiunea datelor de intrare&
3#ist% cu siguran% pro"leme ce nu fac parte din aceast% clas% %6 de e#emplu, pro"lema
gener%rii tuturor celor n3 permut%ri ale unui ir de n elemente distincte, care are ine$ita"il
dificultatea 4durata de e#ecuie5 factorial% n3&
________________________________________________________________________________
50
Structuri de date i algoritmi
_______________________________________________________________________________
Pro%lee de deci)ie =i #ro%lee de o#tii)are
)n ncercarea de a studia i clasifica dificultatea pro"lemelor ne-polinomiale 4nere+ona"ile ca
durat% de re+ol$are cu a.utorul calculatorului5 ele au fost grupate n dou% categorii6 probleme n
varianta de deci$ie, n care se cere doar s% se decid% prin *7 sau ?: dac% e#ist% pentru pro"lema
respecti$% o soluie "ine-preci+at%, i probleme n varianta de optimi$are, n care se cere
determinarea soluiei optime pentru pro"lema respecti$%&
*e e#emplu, pro"lema color%rii grafului n $arianta de deci+ie cere s% se decid% dac% un graf
poate fi colorat cu 7 culori, unde 7 este preci+at dinainte& 7ceeai pro"lem%, n $arianta de
optimi+are, cere s% se determine - num%rul minim de culori necesar 'numrul cromatic& pentru
colorarea unui graf 4astfel nc!t oricare dou% $!rfuri adiacente s% fie colorate diferit5, fiind
e$ident un num%r ce nu poate fi preci+at dinainte&

Clasa #ro%leelor NP 3non ! deterinistic #olinoiale4
3#ist% o clas% larg% de pro"leme de deci+ie cu e#trem de numeroase aplicaii practice numit%
clasa problemelor 9% 'non-deterministic polinomiale&. 7ceast% clas% include pe l!ng% toate
pro"lemele de deci+ie din % i o mulime foarte mare de pro"leme de deci+ie 4toate inspirate din
practic%5 c%rora nu li se cunoate o soluie polinomial&
Pentru a putea e#plica de ce sunt numite 9% 'non-deterministice&, este necesar s% re$enim la
echi$alarea unanim acceptat% de teoreticienii informaticii ntre noiunea de algoritm i noiunea de
main% Kuring& 7stfel, pentru fiecare din pro"lemele ?P se cunoate o soluie su" forma unei
maini Turing nedeterministice'3& 4care la o tran+iie de stare poate trece dintr-o stare ntr-una din
oricare alte 7 st%ri posi"ile, f%r% a se putea preci+a e#act n care5 care se oprete furni+!nd soluia
dup% un num%r polinomial de pai&
)n termenii algoritmici, aceeai non-determinarea este e#primat% astfel6 o pro"lem% 9% este o
pro"lem% ce are un algoritm de soluionare care decide n timp polinomial dac% o soluie propus%
4prin =ghicire= sau =in$entare= 5 este sau nu $alid%&
)n aceti termeni, nedeterminarea const% mai e#act n faptul c% su"-algoritmul de SghicireT
sau Sin$entareT de soluii, din cau+% c% nu poate parcurge ntreg spaiul soluiilor posi"ile pentru c%
nu ar mai r%m!ne un algoritm polinomial, nu ofer nici o garanie c% g%sete sau c% se SapropieT
m%car n $reun fel de soluia pro"lemei prin simpl% SghicireT&
Reduc9ia #olinoial? a #ro%leelor
)n intenia de a compara dificultatea pro"lemelor de deci+ie ntre ele s-a sesi+at c% dac%
e#ist% un algoritm de transformare T a datelor de intrare *m ale unei pro"leme de deci+ie Pm astfel
nc!t noile date de intrare *RT4*m5 s% se potri$easc% ca date de intrare unei pro"leme de deci+ie P,
ce are ca soluie un algoritm de soluionare cunoscut A, atunci un algoritm de soluionare A: a
pro"lemei Pm se o"ine imediat prin compunerea algoritmului A cu transformarea T astfel nct A:R
A T&
*ac% comple#itatea algoritmului de transformare T este re$onabil 4polinomial5 atunci
nseamn% c% comple#itatea algoritmului A: o"inut prin compunere este tot at!t de re+ona"il% cu cea
a algoritmului A care este cunoscut 4adic%, dac% A are comple#itate polinomial% i A: $a a$ea tot o
comple#itatea polinomial% o"inut% prin compunerea celor dou% funcii de comple#itate polinomiale
corespun+%toare lui A i T5& )n acest ca+, c!nd algoritmul T de transformare a intr%rii unei pro"leme
________________________________________________________________________________
61
Structuri de date i algoritmi
_______________________________________________________________________________
n intrarea alteia este de comple#itate polinomial%, atunci ntreag% aceast% metod% ce transform%
soluionarea pro"lemei Pm n soluionarea pro"lemei P cunoscut% de.a, se numete reducie
polinomial iar cele dou% pro"leme se spune c% se reduc una la cealalt%6 %: %&
*e e#emplu, se poate ar%ta c% %roblema ,rarului 4unui institut de n$%%m!nt5 este
reducti"il% la %roblema )olorrii ;rafului prin faptul c% su"-algoritmul de transformare a orelor de
predareW+ileWclaseWprofesori n nodurile unui graf este liniar% iar ae+area orelor pe orar este
echi$alent% cu colorarea grafului o"inut prin aceast% transformare liniar%&

Ec$i(alen9a #ro%leelor #rin reduc9ie #olinoial?
7tunci c!nd dou% pro"leme P i Pm se reduc polinomial reciproc una la cealalt%, adic% %: %
i % %:, se spune c% cele dou% pro"leme sunt ec*ivalente&
*esigur, in!nd cont de cele +ise mai sus, se poate ar%ta c% %roblema ,rarului i %roblema
)olorrii ;rafului sunt echi$alente&

Teorea lui Coo-7 Pro%lee NP!Co#lete
Ja+ndu-se pe Te$a Turing-)*urc* i folosind c!te$a elemente de calcul logic propo$iional,
n 1071 'ooa a demonstrat o teorem% fundamental% pentru domeniul comple#it%ii algoritmilor&
Teorema lui )oo7 afirm% c%6 Toate #ro%leele NP sunt reducti%ile #olinoial la 'roblema F0/"
deci #ro%lea 1NC este o problem) 0'-complet)7
'roblema F0/ 4Pro"lema Bormei ?ormale 'on.ucti$e5 cere s% se decid% dac% este posi"il s% e#iste
o alegere de $alori logice Adevrat sau <als pentru n $aria"ile logice #
1
, #
2
, n, #
n
ce apar ntr-o
form% normal% con.uncti$% 4format% dintr-un ir de clau+e con.ugate, fiecare clau+% fiind o"inut%
doar prin compunerea j sau logic j a $aria"ilelor #
i
sau negaiei lor 1 #
i
5 astfel nc!t $aloarea logic%
a propo+iiei logice finale s% fie 7de$%rat&
*e e#emplu, fie #, `, + cele trei $aria"ile logice, o form% normal% con.ucti$% posi"il% cu trei
clau+e con.ugate este6 4 # ` 5 4 # 1 ` 1 +5 4 1 # + 5 ce admite ca soluie #R7de$%rat,
`R7de$%rat sau Bals i +R7de$%rat&

Clasa #ro%leelor NP!Co#lete
*up% descoperirea i demonstrarea e#istenei primei pro"leme ?P-complete a urmat
demonstrarea ?P-completitudinii, prin ec*ivalarea cu pro"lema B?', a unei serii ntregi de
pro"leme clasice din informatic% i cunoscute ca fiind pro"leme e#trem de dificil de soluionat
eficient n timp6 %roblema )olorrii ;rafului, %roblema %artiionrii 2umei, %roblema )omis-
=oia>orului, %roblema ?ucsacului, %roblema %lanificrii 2arcinilor cu %enali$ri, etc&
S-a o"inut astfel clasa problemelor 9%-complete ce au neo"inuita proprietate c% prin
soluionarea n timp polinomial doar a uneia dintre ele se $a o"ine automat n consecin% soluia
polinomial% pentru toate celelalte&
*in p%cate, pentru nici una din sutele de pro"leme ?P-complete in$entariate p!n% acum nu
se cunoate o soluie polinomial% 4re+ona"il% n timp de e#ecuie5& )ns% nu s-a putut demonstra c%
$reuna dintre ele nu poate admite o soluie polinomial%&

Marea @ntre%are a Co#le*it?9ii algoritilor
________________________________________________________________________________
61
Structuri de date i algoritmi
_______________________________________________________________________________
7ceasta este (area ntrebare a comple#it%ii algoritmilor dar i a informaticii6 %09% @ Snt
pro"lemele ?P reducti"ile la cele din P @ Pot e#ista soluii polinomiale pentru pro"lemele ?P @
D%spunsul la 9area )ntre"are este de importan% capital% pentru ma.oritatea domeniilor
practice n care calculatorul are un rol tot mai important 4strategic, am putea +ice56 reele de
transport i reele de comunicaii, astronautic i aeronautic, domeniile militare i a serviciilor de
informaii, proiectarea automat, urmrirea automat i controlul proceselor industriale, etc. :n
r%spuns afirmati$, %09%, ar a$ea ca i consecin% imediat% posi"ilitatea introducerii calculatorului
n deplin% siguran% n po+iiile de deci+ie i control automat a proceselor cheie a fiec%ruia din
domeniile amintite, datorit% capacit%ii algoritmilor implementai de a lua deci+ii optime n timp real
4re+ona"il5 n orice situaie&
7tunci, actualul nume6 -ra informati$rii, prematur acordat perioadei ultimilor ani, s-ar
potri$ii cu ade$%rat ntru-totul, iar noiunile de pilot automat sau robot ar face parte din $iaa
cotidian% a fiec%ruia& 9erit% aici s% atragem atenia asupra puterii e#traordinare pe care o $or
do"!ndi n acea situaie cei ce super$i+ea+% i programea+% calculatoarele aflate n puncte strategice
de deci+ie, putere ce f%r% e#agerare ar putea fi numit% planetar, i de aceea consider%m c%6
din pcate ansele de a afla cu toii despre existena rspunsului afirmativ la (area ntrebare,
nainte ca consecinele strategice ale acestuia s fi fost de>a puse n practic la scar planetar,
sunt minime.
Pentru a r%spunde ns% negati$ la 9area )ntre"are este suficient s% se demonstre+e riguros c%
una din pro"lemele 9%-complete are o complexitate exponenial, deci cu siguran% nu admite o
soluie cu timp de e#ecuie polinomial& Sau, altfel spus, ar fi suficient s% se arate riguros c% ntr-o
anumit% pro"lem% ?P-complet%, num%rul de operaii de "a+% ine$ita"ile nu poate fi mai mic dec!t
e#ponenial&
)n situaia unui r%spuns negati$ la 9area )ntre"are, toate punctele de deci+ie n timp real $or
fi ocupate ca i p!n% acum de operatori umani ce nu tre"uie i nu pot fi pri$ii ca computere umane,
ei comport!ndu-se uneori omenete, deci ntr-un mod nedeterminist& S% nu uit%m c% a$em cu toii
e#periena momentelor cruciale din $iaa personal% ce au cerut stringent luarea unei deci+ii i n
ma.oritatea ca+urilor deci+ia luat% de noi n-a fost una de tip raional, SalgoritmicT sau dup% o
Sreet%T anume, ci soluia aleas% a a$ut o component% su"iecti$% intuiti$% sau chiar ilogic%&

Algoriti a#ro*iati(i
)ntruc!t nu sunt nc% semne clare c% se $a putea g%si n $iitorul imediat r%spunsul la 9area
)ntre"are, dei se fac eforturi mari n aceast% direcie, disciplina 'omple#itatea algoritmilor s-a
m"og%it prin introducerea unui capitol consistent6 %roiectarea i studiul complexitii algoritmilor
aproximativi. )n primul r!nd tre"uie preci+at c% nu este necesar% proiectarea unor astfel de algoritmi
dec!t n ca+ul pro"lemelor c%rora nu li se cunoate o soluie re+ona"il% 4alta dec!t e#ponenial%5&
Prin algoritm aproximativ se nelege un algoritm de comple#itate polinomial% 4o soluie
re+ona"il%, deci5 care ns% nu este capa"il s% determine soluia optim% a pro"lemei ci doar una
apro#imati$%& Studiul comple#it%ii algoritmilor apro#imati$i se ocup% cu estimarea teoretic% a
gradului de apro#imare pe care soluia algoritmului apro#imati$ o ofer%, deci implicit studiul
eficienei acestuia& 3ste e$ident c%, atunci c!nd soluia apro#imati$% este foarte apropiat% de soluia
optim% iar timpul de o"inere al ei este unul polinomial i nu e#ponenial, este a$anta.oas% folosirea
n practic% a unui algoritm apro#imati$ performant& *esigur, soluiile oferite de algoritmii
apro#imati$i, chiar dac% se apropie de soluia optim% a pro"lemei, nu ofer% ns% nici o informaie n
plus despre soluia optim%, aceasta r%m!n!nd n continuare nedeterminat%&
________________________________________________________________________________
62
Structuri de date i algoritmi
_______________________________________________________________________________
*e e#emplu, n ca+ul Pro"lemei 'olor%rii Arafului, soluia optim% cere determinarea
numrului cromatic, adic% a num%rului minim de culori necesare pentru colorarea nodurilor grafului
astfel nc!t oricare dou% $!rfuri adiacente s% fie colorate diferit&
:n e#emplu de algoritm apro#imati$ de colorare a grafului ar fi urm%torul6 fie c
1
, c
2
, n, c
a
,
n irul culorilor> parcurg!nd ntr-o anumit% ordine mulimea celor n $!rfuri ale grafului $
1
, $
2
, n,
$
n
se colorea+% fiecare $!rf cu culoarea de indice minimal care i este permis% 4in!nd cont de
culorile nodurilor adiacente lui5& Parcurgerea celor n $!rfuri precum i selectarea culorii de indice
minim necesit% un timp polinomial, deci acest algoritm apro#imati$ este eficient n practic%& 'eea
ce este mai dificil este estimarea gradului de apro#imare a soluiei optime& 7ceasta se face prin
calcularea mediei rapoartelor ntre num%rul de culori o"inut cu a.utorul acestui algoritm
apro#imati$ i num%rul cromatic 4care $a tre"ui aflat apel!nd la un algoritm e#ponenial, gen
"acatracaing5& 3ficiena acestui algoritm apro#imati$ este dat% de m%sura n care $aloarea medie a
raportului se apropie de $aloarea 1&

Pro%lee insol(a%ile algoritic
'hiar dac% nu se cunoate nc% r%spunsul la 9area )ntre"are, se cunoate n schim"
r%spunsul la o alt% ntre"are important%6
exist probleme ce nu pot fi soluionate cu a>utorul calculatorului @
D%spunsul este afirmativ i el a fost pentru prima dat% afirmat n 1036 chiar de 7lan Kuring,
Sp%rinteleT calculatoarelor actuale& 3forturile principale ale lui Kuring la acea $reme erau
concentrate tocmai pentru c%utarea r%spunsului la aceast% ntre"are& Cipsa de riguro+itate a
noiunilor6 problem, soluie i calculator l-au o"ligat pe Kuring s% imagine+e modelul matematic
riguros al mainii Turing i s% formule+e Te$a sa ce permite echi$alarea mainii Turing cu noiunea
$ag% de algoritm, noiune care ine locul noiunii i mai $agi de soluie general a unei probleme.
3nunul simplificat al Pro"lemei Stopului care l-a condus pe Kuring la r%spunsul ntre"%rii
exist probleme insolvabile algoritmic@ n mod afirmati$ 4printr-un e#emplu concret de pro"lem%5
este urm%torul6
-xist vreo metod general i finit care s decid dac un algoritm 'sau o procedur automat&
ofer rspuns n timp finit pentru un set de date de intrare oarecare @
3a este foarte asem%n%toare cu o alt% pro"lem% insol$a"il% algoritmic, %roblema a $ecea a
lui Ailbert6
exist o metod general care s decid n timp finit dac o ecuaie diofantic oarecare are sau nu
soluie n numere ntregi @
(deea cheie care st% la "a+a demonstraiei riguroase a insol$a"ilit%ii acestor pro"leme nu
este nou%, ci ea a ap%rut pentru nt!ia oar% n demonstraia teoremelor de incompletitudine ale
matematicii ale lui AOdel de la nceputul anilor m31& 7ceast% idee este inspirat% din faimosul
paradox antic al mincinosului. 7stfel, propo+iiile de genul S-u sunt mincinosT sau S-u spun n
fiecare moment o minciunT au un coninut parado#al& )n anali+area coninutului logic al acestor
propo+iii ce din punct de $edere semantic sunt de fapt nite negaii se a.unge rapid la parado#ul
semantic de negare a negaiei i, n consecin%, nu li se poate determina $aloare logic% de adevrat
sau fals& 7dic%, este inaccepta"il ca ele s% fie ade$%rate, i este inaccepta"il ca ele s% fie false[
Aodel i Kuring au ar%tat n mod asem%n%tor c% presupun!nd, prin reducere la absurd, c%
matematica este complet respecti$ c% pro"lema stopului este solvabil se $a a.unge ine$ita"il la
propo+iii parado#ale din punct de $edere matematic riguros al coninutului logic&

________________________________________________________________________________
63
Structuri de date i algoritmi
_______________________________________________________________________________
Co#le*itatea algoritilor" calculatorul =i (iitorul
*e la AOdel i Kuring ncoace 4anii m315 au ap%rut o mulime de alte pro"leme insolvabile
algoritmic 4fiecare surprin+!nd oarecum prin simplicitatea enunului5 i despre care putem spune c%
$or r%m!ne s% fie re+ol$ate exclusiv prin puterea minii umane 4f%r% a.utorul mainilor automate
actuale5, cel puin c!t% $reme $a fi p%strat modelul a"stract ce st% la "a+a calculatoarelor actuale&
9omentan aceste pro"leme au o dificultate ce dep%ete puterea noastr% i nu li se pot ntre+%rii
soluii& <or fi aceste pro"leme soluionate $reodat% @ ?u putem afirma, nici c% vor fi, nici c% nu vor
putea fi soluionate, dar c% sunt cele mai complexe i mai dificile probleme ce au ap%rut n
matematic% i informatic% putem afirma cu siguran%&

________________________________________________________________________________
64
Structuri de date i algoritmi
_______________________________________________________________________________
I707 PROGRAMARE @N TURBO!PASCAL

Pentru a putea utili+a algoritmii la re+ol$area pro"lemelor, este necesar ca ei s% fie
=implementai= ntr-un lim"a. =neles= de calculator, iar acesta s% e#ecute aciunile cerute de
algoritm& (ar pentru a n$%a corect programarea este necesar s% se neleag% ntreaga acti$itate de
programare& (n plus, testarea algoritmilor implementai se poate face doar prin traducerea acestora
ntr-un lim"a. de programare& )n acest scop $om pre+enta un minim de cunotine despre lim"a.ul
Pascal, suficiente ns% pentru a scrie programe pentru a re+ol$a o $arietate mare de pro"leme de
matematic% 4Joian i Brentiu /100225&

870787 Mediul de #rograare Tur%o Pascal
9ediul de programare Kur"o Pascal este un ansam"lu de programe comple#, conceput
pentru programatorii care utili+ea+% lim"a.ul Pascal& 9ediul Kur"o Pascal permite editarea
4introducerea i corectarea5 programelor Pascal, compilarea programului surs% introdus, e#ecuia
acestuia dac% el este corect sintactic i le#ical& Programarea n lim"a.ul Pascal este mult uurat% de
acest mediu de programare interacti$ cu a.utorul c%ruia programatorul poate corecta uor erorile de
compilare semnalate direct pe ecran n programul surs% unde a fost indicat% eroarea 4prima eroare
dac% sunt mai multe5& *up% corectarea erorii programul se poate compila din nou p!n% c!nd se
a.unge la o $ariant% corect%& )n continuare se poate testa programul introdus prin e#ecuia acestuia&
Koate aceste etape pre+entate anterior 4editare, compilare, e#ecuie, precum i altele5 se pot parcurge
uor din acest mediu, f%r% a mai apela la alte programe utilitare& 8dat% apelat mediul Kur"o Pascal
putem efectua toate operaiile necesare parcurgerii etapelor programului Pascal f%r% a p%r%si mediul&
P%r%sirea mediului se $a face doar la sf!rit c!nd programul este terminat&
9ediul de programare ofer% o interfa% prietenoas% printr-un sistem de meniuri i opiuni ce
permit editarea fiierelor surs% Pascal, compilarea acestora, e#ecuia programelor o"inute,
depanarea lor i multe altele&
Pornirea mediului de programare Kur"o Pascal se face prin comanda Kur"oX3nter\ ntr-un
mediu 9S-*8S, sau prin accesarea corespun+%toare a unei icoane care corespunde mediului de
programare !n ca+ul mediului oindo,s& Cansarea n e#ecuie a mediului de programare Kur"o
Pascal este semnalat% de deschiderea unei fereastre de editare care permite editarea te#telor surs%
Pascal 4programele scrise n lim"a.ul Pascal5& )n partea de superioar% a ferestrei este afiat meniul
principal iar n partea inferioar% sunt afiate c!te$a comen+i importante ce se pot efectua direct f%r%
a apela sistemul de meniuri&
Pentru a accesa un fiier ce conine cod surs% Pascal $om putea tasta direct B3 sau putem
accesa fiierul prin intermediul meniului principal 4B11 - su"meniul Bile opiunea 8pen5, dup% care
se $a tasta numele fiierului 4de e#emplu KestX3nter\5&
*up% aceasta, fiierul cu numele specificat i e#tensia implicit% P7S $a fi deschis, iar
fereastra de editare este preg%tit% pentru editarea programului 4e#emplu6 Kest&Pas5&
Programul se $a introduce r!nd cu r!nd, fiecare r!nd fiind terminat cu X3nter\& )n editarea
programului se pot utili+a comen+ile de editare descrise n ane#a 7& *up% ce programul a fost
introdus se poate compila pentru a depista e$entualele erori sintactice i le#icale& 7ceasta se poate
________________________________________________________________________________
65
Structuri de date i algoritmi
_______________________________________________________________________________
reali+a fie direct prin tastarea com"inaiei de taste 7ltUB0 sau B0, fie prin meniul principal 4B11 -
su"meniul 'ompile opiunea 'ompile sau 9aae5& *ac% au fost semnalate erori, atunci acestea se
$or corecta, apoi se $a relua compilarea, i tot aa, p!n% c!nd compilarea se termin% cu succes&
)n continuare, se poate trece la etapa de e#ecuie a programului scris 4editat5 i compilat&
3#ecuia programului se poate reali+a fie direct prin tastarea com"inaiei de taste 'trlUB0, fie prin
meniul principal 4B11 - su"meniul Dun opiunea Dun5& 3$entualele re+ultate n timpul e#ecuiei
programului sunt afiate ntr-o nou% fereastr%& Ca terminarea e#ecuiei programului se $a redeschide
fereastra de editare& *ac% sunt depistate erori de e#ecuie atunci programul se corectea+% la ni$elul
codului surs% i se $a relua compilarea i e#ecuia programului&
*ac% se dorete terminarea sesiunii de lucru cu mediul Kur"o Pascal atunci se p%r%sete
acest mediu direct prin com"inaia 7ltUY sau prin meniul principal 4B11, Bile i 3#it5& *ac% fiierul
nu a fost sal$at niciodat% 4comanda Sa$e R B2 din su"meniul Bile5 atunci se cere confirmarea
sal$%rii dac% programatorul dorete acest lucru 4prin _es5&
9ediul Kur"o Pascal mparte ecranul n trei +one astfel6
Fig. 4. Structura general? a 'erestrei de editare a ediului de #rograare Tur%o
Pascal7
Bereastra de editare este utili+at% pentru introducerea i corectarea programelor scrise n
lim"a.ul Pascal& *in aceast% fereastr% se poate accesa meniul principal descris mai .os prin ap%sarea
tastei B11, apoi prin na$igare cu a.utorul tastelor repre+ent!nd s%geile st!nga sau dreapta alegem
________________________________________________________________________________
66
Structuri de date i algoritmi
_______________________________________________________________________________
opiunea dorit%& 'omen+ile de editare sunt descrise i sunt aceleai ca i cele ale editorului oS 4$e+i
ane#a 7 5& Se poate selecta i direct o anumit% opiune din meniul principal prin tastarea simultan%
7ltU#, unde # repre+int% litera caracteristic% din opiunea aleas% descris% mai sus cu caracter
ngroat 4 1ile R B, Edit R 3, &&& .elp R c 5 &
Fig. 5. Structura eniului #rinci#al a 'erestrei de editare a ediului de #rograare
Tur%o Pascal7
)n partea de .os a ecranului se afl% afiat% linia de memento care arat% cu ce taste
4com"inaie de taste5 putem reali+a un anumit lucru direct f%r% a mai trece prin meniul principal
astfel6

________________________________________________________________________________
67
Structuri de date i algoritmi
_______________________________________________________________________________
Fig. 6. Structura general? a eniului eento a 'erestrei de editare a ediului de
#rograare Tur%o Pascal7
)n continuare $om descrie posi"ilit%ile 4facilit%ile5 oferite de mediul Kur"o Pascal prin
meniul principal6

- File6 permite nc%rcarea i sal$area fiierelor te#t ce conin programe surs% Pascal 40e.,
OpenRB3, +a,eRB2, &&&5, schim"area directorului curent 4/hange $ir5, tip%rirea la imprimant% a
programului curent 4'rint5, e#ecutarea de comen+i *os 4$os +hell5 i terminarea sesiunii i
p%r%sirea mediului 4ExitR7ltUY5&
- Edit6 permite introducerea i corectarea fiierului Pascal, recuperarea te#telor terse
41ndoR7ltUJaSp5, mutarea unui "loc de te#t marcat ntr-o +on% tampon numit% clip"oard
4/utRShift U *el5, copierea unui "loc n +ona tampon 4/op2R'trlU(ns5, inserarea n po+iia
cursorului a unui "loc din +ona tampon 4'asteRShiftU(ns5, tergerea unui "loc 4/learR'trlU*el5 i
$i+uali+area +onei tampon 4+ho. clipboard5& Pentru a marca un "loc 4o sec$en% de program surs%5
se utili+ea+% simultan tasta Shift i s%geile direcionale de pe tastatur%&
- +earch6 reali+ea+% funciile de c%utare a unui ir de caractere 4Find5, de nlocuire
43eplace5, precum i repetarea ultimei comen+i de c%utareWnlocuire 4+earch again5, po+iionarea
direct% pe o linie din programul surs% preci+at% prin num%rul ei 44o to line number5, i altele&
________________________________________________________________________________
6;
Structuri de date i algoritmi
_______________________________________________________________________________
- 3un6 permite e#ecuia unui program astfel6
- e#ecuia ntregului program 43unR'trlUB05>
- e#ecuia programului p!n% n po+iia cursorului din programul surs% 44o to
cursorRB45>
- e#ecuia pas cu pas iar a su"programelor ntr-un pas 4+tep o,erRB;5>
- e#ecuia pas cu pas, inclusi$ a su"programelor 45race intoRB75>

- /ompile6 reali+area compilarea unui program 4/ompile R7ltUB05, iar destinaia
programului o"iect re+ultat poate fi n memoria intern% sau pe disc 4$estination 6emor27$is85,
compilarea automat% a uniturilor dac% acestea au fost modificate 46a8eRB05, sau necondiionat%
49uild5 i altele>
- $ebug6 permite depanarea programelor prin $i+uali+area punctelor de ntrerupere
49rea8points5, afiarea ferestrei de $i+uali+are a $alorilor $aria"ilelor 4:atch5, afiarea ferestrei de
re+ultate 41ser screenR7ltUB55, $i+uali+area i modificarea $alorilor $aria"ilelor
4E,aluate7modi*2R'trlUB45, adaug% e#presii n fereastra de $i+uali+are 4;dd .atch R 'trlUB75,
marcarea punctelor de ntrerupere 4;dd brea8point i altele&
- 5ools6 deschide fereastr% de mesa.e 46essages5 i altele&
- Option6 setea+% opiuni de compilare 4/ompiler5, directoarele de lucru utile 4$irectories5,
preferine de editare, mouse, startare i culori 4En,ironment5, sal$are configuraie 4+a,e5 ntr-un
fiier 4+a,e a&5&
- :indo.6 permite operaii asupra ferestrelor de lucru astfel6
- 5ile - toate ferestrele se $%d simultan prin mp%rirea egal% a ecranului,
- /ascade - ferestrele sunt aran.ate una peste cealalt%>
- +i(e76o,eR'trUB5 - permite deplasarea i redimensionarea ferestrelor utili+!nd
s%geile i tasta shift>
- <oomRB5 - m%rete fereastra acti$%>
- 0extRB6 - afiea+% 4acti$ea+%5 urm%toarea fereastr%>
- /loseR7ltUB3 - nchide fereastra acti$%>
- =ist R 7ltU1 - tip%rete lista ferestrelor de lucru&
- >elp6 permite ndrumarea operatorului prin su"meniuri i opiuni care conduc la
e#plicaii i e#emple&

1.3.1.1. 'rograme simple 'ascal
________________________________________________________________________________
60
Structuri de date i algoritmi
_______________________________________________________________________________

Cim"a.ul Pascal, definit de oirth, a ap%rut n anul 1071, i s-a r%sp!ndit rapid datorit%
calit%ilor sale& oirth a urm%rit s% pre+inte conceptele de "a+% din domeniul program%rii, n scopul
nsuirii acestei acti$it%i& *ei iniial lim"a.ul a fost g!ndit n scop uni$ersitar, el este folosit ast%+i
la programarea celor mai di$erse pro"leme, pe toate sistemele de calcul e#istente 4'ristea et al&
/100225&
'a orice lim"a. de programare lim"a.ul Pascal este construit folosind un alfa"et ce conine
caracterele nt!lnite n scrierea o"inuit% i cea matematic%6
- literele 4mari i mici5 ale alfa"etului latin6
7 J ' * 3 B A c ( P f C 9 ? 8 P d D S K : < o Y _ Q
a " c d e f g h i . a l m n o p i r s t u $ , # ` +
- cifrele +ecimale6 1 1 2 3 4 5 6 7 ; 0
- caractere speciale6 U - V W & , > 6 4 5 / 2 E F etc&
'u a.utorul lor se $or construi toate instruciunile lim"a.ului&
9enion%m c% literele mici se consider% identice cu literele mari, e#cept!nd folosirea lor n
$alori de tip string 4te#te5& *e asemenea, cel puin n constante de tip string, pe l!ng% caracterele
pre+entate mai sus, sunt permise toate caracterele e#istente la tastatura calculatorului& *e fapt multe
particularit%i ale lim"a.ului depind de implementarea lui pe calculatorul folosit&
)n pre+entarea care urmea+% $om folosi notaia J?B 4Jacaus-?aur Borm5 pentru a defini
elementele lim"a.ului Pascal& *e e#emplu prin notaia6
s 66R e1 k e2 k E e3 /, e42 U F e5
$om nelege c% prin definiie elementul s este e1, sau e2, sau construcia E e3 /, e42UF e5,
care reunete e#presiile6
e5
e3 U e5
e3 , e4 U e5
e3 , e4 U e3 U e5
etc&
Prin scrierea unei construcii ntre acoladele E F se indic% faptul c% acea construcie poate
s% se repete de ori c!te ori 4inclusi$ de +ero ori5& Parante+ele drepte ngroate sunt folosite pentru
scrierea construciilor opionale> ceea ce se afl% nchis ntre aceste parante+e poate lipsi&
Se o"ser$% c% n sinta#a de mai sus se folosesc metasim"olurile /, 2, E i F& 7 nu se confunda
cu caracterele /, 2, E i F permise i folosite n anumite construcii Pascal&
Pentru alte metasim"oluri $om alege anumite cu$inte, scrise cu litere mici ntre caracterele
X i \ i scrise cursi$&
'a n toate lim"a.ele de programare i n Pascal se folosesc frec$ent identificatorii& Prin
identificator, notat n definiiile sintactice care urmea+% prin Xid\, se nelege o sec$en% de litere
4mari sau mici5 i cifre, primul caracter fiind o"ligatoriu o liter%& *e asemenea, n construcia
________________________________________________________________________________
71
Structuri de date i algoritmi
_______________________________________________________________________________
identificatorilor este permis i caracterul H_H& 7cesta se recomand% s% se foloseasc% n scrierea
identificatorilor compui din dou% cu$inte unite prin acest caracter&
8 parte dintre identificatori au un rol special n definirea instruciunilor lim"a.ului Pascal&
7cetia se numesc cu$inte re+er$ate i sunt6

AND DOANTO I1 OR T.EN ARRAB ELSE
IN PACCED TO BEGIN END LABEL PROCEDURE
TBPE CASE 1ILE MOD PROGRAM UNTIL CONST
1OR NIL RECORD DAR DID 1UNCTION NOT
REPEAT A.ILE DO GOTO O1 SET AIT.

'u$intele re+er$ate nu pot fi folosite n program n alt scop dec!t cel fi#at, acela de a defini
sinta#a instruciunilor Pascal&
Pentru a su"linia care sunt cu$intele re+er$ate, n definiiile care urmea+% c!t i n primele
programe date ca e#emple, $om scrie cu$intele re+er$ate cu litere mari& *e asemenea, aceste
cu$inte $or fi scrise ngroat, pentru a le diferenia clar de celelalte construcii datorate
programatorului&
1.3.1.2. +tructura unui program 'ascal
:n program Pascal const% dintr-un titlu, o parte de declaraii i instruciunile care formea+%
programul principal& 3l are urm%toarea structur% general%6
Xprogram\ 66R Xantet_program\ > X"loc\ &
unde
Xantet_program\ 66R PD8AD79 Xid\ / 4 Xlista_id\ 5 2
iar
X"loc\ 66R Xlista_decl\ > Xins_compus%\

'onstruciile Xlista_decl\ i Xins_compus%\ $or fi complet nelese puin mai t!r+iu, dup%
ce se $or pre+enta declaraiile i instruciunile lim"a.ului Pascal& )n general prin lista de elemente
Xlista_e\ se nelege un simplu element Xe\, sau o succesiune de elemente
Xlista_e\ 66R Xe\ E s Xe\ F
unde separatorul s este $irgula sau uneori caracterul H>H, ca+ n care $om meniona acest
lucru&
)n definiia "locului elementul Xdecl\ este metasim"olul folosit pentru declaraia Pascal
________________________________________________________________________________
71
Structuri de date i algoritmi
_______________________________________________________________________________
care $a fi definit% n seciunea 4&2&5, iar Xins\ este metasim"olul folosit pentru a nota o instruciune
Pascal i $a fi definit n seciunea 4&2&6&
7a cum se $a $edea mai t!r+iu, n definiia declaraiilor de procedur% se folosete
metasim"olul X"loc\& *eci un "loc care conine o procedur% conine un alt "loc care, la r!ndul lui,
poate conine alt "loc&
8riunde n te#tul programului pot fi incluse comentarii& 7cestea sunt folosite de c%tre
utili+atori n scopul m"un%t%irii clarit%ii programului i a e#plic%rii semnificaiei unor notaii sau
p%ri de program& 3le nu sunt luate n seam% de calculator, singurul lor scop fiind acela de a oferi
programatorului posi"ilitatea de a insera n program e#plicaii utile programatorului& :n comentariu
este orice te#t nchis ntre acolade
Xcomentariu\ 66R E te#t F ] 4V te#t V5
Pre+ent%m n continuare un e#emplu de program Pascal6
Exemplul I.2#
PD8AD79 D7*('7C(> E Programul 1 F
E 3#emplu de program Pascal F
<7D #, r6 D37C> E *eclaraii F
J3A(? E (nstruciunea compus% F
D3P37K
D37*C?4#5>
r 6R SdDK4#5> E Bunctia SdDK este o funcie F
E standard pentru e#tragerea radicalului F
oD(K3C?4HDadical din H, #, H este H, r5
:?K(C # R 1
3?*&

1.3.3.3. /onstante ?i ,ariabile 'ascal
*atele i re+ultatele dintr-un program sunt repre+entate prin constante i $aria"ile&
'onstantele se caracteri+ea+% prin faptul c% nu-i modific% $aloarea n timpul e#ecuiei unui
program& 8rice constant% este preci+at% prin sinta#a ei i are o $aloare "ine definit%&
'onstantele pot fi6 numerice, ir de caractere i "ooleene& Ca r!ndul lor constantele
numerice pot fi ntregi sau reale&
'onstantele ntregi sunt cele care repre+int% numerele ntregi din matematic% i au sinta#a
o"inuit% de scriere a numerelor& *e e#emplu, 15, 10;0, -314 sunt constante ntregi&
'onstantele reale sunt cele care repre+int% numerele reale& Scrierea unui num%r real poate fi
n forma normal% i n forma e#ponenial%&
)n forma normal% este pre+ent at!t punctul +ecimal =&= c!t i partea ntreag% i partea
________________________________________________________________________________
72
Structuri de date i algoritmi
_______________________________________________________________________________
fracionar% a num%rului real& *e e#emplu 3&14150 1&72 -5&740 113&1 1&23 sunt constante reale
corecte& ?otaiile &237 113&U 37&5& -123&U44 sunt greite&
)n forma e#ponenial%, un num%r ntreg sau un num%r real n forma normal% este urmat de
litera 3 sau e i de un num%r ntreg numit e#ponent& <aloarea num%rului real scris n aceast% form%
este egal% cu num%rul scris n faa literei 3 nmulit% cu 11 la puterea egal% cu e#ponentul scris dup%
litera 3& *e e#emplu6
123453-6 este egal cu 1&112345 >
3&12345635 este egal cu 312345&6 &
'onstanta ir de caractere este o sec$en% de caractere 4un te#t5 nchis% ntre apostrofuri&
<aloarea constantei este chiar te#tul nchis ntre apostrofuri& *ac% este necesar ca n te#t s% apar% i
apostroful el tre"uie du"lat& *e e#emplu6
H22 *ecem"rie 10;0H
HCHHcospitalH
HH E irul $id F
)n ca+ul n care un singur caracter este nchis ntre apostrofuri a$em o constant% de tip
caracter& 8 constant% ir de caractere este considerat% ca fiind re+ultatul concaten%rii mai multor
constante de tip caracter&
*ei s-a afirmat la nceput c% literele mari se consider% identice cu cele mici, singura
e#cepie este folosirea lor n constanta ir de caractere& )ntr-o asemenea constant% fiecare liter% mare
difer% de litera mic% corespun+%toare&
'onstanta "oolean% repre+int% o $aloare logic% i se repre+int% prin identificatorii KD:3
pentru $aloarea logic% =ade$%rat=, respecti$ B7CS3 pentru $aloarea logic% =fals=&
'onceptul de $aria"il% a fost de.a pre+entat n seciunea 1&2& 3a corespunde unei date care
i poate schim"a $aloarea n timpul e#ecuiei programului& <aria"ila are un nume i poate primi o
$aloare dintr-un domeniu "ine preci+at de $alori& (n Pascal numele unei $aria"ile este un
identificator& (n lim"a.ul Pascal fiecare $aria"il% are un tip care tre"uie s% fie declarat n program
nainte ca $aria"ila s% fie folosit%&

1.3.3.47 5ipuri de date

Prin tip de date se nelege o mulime de $alori i o mulime de operaii ce pot fi efectuate cu
$alori de acest tip& 9ulimea $alorilor se mai numete i domeniul tipului&
3#ist% mai multe posi"ilit%i de definire a unui tip de date, unele dintre ele $or fi pre+entate
mai t!r+iu& 9enion%m c% unele tipuri de date sunt predefinite, iar altele sunt definite de c%tre
programator n timpul scrierii programului& *up% elementele care formea+% domeniul tipului
deose"im tipuri de date simple, respecti$ compuse cu a.utorul altor tipuri& *e asemenea, putem a$ea
ca domeniu mulimea adreselor memoriei calculatorului& *eci un tip este6
Xtip\ 66R Xtip_simplu\ k Xtip_structurat\ k Xtip_referin%\
Kipul de date Xtip_simplu\ se definete n continuare, iar alte dou% tipuri $or fi definite n
________________________________________________________________________________
73
Structuri de date i algoritmi
_______________________________________________________________________________
seciunile urm%toare 47DD7_ i D3'8D*5&
Kipurile simple de date conin tipurile numerice (?K3A3D i D37C, tipul J88C37?,
tipul 'c7D, tipul enumerare i tipul su"domeniu& 7$em6
Xtip_simplu\ 66R Xtip_real\ k Xtip_ordinal\
unde
Xtip_ordinal\ 66R Xtip_ntreg\ k Xtip_"oolean\ k Xtip_caracter\ k Xtip_enumerare\ k
Xtip_su"domeniu\

Kipurile ntreg, real, "oolean i caracter sunt predefinite i sunt marcate prin cu$intele
(?K3A3D, D37C, J88C37?, respecti$ 'c7D& *eci
Xtip_real\ 66R D37C
Xtip_intreg\ 66R (?K3A3D
Xtip_"oolean\ 66R J88C37?
Xtip_caracter\ 66R 'c7D

Kipurile (?K3A3D i D37C se refer% la mulimile de numere ntregi i reale, dar mulimea
$alorilor fiec%rui tip este finit% i depinde de calculatorul folosit&
*ei funciile Pascal $or fi indicate n seciunea urm%toare pre+ent%m aici c!te$a funcii
definite asupra $alorilor de tip ordinal sau de tip caracter&
Pentru fiecare tip ordinal, deci i pentru tipul caracter, mulimea $alorilor este finit% i
ordonat%& Pentru o"inerea rangului elementului # n aceast% mulime ordonat% se poate folosi
funcia 8D*4#5& Pentru primul element p din aceast% mulime a$em 8D*4p5 R 1& 3#cepie este
8D*4i5 pentru i ntreg, c!nd 8D*4i5Ri& Buncia S:'' furni+ea+% succesorul unui element n
aceast% mulime, deci S:''4#5 repre+int% succesorul elementului # n domeniul $alorilor i este
nedefinit pentru ultimul element din domeniu& Prin PD3*4#5 se notea+% predecesorul elementului #
n domeniul tipului i este nedefinit pentru primul element din domeniu&
*in definiiile de mai sus se deduc uor urm%toarele propriet%i6
8D*4 S:''4#5 5 R 8D*4#5 U 1>
8D*4 PD3*4#5 5 R 8D*4#5 - 1&

S:''4#5 i PD3*4#5 tre"uie s% fie definite&
1.3.3.47 5ipul &ntreg

*omeniul tipului ntreg este su"mulimea numerelor ntregi cuprinse n inter$alul /-
97Y(?K-1, 97Y(?K2, unde 97Y(?K este o constant% ntreag% predefinit% a c%rei $aloare
depinde de calculatorul folosit i este determinat% de m%rimea locaiei pe care se repre+int% un
________________________________________________________________________________
74
Structuri de date i algoritmi
_______________________________________________________________________________
num%r ntreg n calculatorul respecti$ 4de e#emplu 97Y(?K R 327675&
o
Semnificaia lui # o `
8peraia o Semnificaia lui # o `
U adunare
- sc%dere
V nmulire
*(< )mp%rire ntreag%
W )mp%rire real%
98* Destul mp%ririi ntregi a lui # la `
5ab.1.3. Opera%iile tipului I05E4E3

8peraiile definite ntre $alori de tip ntreg sunt U, -, V, *(<, 98* i W, iar semnificaia lor
se d% n Ka"elul 1&3& :neori, - se notea+% i o operaie unar%& Prin -# se nelege opusul lui # fa% de
operaia de adunare&

1.3.3.57 5ipul real
Kipul real repre+int% o su"mulime finit% de numere reale aflate n inter$alul /-$ma#,
$ma#2, su"mulime care depinde de modul de repre+entare a numerelor reale n calculatorul folosit&
*eci $ma# este o constant% real% care difer% de la un calculator la altul, dar nu e o constant%
predefinit% ca 97Y(?K n ca+ul tipului (?K3A3D&
8peraiile definite ntre $alori de tip real sunt adunarea, sc%derea, nmulirea i mp%rirea,
notate prin U, -, V, respecti$ W & *e remarcat c% aceste operaii sunt definite i c!nd un operand este
ntreg iar cel%lalt real, re+ultatul fiind real, datorit% con$ersiei implicite a tipului ntreg la real&
9enion%m c% n repre+entarea oric%rui num%r real n calculator se rein un num%r finit de
cifre semnificati$e& *in aceast% cau+% re+ultatul unei operaii cu numere reale este apro#imati$&
Pentru a nelege e#act aceste afirmaii este necesar% cunoaterea repre+ent%rii numerelor n
calculator&

1.3.3.67 5ipul boolean
*omeniul tipului "oolean const% din mulimea $alorilor logice =fals= i =ade$%rat=, marcate
prin constantele B7CS3, respecti$ KD:3& 8rdinea este B7CS3 X KD:3&
________________________________________________________________________________
75
Structuri de date i algoritmi
_______________________________________________________________________________
8peraiile logice "inare sunt marcate prin 7?* 4con.uncia logic%5 i 8D 4dis.uncia
logic%5, iar negaia 4operaie logic% unar%5 prin ?8K& 8peratorii relaionali au n acest ca+
semnificaii logice& *eci prin R, X\, XR, \R, sunt notate echi$alena, neechi$alena 4S7: e#clusi$5,
implicaia, respecti$ implicaia in$ers%&
1.3.3.7 5ipul caracter
Kipul caracter este marcat prin identificatorul 'c7D i repre+int% mulimea caracterelor cu
care lucrea+% calculatorul respecti$& Principial, ordinea acestor caractere poate s% difere de la
calculator la calculator& )ns% indiferent de calculator, lim"a.ul Pascal cere ca mulimea cifrelor
+ecimale s% fie codificat% compact 4diferena codurilor a dou% cifre consecuti$e s% fie 15, iar
su"mulimile literelor mari i a literelor mici s% fie ordonate alfa"etic&
?u e#ist% operaii definite asupra $alorilor de tip 'c7D& Pe l!ng% funciile definite pentru
argument de orice tip ordinal, pentru tipul caracter mai nt!lnim i funcia 'cD& Pentru i ntreg,
'cD4i5 furni+ea+% caracterul de rang i din domeniul tipului 'c7D& S% o"ser$%m c%
8D*4 'cD4i5 5 R i
i
'cD4 8D*4c5 5 R c &

1.3.3.! 5ipul enumerare
Kipul enumerare se specific% prin scrierea $alorilor acestui tip ntre parante+e6
Xtip-enumerare\ 66R 4 Xlista-id\ 5
identificatorii din parante+e constituind $alorile tipului enumerare definit& 8rdinea lor este
cea dat% de ordinea identificatorilor n list%& ?u este permis ca o $aloare a acestui tip 4deci un
identificator5 s% fie reutili+at n definiia altui tip&
3#emple de tip enumerare6
3#emplul 16 4C:?(, 97DK(, 9(3D':D(, P8(, <(?3D(, S79J7K7, *:9(?('75
3#emplul 26 4PD(97<7D7, <7D7, K879?7, (7D?75
Pentru aceste e#emple a$em6
PD3*4K879?75 R <7D7
S:''4P8(5 R <(?3D(
8D*4C:?(5 R 1
8D*4(7D?75 R 3 &
9enion%m c% $alorile $aria"ilelor de tip enumerare nu pot fi citite i nici tip%rite&

1.3.3.". 5ipul subdomeniu

Kipul su"domeniu poate fi definit din orice tip ordinal prin preci+area limitelor inferioar% i
superioar% care definesc $alorile su"domeniului& Kipul ordinal pentru care se definete su"domeniul
________________________________________________________________________________
76
Structuri de date i algoritmi
_______________________________________________________________________________
se numete tip de "a+% al su"domeniului& 7$em6
Xtip-su"domeniu\ 66R constanta1 && constanta2
unde constanta1 i constanta2 sunt $alori ale tipului ordinal de "a+% care satisfac
inegalitatea
8rd4constanta15 XR 8rd4constanta25&

*e e#emplu6
- su"domeniul ntregilor de la 1 p!n% la 216 1&&21
- su"domeniul +ilelor lucr%toare6 C:?( && <(?3D(
- caracterele cifre +ecimale6 H1H && H0H&

1.3.3.". Expresii 'ascal
8 e#presie Pascal este format% din operan+i i operatori& *eci o e#presie Pascal are forma6
a/12 o/12 a/22 o/22 &&& a/n2 o/n2 a/nU12
unde a/i2, i R 1, 2, &&&, nU1, sunt operan+ii e#presiei, iar o/i2, i R 1, 2, &&&, n, sunt operatorii
e#presiei& *eoarece n \R 1, pot e#ista e#presii formate dintr-un singur operand& 7cest operand
poate a$ea orice tip Pascal, el fiind i tipul e#presiei& )n funcie de tipurile operan+ilor deose"im
e#presii aritmetice, e#presii relaionale, e#presii logice i e#presii ordinale&
)ntruc!t n definirea e#presiilor se folosesc i funciile, pre+ent%m c!te$a funcii Pascal&

1.3.3.".17 Func%ii prede*inite

Pe l!ng% operaiile alge"rice pre+entate de.a, e#ist% i funcii frec$ent folosite n re+ol$area
unor pro"leme, cum ar fi e#tragerea r%d%cinii p%trate, calculul $alorii unei funcii trigonometrice,
calculul logaritmilor etc& Pentru efectuarea acestor calcule n lim"a.ul Pascal e#ist% funcii
predefinite, funcii pe care le d%m n ta"elul 4&2&1&

1.3.3.".27 Expresii aritmetice
3#presiile aritmetice sunt e#presii n care operan+ii sunt $alori numerice ntregi sau reale&
8peratorii sunt cei permii de tipurile ntreg i real> se cere ca operaia care leag% doi operan+i s% fie
definit% n tipul acestor operan+i& 8peran+ii unei e#presii aritmetice pot fi6
- constante numerice>
- $aria"ile simple de tip numeric>
- elemente de ta"lou de tip numeric>
- funcii numerice>
- su"e#presii aritmetice, adic% o e#presie aritmetic%, e$entual precedat% de semnul H-H,
________________________________________________________________________________
77
Structuri de date i algoritmi
_______________________________________________________________________________
nchis% ntre parante+e&
Nota9ia S e n i ' i c a 9 i a
a"s4i5 <aloarea 4ntreag%5 a"solut% a ntregului i
a"s4#5 <aloarea 4real%5 a"solut% a realului #
sir4i5 P%tratul ntregului i
sir4#5 P%tratul num%rului real #
int4#5 Partea ntreag% a num%rului real # dac% #\1, respecti$ j
int4a"s4#55 dac% #X1
trunc4#5 )ntregul o"inut din num%rul real # prin eliminarea p%rii
fracionare
round4#5 'el mai apropiat ntreg de num%rul real #
frac4#5 <aloarea # - int4#5, # real
e#p4#5 e la puterea #, pentru # ntreg sau real
sin4#5 sinusul lui #
cos4#5 cosinusul lui #
arctan4#5 arctangenta din #, unde # este masura unghiului in radiani
ln4#5 logaritm natural din #, # ntreg sau real \ 1
sirt4#5 radical din #, #\R1
succ4i5 succesorul $alorii ordinale i
pred4i5 predecesorul $alorii ordinale
ord4e5 num%rul de ordine al $alorii e n tipul e#presiei ordinale
chr4i5 caracterul de ordin i n tipul 'c7D
odd4i5 funcie logic% cu $aloarea KD:3 dac% i este impar i B7CS3
dac% i este par
5ab.1.4. Func%ii 'ascal prede*inite.

*eci o e#presie aritmetic%, notat% Xe#p-a\, se poate defini astfel6
Xe#p-a\ 66R Xterm\ ] Xe#p-a\ U Xterm\ ] Xe#p-a\ - Xterm\
________________________________________________________________________________
7;
Structuri de date i algoritmi
_______________________________________________________________________________
unde
Xterm\ 66R Xfactor\ ] Xterm\ V Xfactor\ ] Xterm\ W Xfactor\ ] Xterm\ *(< Xfactor\ ]
Xterm\ 98* Xfactor\
iar
Xfactor\ 66R Xconstant% numeric% f%r% semn\ ]
X$aria"il% de tip numeric\ ]
Xelement de ta"lou de tip numeric\ ]
Xfuncie de tip numeric\ ]
4 Xe#p-a\ 5 ]
4 -Xe#p-a\ 5
9enion%m c% prioritatea operaiilor este cea cunoscut% i folosit% n matematic%& Pentru a
indica o alt% ordine se $or folosi parante+ele& *e asemenea, menion%m c% e#presiile aritmetice
definite mai sus pot fi precedate de operaia unar% -, cu semnificaia cunoscut% din matematic%&
Kipul unei e#presii aritmetice este ntreg dac% toi operan+ii sunt ntregi i e#presia nu
conine operatorul W& *ac% ns% e#presia conine acest operator, sau dac% e#ist% cel puin un operand
de tip real, atunci tipul e#presiei este real&
)n e$aluarea unei e#presii aritmetice se calculea+% mai nt!i toi operan+ii& 8 su"e#presie
aritmetic% este tot un operand& )n e$aluarea ei se procedea+% ca la o e#presie aritmetic%> deci dac%
toi operan+ii sunt ntregi i operaiile sunt definite n tipul ntreg atunci re+ultatul este ntreg&
7stfel, $aloarea e#presiei 5 di$ 2 U 1&1 este num%rul real 3&1 i nu 3&5, ntruc!t primul
operand al adun%rii are $aloarea ntreag% 2 deoarece 5 di$ 2 este o e#presie de tip ntreg&

1.3.3.".37& Expresii rela%ionale
3#presia relaional% are scopul de a permite scrierea n Pascal a unor relaii matematice
care pot fi ade$%rate sau false& 3a are forma
Xe1\ Xop&rel&\ Xe2\
unde Xe1\ i Xe2\ sunt e#presii care au acelai tip ordinal, sau au tipul real, sau sunt
elemente de acelai tip n care s-a definit operaia relaional% Xop&rel&\, iar
Xop&rel&\ 66R X k XR k R k \ k \R k X\
<aloarea e#presiei relaionale de mai sus este KD:3 dac% ntre $alorile e#presiilor Xe1\ i
Xe2\ are loc relaia indicat% i este B7CS3 n ca+ contrar& *e fapt aceste sim"oluri notea+% relaiile
cunoscute din matematic%&
7tenie ns% la relaia de egalitate ntre dou% numere reale& *in cau+a unor apro#im%ri
calculele cu numere reale nu sunt e#acte& *e e#emplu, dac% #RiW3, e#presia relaional% # R #V3
poate fi fals% ntruc!t, din cau+a repre+ent%rii interne calculele cu numere reale nu sunt e#acte, iar
#V3 nu este o $aloare ntreag% ci o $aloare real% foarte apropiat% de i dar, totui, diferit% de i&
Kot ca e#emplu, menion%m c% dac% 7 i J sunt dou% mulimi de acelai tip atunci e#presia
7 R J $a a$ea $aloarea logic% KD:3 n ca+ul c!nd mulimile 7 i J sunt egale i B7CS3 n ca+
________________________________________________________________________________
70
Structuri de date i algoritmi
_______________________________________________________________________________
contrar&

1.3.3.".47& Expresii logice

3#presia logic% este o e#presie Pascal n care operatorii pot fi operatori logici "inari6
7?* pentru con.uncia logic%>
8D pentru dis.uncia logic%,
iar operan+ii pot fi6
- constante logice>
- $aria"ile de tip logic>
- elemente de ta"lou de tip logic>
- funcii logice>
- e#presii relaionale>
- su"e#presii logice, adic% e#presii logice nchise ntre parante+e>
- negaia unui operand logic din cei de mai sus, deci ?8K Xoperand logic\>
- e#presia # in 9 unde 9 este o mulime i # o $aria"il% a$!nd tipul de "a+% al mulimii 9&
)n determinarea $alorii unei e#presii logice se e$aluea+% mai nt!i operan+ii i apoi
operaiile logice "inare n ordinea priorit%ii lor6 mai nt!i con.unciile logice 4operaiile 7?*5 i
apoi dis.unciile logice 4operaiile logice 8D5& 8peraiile logice cu aceeai prioritate se e$aluea+% de
la st!nga spre dreapta n ordinea scrierii lor&
9enion%m c% este necesar ca toi operan+ii s% fie definii, altfel este posi"il ca e$aluarea
unei e#presii logice s% se termine cu eroare& 7stfel, n e#presia logic% 4iXR115 7?* 4#/i2\15
este posi"il s% a.ungem la o eroare dac% # are doar 11 componente i i are $aloarea 11, ntruc!t
#/112 nu este definit, deci al doilea operand nu are sens& :nele implement%ri nu mai e$aluea+% al
doilea operand n ca+ul n care primul operand este B7CS3, $aloarea e#presiei fiind n acest ca+
B7CS3&
*e asemenea, menion%m c% ntr-o e#presie logic% n care apar operatorii U i 7?*, ultimul
considerat mai prioritar dec!t primul, este posi"il s% se scrie e#presii f%r% sens& 7stfel, e#presia 1 X
7UJ 7?* ' X * este interpretat% ca i e#presia 1 X 7U4J 7?* '5 X * care nu are sens& *e
aceea se cere ca, n astfel de ca+uri, s% se foloseasc% parante+ele pentru preci+area priorit%ii
operaiilor&

1.3.3.".57& $eclara%ii 'ascal

________________________________________________________________________________
;1
Structuri de date i algoritmi
_______________________________________________________________________________
)ntr-un program Pascal tre"uie preci+ate toate $aria"ilele i denumirile sim"olice nainte de
a le folosi& Spunem c% o entitate este declarat% atunci c!nd ea apare ntr-o declaraie Pascal, n care
se preci+ea+% tipul ei, e$entual alte informaii despre ea, utile at!t programatorului c!t i
compilatorului& *eci, orice o"iect pe care dorim s%-l folosim ntr-un program Pascal tre"uie mai
nt!i declarat n partea de declaraii a programului&
*up% o"iectele pe care le repre+int% deose"im urm%toarele declaraii Pascal6
- declaraii de etichete>
- declaraii 4definiri5 de constante>
- declaraii 4definiri5 de tipuri>
- declaraii de $aria"ile>
- declaraii de su"programe&
*eci
Xdecl\ 66R Xdef-et\ k Xdef-const\ k Xdef-tip\ k Xdef-$ar\ kXdef-su"p\
*ei nu este o"ligatoriu s% le nt!lnim pe toate n aceeai unitate de program, atunci c!nd
sunt pre+ente ele tre"uie scrise respect!nd ordinea enumer%rii de mai sus& *e asemenea, n lim"a.ul
Pascal standard ntr-o unitate de program fiecare declaraie poate apare cel mult odat%& Cim"a.ul
Kur"o Pascal a renunat la aceste restricii&
)n definiia sintactic% a unui program Pascal s-a folosit metasim"olul Xlista-decl\& 3$ident,
elementele acestei liste sunt declaraii, separatorul folosit fiind caracterul H>H &
*ei e#ist%, nu $om folosi declaraia de etichete& Programarea structurat% pretinde
renunarea la instruciunea A8K8, instruciune care cere folosirea etichetelor& Prin e#emplele care
le d%m ar%t%m c% acest lucru, de altfel demonstrat, este posi"il& )n consecin%, nici nu o $om
pre+enta n acest te#t&
O9+ 3.: 3$it% s% foloseti instruciunea A8K8&

1.3.3.".6.& *efinirea constantelor

Prin metasim"olul Xdef_const\ am notat o definire de constante cu nume, care are sinta#a
'8?SK Xid\ R Xconstanta\ E > Xid\ R Xconstanta\ F
unde Xid\ este un identificator care $a nota numele constantei definite, iar constanta care urmea+%
$a preci+a $aloarea constantei definite& 3a poate fi numeric%, "oolean%, sau un ir de caractere& *e
e#emplu6
'8?SK
P( R 3&141502653>
8D*(? R 5> ? R 4>
97D'7 R H&&&H
________________________________________________________________________________
;1
Structuri de date i algoritmi
_______________________________________________________________________________
definete o constant% cu numele P( i $aloarea preci+at% dup% semnul egal, alte dou% constante cu
numele 8D*(? i $aloarea 5, respecti$ cu numele ? i $aloarea 4 i constanta cu numele 97D'7
cu $aloarea egal% cu stringul p p, compus din trei puncte&
*efinirea unei constante este necesar% atunci c!nd ne referim la ea n mai multe p%ri ale
programului, pentru a prescurta scrierea, sau pentru a permite modificarea ulterioar% uoar% a
programului& *eci
O9+. 4: Folose?te constante cu nume &n locul celor anonime.


1.3.3.".. $e*inirea tipurilor
*eclaraia Xdef-tip\ de definire a unor tipuri noi are sinta#a

K_P3 Xid\ R Xtip\ E > Xid\ R Xtip\ F
unde Xid\ este un identificator ce repre+int% numele tipului definit, iar Xtip\ este un tip definit cu
a.utorul tipurilor de.a cunoscute 4predefinite, sau definite anterior de utili+ator5& *e e#emplu, prin
declaraia6
K_P3 domindici R 1&&12
se definete un tip cu numele domindici care este un su"domeniu al lui (?K3A3D, format din toate
numerele ntregi cuprinse intre cele dou% limite menionate, 1, respecti$ 12&

1.3.3.".. $eclararea ,ariabilelor

Koate $aria"ilele folosite ntr-un program Pascal tre"uie declarate nainte de a fi folosite&
*eclaraia de $aria"ile, notat% prin metasim"olul Xdef-$ar\, are sinta#a
<7D Xlista-id\ 6 Xtip\ E > Xlista-id\ 6 Xtip\ F
unde Xlista-id\ este o list% de identificatori, iar Xtip\ este un tip predefinit sau definit de
utili+ator& Prin ea se declar% toate $aria"ilele din lista de identificatori Xlista-id\ ca a$!nd tipul
preci+at dup% caracterul H6H& *e e#emplu, prin
<7D 9, ?, (, P, f6 (?K3A3D>
Y, _, Q6 D37C
se declar% cinci $aria"ile de tip ntreg, a$!nd numele 9, ?, (, P i f i trei $aria"ile de tip real cu
numele Y, _, i Q& Prin declaraia
<7D 76 7DD7_/1&&02 8B D37C
se declar% un $ector 7 cu nou% componente& Kipul $aria"ilei 7, cel de =$ector cu 0 componente
reale=, este un tip anonim i nu mai poate fi folosit n alt% parte a programului Pascal& 'hiar i n
________________________________________________________________________________
;2
Structuri de date i algoritmi
_______________________________________________________________________________
aceeai declaraie de $aria"ile folosirea aceleai construcii pentru a defini $aria"ila J tot =$ector cu
0 componente reale= se consider% diferit% de prima& *e e#emplu prin declaraia
<7D 76 7DD7_/1&&02 8B D37C>
J6 7DD7_/1&&02 8B D37C
s-au declarat doi $ectori, dar care se consider% c% nu au acelai tip, spre deose"ire de declaraia
<7D ', * 6 7DD7_/1&&02 8B D37C
prin care s-au definit dou% $aria"ile de acelai tip&
7stfel se impune o regul% important% n programare6
O9+. 1.5: Folose?te tipuri de date cu nume &n locul celor anonime.
Despectarea acestei reguli conduce, pe l!ng% cele ar%tate mai sus, la creterea clarit%ii
te#tului i a posi"ilit%ii de modificare a te#tului surs% 4schim"area structurii marcat% prin acest
nume se poate face ntr-un singur loc, cel al definirii ei5&
<aria"ilele i celelalte elemente declarate ntr-o procedur% sunt locale n aceast% procedur%,
deci pot fi folosite n orice instruciune a procedurii, dar nu i n afara ei& *e asemenea, ele pot fi
folosite n orice alt% procedur% declarat% n interiorul acestei proceduri, ele fiind $aria"ile glo"ale
pentru acestea, aa cum se $a ar%ta n seciunea 4&3&3&

1.3.3.".!. Instruc%iuni 'ascal
3#ist% mai multe instruciuni Pascal, toate notate prin metasim"olul Xins\& 3#ist%
instruciuni Pascal simple n interiorul c%rora nu se afl% alte instruciuni i instruciuni structurate,
compuse din alte instruciuni& *eci
Xins\ 66R Xins_simple\ k Xins_structurate\
unde
Xins_simple\ 66R Xins_atri"uire\ k Xins_$id%\ k Xapel_procedur%\
iar
Xins_structurate\ 66R Xins_compus%\ k Xins_condiionale\ k Xins_iterati$e\
7ceste instruciuni $or fi pre+entate n continuare&

1.3.3.".". Instruc%iunea de atribuire
(nstruciunea de atri"uire are scopul de a atri"ui $alori unor $aria"ile& 3a are sinta#a
Xins_atri"uire\ 66R X$aria"ila\ 6R Xe#presie\
unde X$aria"ila\ i Xe#presie\ sunt de acelai tip, e#cept!nd c!te$a ca+uri menionate mai .os&
Kipurile tv i te ale elementelor X$aria"ila\ i Xe#presie\ pot fi ntreg, real, "oolean, enumerare sau
orice tip structurat cunoscut n programul n care apare instruciunea, cu e#cepia tipului fiier&
(nstruciunea cere mai nt!i e$aluarea e#presiei din partea dreapt% a semnului de atri"uire
=6R=& *ac% tv i te sunt identice atunci $aloarea e#presiei este atri"uit% $aria"ilei din st!nga
semnului de atri"uire& *ac% aceste tipuri difer% atunci se semnalea+% eroare, e#cept!nd patru ca+uri
________________________________________________________________________________
;3
Structuri de date i algoritmi
_______________________________________________________________________________
care $or fi pre+entate n continuare6
15 7stfel, dac% te este (?K3A3D iar tv este D37C atunci se con$ertete $aloarea ntreag% a
e#presiei ntr-o $aloare real% care se atri"uie $aria"ilei&
25 *ac% tv i te sunt tipuri enumerare sau su"domeniu cu acelai tip de "a+% i dac% $aloarea
e#presiei aparine tipului tv, aceast% $aloare se atri"uie $aria"ilei&
35 *ac% tv i te sunt mulimi atunci este posi"il ca unul sau am"ele tipuri s% fie su"domenii
ale aceluiai tip ordinal& 7tri"uirea este permis% dac% $alorile din mulimea re+ultat sunt incluse n
tipul de "a+% al $aria"ilei din st!nga semnului de atri"uire&
45 7 patra e#cepie se refer% la tipul SKD(?A> tv i te put!nd fi tipuri SKD(?A diferite&
7tri"uirea este corect% dac% $aloarea ei se poate atri"ui $aria"ilei din st!nga atri"uirii&
Sintactic, n partea st!ng% a semnului de atri"uire, X$aria"ila\ poate fi o $aria"il% simpl%
sau o component% a unui ta"lou sau alt tip de dat% structurat%& *e asemenea, ea poate fi un ta"lou
atunci c!nd i n partea dreapt% este un ta"lou de acelai tip& )n acest ca+ prin 7 6R J, se nelege o
scriere condensat% a atri"uirilor 7/i26RJ/i2 pentru toate $alorile indicelui i aflate n tipul de inde#
folosit n definirea ta"lourilor 7 i J&
)n general, este posi"il% atri"uirea 7 6R J c!nd i 7 i J sunt $aria"ile de acelai tip& )n toate
ca+urile se cere ca partea dreapt% a atri"uirii s% ai"% o $aloare anterioar%, altfel $om spune c%
$aria"ila J este neiniiali+at%, iar atri"uirea $a conduce la erori logice n e#ecuia programului&

1.3.3.".1#. Instruc%iunea compus) ?i instruc%iunea ,id)

)n definirea unor instruciuni structurate sau a construciei X"loc\ din seciunea 2&1&2, se
cere folosirea unei singure instruciuni, aa cum se $a $edea n continuare& Pentru a putea include n
aceste locuri grupuri de instruciuni, n Pascal este posi"il s% definim o succesiune de instruciuni ca
o singur% entitate& 7ceast% entitate se numete instruciune compus% i are sinta#a
J3A(?
Xins\>
EXins\ F
3?*
)n lim"a.ul Pascal caracterul H>H separ% dou% instruciuni> el nu are rolul de a marca sf!ritul
acestora& 7desea ns% nt!lnim caracterul H>H n faa cu$!ntului 3?*& )n acest ca+ se consider% c%
ntre H>H i 3?* se afl% o instruciune $id%6
Xins-$id%\ 66R
(nstruciunea $id% are efect nul i n ca+ul menionat mai sus ea nu este necesar%& 3ste
posi"il s% nt!lnim situaii n care a$em ne$oie de aceast% instruciune& *e e#emplu, dac% la
ndeplinirea unei condiii dorim s% mergem la sf!ritul programului f%r% a mai e#ecuta nimic, $om
face un salt la o instruciune $id%, ultima instruciune din programul respecti$&
Su"liniem ns% c% este inter+is% folosirea instruciunii $ide, deci i a caracterului H>H n faa
cu$!ntului 3CS3&
________________________________________________________________________________
;4
Structuri de date i algoritmi
_______________________________________________________________________________

1.3.3.".11. /itirea ?i scrierea datelor

Pentru transferul datelor ntre memoria intern% i suportul e#tern de date se folosesc
procedurile D37* i oD(K3& *ei procedurile $or fi pre+entate mai t!r+iu, preci+%m semnificaia
acestor dou% proceduri pentru a putea da n continuare e#emple complete de programe Pascal&
Procedura D37* se folosete pentru transferul datelor n memoria intern%& Sinta#a apelului
acestei proceduri este6
D37* 4 Xlista-$ar\ 5
unde Xlista-$ar\ este o list% de $aria"ile care pot a$ea unul din tipurile ntreg, real, sau caracter&
3fectul acestui apel este de atri"uire a unei $alori fiec%rei $aria"ile pre+ente n lista de
$aria"ile& <alorile se iau de pe suportul e#tern ncep!nd din punctul n care s-a a.uns dup% citirea
anterioar%& <alorile sunt astfel luate nc!t s% corespund% tipului $aria"ilei corespun+%toare& *ac%
acest lucru nu este posi"il atunci se $a semnala o eroare n e#ecuie&
'a e#emplu, dac% Y este o $aria"il% de tip ntreg iar : i < sunt $aria"ile de tip caracter,
instruciunea
D37*4Y, :, <5
cere atri"uirea unei $alori ntregi $aria"ilei Y i a c!te o $aloare caracter $aria"ilelor : i
<& *ac% pe suportul e#tern se afl% 125 7 atunci Y $a primi $aloarea 125, $aria"ila : $a primi
$aloarea H H 4caracterul "lanc5, iar < $a primi $aloarea H7H& *ac% ns% suportul e#tern conine 12&4 7
e#ecuia se $a termina cu eroare ntruc!t $aloarea 12&4 nu are tipul ntreg&
Kot cu eroare se $a termina e#ecuia c!nd pe suportul e#tern a$em K3YK 25 ntruc!t prima
$aloare nt!lnit% nu este un num%r ntreg&
Procedura oD(K3 asigur% transferul informaiei din memoria intern% pe suportul e#tern&
7pelul procedurii are forma
oD(K3 4 Xlista-,rite\ 5
unde Xlista-,rite\ este o list% de e#presii Pascal de orice tip&
3fectul acestui apel este tip%rirea $alorilor e#presiilor din Xlista-,rite\& Jineneles c%
pentru a tip%ri aceste $alori se $or e$alua mai nt!i e#presiile pre+ente n list%& <alorile e#presiilor
sunt tip%rite dar nu sunt reinute n memorie i nu pot fi folosite n alte instruciuni din program&
*ac% dorim s% folosim $aloarea unei e#presii i n alte instruciuni atunci o $om atri"ui mai nt!i
unei $aria"ile i $om folosi aceast% $aria"il% at!t n Xlista-,rite\ c!t i n celelalte instruciuni&
Pentru a nelege mai "ine procesul de introducere i e#tragere a datelor $om folosi
noiunea de nregistrare& Prin nregistrare $om nelege informaia pe care o transfer% la un moment
dat o unitate periferic%& 7stfel, pentru un cititor de cartele o nregistrare era o cartel% perforat%&
Pentru imprimant% o nregistrare $a fi un r!nd al h!rtiei de scris 4listingului5, a c%rei lungime
depinde de imprimanta folosit% 4de o"icei ;1 sau 132 de caractere5& Pentru un calculator personal o
nregistrare $a fi un r!nd al ecranului, sau o succesiune de caractere de lungime $aria"il%, terminat%
cu un caracter special 38C? 4de la 3nd 8f Cine5&
________________________________________________________________________________
;5
Structuri de date i algoritmi
_______________________________________________________________________________
Pe suportul e#tern datele de transferat se afl% scrise, sau $or fi tip%rite pe o succesiune de
nregistr%ri& Ca procedurile D37* i oD(K3 atunci c!nd se epui+ea+% o nregistrare se ncepe o alt%
nregistrare& 7deseori este ns% necesar s% se treac% la o alt% nregistrare nainte de a fi epui+at%
precedenta& Pentru aceasta se pot folosi procedurile D37*C? i oD(K3C?, care au sinta#a i
semnificaia procedurilor D37*, respecti$ oD(K3, dar cer n plus ca la terminarea e#ecuiei lor s%
se treac% la nceputul unei noi nregistr%ri&

1.3.3.".12. Instruc%iuni condi%ionale

3#ist% dou% instruciuni Pascal care permit e#ecuia unor instruciuni n funcie de
ndeplinirea unor condiii6 instruciunile (B i '7S3&

1.3.3.".12.1& Instruc%iunea IF
(nstruciunea (B are sinta#a
(B Xcond\ Kc3? Xins1\
sau
(B Xcond\ Kc3? Xins1\ 3CS3 Xins2\
unde Xcond\ este o e#presie logic% iar Xins1\ i Xins2\ sunt instruciuni Pascal& Su"liniem c% dup%
cu$!ntul Kc3? i n faa cu$!ntului 3CS3 nu poate fi scris caracterul H>H, deci nu poate apare o
instruciune $id%&
)n am"ele $ariante instruciunea cere mai nt!i e$aluarea e#presiei logice Xcond\& *ac%
$aloarea o"inut% este KD:3 atunci se e#ecut% instruciunea Xins1\ cu care se ncheie e#ecuia
instruciunii (B& *ac% $aloarea o"inut% este B7CS3 atunci, n ca+ul $ariantei a doua se e#ecut%
instruciunea Xins2\, iar n ca+ul primei $ariante nu se e#ecut% nimic&
7ceast% instruciune permite scrierea in Pascal a structurilor alternati$e i este echi$alent%
ca semnificaie cu propo+iia Pseudocod6

*ac% Xcond\ atunci Xins1\
altfel Xins2\
Sfdac%
'a un prim e#emplu, pentru a efectua atri"uirea <6R
B
n Pascal putem scrie6
(B Y X 1 Kc3? < 6R -Y 3CS3 < 6R Y
Exemplul 21: 3#emplu de re+ol$are a ecuaiei de gradul 2&
7lgoritmul 3cgr2 este6
'itete a, ", c>
________________________________________________________________________________
;6
Structuri de date i algoritmi
_______________________________________________________________________________
Bie d 6R "V" - 4VaVc
*ac% d X 1 atunci aod 6R 1
altfel aod 6R 1> r 6R radical din d
#1 6R 4-"-r5W4aUa5> #2 6R 4-"Ur5W4aUa5
sfdac%
*ac% aod R 1 atunci Kipareste4H3c& nu are rad& realeH5
altfel Kipareste4HDadacinile ec& sunt6H, #1, #25
sfdac%
sf-3cgr2

Programul Pascal corespun+%tor este urm%torul6
PD8AD79 3cgr2> E Programul 4&26 De+ol$areaF
Eecuatiei de gradul 2F
<7D a, ", c, E'oeficienii ecuaieiF
d, E*iscriminantul ecuaieiF
r, E$aria"il% de lucruF
#1, #26 D37C> ED%d%cinileF
aod6 (?K3A3D> Eaod R1 pt& r%d&reale, 1_comple#eF
J3A(?
oD(K3C?4HSe re+ol$a ecuatia de gradul doiH5>
oD(K3C?4H*ati coeficientii a, ", cH5> D37*C?4a, ", c5>
d 6R "V" - 4VaVc>
(B d X 1 Kc3?
aod 6R 1
3CS3
J3A(?
aod 6R 1> r 6R sirt4d5>
#1 6R 4-"-r5W4aUa5>
#2 6R 4-"Ur5W4aUa5
3?*>
(B aod R 1
Kc3? oD(K34H3c& nu are radacini realeH5
3CS3
oD(K34HDadacinile ecuatiei sunt6H, #1, #25>
________________________________________________________________________________
;7
Structuri de date i algoritmi
_______________________________________________________________________________
3?*&


1.3.3.".12.2&& Instruc%iunea /;+E
(nstruciunea '7S3 permite selectarea unei instruciuni dintr-o mulime de instruciuni
marcate, n funcie de $aloarea unui selector& Sinta#a instruciunii este
'7S3 Xeo\ 8B
Xlista-c\ 6 Xins\ E >
Xlista-c\ 6 Xins\ F
/ 3CS3 Xins\ 2
3?*
unde Xeo\ este o e#presie de tip ordinal, Xlista-c\ este o list% de constante-case, fiecare
constant%-case a$!nd tipul ordinal al e#presiei Xeo\& )n Xlista-c\ n locul unei constante poate apare
i un su"domeniu c1&&c2 pentru o scriere mai condensat% n ca+ul c!nd constantele sunt consecuti$e&
3#ecuia instruciunii '7S3 cere mai nt!i e$aluarea e#presiei Xeo\, o"in!ndu-se o
$aloare $, care constituie $aloarea selectorului& 7poi se caut% n listele de constante-case constanta
egal% cu $ i se e#ecut% instruciunea a c%rei etichet% este chiar $&
*ac% nu e#ist% nici o instruciune cu eticheta $ atunci, n ca+ul c% este pre+ent cu$!ntul
3CS3 se e#ecut% instruciunea ce urmea+% dup% acest cu$!nt, altfel nu se e#ecut% nici o
instruciune&
Exemplul 22: 'a e#emplu $om scrie un program Pascal care calculea+% $aloarea unei funcii

PD8AD79 <alf> E Programul 26 <aloarea unei funcii F
E (nstruciunea '7S3 F
<7D #, f 6 D37C>
a 6 'c7D>
J3A(?
oD(K3C?4HSe calculea+a f4#,a5& (ntroducei # si aH5>
D37*4a, #5>
'7S3 a 8B
H7H6 f 6R 5V#-;> E ca+ul a R H7H F
HJH6 f 6R sin4#5> E ca+ul a R HJH F
H'H6 f 6R 3V#U1 E ca+ul a R H'H F
3?* E'7S3F>
oD(K34Hf4H, #, H,H, a, H5RH, f5
________________________________________________________________________________
;;
Structuri de date i algoritmi
_______________________________________________________________________________
3?*&

1.3.3.".13.& Instruc%iuni repetiti,e
)n Pascal e#ist% trei instruciuni care permit e#ecuia repetat% a unui grup de instruciuni i
anume instruciunile B8D, oc(C3 i D3P37K&
1.3.3.".13.1. Instruc%iunea FO3
7ceast% instruciune permite e#ecuia repetat% a unei instruciuni n funcie de $aloarea
unui contor& 3a are sinta#a
B8D X$\ 6R Xe1\ K8 Xe2\ *8 Xins\
sau
B8D X$\ 6R Xe1\ *8o?K8 Xe2\ *8 Xins\
7ici X$\ este un identificator de $aria"il% numit% contor, iar Xe1\ i Xe2\ sunt e#presii,
toate trei a$!nd acelai tip ordinal 4deci nu pot a$ea tipul real5& <alorile $i i $f ale e#presiilor Xe1\
i Xe2\ se calculea+% o singur% dat% la nceputul e#ecuiei instruciunii B8D& <aria"ila contor X$\
$a lua $alori ntre limitele $i i $f, cresc%tor dac% n instruciune figurea+% cu$!ntul K8 i
descresc%tor dac% n instruciune figurea+% cu$!ntul *8o?K8& Semnificaia acestei instruciuni
este dat% prin urm%torul algoritm6
I'alculea+% $alorile $i i $f ale e#presiilor e1, respecti$ e2>
*7'M c1 7K:?'(
B(3 $ 6R $i>
D3P3KM
I3#ecut% instruciunea ins>
*7'M c2 7K:?'(
$6Re3
SB*7'M
PN?M'N?* c3 SBD3P
SB*7'M
unde condiiile c1, c2 i c3 i e#presia e3 sunt definite n continuare6

'ondiii K8 *8o?K8
c1 $i eR $f $i \R $f
c2 $ X $f $ \ $f
c3 $ \R$f $ XR $f
________________________________________________________________________________
;0
Structuri de date i algoritmi
_______________________________________________________________________________
e3 este S:''4$5 PD3*4$5
5abelul 6: $e*inirea condi%iilor pentru execu%ia instruc%iunii FO3.

'ontorul $ poate fi folosit n instruciunea Xins\ dar nu este permis% modificarea $alorii
sale& *ei unele implement%ri permit acest lucru, recomand%m s% nu se modifice $aloarea $aria"ilei
contor $ n instruciunea Xins\&
7stfel, n mediul Kur"o-Pascal nu se consider% eroare modificarea $aria"ilei contor, dar
e#ecuia unui astfel de program de$ine impre$i+i"il%& *e e#emplu, e#ecuia urm%toarelor
instruciuni intr% ntr-un ciclu infinit6
Bor i6R1 to 5 do ECa e#ecuia acestui grup se $or tipariF
"egin E intR1, apoi 3, 5, 7, 0, &&& F
,riteln4HintRH,i5> E deci se intra in ciclu infinitF
readln4.5> E in Kur"o 7&1 [ F
i6RiU1>
end
:nii programatori folosesc intenionat, atunci c!nd e posi"il acest lucru, modificarea
$alorii contorului pentru a fora ieirea din ciclu& 8 astfel de programare ncalc% semnificaia
instruciunii B8D i nu este recomanda"il%&
'a un prim e#emplu de folosire a instruciunii B8D d%m un program care tip%rete toi
di$i+orii proprii ai num%rului natural n\2&
Exemplul 23:
PD8AD79 *i$i+ori> E Programul 4&46 *i$i+orii lui n F
<7D n,i 6 (?K3A3D>
J3A(?
oD(K3C?4HSe tiparesc di$i+orii lui nH5>
oD(K34H*ati nRH5> D37*C?4n5>
B8D i6R2 K8 n-1 *8
(B n 98* i R 1 Kc3?
oD(K3C?4i5>
3?*&

1.3.3.".13.2. Instruc%iunea :>I=E
7ceast% instruciune are sinta#a
oc(C3 Xcond\ *8 Xins\
unde Xcond\ este o e#presie logic% iar Xins\ este o instruciune Pascal& Semnificaia instruciunii
________________________________________________________________________________
01
Structuri de date i algoritmi
_______________________________________________________________________________
oc(C3 este aceeai cu a propo+iiei Pseudocod6
')KK(9P Xcond\ 3Y3':KM
Xins\ SB'NK
*eci e#ecuia instruciunii oc(C3 cere urm%toarele6
1& e$aluarea e#presiei logice Xcond\>
2& dac% $aloarea e#presiei este KD:3 atunci se e#ecut% instruciunea Xins\ i se re$ine la
pasul 1, altfel e#ecuia se termin%&
'u alte cu$inte, ea cere e#ecuia repetat% a unei instruciuni Pascal n funcie de $aloarea de
ade$%r a unei e#presii logice& *ac% iniial e#presia logic% este fals% e#ecuia instruciunii respecti$e
nu $a a$ea loc niciodat%&
'a e#emplu, $om transcrie n Pascal urm%torul algoritm care g%sete primele n numere
prime 49ocanu, et al& /100325&
Exemplul 23:
Pseudocod6
7lgoritmul PD(93 este6 E*etermina primele n numere primeF
'itete n>
Bie a6R2> p/126R2> p/226R3> i6R5>
'!ttimp aXn e#ecut%
Bie .6R1>
'!ttimp .XRa i 4i mod p/.2 X\ 15 e#ecut%
.6R.U1
sfc!t
*ac% .\a atunci
a6RaU1>
p/a26Ri
sfdac%
i6RiU2>
sfc!t
Kip%rete p/.2, .R1,n>
sf-Prime
Programul Pascal6
PD8AD79 PD(93> E Programul 4&56 'alculea+%
primele n numere prime F
________________________________________________________________________________
01
Structuri de date i algoritmi
_______________________________________________________________________________
<7D n,i,.,a 6 (?K3A3D>
p 6 7DD7_ /1&&2112 8B (?K3A3D>
J3A(?
oD(K3C?4HSe tiparesc primele n numere prime[H5>
oD(K34H*ati nRH5> D37*C?4n5>
a6R2> p/126R2> p/226R3> i6R5>
oc(C3 aXn *8
J3A(?
.6R1>
oc(C3 4.XRa5 7?* 4i mod p/.2 X\ 15 *8
.6R.U1>
(B .\a Kc3?
J3A(?
a6RaU1>
p/a26Ri
3?*>
i6RiU2

3?*>
oD(K3C?4HPrimele H,n,H numere prime sunt6H5>
B8D .6R1 K8 n *8 oD(K3C?4H p4H,.,H5RH,p/.25
3?*&

1.3.3.".13.3. Instruc%iunea 3E'E;5
7ceast% instruciune permite e#ecuia repetat% a unui grup de instruciuni& 3a are sinta#a
D3P37K Xins\ E > Xins\ F :?K(C Xcond\
unde Xins\ este o instruciune Pascal, iar Xcond\ este o e#presie logic%& (nstruciunea este
echi$alent% cu urm%toarea propo+iie Pseudocod6
D3P3KM
Xins\ E Xins\ F
PN?M'N?* Xcond\ SBD3P
*eci semnificaia instruciunii este urm%toarea6
1& se e#ecut% instruciunile scrise ntre cu$intele D3P37K i :?K(C>
________________________________________________________________________________
02
Structuri de date i algoritmi
_______________________________________________________________________________
2& se e$aluea+% e#presia logic% Xcond\& *ac% $aloarea e#presiei este KD:3 atunci e#ecuia
se termin%, altfel se re$ine la pasul 1&
'a e#emplu de folosire a instruciunii D3P37K $om transcrie n Pascal urm%torul algoritm
pentru ordonarea descresc%toare a unui ir de numere reale&
Exemplul 24:
Pseudocod6
7lgoritmul 8rdon este6 E8rdonea+% descresc%torF
Enumerele #/12, &&& , #/n2F
'itete n, 4#/i2,iR1,n5>
Depet% a6R1>
Pentru i6R1,n-1 e#ecut%
*ac% #/i2X#/iU12 atunci
a6R1>
t6R#/i2>
#/i26R#/iU12>
#/iU126Rt>
sfdac%
sfpentru
p!n%c!nd aR1 sfrep
Kip%rete #/i2,iR1,n>
sfalgoritm

Programul Pascal corespun+%tor este6
PD8AD79 8rdon> EProgramul 4&66 8rdonarea unui sir de numereF
<7D t 6 D37C>
n,i,a 6 (?K3A3D>
# 6 7DD7_ /1&&1112 8B D37C>
J3A(?
oD(K3C?4HSe ordonea+% o sec$enta de numere realeH5>
oD(K34H?r&termenilorRH5> D37*C?4n5>
oD(K3C?4H*ati termeniiH5>
B8D i6R1 K8 n *8
D37*4#/i25>
oD(K3C?>
________________________________________________________________________________
03
Structuri de date i algoritmi
_______________________________________________________________________________
oD(K3C?4HSirul initial este6H5>
B8D i6R1 K8 n *8
oD(K34#/i26;615>
D3P37K
a6R1>
B8D i6R1 K8 n-1 *8
(B #/i2 X #/iU12 Kc3?
J3A(?
a6R1>
t6R#/i2>
#/i26R#/iU12>
#/iU126Rt
3?*>
:?K(C aR1>
oD(K3C?4H Sirul ordonat este6H5>
B8D i6R1 K8 n *8
oD(K34#/i26;625>
3?*&

1.3.3.1#. +ubprograme 'ascal

Su"programele n Pascal corespund su"programelor din Pseudocod& Dolul i importana lor
sunt cele de.a menionate n capitolul doi& (mportana su"programelor n programare a fost de.a
su"liniat% n capitolul trei& )n scopul refolosirii su"algoritmilor i su"programelor e "ine ca pentru
orice pro"lem% s% descriem un su"algoritm pentru re+ol$area ei&
Obs. @x: 'oncepe su"algoritm i scrie su"program pentru orice pro"lem% care-ar putea fi rent!lnit%
n $iitor&
1.3.3.1#.1. +intaxa subprogramelor 'ascal
'a i n alte lim"a.e de programare i n lim"a.ul Pascal e#ist% dou% tipuri de su"programe6
funcii i proceduri& *efinirea acestor su"programe n cadrul unui program Pascal se face n partea
de declaraii& 7$em
Xdef-su"program\ 66R Xdef-funcie\ ] Xdef-procedur%\
________________________________________________________________________________
04
Structuri de date i algoritmi
_______________________________________________________________________________
unde Xdef-funcie\ 66R Xantet-funcie\ > X"loc\
Xdef-procedur%\ 66R Xantet-procedur%\ > X"loc\
iar
Xantet-funcie\ 66R B:?'K(8? Xid\ / 4l&p&f&5 2 6 Xtipf\
Xantet-procedur%\ 66R PD8'3*:D3 Xid\ / 4l&p&f&5 2
)n aceast% sinta#% Xid\ este un identificator care constituie numele su"programului definit&
Cista parametrilor formali Xl&p&f&\ este opional% i ea preci+ea+% $aria"ilele de care depinde
su"programul i tipul acestor $aria"ile&

1.3.3.1#.2. =ista parametrilor *ormali

Cista parametrilor formali este format% din mai multe seciuni de parametri separate ntre
ele de caracterul H>H& Sinta#a acestei liste este6
Xl&p&f&\ 66R Xspf\ E > Xspf\ F
unde prin Xspf\ s-a notat o seciune de parametri formali, seciune care are sinta#a
Xspf\ 66R Xsp-$al\ ] Xsp-$ar\ ] Xpf-funcie\ ] Xpf-procedur%\
*in punct de $edere sintactic seciunea de parametri $aloare Xsp-$al\ este orice list% de
identificatori urmat% de caracterul H6H i de un identificator de tip care $a fi tipul tuturor
identificatorilor din lista de identificatori& *eci
Xsp-$al\ 66R Xlista-id\ 6 Xid-tip\
Seciunea de parametri $aria"il% Xsp-$ar\ are sinta#a
Xsp-$ar\ 66R <7D Xlista-id\ 6 Xid-tip\
unde Xid-tip\ este un identificator de tip, definit anterior, deci asem%n%toare seciunii parametrilor
$aloare, singura diferen% fiind pre+ena cu$!ntului <7D n faa listei&
9enion%m c% identificatorii care notea+% parametrii formali nu pot fi declarai din nou n
partea de declaraii a su"programului& 3i se consider% declarai i pot fi folosii n tot su"programul,
ca orice alt% $aria"il% local% definit% n su"program&
'a semnificaie, parametri formali notea+% datele de intrare 4cele presupuse cunoscute5 i
datele de ieire 4re+ultate5 ale su"programului& 3i sunt chiar parametrii formali din definiia
su"algoritmilor corespun+%tori&

1.3.3.1#.3. Aariabile locale ?i ,ariabile globale

)n definiia unui su"program apare la nceput un antet, dup% care urmea+% un "loc& *eci
su"programul are o structur% similar% unui program& S% ne reamintim c% un "loc const% din dou%
p%ri6 o list% de declaraii i o instruciune compus%& 3lementele definite n lista de declaraii sunt
locale pentru "locul n care sunt definite& 7cesta constituie domeniul de $i+i"ilitate al acestor
________________________________________________________________________________
05
Structuri de date i algoritmi
_______________________________________________________________________________
elemente> ele pot fi folosite numai n interiorul su"programului n care au fost declarate, nu i n
afara acestuia&
Bie S un su"program al programului P& Pe l!ng% $aria"ilele locale ale su"programului S
toate elementele declarate n lista de declaraii ale programului P sunt considerate glo"ale pentru
su"programul S i pot fi folosite n acest su"program& *eci elementele declarate n S pot fi folosite
numai n S, nu i n restul programului P& 3le sunt locale pentru S, dar sunt glo"ale i pot fi folosite
n su"programele S1 i S2 incluse n S& 3lementele definite n P sunt glo"ale i pot fi folosite n S,
S1 i S2&
'onsider!nd programul principal ca un "loc de ni$el 1, $om considera su"programele
definite n el ca "locuri de ni$el 1& )n general, un "loc definit ntr-un "loc de ni$el i are ni$elul iU1&
*ac% ntr-un "loc de ni$el i se folosete o $aria"il% $ i acelai identificator $ notea+% o
$aria"il% ntr-un "loc de ni$el iU1, cele dou% $aria"ile se consider% distincte dei au acelai nume& )n
acest ca+ $aria"ila din "locul interior este cea considerat% e#istent% n acest "loc, iar cea e#terioar%
nu e#ist% dec!t n partea "locului de ni$el i e#terioar% "locului de ni$el iU1&
'a e#emplu, s% consider%m programul 4&0 din seciunea 4&3&6& )n procedura S1 se folosete
$aria"ila local% #& *ar i n programul principal se folosete o $aria"il% glo"al% cu numele #&
)ntruc!t procedura S1 folosete $aria"ila local% cu numele #, $aria"ila glo"al% # i pierde
semnificaia n interiorul acestei proceduri 4n care e#ist% o $aria"il% local% cu numele #5& 'ele dou%
$aria"ile 4cu acelai nume #5 au re+er$ate locaii de memorie distincte i, n consecin%, sunt
distincte& '!t pri$ete folosirea $aria"ilelor glo"ale recomand%m

Obs. @x: 0u *olosi%i ,ariabile globale decBt &n ca(uri speciale.

1.3.3.11. Func%ii 'ascal
7m $%+ut c% definiia unei funcii const% dintr-un antet i dintr-un "loc care $a defini
aciunile prin care se calculea+% $aloarea funciei& )n antet se preci+ea+% numele funciei, lista
parametrilor formali i tipul funciei, Xtipf\& 7cesta tre"uie s% fie un nume de tip referin%, sau un
tip simplu&
3ste necesar ca n instruciunile din corpul X"loc\ al funciei s% e#iste cel puin o atri"uire
prin care identificatorului Xid\ s% i se atri"uie o $aloare&
7pelul unei funcii se face scriind ntr-o e#presie numele funciei urmat de lista
parametrilor actuali& Kre"uie s% e#iste o coresponden% "iuni$oc% ntre parametrii actuali i cei
formali folosii n definiia funciei& *ac% nu au e#istat parametri formali n definiie atunci apelul se
face scriind doar numele funciei& *espre corespondena dintre parametrii formali i parametrii
actuali $om $or"i n seciunea 4&3&6&
'a e#emplu d%m n continuare un program care folosete un su"program de tip funcie
pentru a o"ine num%rul +ilelor lunii cu num%rul de ordine i pentru a calcula a c!ta +i din anul curent
este +iua curent% 4+i, luna, an5&
Se folosesc dou% funcii6
________________________________________________________________________________
06
Structuri de date i algoritmi
_______________________________________________________________________________
- ?DQ(C34i5 furni+ea+% num%rul +ilelor e#istente n luna i>
- J(S3'K4an5 ade$%rat% dac% anul dintre parante+e este "isect&
Exemplul 25:
7lgoritmul n Pseudocod este urm%torul6

7CA8D(K9:C ?:9MD_Q(C3 3SK36
'(K3LK3 +i, luna, an>
B(3 nr 6R +i>
*7'M luna \ 1 7K:?'(
P3?KD: i 6R 1, luna-1 3Y3':KM
nr 6R nr U ?DQ(C34i5
SBP3?KD:
SB*7'M
*7'M luna \ 2 7K:?'(
*7'M J(S3'K4an5 7K:?'(
nr 6R nr U 1
SB*7'M
SB*7'M
K(PMD3LK3 nr>
SB7CA8D(K9

Programul Pascal corespun+%tor este urm%torul6
PD8AD79 7P3CB:?'K(3> E Programul 4&7 3#emplu de funcii PascalF
<7D +i, luna, an, E 7ceste $aria"ile conin data curent% F
nr6 (?K3A3D> E nr $a fi re+ultatul cerut F
B:?'K(8? ?DQ(C34i6 (?K3A3D56 (?K3A3D> EBurni+ea+a numarul +ilelorF
Elunii cu numarul iF
J3A(?
'7S3 i 8B
26 ?DQ(C3 6R 2;>
4, 6, 0, 116 ?DQ(C3 6R 31>
1, 3, 5, 7, ;, 11, 126 ?DQ(C3 6R 31
3?* E'7S3F
3?*> E?r+ileF
________________________________________________________________________________
07
Structuri de date i algoritmi
_______________________________________________________________________________

B:?'K(8? J(S3'K4a6 (?K3A3D56 J88C37?> E7de$arata daca a este an "isectF
J3A(?
(B a mod 4 R 1 Eand alte cerinteF E$eri$ica daca a este an "isectF
Kc3? J(S3'K 6R KD:3
3CS3 J(S3'K 6R B7CS3
3?*> EJisectF

J3A(? Eprogramul principalF
oD(K3C?4H*ati data curenta&H5>
oD(K34H+iua R H5> D37*C?4+i5>
oD(K34Hluna R H5> D37*C?4luna5>
oD(K34Hanul R H5> D37*C?4an5>
nr 6R +i>
(B luna \ 1 Kc3?
B8D i 6R 1 K8 luna - 1 *8
nr 6R nr U ?DQ(C34i5>
(B luna \ 2 Kc3?
(B J(S3'K4an5
Kc3? nr 6R nr U 1>
oD(K34H*ata4H, +i, H,H, luna, H,H, an, H5 este a H5>
oD(K3C?4nr, H-a +i din anH5>
3?*&

Buncia ?DQ(C3 definit% mai sus este apelat% n partea dreapt% a unei atri"uiri prin scrierea
ei n locul unei e#presii& Ca fel, funcia "oolean% J(S3'K este apelat% prin scrierea ei ntr-o
e#presie logic%&

1.3.3.12. Instruc%iunea apel de procedur)

7pelul unei proceduri se face scriind numele procedurii urmat de lista parametrilor actuali
pe locul unei instruciuni, ceea ce echi$alea+% cu e#ecuia tuturor instruciunilor din "loc&
Xapel-procedur%\ 66R Xid\ / 4Xlista-p&a&\ 2
________________________________________________________________________________
0;
Structuri de date i algoritmi
_______________________________________________________________________________
7pelul unei proceduri are ca efect e#ecuia tuturor instruciunilor procedurii apelate,
consider!nd c% fiecare parametru formal este egal cu parametrul actual corespun+%tor 4a se $edea
seciunea 4&3&65&
*%m un e#emplu de program n care se definesc i se apelea+% proceduri& )n plus,
programul ilustrea+% modul de lucru cu cifrele pri$ite drept caractere, precum i folosirea funciei
8D*&
Se cere s% se tip%reasc% toate numerele ntregi nt!lnite ntr-un ir de caractere care se
termin% prin caracterul HqH&
7lgoritmul de re+ol$are se d% n continuare& 3l folosete un su"algoritm, '(K'(BD74",c5,
care citete un caracter c i atri"uie lui " $aloarea KD:3 dac% c este o cifr%, respecti$ B7CS3 n ca+
contrar&
Exemplul 26:
7lgoritmul n Pseudocod este urm%torul6

7CA8D(K9:C '8?<3DS(( 3SK36
D3P3KM
I'aut% o cifr% Ecu care ncepe un ntregF
I'alculea+% num%rul ntreg format din cifrele consecuti$e nt!lnite&
IKip%rete num%rul g%sit&
PN?M'N?* cRHqH SBD3P
SB7CA8D(K9

Programul Pascal corespun+%tor se d% n continuare&
PD8AD79 '8?<3DS((> E Programul 4&;6 'on$ersii
Ede sec$ente de cifre in intregiF
<7D c6 'c7D>
nr6 (?K3A3D>
"6 J88C37?>

PD8'3*:D3 '(K'(BD74<ar "6 J88C37?> E"RKD:3 daca c esteF
<ar c6 'c7D5> Ecifra> cRcaracterul cititF
J3A(?
D37*4c5> "6R KD:3>
(B 4cXH1H5 8D 4c\H0H5 Kc3?
" 6R B7CS3>
________________________________________________________________________________
00
Structuri de date i algoritmi
_______________________________________________________________________________
3?*>

J3A(? EProgramul principalF
D3P37K
'(K'(BD74", c5>
oc(C3 ?8K4"5 7?* 4cX\HqH5 *8
'(K'(BD74", c5>
(B c X\ HqH Kc3?
J3A(?
nr 6R 1>
D3P37K nr 6R nrV11 U 8rd4c5 - 8rd4H1H5>
'(K'(BD74", c5>
:?K(C ?8K4"5>
oD(K3C?4Hnr& citit R H, nr5
3?*
:?K(C cRHqH
3?*&

1.3.3.13. /oresponden%a dintre parametri actuali ?i *ormali

7pelul unui su"program se face scriind numele acestuia urmat de lista parametrilor actuali&
)ntre parametrii din lista parametrilor actuali i parametrii din lista parametrilor formali tre"uie s%
e#iste o coresponden% "iuni$oc%, iar parametrii care sunt n coresponden% tre"uie s% ai"% acelai
tip& *e fapt, ei tre"uie s% ai"% aceeai semnificaie, s% se refere la acelai o"iect, s% repre+inte
aceeai structur% de date&
Sintactic un parametru actual poate fi o e#presie Pascal, o $aria"il%, un identificator de
procedur% sau un identificator de funcie&

1.3.3.13.1. 'arametri ,aloare
Parametrul actual corespun+%tor unui parametru formal $aloare f poate fi orice e#presie
Pascal e de acelai tip cu parametrul f& Ca apelul su"programului se calculea+% $aloarea e#presiei e
i se atri"uie $aloarea o"inut% parametrului formal f& 9ai e#act, parametrul formal f de tip $aloare
are re+er$at% o locaie de memorie n care se depune $aloarea e#presiei e nainte de a ncepe
e#ecuia instruciunilor su"programului& )n continuare aceast% $aria"il% f este considerat% $aria"il%
local% n su"program& 3a i poate schim"a $aloarea dar aceast% $aloare nu poate fi transmis% n
unitatea de program n care s-a f%cut apelul&
________________________________________________________________________________
111
Structuri de date i algoritmi
_______________________________________________________________________________
9enion%m c% este posi"il ca elementele f i e s% nu ai"% acelai tip& 3#cepiile sunt cele
permise de atri"uirea f 6R e&
*e asemenea, menion%m c% parametrii formali de tip $aloare corespund $aria"ilelor care se
consider% cunoscute la intrarea n su"algoritm 4datelor de intrare5&
Pre+ent%m n continuare un program n care se poate $edea un e#emplu de apel al unui
su"program cu parametri $aloare&
Exemplul 2:
PD8AD79 Par$al> E Programul 4&06 Parametri formali F
<7D #, + 6 (?K3A3D> E de tip $aloare i $aria"ila F

PD8'3*:D3 S14`6 (?K3A3D5>
<7D #6 (?K3A3D>
J3A(?
# 6R `V`>
` 6R #>
+ 6R `-4>
,riteln4H(n procedura `, + R H, `65, +655>
3?*> ES1F

J3A(?
B8D # 6R 2 K8 4 *8
J3A(?
S14#5>
,riteln4H(n program #, + R H, #65, +655>
3?*
3?*&
Ca e#ecuia acestui program se o"in urm%toarele re+ultate6
(n procedura `, + R 4 1
(n program #, + R 2 1
(n procedura `, + R 0 5
(n program #, + R 3 5
(n procedura `, + R 16 11
(n program #, + R 4 11
________________________________________________________________________________
111
Structuri de date i algoritmi
_______________________________________________________________________________

Se poate o"ser$a c% $alorile $aria"ilei locale ` nu au fost retransmise n programul
principal, parametrul actual # nemodific!ndu-i $alorile prin e#ecuia procedurii S1&

1.3.3.13.1.2. 'arametrii de tip re*erin%)

Parametri de tip referin% se folosesc pentru a transmite $alori ntre unitatea apelant% i
su"programul apelat, n am"ele sensuri& *e o"icei sunt folosii pentru a nota re+ultatele o"inute n
su"program& Parametrul actual a corespun+%tor unui parametru formal de tip referin% f este
o"ligatoriu o $aria"il% de acelai tip cu parametrul formal f& Ca apelul unui su"program parametrul
formal se consider% identic cu parametrul actual corespun+%tor& Practic acest lucru se reali+ea+% prin
faptul c% am!ndoi au aceeai adres% n memorie& 7stfel, parametrul actual a de$ine parametru
glo"al> orice modificare a parametrului formal f este i o modificare a parametrului actual a&
Se recomand% ca parametrii actuali corespun+%tori parametrilor formali $aria"il% s% fie
distinci& :nele implement%ri consider% eroare c!nd la doi parametri formali corespunde acelai
parametru actual, altele accept% o astfel de coresponden%& 7tenie ns% la o asemenea situaie
ntruc!t fiind identici cu acelai parametru actual, cei doi parametri formali de$in identici ntre ei,
ceea ce poate duce la efecte neateptate& *e aceea recomand%m s% se e$ite o asemenea utili+are,
chiar dac% ea este permis%&

1.3.3.13.1.3. 'arametrii *unc%ie ?i parametrii procedur)

*in definiia sintactic% a listei parametrilor formali se o"ser$% c% un parametru formal poate
fi i o funcie sau o procedur%& Parametrul actual tre"uie s% fie o funcie, respecti$ o procedur%
similar% parametrului formal corespun+%tor&
:n e#emplu de program n care se folosesc parametrii formali i actuali funcii i proceduri
este cel de mai .os, n care se calculea+% radicalii de ordinul doi i trei din constanta mm 4n
program egal% cu 25 re+ol$!nd ecuaiile6
#2 - mm R 1, notat% g4#5 R 1,
respecti$
#3 - mm R 1, notat% h4#5 R 1&
Pentru re+ol$area unei ecuaii se pot folosi mai multe metode& )n program am ales dou%6
metoda n.um%t%irii i metoda coardei& )ntruc!t metoda coardei folosete i prima deri$at%, am
notat prin f1, respecti$ g1 deri$atele funciilor f i g&
Exemplul 2!:
Program lpf> E Program 4&116 P&B& funcii si proceduriF
'onst mm R 2>
________________________________________________________________________________
112
Structuri de date i algoritmi
_______________________________________________________________________________
K`pe
fct R function 4#6 real56 real>
su"1 R procedure 4a, "6 real> $ar r6real> f,f16fct5>
<ar r6 real>
i6 integer>

Bunction g4s6 real56 real>
Jegin
g 6R sVs - mm>
end>

Bunction h4s6 real56 real>
Jegin
h6R sVsVs - mm>
end>

Bunction g14s6 real56 real>
Jegin
g1 6R s U s>
end>

Bunction h14s6 real56 real>
Jegin
h1 6R 3VsVs>
end>

Procedure coarda4a, "6 real> $ar r6 real> f, f16 fct5> ESe re+ol$a ecuatia f4#5 R 1 prin metoda
coardeiF
<ar c, t6 real>
Jegin
c 6R a> t 6R ">
Depeat
c 6R c - f4c5V4t-c5W4f4t5-f4c55>
t 6R t - f4t5Wf14t5>
________________________________________________________________________________
113
Structuri de date i algoritmi
_______________________________________________________________________________
until t - c X 1&11111>
r 6R 4cUt5W2
end>

Procedure .uma4a, "6 real> $ar r6 real> f, f16 fct5> ESe re+ol$a ecuatia f4#5R1 prin metoda
in.umatatiriiF
Jegin
Depeat
r 6R 4aU"5W2>
(f f4a5Vf4r5 X 1 then
" 6R r
else
a 6R r>
until " - a X 1&11111
end>

Procedure De+ec4a, "6 real> $ar r6 real> f, f16 fct> met6 su"15>
Jegin
met4a, ", r, f, f15>
end>

Jegin
,riteln4Hin.umatatire coarda6 H5>
,riteln4Hradical din 2H5>
De+ec41, 2, r, g, g1, .uma5>
,rite4Hr R H, r60655>
De+ec41, 2, r, g, g1, coarda5>
,riteln4H H, r60655>
,riteln4Hradical din 3H5>
De+ec41, 2, r, h, h1, .uma5>
,rite4Hr R H, r60655>
De+ec41, 2, r, h, h1, coarda5>
,riteln4H H, r60655>
end&
________________________________________________________________________________
114
Structuri de date i algoritmi
_______________________________________________________________________________

1.3.3.14& ;pel recursi,

)n e#emplele date se o"ser$% c% apelul unui su"program se face dup% ce el a fost definit&
3ste ns% permis ca n interiorul unei proceduri s% fie definit% o alt% procedur%& 7ceast% procedur%
poate fi utili+at% numai n interiorul procedurii n care a fost declarat% i numai dup% ce a fost
definit%&
3ste posi"il ca un su"program s% se apele+e pe el nsui, recursi$& 'a e#emplu, pre+ent%m
n continuare un program care folosete o funcie care calculea+% recursi$ $aloarea n[ cu a.utorul
formulei n[ R n&4n-15[ &
Exemplul 2":
Program 7pelDecursi$> E Programul 4&116 n Bactorial F
K`pe nat R 1&&ma#int>
<ar i6 nat>
Bunction Bact4n6 nat56 nat>
Jegin
(f n R 1 then
Bact 6R 1
else
Bact 6R n V Bact4n-15
end>

Jegin
Bor i6R3 to 7 do
oriteln4i,H[ R H, Bact4i55
end&
S% urm%rim e#ecuia apelului B7'K4n5 pentru n R 3& S% o"ser$%m c% funcia Bact nu are
nici o $aria"il% local% n afar% de parametrul formal $aloare n& *eci la apelul acestei funcii se $or
re+er$a dou% locaii de memorie, una pentru n i una pentru $aloarea funciei B7'K, fiecare apel
nsemn!nd o astfel de re+er$are&
*eci, dup% primul apel, +ona de memorie alocat% este cea situaia a5 de mai .os& Pentru a
efectua atri"uirea Bact415 6R 3VBact425 se apelea+% Bact425 i se re+er$% din nou dou% locaii de
memorie, a.ung!nd la situaia din situaia "5 de mai .os& Ca e#ecuia acestui apel tre"uie efectuat%
atri"uirea Bact425 6R 2VBact415& *eci are loc un al treilea apel, Bact415, pentru care se re+er$% din
nou memorie, a.ung!ndu-se la situaia c5 de mai .os& *e aceast% dat% se cere efectuarea atri"uirii
Bact435 6R 1VBact415 i are loc un al patrulea apel, Bact415, a.ung!ndu-se la situaia d5 de mai .os&
________________________________________________________________________________
115
Structuri de date i algoritmi
_______________________________________________________________________________
'!nd ultimul apel s-a e#ecutat, el ntoarce $aloarea Bact445 6R 1 i se eli"erea+% +ona de memorie
corespun+%toare a.ung!ndu-se la situaia situaia e5 de mai .os& )ntruc!t i apelul Bact415 a fost
e#ecutat, se a.unge la situaia f5 de mai .os& Se efectuea+% i atri"uirea Bact425 6R 2VBact415 R 2 cu
care se termin% e#ecuia apelului Bact425, a.ung!ndu-se la situaia g5 de mai .os& )n aceast% situaie
se ncheie i e#ecuia primului apel cu $aloarea Bact415 6R 6&
3 @
n Bact1
a5 3 @ 2 @
n Bact1 nm Bact2
"5 3 @ 2 @ 1 @
n Bact1 nH Bact2 n= Bact3
c5 3 @ 2 @ 1 @ 1 1
n Bact1 nH Bact2 n= Bact3 n=H Bact4
d5 3 @ 2 @ 1 1
n Bact1 nH Bact2 n= Bact3
e5 3 @ 2 2
n Bact1 nm Bact2
f5 3 6
n Bact1
g5

S% o"ser$%m at!t modul de e#ecuie al unui apel recursi$ c!t i faptul c% necesarul de
memorie crete la fiecare apel& (ar n ca+ul n care +ona de date locale ale procedurii este mare,
$olumul de memorie utili+at poate crete foarte mult&
*in aceast% cau+% apelul recursi$ nu este indicat& 'onsumul de memorie i timpul necesar
e#ecuiei sunt mult mai mari dec!t n ca+ul unui program nerecursi$ corespun+%tor aceleai
pro"leme& Kotui, folosirea procedurilor recursi$e are a$anta.ul unei descrieri mai clare i mai
apropiat% de lim"a.ul matematic&
)n programul urm%tor sunt date c!te$a e#emple de funcii recursi$e cu argumente numere
ntregi pentru determinarea cifrei ma#ime a unui num%r ntreg, sumei cifrelor unui num%r ntreg i a
celui mai mare di$i+or comun a dou% numere ntregi&
Exemplul 3#:
Program 3#empleDecurs$itate> EProgramul 4&126 'ifreF
'onst ?m R 1111>
<ar a, "6 (nteger>
Bunction 9a#24a, "6 (nteger56 (nteger> E*etermina ma#imul a doua numere intregi a, "F
________________________________________________________________________________
116
Structuri de date i algoritmi
_______________________________________________________________________________
Jegin
(f a\" then 9a#26R a else 9a#26R "
end>

Bunction 'if9a#4a6 (nteger56 "`te> E'alculea+a cifra ma#imaF
Jegin E a numarului intreg aF
(f a X 11 then
'if9a# 6R a
else
'if9a# 6R 9a#24'if9a#4a di$ 115, a mod 115
end>

Bunction Sum'if4a6 (nteger56 (nteger> E'alculea+% F
Jegin E suma cifrelor numarului aF
(f a X 11 then
Sum'if 6R a
else
Sum'if 6R Sum'if4a di$ 115 U a mod 11
end>

Bunction 'mmdc4a, "6 (nteger56 (nteger> E'el mai mare F
Jegin E di$i+or comun al numerelor a, "F
(f " R 1 then 'mmdc 6R a
else
'mmdc 6R 'mmdc4", a mod "5
end>

Jegin
Dandomi+e> a 6R Dandom4?m5> " 6R Dandom4?m5>
oriteln 4H'ifra ma#ima a nr& H, a, H este H, 'if9a#4a55>
oriteln 4HSuma cifrelor nr& H, a, H este H, Sum'if4a55>
oriteln 4H'&m&m&d&c&4H, a, H,H, ", H5 R H, 'mmdc4a,"55>
end&
________________________________________________________________________________
117
Structuri de date i algoritmi
_______________________________________________________________________________
:rm%torul program Pascal utili+ea+% c!te$a funcii i proceduri recursi$e corespun+%toare
unor operaii elementare asupra irurilor de numere 4generarea i tiparirea elementelor unui ir,
$aloarea i po+itia elementului ma#im respecti$ minim dintr-un ir, suma elementelor unui ir,
c%utarea unei $alori ntr-un ir i preci+area dac% un ir este sau nu ordonat crec%tor respecti$
descresc%tor5&
Exemplul 31:
Program 3#DecSir> EProgramul 4&136 3#emple de F
E funcii i proceduri recursi$eF
'onst *m R 31>
K`pe Kelem R (nteger> EPoate fi orice alt tipF
E8rice schim"are nseamn% doar o redefinireF
Sir R 7rra` /1&&*m2 of Kelem>
<ar 76Sir> n6"`te> #6Kelem>

Procedure Aenerea+a4<ar 76Sir> n6"`te5> EAenerea+% irul 7 cu n $alori aleatoare F
Jegin
(f n \ 1 then
Jegin
a/n2 6R Dandom41115> E *% $aloare ultimului elementF
Aenerea+a47, n-15 E apoi primelor n-1 elementeF
end
end EAenerea+aF>

Procedure Kipareste 476Sir> n6"`te5> E Kip%rete din F
Jegin E sirul 7 primele n elementeF
(f n \ 1 then
Jegin
Kipareste 47, n-15> E Kip%rete primele n-1 elemente F
orite 4a/n2, H,H5 E apoi elementul n F
end
else
oriteln
end>

________________________________________________________________________________
11;
Structuri de date i algoritmi
_______________________________________________________________________________
Procedure Kip(n$ers 476Sir> n6"`te5> EKip%rete n ordine in$ersaF
Jegin Eprimele n elemente ale irului 7F
(f n \ 1 then
Jegin
orite 4a/n2, H,H5> EKip%rete elementul n,F
Kip(n$ers47, n-15 Eapoi n ordine in$ers% primeleF
end En-1 elementeF
end>

Bunction 9a#2l4a, "6 Kelem56 Kelem> E9a#24a,"5 R cel mai mare dintre a si " F
Jegin
(f a \ " then 9a#2 6R a else 9a#2 6R "
end>

Bunction 9a#im476Sir> n6"`te56 Kelem> E3lementul ma#im F
Jegin Edin sirul 7 cu n elemente este egal cu elementul
ma#im din primele n elementeF
(f nR1 then
9a#im 6R a/12
else
9a#im 6R 9a#24a/n2, 9a#im47,n-155 E9a#imul dintre primele n
este cel mai mare dintreF
end> Eultimul element i ma#imul dintre primele n-1 elementeF

Bunction 9in24a,"6 Kelem56 Kelem> E9in24a, "5 R cel mai mic dintre a i "F
Jegin
(f aX" then 9in26R a else 9in26R "
end>

Bunction 9inim476 Sir> n6 "`te56 Kelem> E3lementul minim F
Jegin E din sirul 7 cu n elementeF
(f n R 1
then 9inim 6R a/12
else
________________________________________________________________________________
110
Structuri de date i algoritmi
_______________________________________________________________________________
9inim 6R 9in24a/n2, 9inim47,n-155
end>

Bunction Po+9a#476 Sir> n6 "`te56 Kelem> EPo+iia elementului ma#im din irul 7 de n
elementeF
Bunction Po+9a#24i, .6 "`te56 "`te> EPo+iia elementului F
Jegin E mai mare dintre 7i si 7.F
(f a/i2 \ a/.2
then
Po+9a#2 6R i
else
Po+9a#2 6R .
end>
Jegin EPo+itia ma#imului din primele n elementeF
(f n R 1 Eeste po+itia celui mai mareF
then Po+9a# 6R 1 Edintre ultimul si elementulF
else
Po+9a#6R Po+9a#24n, Po+9a#47, n-155 Ema#imF
end> din primele n-1F

Bunction Po+9in476 Sir> n6 "`te56 Kel> EPo+iia elementului minim din irul 7 cu n
elementeF
Bunction Po+9in24i, .6 "`te56 "`te>
Jegin
(f a/i2 X a/.2 then Po+9in2 6R i else Po+9in2 6R .
end>
Jegin EPo+9inF
(f n R 1 then Po+9in 6R 1
else Po+9in 6R Po+9in24n, Po+9in47, n-155
end>

Bunction 3#ista476 Sir> n6 "`te> #6 Kelem56 Joolean>
Jegin E# apartine 7@6 #R7/n2 sau # e#ist% n primele n-1F
3#ista 6R 4n \ 15 and 44# R a/n25 or 3#ista47, n-1, #55
________________________________________________________________________________
111
Structuri de date i algoritmi
_______________________________________________________________________________
end>

Bunction 'resc476 Sir> n6 "`te56 Joolean> E3ste irul 7 ordonat cresc%tor @F
Jegin EPrimele n-1 sunt ordonate crescator i 7/n-12X7/n2F
(f nR1 then 'resc6R Krue
else
'resc6R 'resc47, n-15 and 4a/n-12 XR a/n25
end>

Bunction *escr476 Sir> n6 "`te56 Joolean> E3ste sirul 7 ordonat descresc%tor @F
Jegin
(f nR1 then *escr6R Krue
else
*escr6R *escr47, n-15 and 4a/n-12 \R a/n25
end>

Bunction Suma476 Sir> n6 "`te56 Kelem> ESuma elementelor irului 7& Suma primelor n F
Jegin E elemente R suma primelor n-1 el&U 7/n2F
(f n R 1 then Suma 6R 1
else
Suma 6R Suma47, n-15 U a/n2
end>
Jegin
Dandomi+e>
n 6R Dandom4215 U 11> Aenerea+a47, n5>
Kipareste47, n5> oriteln>
Kip(n$ers47, n5>
oriteln4H9a#imul R H, 9a#im47, n55>
oriteln 4H9inimul R H, 9inim47, n55>
oriteln 4HPo+_9a# R H, Po+9a#47, n55>
oriteln 4HPo+_9in R H,Po+9in47,n55>
Dandomi+e> # 6R Dandom41115>
(f 3#ista47, n, #5
then oriteln4H(n sir e#ista el& H, #5
________________________________________________________________________________
111
Structuri de date i algoritmi
_______________________________________________________________________________
else oriteln4H(n sir nu e#ista el& H, #5>
(f 'resc47, n5
then oriteln4HSirul este ordonat crescator&H5
else oriteln4HSirul nu este ordonat crescator&H5>
(f *escr47, n5
then oriteln4HSirul este ordonat descrescator&H5
else oriteln4HSirul nu este ordonat descresc&H5>
oriteln4HSuma elementelor sirului R H,Suma47,355>
Deadln
end&

3ste posi"il ca dou% proceduri s% se apele+e una pe cealalt%& )ns% s-a afirmat mai sus c% o
procedur% nu poate fi apelat% nainte de a fi definit%& 8ri procedurile P1 i P2 se apelea+% reciproc6
P1 apelea+% pe P2 i P2 apelea+% pe P1& )n acest ca+ se permite ca nainte de a apela pe P2, care nc%
nu a fost declarat% naintea apelului, s% se specifice c% ea $a fi definit% ulterior& Pentru aceasta este
ne$oie s% se foloseasc% directi$a B8Do7D*& 'u a.utorul acestei directi$e se preci+ea+% antetul
procedurii P2 naintea procedurii P1, iar definiia procedurii P2 $a fi f%cut% dup% procedura P1,
conform schemei de mai .os&
Procedure P24Xlista p&f&2\5> Bor,ard>
Procedure P14Xlista p&f&1\5>
te#tul procedurii P1 n care apare apelul
P24Xlista p&a&2\5
end> ESf!rsitul procedurii P1F
Procedure P2>
te#tul procedurii P2 n care apare apelul
P14Xlista p&a&1\5
end>
7ici, n te#tul procedurii P2 se folosesc parametri formali ai procedurii P2 declarai n
Xlista p&f&2\, list% care nu mai este pre+ent% n antetul procedurii P2, declarat% dup% procedura P1&
*%m n continuare un e#emplu de program n care su"programele care se apelea+% reciproc
calculea+% $alorile funciilor f i g definite prin
f415 R 1> g415 R 1 >
g4#5 R #V#Vf4#-15 , pentru # \R 1>
f4#5 R 42V#-15Vg4#5, pentru # \R 1&
Programul ta"elea+% $alorile acestor funcii pentru # R 1, 2, &&&, 6&
Exemplul 32:
________________________________________________________________________________
112
Structuri de date i algoritmi
_______________________________________________________________________________
Program 7pelDec2> E Programul 4&146 Proceduri recursi$e F
K`pe nat R 1&&ma#int>
<ar n6 nat>
Bunction A4#6 nat56 nat> Bor,ard >
Bunction B4#6 nat56 nat >
Jegin
(f # R 1 then B 6R 1
else
B 6R 4#U#-15VA4#5
end>
Bunction A>
Jegin
(f # R 1 then A 6R 1
else
A 6R #V#VB4#-15
end>
Jegin
Bor n6R1 to 6 do
oriteln4HB4H, n, H5RH, B4n5, H A4H, n, H5RH, A4n55
end&


1.3.3.15& 5ipuri de date structurate

7m $%+ut c% prin termenul de dat% nelegem o $aloare a unei informaii folosit% ntr-un
algoritm, cum ar fi num%rul 1304, sau caracterul H7H, sau 41, H9artieH, 10065& 8 dat% atomic% este o
dat% pe care o putem considera, cel puin pentru un moment, o entitate nedecompo+a"il%& *e
e#emplu, num%rul 1304 poate fi considerat o dat% atomic% memorat%, scris% pe aceast% h!rtie& *ar,
putem $edea acest ntreg i ca o dat% compus%, ca o sec$en% de cifre scrise aici de la st!nga spre
dreapta> n acest ca+ fiecare cifr% este considerat% atomic%, ns% ntregul $a fi o dat% compus%& 8
cifr% la r!ndul ei ar putea fi considerat% compus%, de e#emplu, din puncte& 7stfel putem alege orice
ni$el la care s% oprim descompunerea unei date, consider!nd-o apoi atomic%&
*ac% descompunem o dat%, ca i mai sus ntregul 1304, atunci $alorile o"inute le $om
numi elemente componente, sau simplu elemente& 8 dat% care se compune din mai multe elemente
o numim dat% structurat%& 8 dat% structurat% are elemente componente i o structur%, care definete
modul de aran.are sau relaiile ce se pot sta"ili ntre elemente&
________________________________________________________________________________
113
Structuri de date i algoritmi
_______________________________________________________________________________
)n ncercarea de a grupa datele dup% caracteristici comune a fost introdus% noiunea de tip&
Printr-un tip de date nelegem o mulime de $alori 4de date5 i o mulime de operaii ntre aceste
$alori& *ac% $alorile din mulime sunt atomice atunci a$em un tip de date atomic, iar dac% $alorile
sunt structurate atunci a$em un tip de date structurat, sau o structur% de date& *eci o structur% de
date este un tip de date ale c%rui $alori6
415 pot fi descompuse ntr-o mulime de elemente de date, fiecare element put!nd fi atomic
sau o alt% structur% de date>
425 includ o mulime de asocieri, sau relaii 4structura5 ntre elementele componente&
8peraiile unui tip de date structurat pot s% acione+e nu numai asupra $alorilor tipului de
date ci i asupra elementelor componente ale structurii de date&
7legerea unei repre+ent%ri potri$ite pentru o"iectele de date pe care le folosim ntr-un
program este de importan% ma.or%& *ar s% definim nt!i ce nelegem prin repre+entarea datelor&
Kermenul repre+entarea datelor nseamn% o alegere particular%, din mai multe care sunt posi"ile, a
componentelor, a tipului lor, i a organi+%rii acestor $alori memorate ntr-un o"iect&
)n acest capitol sunt pre+entate c!te$a alternati$e disponi"ile n lim"a.ul Pascal pentru
repre+entarea datelor structurate&

1.3.3.15&1. +tructura de tablou

:na din structurile de date eseniale n programare sunt cele de tip ta"lou& 'el mai simplu
mod de a folosi ta"lourile este de a repre+enta date organi+ate ca i un ir elemente& Ca fel, cu
a.utorul lor se pot repre+enta diferite tipuri de ta"ele& *e e#emplu, un ta"el al notelor o"inute la un
e#amen de studenii dintr-o grup%, ar putea ar%ta astfel
Student ?ota
1 0
2 7
3 11
&&&&&&&&&&&&&&&&&&&&&&&&&&
25 ;

:n astfel de ta"el ar putea fi repre+entat ntr-un program printr-un ta"lou&
:n ta"lou const% dintr-un ir elemente, fiecare element fiind identificat printr-un indice&
3lementele sunt toate de acelai tip de date, care poate fi orice tip& (ndicii sunt dintr-un su"domeniu
al unui tip ordinal& 'aracteristicile eseniale ale unui ta"lou sunt dou%6 elementele sunt ordonate prin
irul $alorilor indicilor, respecti$ elementele sunt de acelai tip&
Pentru a defini repre+entarea unui ta"lou tre"uie s% preci+%m dou% lucruri6 su"domeniul
indicilor i tipul de date al elementelor componente& Sinta#a specific%rii n Pascal a unei structuri de
ta"lou este
________________________________________________________________________________
114
Structuri de date i algoritmi
_______________________________________________________________________________
Xta"lou\ 66R arra` /Xtip1\2 of Xtip2\
unde parante+ele drepte i tipurile Xtip1\ i Xtip2\ sunt o"ligatorii& Kipul Xtip1\ se
numete tip de inde#are i preci+ea+% $alorile pe care le poate lua indicele ta"loului& 3l poate fi
orice tip ordinal diferit de (nteger, put!nd ns% fi un su"domeniu al tipului (nteger& Kipul elementelor
ta"loului este Xtip2\, care poate fi orice tip definit anterior6 predefinit sau definit de c%tre utili+ator,
sau orice tip anonim&
7stfel, prin arra`/1&&252 of integer
se specific% un tip de ta"lou cu componente ntregi, ale c%rui elemente sunt inde#ate prin numere
ntregi de la 1 la 25&
Prin arra`/H7H&&HQH2 of real
se specific% o structur% de ta"lou cu componente reale ale c%rui elemente sunt inde#ate prin
caractere aflate n su"domeniul H7H&&HQH & *ac% ta"loul Ka" are acest tip atunci elementele sale sunt
Ka"/c2 pentru c n su"domeniul H7H&&HQH&
:n element al ta"loului se refer% prin scrierea numelui ta"loului urmat de rangul
elementului n acest ta"lou 4indicele5 scris ntre parante+ele drepte / i 2& :n element selectat al
ta"loului poate fi folosit ca i orice $aria"il% de tipul elementelor ta"loului&
Singura operaie predefinit% asupra ta"lourilor este atri"uirea, 7 6R J, care are ca efect
copierea $alorilor elementelor ta"loului J n elementele corespun+%toare ta"loului 7& 'ele dou%
ta"louri tre"uie s% fie de acelai tip&
:n ta"lou este repre+entat n memoria calculatorului ca i un ir de locaii de memorare,
fiec%rui element corespun+!ndu-i o locaie& Ka"loul Pascal este o a"stracti+are care ascunde detaliile
despre cum este organi+at un ta"lou n memoria calculatorului& )n figura urm%toare este sugerat%
repre+entarea unui ta"lou n memorie, fiec%rei locaii de memorare corespun+!ndu-i un dreptunghi,
$aloarea unui element fiind nscris% n dreptunghiul corespun+%tor& S% not%m c% indicii nu sunt
memorai ca i parte a ta"loului&
?ota/12 ?ota/22 ?ota/32 &&& ?ota/252
0 7 11 &&& ;
3lementele unui ta"lou pot fi la r!ndul lor ta"louri& 7stfel, elementele unui ta"lou de tipul
arra`/1&&112 of arra`/1&&62 of real
sunt $ectori cu 6 componente reale& *ac% K este un ta"lou de acest tip atunci K are 11 componente,
fiecare component% fiind un $ector cu 6 componente& *e fapt este $or"a de o matrice cu 11 linii i 6
coloane& 'omponenta K/i2 a acestui ta"lou $a fi un $ector cu 6 componente numere reale& Selectarea
elementului cu indicele . al ta"loului K/i2 poate fi f%cut% prin K/i2/.2&
9enion%m c% se accept% o prescurtare a declaraiei de mai sus su" forma
arra`/1&&11, 1&&62 of real
*ei nu este o declaraie echi$alent% cu cea de mai nainte ea permite totui declararea unei
matrice cu 11 linii i 6 coloane& *iferena const% n faptul c% folosind aceast% declaraie o linie a
matricei nu mai este considerat% ca o entitate de sine st%t%toare& Deferirea la linia i prin K/i2 este
greit% n acest ca+, iar prin K/i, .2 se refer% elementul din linia i coloana .&
________________________________________________________________________________
115
Structuri de date i algoritmi
_______________________________________________________________________________
)n continuare $om scrie un program n care se folosete un su"program pentru ordonarea
cresc%toare a unui ir de numere reale, pe care-l $om apela pentru a ordona mai nt!i un ir dat de
numere reale #/12, #/22, &&&, #/n2, iar apoi pentru a ordona p%tratele acestor numere& Su"algoritmul
de ordonare a acestor numere este dat n capitolul apte, seciunea 7&1&
Exemplul 33:

Program Ka"lou1> EProgramul 4&146 Ka"louriF
t`pe <ector R arra`/1&&1112 of real>
$ar i, n6 (nteger>
# 6 <ector>

procedure Kipar4n6integer> #6$ector5> EKipareste, $ectorul Y cu n elementeF
"egin
,riteln>
for i6R1 to n do orite4#/i25
end> EKiparF
procedure 8rdonare4n6 (nteger> $ar Y6 <ector5> E8rdonea+% nedescrescator primele F
E n componente ale $ectorului YF
$ar i, aod6 (nteger>
t6 Deal>
"egin
repeat aod 6R 1>
for i6R1 to n-1 do
if #/i2 \ #/iU12 then
"egin
aod 6R 1> t 6R #/i2>
#/i2 6R #/iU12>
#/iU12 6R t
end EifF
until aod R 1
end> E8rdonareF
"egin
orite4Hn R H5> Deadln4n5>
for i6R1 to n do
________________________________________________________________________________
116
Structuri de date i algoritmi
_______________________________________________________________________________
Dead4#/i25>
oriteln4HSirul ordonat este6H5>
8rdonare4n, Y5>
Kipar>
for i6R1 to n do
#/i2 6R #/i2V#/i2>
oriteln4HSirul patratelor dupa ordonare6H5>
8rdonare4n, Y5>
Kipar4n,Y5
end&
*%m i un e#emplu de program n care apar matrice& Programul re+ol$% urm%toarea
pro"lem%6
Exemplul 34:

Se d% o matrice patrat% 7 i se cere s% se tip%reasc% matricele 7, 7
2
, 7
3
i 7
4
& Pentru
tip%rirea unei matrice i pentru nmulirea a dou% matrice se folosesc procedurile Kip9at, respecti$
Prod9at& Programul Pascal este urm%torul6

Program Puteri9at> EProgramul 4&156 Puterile unei matriceF
const n R 5>
t`pe 9at R arra`/1&&n, 1&&n2 of Deal>
$ar 7, J, '6 9at>

Procedure 'it9at4n6 J`te> $ar 76 9at5> E'iteste matricea 7F
$ar i, .6 "`te> Epatrata de ordinul nF
"egin
for i6R1 to n do
for .6R1 to n do
"egin
orite4H74H, i, H,H, ., H5RH5>
Deadln47/i,.25
end>
end>

________________________________________________________________________________
117
Structuri de date i algoritmi
_______________________________________________________________________________
procedure Kip9at4n6 (nteger> EKiparete mesa.ul s siF
76 9at> s6 String5> Ematricea 7 de ordinul nF
$ar i, .6 (nteger>
"egin
,riteln> ,riteln>
,riteln4s5>
for i6R1 to n do
"egin
oriteln>
for .6R1 to n do
orite47/i,.26;615>
end
end> EKip9atF

Procedure Prod9at4n6 J`te> 7, J6 9at> $ar '6 9at5> En R ordinul matricelorF
E' 6R 7 V JF
$ar i, ., a6 (nteger>
s 6 Deal>
"egin
for i6R1 to n do
for .6R1 to n do
"egin
s6R1>
for a6R1 to n do
s 6R sU7/i,a2VJ/a,.2>
'/i,.2 6R s
end
end> EProd9atF

"egin
oriteln4HSe tiparesc puterile unei matriceH5>
oriteln4H*ati matricea [5>
'it9at4n, 75>
Kip9at4n, 7, H9atricea 7 este6 H5>
________________________________________________________________________________
11;
Structuri de date i algoritmi
_______________________________________________________________________________
Prod9at4n, 7, 7, J5>
Kip9at4n, J, H9atricea 7V7 este6 H5>
Prod9at4n, 7, J, '5>
Kip9at4n, ', H9atricea 7V7V7 este6 H5>
Prod9at4n, J, J, '5>
Kip9at4n, ', H9atricea 7V7V7V7 este6H5>
end&

1.3.3.15&2. +tructura de date &nregistrare

9ulte o"iecte din lumea real% le descriem de o"icei prin enumerarea unor atri"ute
importante pe care le au& 7tri"utele ser$esc la descrierea clasei generale de o"iecte - tipul
o"iectului& :n o"iect particular de acel tip este definit prin asocierea unei $alori particulare fiec%rui
atri"ut& *e e#emplu, o noti% dintr-o agend% telefonic% personal% poate referi o persoan% prin
atri"utele ?ume, Kelefon i 7dres%, iar o persoan% notat% n agend% ar putea fi6
(oana Pop> 174563> A& 3nescu, 25W7&
)n programare putem descrie date compuse 4deci i tipul de date corespun+%tor5 ntr-un
mod asem%n%tor& Preci+area 4definirea5 tipului de date se $a face prin enumerarea numelor unor
atri"ute i preci+area unui tip de date asociat fiec%rui atri"ut& :n o"iect particular de acest tip nou $a
conine o $aloare particular% pentru fiecare atri"ut specificat& :n astfel de tip de date l $om numi
tip de date nregistrare& Biecare atri"ut l numim cmp al nregistrrii& :n o"iect de date de tip
nregistrare $a fi numit o nregistrare&
8"ser$%m c% structura de date nregistrare modelea+% produsul carte+ian din matematic%& 8
nregistrare const% dintr-un num%r fi# de elemente componente de diferite tipuri& 'aracteristica
esenial% a unei nregistr%ri este c% ea grupea+% elemente de dat% de diferite tipuri ntr-o singur%
entitate& 7cest aspect contri"uie la o e#primare concis% i uor de urm%rit n programare&
Sinta#a specific%rii unui tip nregistrare n lim"a.ul Pascal este6
record Xselector\ 6 Xtip\ E > Xselector\ 6 Xtip\ F end
unde Xselector\ este un identificator sau o list% de identificatori iar Xtip\ este un tip
predefinit sau definit anterior i specific% tipul selectorului din st!nga sa& Selectorii care apar dup%
cu$!ntul record tre"uie s% fie distinci ntre ei i constituie numele dat componentelor
corespun+%toare ale produsului carte+ian&
:n astfel de tip nregistrare poate primi un nume folosind declaraia t`pe, pre+entat% n
seciunea 4&2&5&2& *e e#emplu, prin
t`pe *ata R record
+i 6 1&&31>
luna6 1&&12>
an 6 1011&&1000
________________________________________________________________________________
110
Structuri de date i algoritmi
_______________________________________________________________________________
end>
se definete un tip nregistrare cu numele *ata i care are trei componente6 +i, luna, an& Se o"ser$%
c% este un tip ce conine toate datele din secolul nostru, su" forma unor triplete 4+,l,a5&
8peraiile asupra nregistr%rilor sunt atri"uirea nregistr%rilor i selectarea unui cmp al unei
nregistr%ri& *ac% 7 i J sunt dou% nregistr%ri de acelai tip, atunci atri"uirea 7 6R J, $a a$ea ca
efect copierea $alorilor c!mpurilor nregistr%rii J n c!mpurile nregistr%rii 7& Pentru selectarea
unui c!mp particular al unei nregistr%ri $om folosi notaia
X$aria"ila-nregistrare\ & Xselector\
7stfel, pentru $aria"ila < de tipul *ata $om a$ea urm%toarele trei componente 4$aria"ile
selectate56
<&+i, <&luna, <&an&
<om scrie o procedur% care re+ol$% pro"lema de mai .os i care folosete tipul *ata, definit
mai sus& Pro"lema este urm%toarea6
Exemplul 35:
S% se determine $!rsta unei persoane n num%r de +ile dac% se cunoate data naterii
persoanei i data curent%& Su"algoritmul pentru determinarea $!rstei, dat su" form% de funcie, este
urm%torul6
Pseudocod6
Buncia <7DSK74*nas, *a+i5 este6
Bie nr 6R ?DQ(7?4*a+i5>
IPentru 4fiecare an ntreg din $ia%5 adun% la nr
num%rul +ilelor anului respecti$&
Bie <7DSK7 6R nr - ?DQ(7?4*nas5>
sf-<7DSK7
7cest su"algoritm folosete funcia ?DQ(7?4+i5 pentru a determina a c!ta +i din an este o
dat% curent%& Buncia menionat% este descris% n continuare&
Buncia ?DQ(7?4+ian5 este6
Bie nr 6R +iua curent% a lunii>
*ac% 4nu suntem n ianuarie5 atunci
Pentru fiecare lun% ntreag% e#ecut%
Bie nr 6R nr U num%rul +ilelor lunii i>
sfpentru
*ac% 4a trecut fe"ruarie5 atunci
*ac% anu( este "isect atunci
nr6RnrU1
________________________________________________________________________________
121
Structuri de date i algoritmi
_______________________________________________________________________________
sfdac%
sfdac%
sfdac%
Bie ?DQ(7?6Rnr>
sf-?DQ(7?
Procedura Pascal corespun+%toare se definete n programul urm%tor6
Program 7pelBunctie> E Programul 4&166 Kipul inregistrareF
const ?Qile6 arra`/1&&122 of (nteger R 431, 2;, 31, 31, 31, 31, 31, 31, 31, 31, 31, 315>
t`pe *ata R record
+i 6 1&&31>
luna6 1&&12>
an 6 1011&&1000
end>
$ar *nas, E *ata nasterii F
*a+i6 *ata> E *ata curenta F

function Jisect4a6 (nteger56 Joolean> E 7de$arata daca F
"egin E a e "isect F
if a mod 4 R 1 then
Jisect 6R Krue
else
Jisect 6R Balse
end>

Procedure 'it*ata4$ar *6 *ata5> E 'itete un triplet F
"egin E +i, lun%, an care F
orite4H+iuaRH5> Deadln4*&+i5> E repre+int% o dat% F
orite4HlunaRH5> Deadln4*&luna5>
orite4HanulRH5> Deadln4*&an5>
end>

Bunction ?rQi7n4<6 *ata56 (nteger> E ?DQ(7? 6R a cata +i F
$ar i, nr6 (nteger> E in an este data < F
"egin
________________________________________________________________________________
121
Structuri de date i algoritmi
_______________________________________________________________________________
nr 6R <&+i>
if <&luna \ 1 then
for i6R1 to <&Cuna-1 do
nr 6R nr U ?Qile/i2>
if <&luna \ 2 then
if Jisect4<&an5 then
nr 6R nr U 1>
?rQi7n 6R nr
end> E?DQ(7?F

Bunction <arsta4*nas, *a+i6 *ata56 (nteger> E <arsta 6R F
$ar i, nr6 (nteger> Enumarul de +ile aflateF
"egin Eintre datele *nas si *a+iF
nr 6R ?rQi7n4*a+i5>
for i 6R *nas&an to *a+i&an-1 do
"egin
nr6RnrU365>
if Jisect4i5 then
nr6RnrU1
end> EforF
<arsta 6R nr - ?rQi7n4*nas5>
3nd> E<arstaF
Jegin EProgramul principalF
oriteln4H*ati data nasterii6 H5> 'it*ata4*nas5>
oriteln4H*ati data curenta6 H5> 'it*ata4*a+i5>
oriteln4HPersoana nascuta in6 H5>
oriteln4H4H, *nas&+i, H,H, *nas&luna, H,H, *nas&an, H5H5>
oriteln4Hare $arsta H, <7DSK74*nas,*a+i5, H +ile&H5>
3nd&

)n definirea unui tip nregistrare o component% poate fi la r!ndul ei de tipul nregistrare& :n
astfel de e#emplu se d% n continuare6
t`pe Student R record
________________________________________________________________________________
122
Structuri de date i algoritmi
_______________________________________________________________________________
nume, prenume6 arra`/1&&;2 of char >
datan6 record
+i 6 1&&31 >
luna6 1&&12 >
an 6 1011&&10;0
end>
note6 arra`/1&&122 of 1&&11
end>

)n acest ca+, dac% Y are tipul Student atunci prin Y&datan se notea+% tripletul
Y&datan&+i Y&datan&luna Y&datan&an
care repre+int% data naterii studentului Y, iar Y&nume este numele acestui student&
xxxxxxx 5ipul re*erin%)
)n multe aplicaii practice care folosesc prelucr%ri de date, nu este posi"il s% cunoatem a
priori dimensionalitatea datelor& *in aceast% cau+%, utili+area unui ta"lou pentru a stoca aceste date
este ineficient%, deoarece fie facem risip% de memorie printr-o alocare static% acoperitoare, fie su"
dimension%m ta"loul pentru stocarea datelor, ceea ce poate duce la fenomene de dep%ire a +onei de
memorie alocat% datelor, acest fenomen fiind un fenomen se$er care poate duce la "locarea
e#ecuiei programului i chiar la "locarea sistemului de calcul& Cim"a.ul de programare Kur"o
Pascal sta"ilete dimensiunea de memorie alocat% datelor de la ni$elul codului surs%, care, compilat
i lina-editat se transform% n cod e#ecuta"il& Pe parcursul e#ecuiei nu se pot modifica dinamic
aloc%rile de date declarate la ni$elul codului surs%&
*e aceea, pentru a re+ol$a pro"lema unei aloc%ri dinamice a memoriei tre"uie s% utili+%m un
tip de dat% special, numit tip re*erin%) sau pointer i o serie de proceduri speciale care s% aloce
memorie sau s% eli"ere+e +ona de memorie folosit% i care nu mai este necesar%&
Kipul de date re*erin%) 4pointer5 $a conine adresa unui anumit tip de dat%& *eclaraia de tip
este6
numeCdat R rtip>
unde numeCdat este numele noului tip de dat% referin%, iar tip repre+int% tipul datelor referite de
c%tre datele de tip numeCdat&
*eclaraia de mai sus este o declaraie generic% de tip, nea$!nd ca efect re+er$area propriu-
+is% de memorie& Pentru a reali+a efecti$ alocarea unei +one de memorie de dimensiunea dat% de
tipul de dat% tip, $a tre"ui s% folosim procedura NEA& 7pelul procedurii se face astfel6
NEA4variabil Creferin5>
:nde variabilCreferin este o $aria"il% numit% ,ariabil) dinamic) 4'ristea, et al& /100225&
Procedura ?3o reali+ea+% alocarea dinamic% a memoriei heap pe parcursul e#ecuiei programului&
________________________________________________________________________________
123
Structuri de date i algoritmi
_______________________________________________________________________________
)n urma apel%rii procedurii ?3o, $aria"ilei dinamice variabilCreferin i se $a atri"ui o adres% de
memorie de dimensiune egal% cu +ona de memorie ocupat% da o dat% de tipul referit&
7supra $aria"ilelor dinamice pot fi efectuate orice operaii permise de tipul acestora&
<aria"ilele dinamice pot primi $alori i prin operaii de atri"uire, pot apare n e#presii relaionale
care utili+ea+% operatorii relaionali R i X\&
Cim"a.ul Kur"o Pascal permite utili+area tipului pre-definit pointer& 7cest tip de dat% este
compati"il cu orice tip referin% definit de utili+ator& :nei $aria"ile de tip pointer i poate fi atri"uit%
$aloarea adresei oric%rei $aria"ile, proceduri sau funcii definite de utili+ator& 8 astfel de adres%
poate fi o"inut% prin utili+area operatorului E, astfel6
E$aria"il%>
*ac% o $aria"il% de referin% are $aloarea NIL nseamn% c% $aria"ila respecti$% conine o
adres% imposi"il%, care nu e#ist% n +ona de memorie&
3li"erarea efecti$% a spaiului de memorie ocupat se face cu a.utorul procedurii *(SP8S3,
dup% urm%toarea regul%6
DISPOSE4variabil Creferin5>
:nde adresa +onei de memorie ce se $a eli"era este coninut% n variabilCreferin. *imensiunea
+onei de memorie eli"erat% este dat% de dimensiunea tipului de dat% referit de variabilCreferin&
*ac% dorim s% aloc%m sau s% eli"er%m n mod e#plicit un anumit num%r de octei putem
folosi procedurile GetMeM i 1reeMe&

1.3.3.16& 'robleme propuse

1& Se d% un ir de numere naturale al c%rui sf!rit este marcat prin $aloarea 1& Spunem c%
dou% numere naturale sunt asemenea dac% scrierile lor n "a+a 11 se face cu aceleai cifre 43#&
3666; i ;3635& S% se g%seasc% sec$ena de numere consecuti$e asemenea de lungime ma#im% din
irul dat i frec$enele cifrelor n scrierea numerelor date&
2& Se citesc mai multe iruri de numere naturale nenule fiecare ir termin!ndu-se la citirea
$alorii +ero& Pentru fiecare ir s% se tip%reasc% sec$ena de elemente consecuti$e de lungime
ma#im% format% din numere prime& Ca sf!rit se $or tip%ri i toate numerele prime nt!lnite& 'itirea
se $a ncheia c!nd irul citit are 1 termeni 4altfel spus la citirea a doi de +ero consecuti$i5
3& S% se scrie un program pentru determinarea reuniunii unor mulimi de numere ntregi
po+iti$e& 8 mulime se d% ntotdeauna ncep!nd pe un r!nd nou, iar sf!ritul elementelor sale este
marcat prin num%rul 1& 9ulimile se termin% la nt!lnirea mulimii $ide& Se $a tip%ri reuniunea
acestor mulimi i mulimea cu cele mai multe elemente, tip%rirea elementelor unei mulimi se $a
face n ordinea cresc%toare a $alorilor elementelor&
4& Biind date mai multe polinoame cu coeficieni reali s% se determine suma lor i
polinomul de grad ma#im& :n polinom se d% fie prin monoamele sale, fie prin grad i coeficieni&
________________________________________________________________________________
124
Structuri de date i algoritmi
_______________________________________________________________________________
'itirea polinoamelor se $a ncheia la introducerea SgraduluiT negati$&
5& Participanii la un concurs sunt identificai printr-un num%r strict po+iti$ 4num%r
legitimaie5, i o"in un puncta. 4num%r ntreg5& S% se scrie un program Pascal care citete re+ultatele
o"inute la acest e#amen i tip%rete toi candidaii ordonai cresc%tor dup% num%rul legitimaiilor,
cu puncta.ul corespun+%tor i primii m 4m \ 15 candidai n ordinea descresc%toare a puncta.elor
4dac% doi dintre acetia au puncta.e egale atunci ei se diferenia+% n ordine cresc%toare dup%
num%rul legitimaiei5&
6& S% se scrie un program care citete c!te un polinom cu coeficieni ntregi 4introdus fie
prin grad i coeficieni fie prin monoamele sale5, p!n% la nt!lnirea unui polinom de grad 1& Pentru
fiecare polinom P citit, determin% r%d%cinile naturale ale lui P i le tip%rete su" forma6
D%d%cinile naturale ale polinomului P cu coeficienii
& & &
sunt &&&
7& Se dau un polinom P 4grad U irul coeficienilor5, i un ir de triplete 4a, ", e5 pentru care
P4a5VP4"5 XR 1 si e\1, irul termin!ndu-se cu un triplet n care eX1& S% se g%seasc% r%d%cina ecuaiei
P4#5R1 din inter$alul /a,"2, prin metoda n.um%t%irii, cu eroarea e, i s% se tip%reasc%6
=)n inter$alul /a,"2 polinomul are r%d%cina &&&, apro#imat% cu preci+ia &&&4$aloarea lui e5=&
pentru fiecare triplet, iar la sf!rit s% se tip%reasc% toate r%d%cinile po+iti$e g%site&

;& S% se scrie un program care creea+% matricea p%tratic% de ordinul n 4dat5, format% din
scrierea cifrelor semnificati$e ale numerelor naturale n ordinea liniilor i tip%rete matricele 7,
72, &&& , 7m&
0& Biind date dou% numere naturale s% se scrie un program Pascal pentru a determina cel
mai mic i cel mai mare dintre ele& :n num%r poate a$ea cel mult 111 cifre& ?umerele se introduc
de la tastatur% prin cifrele lor 4repre+entare n "a+a 115&
11& S% se scrie un program Pascal care citete mai multe matrice i tip%rete matricea care
are determinantul cel mai mare& Pentru fiecare matrice programul citete ordinul matricei i
elementele n ordinea liniilor& 3#ecuia programului se ncheie c!nd se introduce 1 pentru ordinul
unei matrice&
11& S% se scrie un program care citete dou% numere naturale nenule a i " si tip%rete restul
mp%ririi lui a la "& ?umerele pot a$ea cel mult 51 cifre i sunt repre+entate n "a+a 11&
12& S% se scrie un program care tip%rete r%d%cinile raionale ale unui polinom cu
coeficieni ntregi 4dac% e#ist%5, polinom dat prin grad i coeficienii s%i&

________________________________________________________________________________
125
Structuri de date i algoritmi
_______________________________________________________________________________
II. +tructuri de date
II.1. =ista liniar) simplu &nl)n%uit)
9ulte din informaiile prelucrate de calculator sunt organi+ate ca liste6 elementele unui
$ector, irul format de numele din cartea de telefon 4lista a"onailor5, lista candidailor la admitere
ntr-o facultate, lista materialelor necesare dintr-o secie industrial%, lista locatarilor unui imo"il & *e
aceea lista ocup% un loc important ntre structurile de date u+uale& )n cele ce urmea+%, pre+ent%m
c!te$a elemente de "a+% referitoare la liste, modalit%ile de repre+entare a listelor n calculator i
unele aplicaii semnificati$e&
________________________________________________________________________________
126
Structuri de date i algoritmi
_______________________________________________________________________________
II.1.1. $e*ini%ii
Prin list% nelegem un ir 4e$entual $id5 de elemente aparin!nd unei mulimi de date 4Komescu
/100725& 9emorarea listelor liniare se poate face n mai multe moduri, n continuare pre+ent!ndu-se
unele dintre ele&
;locarea sec,en%ial) 4static%5 const% n a memora elementele listei n locaii succesi$e de
memorie, conform ordinei acestor elemente n list%> n acelai timp se memorea+% adresa de ba()
4adresa primului element al listei5& :n e#emplu tipic este cel n care elementele listei sunt memorate
ntr-un $ector, adresa de "a+% fiind adresa primului element al $ectorului&
;locarea &nl)n%uit) 4dinamic%5 presupune c% fiecare element al listei liniare este nlocuit cu o
celul) format% din dou% p%ri6 o parte conine o in*orma%ie speci*ic) al elementului i o parte cu
in*orma%ia de leg)tur), care conine adresa celulei corespun+%tor urm%torului element&
Fig.2.1. Structura unui nod al listei si#lu <nl?n9uite7
'a i la alocarea sec$enial% mai tre"uie memorat% o adres% de "a+%> n plus, partea de
leg%tur% a ultimei celule primete o $aloare ce nu poate desemna o leg%tur%&
:tili+%m forma de alocare dinamic%, ceea ce nseamn% c% n timpul rul%rii programului, n
funcie de necesit%i, se aloc% memorie suplimentar% sau se renun% la ea& Pentru alocarea dinamic%
utili+%m tipul de date referin%& Se consider% sec$ena de program cu implementarea elementelor,
element oarecare al listei care este format din informaia util% 4in*o5 i un pointer care se refer% la
urm%torul element al listei 6
8 list% liniar% simplu nl%nuit% este o structur% de forma6
Fig.2.2. Structura unei liste si#lu <nl?n9uite7
unde semnificaia notaiilor folosite este urm%toarea6
adr1, adr2, &&&, adrn repre+int% adresele din memorie ale celor n nregistr%ri>
inf1, inf2, &&&, infn repre+int% informaiile utile din cele n nregistr%ri
________________________________________________________________________________
info
successor
nod
127
Structuri de date i algoritmi
_______________________________________________________________________________
(mplementarea unui element al acestei structuri se face n felul urm%tor n lim"a.ul Pascal6
52pe
adresa 0 D nod /
nod0record
info + tip /
succesor + adresa /
end/
Aar
Eist + adresa /
?umele de =simplu nl%nuit% = pro$ine din faptul c% fiecare element al listei conine o
singur% adres% i anume adresa elementului urm%tor din list%& 7ici a$em o e#cepie pentru ultimul
element, care are c!mpul de adres% cu$!ntul cheie ?(C 4 semnific!nd =nici o adresa= 5&
II.1.2. Opera%ii speci*ice listei
'oninutul listei se poate odi'ica prin urm%toarele operaii6
a& ini%iali(area unei liste ca o list% $id%>
"& inserarea de noi elemente n orice loc din list%>
c& c)utarea unor elemente n orice po+iie din list%>
d& ?tergerea de elemente din orice po+iie a listei>
e& modi*icarea unui element dintr-o po+iie dat%>

7lte operaii sunt cele de caracteri)are& 7cestea nu modific% structura listelor, ci furni+e+%
informaii despre ele & *intre operaiile de caracteri+are $om considera n continuare6
determinarea lungimii listei 4 num%rul de elemente 5 >
locali+area elementului din list% care ndeplinete o anumit% condiie >
a. ;lgoritmul /reare CIni%iali(areD
8peraia reali+ea+% iniiali+area listei ca o list% $id%, adic% o list% f%r% elemente6
&
Procedura )reare
Eist 0 NIL
EndF
b. ;lgoritmul Inserare

b1. InserareEFnceput G inser%m un element la nceputul listei>
- alocarea de spaiu elementului nou>
- modificare de leg%turi 4 a i " 5>
________________________________________________________________________________
12;
Structuri de date i algoritmi
_______________________________________________________________________________

Fig.2.3. O#era9ia de inserare la <nce#utul unei liste si#lu <nl?n9uite7
Procedure #nserareCnceput ' Eist , infoCnou &
Begin
neF'adr&/
adrD.succesor 0 Eist/
Eist 0 adr/
adrD.info 0 infoCnou/
end7
b2. InserareE+*Br?it G inser%m un element la sf!ritul listei >

Fig.2.4. O#era9ia de inserare la s'Hr=itul unei liste si#lu <nl?n9uite7
Sec$ena de operaii necesar% 6
- g%sirea adresei ultimului element >
- alocarea spaiului elementului nou >
- a 4 ultimul de$ine penultimul 5 >
- " 4 noul element de$ine ultimul 5 >
- introducerea de informaii >
Procedure #nserareC2frit ' Eist , infoCnou &
Dar
ultim + adresa/
Begin
ultim 0 Eist/
________________________________________________________________________________
120
Structuri de date i algoritmi
_______________________________________________________________________________
F*ile ultimD.succesor 1G 9#E do
ultim 0 ultimD.succesor/
nou 'adr&/
ultimD. succesor 0 adr/
adrD.succesor 0 9#E/
adrD.info 0 infoCnou/
end>
b3. InserareE6iGloc G inser%m un element nou dup% un element dat din list%, a c%rui adres% este
numit% dup>
Fig.2.5. O#era9ia de inserare <n interiorul unei liste si#lu <nl?n9uite7
Sec$ena de operaii necesar%6
- alocare de spaiu >
- succesorul noului element de$ine elementul listei 4 pas a& 5 >
- succesorul elementului H dup% H de$ine noul element 4pas "& 5 >
- introducem informaia nou% >
Procedura #nserareC#nterior ' Eist , dup , infoCnou &
Begin
neF'adr&/
adrD.succesor 0 dupD.succesor/
dupD.succesor 0 adr/
adrD.info 0 infoCnou/
End>
c. ;lgoritmul c)utare
7lgoritmul caut% n lista simplu nl%nuit% nodul care conine informaia infoCcutat& *ac%
ea e#ist%, funcia de c%utare $a returna adresa nodului ce conine informaia c%utat%& *ac%
informaia nu e#ist%, atunci funcia $a returna o adres% $id% 4NIL5&
1unction )utare ' Eist , infoCcutat &
Dar
________________________________________________________________________________
131
Structuri de date i algoritmi
_______________________________________________________________________________
adr+ adresa/
Begin
adr 0 Eist/
I$ile adr 1G NIL do
i' adrD.info 0 infoCcutat
t$en %egin
cutare 0 adr>
E*itF
end
else
adr 0 adrD.succesor/
)utare J NILF
End7
d. ;lgoritmul Htergere
d1. HtergereEFnceput G tergerea elementului de la nceputul listei>
Sec$ena de operaii necesar%6
- sal$area adresei de eli"erare>
- primul element de$ine succesorul fostului prim element>
- eli"erarea memoriei>
Fig.2.6. O#era9ia de =tergere la <nce#utul unei liste si#lu <nl?n9uite7
Procedure HtergereCnceput ' Dar Eist &
Dar liber + adresa/
Begin
liber 0 Eist/
Eist 0 EistD.succesor/
DISPOSE ' liber &/
EndF
d2. HtergereE+*Br?it: tergerea ultimului element din list%>

________________________________________________________________________________
131
Structuri de date i algoritmi
_______________________________________________________________________________
Fig.2.. O#era9ia de =tergere la s'Hr=itul unei liste si#lu <nl?n9uite7
Sec$ena de operaii necesar%6
- g%sirea adresei penultimului element din list% >
- sal$area adresei elementului de ters >
- succesorul penultimului element de$ine NIL>
- eli"erarea memoriei >
Procedure HtergereaC2frit ' I Dar J Eist &
Dar penultim, liber + adresa/
Begin
penultim 0 Eist/
I$ile penultimD.succesorD.succesor 1G NIL do
penultim 0 penultimD.succesor/
liber 0 penultimD. succesor/
penultimD.succesor 0 0I=/
DISPOSE ' liber &/
EndF
d3. HtergereE6iGloc: tergerea unui element dup% un element dat din list%, a c%rui adres% este
numit% dup>


Fig.2.!. O#era9ia de =tergere <n interiorul unei liste si#lu <nl?n9uite7
Sec$ena de operaii necesar%6
________________________________________________________________________________
132
Structuri de date i algoritmi
_______________________________________________________________________________
- sal$area adresei de eli"erat>
- succesorul lui Hdup%H de$ine succesorul succesorului acestuia 4 pas a&5>
- eli"erarea memoriei>
Procedure HtergereC(i>loc ' Eist , dup &
DAR li"er 6 adresa>
Begin
li"er R dup%r&succesor>
dup%r&succesor R dup%r&succesorr&succesor>
DISPOSE 3 li"er 5>
End>
e. ;lgoritmul modi*icare
7lgoritmul apelea+% funcia de c%utare n lista simplu nl%nuit%, c%ut!nd nodul care conine
informaia nrcutat& *ac% ea e#ist%, se modific% informaia e#istent% n acel nod cu informaia
nrmodificat& *ac% informaia nu e#ist%, atunci procedura $a returna o adres% $id% 4NIL5&
Procedure (,D#<#)A?- ' Eist , nrcutat , nrmodificat &
Begin
adr+0 )KLTA?- ' Eist , nrcutat &/
i' adr R NIL t$en
Irite ' M 0u exista in*orma%ia c)utat) III M &
else
%egin
Irite 'M Exista in*orma%ia c)utat) III M&
adrD.info+0nrmodificat
endF
EndF

II.1.3. 'robleme propuse
1&5 S% se cree+e o list% liniar% simplu nl%nuit% cu trei noduri, s% se iniiali+e+e elementele listei&
2&5 *efinii i iniiali+ai o list% simplu nl%nuit%& 3fectuai tergerea temporar% a unui element&
7fiai lista modificat%, reacti$ai elementul&
3&5 Se consider% o list% ce conine elemente care au ca informaie util%6 cod produs, cantitate, pre&
Scriei i apelai funcia care calculea+% total $aloare pentru materialele e#istente n list%&
4&5 S% se scrie procedurile care reali+ea+% diferite modalit%i de tip%rire a unei liste simplu nl%nuite&
________________________________________________________________________________
133
Structuri de date i algoritmi
_______________________________________________________________________________
5&5 S% se scrie programul pentru adunarea a dou% matrice rare, memorate su" forma de liste liniare
simplu nl%nuite&
6&5 S% se construiasc% o list% liniar% simplu nl%nuit% i apoi s% se scrie funciile de inserare a unui
element n list% la nceput de list%, la sf!ritul listei i n interiorul listei&
7&5 Scriei funcia care efectuea+% copierea unei liste nerecursi$, cu eliminarea elementelor ce au ca
informaie util% o $aloare mai mic% dec!t un ni$el specificat de un parametru&
;&5 9odelai i programai ser$irea = peste r!nd = la distri"uirea unor produse deficitare, folosind o
structur% de date de tip lista liniar% simplu nl%nuit%&
0&5 ?um%rai elementele po+iti$e, negati$e i nule ale unei liste ntr-o funcie care dup% apelare,
returnea+% un pointer la un $ector cu trei componente, se stochea+% re+ultatele parcurgerii listei&
11&5 Scriei programul pascal pentru inserarea unui element ntr-o list% simplu nl%nuit% ale c%rei
elemente sunt de.a sortate cresc%tor, pe po+iia care p%strea+% lista ordonat%&
11&5 S% se genere+e o list% simpl% nl%nuit% care s% conin% culoarea, marca i num%rul de
nmatriculare al unor autoturisme aflate la o coad% la "en+in%& S% se mute toate mainile de culoare
al"% n fa%, iar cele roii n spate& S% se elimine din coad% mainile cu num%r X 1111& S% se
determine num%rul mainilor cu marca =*7'(7=&
12&5 Biind dat% o matrice rar%, s% se alc%tuiasc% o list% nl%nuit% n care elementele au forma 4 linia,
coloana, $aloarea5 i $aloarea diferit de 1&
S% se liste+e elementele alate pe diagonala principal% 4toate5&
S% se determine elementul minim de pe diagonala principal% 4toate5&
S% se elimine elementul de $aloare ma#im%&
13&5 S% se memore+e o matrice rar% su" forma unei liste nl%nuite, n care elementele matricei $or
fi reinute n ordinea lor natural% 4pe linii5, indiferent de ordinea introducerii lor& S% se tip%reasc%
aceast% matrice n forma normal% 4toate elementele, inclusi$ cele nule5&
II.2. =ista dublu &nl)n%uit)

II.2.1. $e*ini%ii

8"ser$%m c% odat% pornit% c%utarea ntr-o list%, nu ne mai putem ntoarce napoi doar dac% o
lu%m de la nceput& 7cest lucru nu este deloc con$ena"il, n afar% de situaia n care nu a$em de ce
s% ne ntoarcem napoi& 3#ist% operaii precum6 inserarea naintea elementului curent din list% sau
________________________________________________________________________________
134
Structuri de date i algoritmi
_______________________________________________________________________________
tergerea elementului curent, care presupun referirea la elementul dinaintea elementului curent -
operaie care se reali+ea+% cu dificultate& 9ul mai comode sunt listele de forma pre+entat% n figura
urm%toare, liste du"lu nl%nuite cu posi"ilitatea de na$igare du"l% 4Komescu, (&, /100725&
9emorarea listelor liniare se poate face n mai multe moduri, n continuare pre+ent!ndu-se
unele dintre ele&
7locarea sec$enial% 4static%5 const% n a memora elementele listei n locaii succesi$e de
memorie, conform ordinei acestor elemente n list%> n acelai timp se memorea+% adresa de "a+%
4adresa primului element al listei5& :n e#emplu tipic este cel n care elementele listei sunt memorate
ntr-un $ector, adresa de "a+% fiind adresa primului element al $ectorului&
7locarea nl%nuit% 4dinamic%5 presupune c% fiecare element al listei liniare este nlocuit cu o
celul% format% din dou% p%ri6 o parte conine o informaie specific% al elementului i o parte cu
informaia de leg%tur%, care conine adresa celulei corespun+%tor urm%torului element&
'a i la alocarea sec$enial% mai tre"uie memorat% o adres% de "a+%> n plus, partea de
leg%tur% a ultimei celule primete o $aloare ce nu poate desemna o leg%tur%&

8 list% liniar% du"lu nl%nuit% este o structur% de forma6


Fig.2.". O#era9ia de =tergere <n interiorul unei liste si#lu <nl?n9uite7
Cista du"lu nl%nuit% este un tip special de list%, care necesit% un spaiu mare de memorie
mai mare, n care ns% n afar% de informaia util%, mai conine i informaia de leg%tur% a fiec%rui
element, care cuprinde at!t adresa elementului precedent n list% 4predecesor5, c!t i adresa
elementului urm%tor 4succesor5& *ac% elementul succesor sau cel predecesor nu e#ist%, pointerii
respecti$i au $aloarea ?(C&
3lementul care are adresa succesorului ?(C se $a numi primul element al listei n raport cu
leg%tura succesor i ultim element n raport cu leg%tura predecesor. 3lementul care are adresa
predecesorului ?(C se $a numi ultim element al listei n raport cu leg%tura succesor i primul
element n raport cu leg%tura predecesor.
:tili+%m forma de alocare dinamic%, ceea ce nseamn% c% n timpul rul%rii programului, n
funcie de necesit%i, se aloc% memorie suplimentar% sau se renun% la ea& Pentru alocarea dinamic%
utili+%m tipul de date referin%& Se consider% sec$ena de program cu implementarea elementelor,
element oarecare al listei care este format din informaia util% 4in*o5
i un pointer care se refer% la urm%torul element al listei6

T2#e
________________________________________________________________________________
135
Structuri de date i algoritmi
_______________________________________________________________________________
adresa R r nod>
nodRrecord
info 6 tip>
succesor 6 adresa>
predecesor 6 adresa>
endF
Dar
Cist 6 adresa>
Obser,a%ie 2.1.: din p%cate cei doi pointeri din fiecare element al listei du"lu nl%nuite consum%
destul de mult% memorie, i de aceea listele simplu nl%nuite sunt mai des folosite&
II.2.2. Opera%ii speci*ice listei
Structura i coninutul listei se poate modifica prin urm%toarele operaii6
a& iniiali+area unei liste ca o list% $id%>
"& inserarea de noi elemente n orice loc din list%>
c& c%utarea unor elemente n orice po+iie din list%>
d& tergerea de elemente din orice po+iie a listei>
e& modificarea unui element dintr-o po+iie dat% >
7lte operaii sunt cele de caracteri+are& 7cestea nu modific% structura listelor, ci
furni+ea+% informaii despre ele& *intre operaiile de caracteri+are $om considera n continuare6
- determinarea lungimii listei 4 num%rul de elemente 5>
- locali+area elementului din list% care ndeplinete o anumit% condiie>
Setul de operaii, considerat n cele ce urmea+%, utili+ea+% po+iia curent% n list%, definit% ca
po+iia elementului accesi"il la un moment dat& 8peraiile de prelucrare se refer% la elementul din
po+iia curent%& )n afara acestora, sunt definite operaii care asigur% modificarea po+iiei curente&
S% anali+%m fiecare operaie n parte6
a. ;lgoritmul creare: are loc iniiali+area listei ca o list% $id%, adic% o list% f%r% elemente>


Procedura )reare
Eist R NIL>
EndF
b. ;lgoritmul Inserare
b1. InserareEFnceput6 inser%m un element la nceputul listei >
________________________________________________________________________________
136
Structuri de date i algoritmi
_______________________________________________________________________________

Fig.2.1#. O#era9ia de inserare la <nce#utul unei liste du%lu <nl?n9uite7
Sec$ena de operaii necesar%6
- alocarea de spaiu elementului nou >
- predecesorul elementului nou de$ine ?(C >
- se face leg%tura dintre succesorul noului element i Cist >
- predecesorul lui Cist de$ine noul element >
- Cist preia adresa noului element >
- introducerea informaiei >

Procedure #nserareCnceput ' =ar Eist , infoCnou &
neF'adr &/
adrD.predecesor 0 NIL/
adrD.succesor 0 Eist /
EistD.predecesor 0 adr /
Eist 0 adr /
adrD.info 0 infoCnou /
EndF
b2. InserareE+*Br?it : inser%m un element la sf%ritul listei >
Fig.2.11. O#era9ia de inserare la s'Hr=itul unei liste du%lu <nl?n9uite7
________________________________________________________________________________
137
Structuri de date i algoritmi
_______________________________________________________________________________
Sec$ena de operaii necesar%6
- g%sirea adresei ultimului element >
- alocarea spaiului elementului nou >
- predecesorul noului element de$ine ultimul >
- succesorul ultimului element de$ine noul element >
- introducerea de informaii >
- modificarea adresei ultimului element >

Procedure #nserareC2frit ' =ar Eist , infoCnou &
Dar
ultim 6 adresa >
Begin
ultim R Cist>
I$ile ultimr&succesor X\ NIL do
ultim R ultimr&succesor
nou 4adr5>
adrr&predecesor R ultim>
ultimr& succesor R adr>
adrr&succesor R NIL>
adrr&info R info_nou>
ultim R adr>
EndF
"3& (nserare_9i.loc6 inser%m un element nou dup% un element dat din list%, a c%rui adres% este
numit% dup>

Fig.2.11. O#era9ia de inserare <n interiorul unei liste du%lu <nl?n9uite7
Sec$ena de operaii necesar%6
- alocare de spaiu >
- predecesorul noului element de$ine elementul listei >
- predecesorul succesorului lui Hdup%H de$ine noul element >
- succesorul elementului nou de$ine succesorul elementului Hdup%H>
- introducem informaia nou% >

________________________________________________________________________________
13;
Structuri de date i algoritmi
_______________________________________________________________________________
Procedura #nserareC(i>loc ' =ar Eist , dup , infoCnou &
neF 'adr& /
adrD.predecesor 0 dup /
dupD.succesorD.predecesor 0 adr /
adrD.succesor 0 dupD.succesor /
adrD.info 0 infoCnou /
EndF
c. ;lgoritmul /)utare:
7lgoritmul caut% n lista du"lu nl%nuit% nodul care conine informaia infoCcutat& *ac% ea
e#ist%, funcia de c%utare $a returna adresa nodului ce conine informaia c%utat%& *ac% informaia
nu e#ist%, atunci funcia $a returna o adres% $id% 4NIL5& '%utarea se poate face "idirecional, pe
leg%tura succesor sau pe leg%tura predecesor&
1unction )utare ' Eist , infoCcutat &+ adresa
=ar
adr + adresa /
Begin
adr+0Eist>
I$ile adr X \ NIL do
i' adrr&info R nrcautat t$en
%egin
'%utare R adr >
e*it>
end
else
adr 0 adrD.succesor >
'%utare R NIL >
EndF
d. ;lgoritmul Htergere
d.1 HtergereEFnceput : tergerea elementului de la nceputul listei >
Fig.2.12. O#era9ia de =tergere la <nce#utul unei liste du%lu <nl?n9uite7
________________________________________________________________________________
130
Structuri de date i algoritmi
_______________________________________________________________________________
Sec$ena de operaii necesar%6
- sal$area adresei de eli"erare >
- predecesorul succesorului lui Cist s% de$in% ?(C >
- Cist de$ine succesorul primului element >
- predecesorul lui Cist $a de$ine ?(C >
- eli"erarea memoriei >

Procedura HtergereCnceput ' =ar Eist &
=ar
liber + adresa /
Begin
i' Eist 0 NIL t$en
Irite4= Cista este $id% =5
else
li"er R Cist >
Cist R Cistr&succesor >
Cistr&predecesor R ?(C >
DISPOSE 4 li"er 5 >
EndF
d.2 HtergereE+*Br?it : tergerea ultimului element din list% >

Fig.2.13. O#era9ia de =tergere la s'Hr=itul unei liste du%lu <nl?n9uite7

Sec$ena de operaii necesar%6
- g%sirea adresei ultimului element din list% >
- sal$area adresei elementului de ters >
- succesorul predecesorului lui ultim de$ine ?(C>
- eli"erarea memoriei >

Procedure HtergereaC2frit ' =ar Eist &
Dar
ultim , liber + adresa /
________________________________________________________________________________
141
Structuri de date i algoritmi
_______________________________________________________________________________
Begin
ultim 0 Eist /
I$ile ultimD.succesor 1 G NIL do
ultim 0 ultimD.succesor /
liber 0 ultim /
ultimD.predecesorD.succesor 0 NIL >
*(SP8S34 li"er 5 >
EndF
d.3 HtergereE6iGloc : tergerea unui element dup% un element dat din list%, a c%rui adres% este
numit% dup>
>
Fig.2.14. O#era9ia de =tergere la s'Hr=itul unei liste du%lu <nl?n9uite7
Sec$ena de operaii necesar%6
- sal$area adresei de eli"erat >
- predecesorul succesorului Hdup%H de$ine predecesorul lui Hdup%H >
- succesorul predecesorul Hdup%H de$ine succesorul lui Hdup%H >
- eli"erarea memoriei >
Procedure HtergereC(i>loc ' =ar Eist, dup &
Dar
liber + adresa /
Begin
liber 0 dup /
dupD.succesorD.predecesor 0 dupD.succesor /
dupD.predecesorD.succesor 0 dupD.succesor /
DISPOSE 4 liber 5>
EndF
e. 6odi*icare C;ctuali(areD :
7lgoritmul apelea+% funcia de c%utare n lista du"lu nl%nuit%, c%ut!nd nodul care conine
informaia nrcutat& *ac% ea e#ist%, se modific% informaia e#istent% n acel nod cu informaia
________________________________________________________________________________
141
Structuri de date i algoritmi
_______________________________________________________________________________
nrmodificat& *ac% informaia nu e#ist%, atunci procedura $a returna o adres% $id% 4NIL5& '%utarea
informaiei de modificat se poate face pe am"ele leg%turi, predecesor i succesor&
Procedure (,D#<#)A?- ' Eist , nrcutat , nrmodificat &
Begin
adr +0 )KLTA?- ' Eist , nrcutat &/
i' adr R NIL t$en
Irite 4 H 9u exista informaia cutat 333 H 5 >
else
%egin
Irite 4H -xista informaia cutat 333 H5 >
adrD.info +0 nrmodificat /
endF
EndF
Pro%lee #ro#use
1&5 S% se construiasc% o list% du"lu nl%nuit% i s% se scrie elementele acesteia n am"ele sensuri n
funcie de opiune& S% se tearg% apoi un element al listei i s% tip%reasc% lista re+ultat%&
2&5 S% se construiasc% o list% du"lu nl%nuit% cu 5 elemente citite dintr-un $ector& S% se scrie funcia
recursi$% de tip%rire a listei n am"ele sensuri& S% se scrie funcia de tergere a unui element din
list%&
3&5 Scriei i apelai funcia care $erific% dac% matricea rar% p%tratic% ale c%rei elemente sunt stocate
ntr-o list% conine numai elemente ale diagonalei principale&
4&5 S% se construiasc% un ar"ore genealogic 4folosind o list% nl%nuit%5 utili+!nd pentru fiecare
mem"ru introdus leg%turile de tip 6 p%rinte, copil 4primul5, frate, so_soie& S% se g%seasc%, pentru
mem"ru dat, toi $erii de grad ( 4copiii frailor p%rinilor5&
5&5 S% se cree+e o list% nl%nuit% cu articole cu structura 6 ?ume_student, 7n, Arup%, 9edie& S% se
liste+e toi studenii cu media \ 0 iar apoi s% se elimine din list% toi studenii din anul 5&
6&5 Biind dat% o matrice ale c%rei elementele repre+int% localit%i, s% se construiasc% o list%, n care
pentru fiecare localitate se $or memora leg%turile cu localit%ile n$ecinate n cele patru direcii 4?,
3, S, <5& S% se parcurg% un traseu, plec!nd de la o anumit% localitate de start, urm!nd un ir de
direcii 4 Se $or ignora direciile inaccesi"ile5&
7&5 8 matrice rar% poate fi memorat% printr-o list% du"lu nl%nuit% a$!nd ca elemente elementele
nenule ale matricei respecti$e& Biecare linie sau coloan% $a fi repre+entat% printr-o list% du"lu
nl%nuita Se cere un program care s% permit% memorarea unei astfel de matrice rare i efectuarea
de operaii de citire, adunare, sc%dere sau nmulire i de asemenea tip%rirea unei matrice&
________________________________________________________________________________
142
Structuri de date i algoritmi
_______________________________________________________________________________
;&5 S% se construiasc% o list% nl%nuit% cu componentele de forma 6 Y
i
, Ceg_:rm, Ceg_Prim, unde
Y
i
? i Y
i
X Y
.
pentru i X ., Ceg_:rm este adresa urm%torului element din list%, iar Ceg_Prim este
adresa ultimului num%r prim dinaintea lui Y
i
& S% se liste+e toate numerele Y
i
n ordine cresc%toare,
apoi doar numerele prime din list% n ordine descresc%toare&

0&5 Se d% o list% nl%nuit%& Se cere o procedur% care s% permit% ad%ugarea unui element pe po+iia n>
4dac% lista conine mai puine de n-1 elemente, ad%ugarea se $a efectua n coada listei5 i o
procedur% care s% efectue+e tergerea elementului de pe po+iia n 4dac% lista conine mai puin de n
elemente, se $a terge ultimul element5&
11&5 Se citete un ir Y
1
, Y
2
, &&&, Y
?
de numere naturale distincte i un num%r natural " \ 1, n funcie
de care irul dat se poate mp%ri n " su"iruri astfel6 Y
i
S
a
dac% restul mp%ririi lui Y
i
la " este a&
S% se construiasc% o list% de forma6 Y
i
, Ceg_Sir, Ceg_3lem, unde Ceg_Sir este adresa primului
element din urm%torul su"ir, iar Ceg_3lem este adresa urm%torului element din acelai su"ir&
Pentru un num%r a dat, s% se liste+e su"irul S
a
&
11&5 S% se depun% numerele reale Y
1
, Y
2
, &&&, Y
?
ntr-o list%, apoi s% se ordone+e cresc%tor aceast%
list% folosind o procedur% care aduce elementul minim pe prima po+iie i o procedur% care mut%
elementul pe ultima po+iie&
12&5 Se d% o mulime de maini caracteri+ate prin culoare, marc%, num%r& S% se construiasc% o list%
cu toate mainile a$!nd acea culoare& S% se liste+e numerele de nmatriculare ale mainilor care au o
culoare i o marc% dat%&
13&5 Biind dat% o list% cu numerele naturale Y
1
, Y
2
, &&&, Y
n
, s% se elimine elementele care se repet%,
apoi dup% fiecare element s% se adauge di$i+orii s%i&
14&5 Se dau numerele reale a, Y
1
, Y
2
, &&&, Y
n
& S% se construiasc% o list% care s% poat% fi parcurs% n
am"ele sensuri, apoi s% se elimine din list% primul i ultimul element egal cu a&
II.3. +ti,a Cstac8D
II.3.1. 4eneralit)%i
8 sti$% 4n engle+% stac85, este o list% linear% de un tip special, n care ad%ugarea sau
scoaterea unui element se face la un singur cap%t al listei, numit $!rful sti$ei 47ho et al& /10;725&
3lementul introdus primul n sti$% poart% numele de ba$ a stivei& 8 sti$% f%r% nici un element se
numete stiv vid sau stiv goal& 'a orice list% liniar%, o sti$% poate fi reali+at% practic
4implementat%5 fie folosind o repre+entare static% 4sec$enial%5, fie prin repre+entare dinamic%
4nl%nuit%5& (ndiferent de repre+entare, implementarea presupune alocarea unui spaiu limitat, dac%
el este n ntregime ocupat, spunem c% a$em stiva este plin&
Sti$a se poate asem%na unui $raf de farfurii ae+at pe o mas%, modalitatea cea mai comod%
________________________________________________________________________________
143
Structuri de date i algoritmi
_______________________________________________________________________________
de a pune o farfurie fiind n $!rful sti$ei, tot de aici fiind cel mai simplu s% se ia o farfurie& *atorit%
locului unde se acionea+% asupra sti$ei, operaiile de inserare i e#tragere, aceste structuri se mai
numesc de tip C(B8 4Last In - 1irst Out5, adic% ultimul sosit - primul ieit&
II.3.2. +ti,a J alocare static)
)n repre$entarea secvenial, elementele sti$ei $or fi memorate ntr-un $ector 4ta"el5 numit
2tiva cu n componente, n fiind capacitatea ma#im% a sti$ei& <om nota cu T,% num%rul efecti$ de
elemente din sti$%, i anume6
T,% R 1 j $a repre+enta o sti$% goal% 4deci nu $om mai putea e#trage elemente din sti$%5
T,% \R n - $a repre+enta o sti$% plin% 4deci nu $om mai putea insera elemente n sti$%5


5O'

Fig.2.15. Re#re)entare unei sti(e sec(en9iale7
8peraiile efectuate asupra sti$a sunt6
a& testare capacitate superioar% 4sti$% plin%5>
"& testare capacitate inferioar% 4sti$% goal%5>
c& inserare de noi elemente, operaie numit% P:Sc
d& e#tragere 4tergere5 din sti$%, operaie numit% P8P&
a.5estare capacitate superioar) Csti,) plin)DK
1unction <ullC2tac7'T,%+INTEGER&+ boolean
Begin
I' T,% 0 n t$en
<ullC2tac7+0T?L-
else
<ullC2tac7+0<AE2-/
EndF
a.5estare capacitate in*erioar) Csti,) goal)DK
________________________________________________________________________________
144
Structuri de date i algoritmi
_______________________________________________________________________________
1unction -mpt5C2tac7'T,%+INTEGER&+ boolean
Begin
I' T,% 0 8 t$en
-mpt5C2tac7+0T?L-
else
-mpt5C2tac7+0<AE2-/
EndF
c.Inserare - '1+>K
Procedure %L2A 'DAR T,%+INTEGER, infoCnou+tip&
Begin
I' NOT <LEEC2tac7'T,%4 t$en
Begin
2tivaIT,%J+0infoCnou/
T,%0T,%N!/
else
Iriteln'O,=-?<E,P:&/
EndF
d.Extragere - 'O'K
1unction %op 'DAR T,%+INTEGER&+tip
Begin
I' NOT -mpt5C2tac7'T,%4 t$en
Begin
T,%0T,%-!/
%op+02tivaIT,%J/
else
Iriteln'OL9D-?<E,P:&/
EndF
II.3.3. +ti,a J alocare dinamic)
Fn repre(entarea dinamic), sti$a $a fi implementat% cu a.utorul unei liste simplu nl%nuite&
7dresa ultimului element din sti$% $a fi numit% T,%, a$!nd semnificaia de a indica spre elementul
din $!rful sti$ei& Structura $a fi manipulat% ca i orice list% simplu nl%nuit% prin adresa primului
element, notat C(SK, care $a semnifica "a+a sti$ei&
________________________________________________________________________________
145
Structuri de date i algoritmi
_______________________________________________________________________________
Fig.2.16. Re#re)entare unei sti(e dinaice7
8peraiile efectuate asupra sti$a sunt6
a& testare capacitate inferioar% 4sti$% goal%5>
"& inserare de noi elemente, operaie numit% P:Sc
c& e#tragere 4tergere5 din sti$%, operaie numit% P8P&
Obs. 2.2.: 9emoria fiind alocat% dinamic nu este necesar testul de capacitate superioar%&
a.5estare capacitate in*erioar) Csti,) goal)DK
1unction -mpt5C2tac7'T,%+adresa&+ boolean
Begin
I' T,% 0 NIL t$en
-mpt5C2tac7+0T?L-
else
-mpt5C2tac7+0<AE2-/
EndF
c.Inserare - '1+>K
Procedure %L2A 'DAR T,%+adresa, infoCnou+tip&
Begin
#nserareCsfrsit'E#2T,T,%,infoCnou&
EndF
d.Extragere - 'O'K
1unction %,% 'DAR T,%+adresa&+tip
Begin
I' NOT -mpt5C2tac7'T,%4 t$en
________________________________________________________________________________
C(SK
T,%
146
Structuri de date i algoritmi
_______________________________________________________________________________
Begin
HtergereCsfrsit'E#2T,T,%&
else
Iriteln'OL9D-?<E,P:&/
EndF
II.3.4. 'robleme propuse
1&5 S% se reali+e+e e$idena materialelor e#istente,ntr-o maga+ie& Ca intrarea n stoc a materialelor
pe "a+a de factur%, se adaug% elemente unei sti$e& Ca eli"erarea spre consum producti$, se terge
$!rful sti$ei& Procedeul continu% dup% cum a$em intr%ri sau consumuri de materiale& Se $a scrie i
funcia pentru num%rarea facturilor&
2&5 Se consider% o sti$% ne$id% de lungime mai mare ca 5& Scriei funcia pentru dealocarea
memoriei ocupate de aceast% sti$% &
3&5 8 echip% reali+ea+% demontarea unei instalaii cu dispunerea reperelor i su"-ansam"lelor ntr-
un mod corespun+%tor repar%rii i mai apoi asam"l%ri& 8 alt% echip% efectuea+% asam"larea& Scriei
programul care afiea+% lista operaiilor de asam"lare tiind ca aceste operaii sunt specificate prin
numele reperelor sau su"-ansam"lelor&
4&5 Se consider% mulimea literelor mari i mulimea literelor mici& S% se construiasc% pornind de la
un ir oarecare de litere, dou% sti$e ce conin literele mari, respecti$, literele mici&
S% se afie+e literele mici i mari n ordinea n care au fost introduse&
5&5 Scriei i apelai funcia de tergere a unei sti$e p!n% la elementul a c%rui informaie util%
coincide cu un parametru dat&
6&5 *!ndu-se sti$ele 7 i J care conin cod produs, cantitate i, respecti$, cod produs i pre, creai
sti$a ale c%rei elemente conine cod produs, cantitate i pre& Ca apelarea funciei, elementele sunt
presupuse sortate dup% cod&
7&5 *escompunei folosind o funcie pe care o apelai, o sti$% n dou% sti$e cu num%r egal de
elemente, numai dac% acest lucru este posi"il&
;&5 A%sii o formul% simpl% pentru num%rul de permut%ri de n elemente, ce pot fi o"inute cu
a.utorul unei sti$e&
0&5 7r%tai c% permutarea p
!
, p
"
, &&&, p
n
se poate o"ine pornind de la 1, 2, &&&, n utili+!nd o sti$% dac%
i numai dac% nu e#ist% indici i 1 > 1 7 astfel nc!t p
G
1 p
7
1 p
i
.
________________________________________________________________________________
147
Structuri de date i algoritmi
_______________________________________________________________________________
II.4. /oada CLueueD
II.4.1. 4eneralit)%i
)n prelucrarea unei mulimi de elemente pot s% fie utili+ate diferite metode de alegere a
urm%torului element supus prelucr%rii 4*ale i Cill` /10;;25& 7ceast% alegere poate s% fie aleatoare
sau s% respecte un anumit criteriu& *e e#emplu, pentru o mulime la care este semnificati$% ordinea
n care elementele au fost introduse n mulime se poate considera un criteriu care s% se "a+e+e pe
aceast% ordine& 9odelul intuiti$ al acestei structuri este coada care se formea+% la un maga+in,
lumea se aea+% la coad% la sf!ritul ei, cei care se g%sesc la nceputul co+ii sunt ser$ii, i p%r%sesc
apoi coada&
/oada repre+int% o alt% categorie special% de list% liniar%, n care toate elementele se
inserea+% la un cap%t 4sf!rit5 i se e#trag 4terg5 la cel%lalt cap%t 4nceput5&
Prelu!nd o terminologie din domeniul sistemelor de operare, coada mai poart% numele de
list% FIFO 41irst In - 1irst Out5, adic% lprimul intrat n coad% $a fi primul care $a iei din coad%T&

II.4.2. /oada J alocare static)
)n repre$entarea secvenial, elementele co+ii $or fi memorate ntr-un $ector 4ta"el5 numit
coada cu n componente, n fiind capacitatea ma#im% a sti$ei& <om nota cu <ront inde#ul
elementului ce urmea+% a fi ser$it, iar cu ?ear inde#ul primului element li"er din coad%& *ac%6
<ront R ?ear j $a repre+enta o coad% goal% 4deci nu $om mai putea e#trage elemente din coad%5
?ear \R n - $a repre+enta o coad% plin% 4deci nu $om mai putea insera elemente n coad%5
Front 3ear

Fig.2.1. Re#re)entare unei co)i sec(en9iale7
8peraiile efectuate asupra co+ii sunt6
e& testare capacitate superioar% 4sti$% plin%5>
f& testare capacitate inferioar% 4sti$% goal%5>
g& inserare de noi elemente, operaie numit% -96L-L->
h& e#tragere 4tergere5 din sti$%, operaie numit% D-6L-L-&
________________________________________________________________________________
14;
e#tragere inserare
Structuri de date i algoritmi
_______________________________________________________________________________
a. 5estare capacitate superioar) Ccoad) plin)DK
1unction <ullC6ueue'?ear+INTEGER&+ boolean
Begin
I' ?ear 0 n t$en
<ullC6ueue+0T?L-
else
<ullC 6ueue+0<AE2-/
EndF
b. 5estare capacitate in*erioar) Ccoad) goal)DK
1unction -mpt5C 6ueue '<ront, ?ear+INTEGER&+ boolean
Begin
I' <ront 0 ?ear t$en
-mpt5C 6ueue+0T?L-
else
-mpt5C 6ueue+0<AE2-/
EndF
c.Inserare - E0M1E1EK
Procedure -96L-L- 'DAR ?ear+INTEGER, infoCnou+tip&
Begin
I' NOT <LEEC6ueue'?ear& t$en
Begin
)oadaI?earJ+0infoCnou/
?ear0?earN!/
else
Iriteln'O,=-?<E,P:&/
EndF
d.Extragere - $EM1E1EK
1unction D-6L-L-'DAR <ront+INTEGER&+tip
Begin
I' NOT -mpt5C6ueue'<ront, ?ear4 t$en
Begin
DeQueue+0coadaI<rontJ/
<ront0<rontN!/
else
________________________________________________________________________________
140
Structuri de date i algoritmi
_______________________________________________________________________________
Iriteln'OL9D-?<E,P:&/
EndF
II.4.3. /oada J alocare dinamic)
Fn repre(entarea dinamic), coada $a fi implementat% cu a.utorul unei liste simplu
nl%nuite& 7dresa ultimului element din sti$% $a fi numit% ?ear, a$!nd semnificaia de a indica
adresa ultimul element inserat n coad%& 7dresa primului element din sti$% $a fi numit% <ront, a$!nd
semnificaia de a indica adresa primului element inserat n coad%, deci a elementului care urmea+% a
fi e#tras&
Fig.2.16. Re#re)entare unei sti(e dinaice7
8peraiile efectuate asupra sti$a sunt6
a& testare capacitate inferioar% 4coad% goal%5>
"& inserare de noi elemente n coad%, operaie numit% -96L-L->
c& e#tragere 4tergere5 din coad%, operaie numit% D-6L-L-&
Obs. 2.2.: 9emoria fiind alocat% dinamic nu este necesar testul de capacitate superioar%&
a.5estare capacitate in*erioar) Ccoad) goal)DK
1unction -mpt5C6ueue'<ront+adresa&+ boolean
Begin
I' <ront 0 NIL t$en
-mpt5C2tac7+0T?L-
else
-mpt5C2tac7+0<AE2-/
EndF
________________________________________________________________________________
<ront
?ear
151
Structuri de date i algoritmi
_______________________________________________________________________________
b.Inserare - E0M1E1EK
Procedure -96L-L- 'DAR ?ear+adresa, infoCnou+tip&
Begin
#nserareCsfrsit'<ront,?ear,infoCnou&
EndF
c.Extragere - $EM1E1EK
1unction D-6L-L-'DAR <ront+adresa&+tip
Begin
I' NOT -mpt5C2tac7'<ront4 t$en
Begin
HtergereCsfrsit'E#2T,T,%&
else
Iriteln'OL9D-?<E,P:&/
EndF
II.4.4. 'robleme propuse
1&5 8 coad% "iterminal% cu restricii la intrare este o list% linear% n care elementele nu pot fi inserate
dec!t la un cap%t, dar pot fi terse de la am"ele capete> n mod clar o astfel de coad% "iterminal%
poate opera at!t ca o sti$% c!t i ca o coad%, dac% nu tergem elemente dec!t da la un singur cap%t&
Se poate ca i o coad% "iterminal% cu restricii la ieire s% opere+e fie ca o coad% @
2&5 3#ist% permut%ri ale elementelor 1, 2, &&&, n care nu pot fi o"inute cu a.utorul unei co+i care nu
este cu restricii nici la intrare, nici la ieire @
3&5 Bolosind o structur% de tip sti$% i coad% s% se decid% dac% un cu$!nt este palindrom& :n
palindrom este un cu$!nt care coincide cu in$ersul s%u& 3#emple6 lupul j este palindrom, acesta j
nu este palindrom&
4&5 Se introduc n numere reale ntr-o sti$% i ntr-o coad%& Se e#trage un num%r din sti$% i se
introduce n coad%& Se e#trage un num%r din coad% i se introduce n sti$%& S% se tip%reasc%
coninutul sti$ei i al co+ii dup% a pai&
II.5. ;rborele binar

'!nd am discutat despre structurile de date nl%nuite, liste simplu sau du"lu nl%nuite, am
$%+ut a$anta.ele e$idente ale stoc%rii de date ordonate& Bolosirea eficient% a spaiului de memorare,
________________________________________________________________________________
151
Structuri de date i algoritmi
_______________________________________________________________________________
manipularea ntregii structuri de date doar prin intermediul adresei de nceput, etc& sunt doar c!te$a
din argumentele folosirii acestor structuri de date dinamice& *e+a$anta.ul e$ident al structurilor de
date de tip list% nl%nuit% este ns% pro$ocat de procedurile de c%utare sec$enial% care au o
performan% de ordinul O4n5& *e aceea, s-a construit o nou% structur% de date dinamic%, de tip
nl%nuit, care s% p%stre+e a$anta.ele fle#i"ilit%ii structurii de date tip list% nl%nuit% i s% se "a+e+e
pe o performan% mult m"un%t%it% a algoritmului de c%utare, de ordinul O4log
2
n5&
II.5.1. $e*ini%ii
:n ar"ore este o mulime de elemente numite noduri, un singur nod a$!nd rolul de nod
r)d)cin)N mpreun% cu o relaie de tip p%rinte-fiu care definete o structur% ierarhic% pe mulimea
nodurilor& )n mod formal, un ar"ore poate fi definit recursi$ astfel 47ho et al& /10;7256
1& :n ar"ore poate conine un singur nod& 7cest nod este i nodul r%d%cin% al ar"orelui&
2& Bie n un nod i K
1
, K
2
, n, K
a
ar"ori cu nodurile r%d%cin% n
1
, n
2
, n, n
a
& Putem construi un nou
ar"ore, f%c!nd ca nodul n s% de$in% nodul p%rinte al nodurilor n
1
, n
2
, n, n
a&
)n acest ar"ore, n
este nodul r%d%cin%, iar K
1
, K
2
, n, K
a
se numesc su"ar"ori& ?odurile n
1
, n
2
, n, n
a
se numesc
noduri fiu ale nodului n&
:n ar"ore "inar este o structur% ar"orescent% n care fiecare $!rf are cel mult doi
descendeni, f%c!ndu-se ns% distincie clar% ntre descendentul drept i descendentul st!ng al
fiec%rui $!rf& Se accept% i ar"orele "inar cu 1 $!rfuri, numit ar"ore "inar $id&
7r"orii "inari nu repre+int% ca+uri particulare de ar"ori orientai, dec!t dac% se face
a"stracie de distincia menionat% ntre descendentul drept i cel st!ng al fiec%rui $!rf& )ntr-ade$%r
dac% un $!rf are un singur descendent, aceast% informaie este suficient% n ca+ul unui ar"ore, dar
insuficient% n ca+ul unui ar"ore "inar, c!nd tre"uie preci+at dac% acest descendent este descendent
st!ng sau descendent drept&
)ntr-o structur% de tip ar"ore, elementele sunt structurate pe ni$ele> pe primul ni$el, numit
ni$el 1, e#ist% un singur nod numit r)d)cin), de care sunt legate mai multe noduri, numite *ii care
formea+% ni$elul 1> de acestea sunt legate elementele de pe ni$elul 2 &a&m&d&
Fig. 2.x. E*e#lu de ar%ore =i organi)area sa #e ni(ele7
________________________________________________________________________________
152
Structuri de date i algoritmi
_______________________________________________________________________________
:n arbore este compus din elementele numite noduri sau ,Br*uri i leg%turile dintre acestea&
:n nod situat pe un anumit ni$el este nod tat) pentru nodurile legate de el, situate pe ni$elul
urm%tor, acestea repre+ent!nd *iii s%i& Biecare nod are un singur tat%, cu e#cepia r%d%cinii care nu
are tat%& ?odurile f%r% fii se numesc noduri terminale sau noduri *run()&
Kermenii Hnod tat%H, Hnod fiuH, Hnod "unicH, Hnod nepotH sau Hnod frateH sunt preluai de la ar"orii
genealogici, cu care ar"orii se aseam%n% foarte mult&
7r"orii, ca structuri dinamice de date, au e#trem de multe aplicaii n informatic%& *eose"it
de utili+at% n aplicaii este structura de tip arbore binar& :n arbore binar este un ar"ore n care
fiecare nod are cel mult doi fii, *iul stBng i *iul drept 4fiul st!ng este legat n st!nga tat%lui i cel
drept n dreapta5& *ac% se elimin% r%d%cina i leg%turile ei, se o"in doi ar"ori "inari care se numesc
subarborele stBng i subarborele drept ai ar"orelui iniial&
7r"orele "inar este, deci, o structur% recursi$% de date& :n ar"ore "inar ne$id fie se reduce
la r%d%cin%, fie cuprinde r%d%cina i cel mult doi su"ar"ori "inari& :n ar"ore "inar se poate
implementa foarte uor cu a.utorul adreselor de nl%nuire, fiecare element cuprin+!nd, n afar% de
informaia proriu-+is% asociat% nodului, adresa fiului st!ng i adresa fiului drept, acestea e#prim!nd
leg%turile e#istente ntre noduri&

Implementarea arborilor binari
)n ma.oritatea implement%rilor i cei doi su"ar"ori sunt adresai indirect> n funcie de
$arianta de implementare - dinamic) sau static)N adresarea se reali+ea+% fie prin intermediul
pointerilor, fie prin intermediul indicilor de ta"lou&
7legem implementarea dinamic% cea mai simpl% form% de repre+entare a nodurilor& :n nod
al unui arbore binar ;9 are urm%toarea structur%6
Biu_st (nfo Biu_dr
Figura A.14. Structura nodului unui ar%ore %inar7
unde6
fiu_st 6 repre+int% adresa fiului st!nga>
(nfo6 informaia ata%t% nodului&>
fiu_dr6 repre+int% adresa fiului dreapta>
Structura nodului n implementarea Pascal este urm%toarea 47l"eanu /1004256
T2#e
7dresa R r?od
?od R RECORD
fiu_st 6 7dresa>
(nfo 6 tipinfo>
________________________________________________________________________________
153
Structuri de date i algoritmi
_______________________________________________________________________________
fiu_dr 6 7dresa>
end
D70707 O#era9ii <ntr!un ar%ore %inar ;9
8peraiile n ca+ul ar"orilor "inari sunt6
a& creare-iniiali+are>
"& inserare-"alansare>
c& c%utare>
d& tergere>
e& tra$ersarea6
?e $om ocupa doar de operaia de tra$ersare care nu este dependent% de organi+area
particular% a ar"orelui, fiind aceeai pentru toi ar"orii "inari& 'onstruirea unui ar"ore "inar se face
n funcie de relaia definit% pe datele coninute n nodurile ar"orelui "inar& )n general, se alege o
parte a datei stocat% n nodurile ar"orelui "inar, dup% care se $a ordona noua structur% de date
ar"orescent%& (nformaia dup% care se ordonea+% ar"orele "inar se numete cheie&
'ea mai des utili+at% form% de organi+are a unui ar"ore "inar este urm%toarea6
/heia nodului *iu stBnga K /heia nodului *iu stBnga K /heia nodului *iu stBnga 42&#5
:tili+!nd formula de mai sus se o"in ar"ori "inari speciali, utili+ai pentru organi+area i
c%utarea datelor, numii arbori binari de c)utare ;9/&
e. 5ra,ersarea arborelui binar. 'onst% n parcurgerea pe r!nd a nodurilor n $ederea prelucr%rii
informaiilor ataate acestora& Kra$ersarea ar"orelui presupune $i+itarea fiec%rui nod o singur% dat%,
operaie echi$alent% cu o liniari+are a ar"orelui& 3#ist% trei modalit%i importante de tra$ersare a
unui ar"ore "inar, e#primate prin regulile recursi$e6
1&5 n preordine6 se $i+itea+% r%d%cina, apoi tot n preordine se $i+itea+% nodurile su"ar"orelui st!ng
i apoi acelea ale su"ar"orelui drept&
2&5 n inordine6 se $i+itea+% n inordine nodurile su"ar"orelui st!ng, apoi r%d%cina i apoi tot n
inordine, nodurile su"ar"orelui drept&
3&5 n postordine6 se $i+itea+% n postordine nodurile su"ar"orelui st!ng, apoi tot n postordine,
nodurile su"ar"orelui drept i, la sf!rit, r%d%cina&
Obs.2.x:
87 e$ident, dac% ar"orele se reduce la un singur nod, $i+itarea acestuia n preordine, inordine
________________________________________________________________________________
154
Structuri de date i algoritmi
_______________________________________________________________________________
sau postordine presupune parcurgerea acestuia, deci prelucrarea informaiilor asociate lui>
/7 cele trei modalit%i de tra$ersare difer% prin, momentul n care se $i+itea+% r%d%cina i
anume, n ca+ul6
preordine6 se $i+itea+% nt!i r%d%cina, apoi su"ar"orele st!ng i dup% aceea cel drept
4DS* j D%d%cin%, St!nga, *reapta5>
inordine6 se $i+itea+% su"ar"orele st!ng, se $i+itea+% r%d%cina i su"ar"orele drept
4SD* - St!nga, D%d%cin%, *reapta5>
postordine6 se $i+itea+% su"ar"orele st!ng, se $i+itea+% su"ar"orele drept i r%d%cina
4S*D - St!nga, *reapta, D%d%cin%5>
*escrierea algoritmilor de tra$ersare, n lim"a.ul Pascal este6
Procedure inordine 4 def 6 adresa 5 > E tra$ersare inordine F
%egin
i' def X\ nil t$en
%egin
inordine 4 defr&fiu_st 5 >
Irite 4 defr&info 6 3 5 >
inordine 4 defr&fiu_dr 5 >
end F
end F
Procedure preordine 4 def 6 adresa 5 > E tra$ersare preordine F
%egin
i' def X\ nil t$en
%egin
Irite 4 defr&info 6 3 5 >
preordine 4 defr&fiu_st 5 >
preordine 4 defr&fiu_dr 5 >
end F
end F
Procedure postordine 4 def 6 adresa 5 > E tra$ersare postordine F
%egin
i' def X\ nil t$en
%egin
postordine 4 defr&fiu_st 5 >
postordine4defr&fiu_dr5>
Irite 4 defr&info 6 3 5 >
end F
end F
Pro%lee #ro#use
________________________________________________________________________________
155
Structuri de date i algoritmi
_______________________________________________________________________________
1&5 '!te structuri ar"orescente diferite e#ist% pentru trei noduri 7,J i ' @
2&5 *ac% nodul 7 are trei frai iar J este tat%l lui 7, care este gradul lui J @
3&5 3#ist% ar"ore "inar care s% nu fie ar"ore @
4&5 S% se cree+e ar"orele genealogic propriu pe parcursul a trei sau patru generaii, pun!ndu-se n
nodul r%d%cin% prenumele iar n nodurile descendente ale fiec%rui nod, numele p%rinilor&
5&5 Pentru ar"orele "inar din figura 32 s% se scrie listele de $!rfuri o"inute n urma celor trei
metode de parcurgere&
6&5 S% se scrie un program pentru determinarea ad!ncimii ma#ime a unui ar"ore "inar, adic% al
num%rului de ni$el ma#im asociat nodurilor terminale&
7&5 S% se scrie un program pentru listarea tuturor nodurilor aflate pe un ni$el dat ntr-un ar"ore
"inar&
;&5 7plic!nd cele trei metode de parcurgere a unui ar"ore "inar, s% se e#trag%, n ordinea n care
apar, nodurile descendente, n ordinea de la st!nga la dreapta&
0&5 S% se conceap% algoritmi de prelucrare 4creare, parcurgere etc& 5 pentru ar"orescene, utili+!nd
pentru fiecare nod c!te o list% cu toate nodurile descendente, n ordinea de la st!nga la dreapta&
11&5 S% se scrie un algoritm care, pe "a+a succesiunii nodurilor n inordine i postordine ale unui
ar"ore "inar, s% produc% succesiunea n preordine a acestora& 7nalog, pe "a+a succesiunilor n
ordine i preordine, s% se o"in% lista nodurilor n postordine&
II7;7 Gra'uri
II7;787 Gra'uri orientate
II7;78787 De'ini9ii =i generalit?9i
$e*ini%ia 1.5. :n graf orientat este un cuplu ; 4B, L5, unde B este o mulime finit% i ne$id% de
elemente numite vrfuri, i L BB este o mulime de elemente numite arce&
Bie un arc u R 4x,55 L& Spunem c% arcul u este incident e#terior cu $!rful x, este incident
________________________________________________________________________________
156
Structuri de date i algoritmi
_______________________________________________________________________________
interior cu $!rful 5, i are sensul 4orientarea5 de la x la 5& <!rful x este e#tremitate iniial% i
predecesorul lui 5, i $!rful 5 este e#tremitate final% i succesorul lui x& *eci n preci+area unui arc
contea+% ordinea $!rfurilor&
*ou% $!rfuri sunt adiacente dac% ntre ele e#ist% un arc& *ou% arce distincte sunt adiacente
dac% au o e#tremitate comun%&
$e*ini%ia 1.67 :n graf orientat este un cuplu ; 4B, 5, unde B este o mulime de elemente numite
$!rfuri, i este o aplicaie multi$oc% 6 B B 4adic% o funcie definit% pe B cu $alori n familia
P4B5 a p%rilor lui B5&
*ac% x B atunci 5 4x5 preci+ea+% c% de la $!rful x la $!rful 5 e#ist% un arc i spunem c%
5 este succesor al lui x& Spunem c% x este predecesor al lui 5 i not%m x
1
455&
Se d% un graf ; 4B, 5 i fie x B un $!rf& ?ot%m cu g
U
4x5 num%rul succesorilor s%i, adic%
k 4x5k> acest num%r se numete semigradul e#terior al lui x& ?ot%m cu g

4x5 num%rul predecesorilor


s%i, adic% k
1
4x5k> acest num%r se numete semigradul interior al lui x& Suma g4x5 g
U
4x5 U g

4x5 se
numete gradul lui x& *ac% g4x5 1 spunem c% $!rful x este i+olat&
'ele dou% definiii sunt analoge6
4x5 E5 B k 4x, 55 LF> 4x, 55 L 5 4x5&
$e*ini%ia 1. :n graf orientat este simetric dac% pentru orice pereche de $!rfuri x, 5 B a$em6 4x,55
L 45,x5 L&
:n graf este bipartit dac% e#ist% o partiie B B
1

B
2
astfel nc!t pentru orice 4x,55 L
a$em x B
1
i 5 B
2
&
:n graf ;m 4A, =5 este subgraf al grafului ; R 4B, L5 dac% A B i = 4A75

L&
:n graf ;m 4B, =5 este graf parial al grafului ; 4B, L5 dac% = L&
:n graf ;m 4A, =5 este subgraf parial al grafului ; 4B, L5 dac% A B i = 4AA5

L&
$e*ini%ia 1.! Biind dat un graf orientat ; 4B, L5, un drum n graful ; este o succesiune de arce cu
proprietatea c% e#tremitatea terminal% a unui arc coincide cu e#tremitatea iniial% a arcului urm%tor
________________________________________________________________________________
157
Structuri de date i algoritmi
_______________________________________________________________________________
din drum& :n drum se poate defini i prin succesiunea de $!rfuri care sunt e#tremit%i ale arcelor ce
compun drumul6 o succesiune de $!rfuri cu proprietatea c% orice dou% $!rfuri consecuti$e sunt unite
printr-un arc&
:n drum ntr-un graf este6
j simplu, dac% nu folosete de dou% ori un acelai arc>
j compus, dac% nu e simplu>
j elementar, dac% nu trece de dou% ori prin acelai $!rf>
j eulerian, dac% este simplu i folosete toate arcele grafului>
j *amiltonian, dac% este elementar i trece prin toate $!rfurile grafului>
j circuit, dac% e#tremitatea iniial% a drumului coincide cu cea final%&
II7;787/7 Re#re)entarea gra'urilor orientate
a7 Re#re)entarea cu a&utorul atricelor de adiacen9?
Bie un graf orientat ; 4B, L5, unde presupunem c%
{ } n ; , , 2 , 1
& 9atricea de adiacen%
A asociat% grafului este o matrice p%tratic% de ordinul n, definit% astfel6
[ ]
( )
( )

'

L > i dac
L > i dac
> i A
, , 1
, , 1
,
45&#5
Exemplu 5.1: S% consider%m graful repre+entat n figura de mai .os6
________________________________________________________________________________
15;
Structuri de date i algoritmi
_______________________________________________________________________________
Fig. 5.x.: E*e#lu de gra' orientat7
7tunci matricea de adiacen% ataat% grafului este6

,
_

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
A
*e+a$anta.ul utili+%rii repre+ent%rii grafurilor orientate cu a.utorul matricelor de adiacen%
este dat% de faptul c% spaiul ocupat este de ordinul R4n
"
5& 8rice operaie efectuat% asupra grafului
orientat necesit% parcurgerea matricei de adiacen% asociat%, care este o operaie de ordinul ,4n
2
5&
%7 Re#re)entarea cu a&utorul listelor de adiacen9?
Pentru a elimina de+a$anta.ele repre+ent%rii grafurilor orientate cu a.utorul matricelor de
adiacen% putem folosi o metod% "a+at% pe repre+entarea cu liste nl%nuite, numit% repre+entare cu
liste de adiacen%&
Cista de adiacen% pentru un $!rf i este o list% simplu nl%nuit% a tuturor nodurilor adiacente
cu i& )n acest fel repre+entarea grafului orientat ; 4B, L5, se face cu o ta"el% n dimensional%
numit% '7P, elementul '7P/i2 repre+ent!nd un pointer c%tre capul listei de adiacen% al $!rfului i&
Exemplu 5.2: Depre+entarea grafului din Bigura 5&# cu a.utorul listelor de adiacen%6
Fig. 5.x:Re#re)entarea gra'ului orientat din 1igura ;7* cu a&utorul listelor de adiacen9?7
Depre+ent%rii grafurilor orientate cu a.utorul listelor de adiacen% necesit% un spaiu de
________________________________________________________________________________
150
Structuri de date i algoritmi
_______________________________________________________________________________
memorare ocupat este de ordinul R4nUnr.deCarce5& *e aceea, aceast% form% de repre+entare este
prefera"il% atunci c!nd e#presia nUnr.deCarce este mai mic% dec!t n
2
& *e asemenea constatarea
faptului dac% e#ist% sau nu un arc de la $!rful i la $!rful > necesit% un timp proporional cu ,4n5&
II7;7/7 Gra'uri neorientate
II7;7/787 De'ini9ii =i generalit?9i
$e*ini%ia 1.". :n graf neorientat este un cuplu ; R 4B, L5, unde B este o mulime de elemente
numite vrfuri, i L este o mulime de perechi neordonate de $!rfuri numite muc*ii& 8 muchie 4x, 55
nu are orientare, astfel c% 4x, 55 45, x5&
8 muchie este incident% $!rfurilor care sunt e#tremit%i ale sale& *ou% $!rfuri sunt adiacente
dac% ntre ele e#ist% o muchie& *ou% muchii sunt adiacente dac% au o e#tremitate comun%& Aradul
unui $!rf x este num%rul de muchii incidente cu acesta i se notea+% g4x5&
$e*ini%ia 1.1#. :n lan este o succesiune de muchii cu proprietatea c% orice muchie are un $!rf
comun cu muchia precedent% i cel%lalt $!rf comun cu muchia succesoare&
)n mod analog definim noiunea de ciclu corespun+%toare noiunii de circuit de la grafuri
orientate&
$e*ini%ia 1.11. :n graf neorientat este conex dac% ntre orice dou% $!rfuri e#ist% un lan&
8 component conex a unui graf neorientat este un su"graf cone# ma#imal n raport cu operaia
de inclu+iune& 'u alte cu$inte, nu e#ist% o su"mulime de $!rfuri mai numeroas% care s% induc% un
su"graf cone#&
$e*ini%ia 1.12. :n arbore este un graf cone# f%r% cicluri&
=ema 1.1. :n ar"ore cu n $!rfuri are nj1 muchii&
Demonstraie 4Ci$o$schi i Aeorgescu /10;625& 'onsider%m pentru nceput un graf cu dou%
$!rfuri unite printr-o muchie, care este e$ident un ar"ore& Ca fiecare pas ad%ug%m un $!rf nou pe
care l unim printr-o muchie cu un $!rf de.a e#istent& Presupunem c% dup% un num%r de pai a$em un
________________________________________________________________________________
161
Structuri de date i algoritmi
_______________________________________________________________________________
ar"ore cu 7 $!rfuri i 7j1 muchii& Ca urm%torul pas o"inem un ar"ore parial cu 7+1 $!rfuri i 7
muchii& ?u se o"ine nici un ciclu6 pentru aceasta ar fi tre"uit ca noul $!rf ales s% fi fost de.a
conectat cu unul din cele 7 $!rfuri, fapt imposi"il&
II7;7/7/7 Re#re)entarea gra'urilor neorientate
a7 Re#re)entarea cu a&utorul atricelor de adiacen9?
Bie un graf neorientat ; 4B, L5, unde presupunem c%
{ } n ; , , 2 , 1
& 9atricea de
adiacen% A asociat% grafului este o matrice p%tratic% de ordinul n, definit% astfel6
[ ]
( )
( )

'

L > i dac
L > i dac
> i A
, , 1
, , 1
,
45&#5
Obs. 5.x: Se o"ser$% c% matricea de adiacen% ataat% grafului este simetric% n raport cu diagonala
principal%&
Exemplu 5.1: S% consider%m graful repre+entat n figura de mai .os6
Fig. 5.x.: E*e#lu de gra' neorientat7
7tunci matricea de adiacen% ataat% grafului este6

,
_

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
A
%7 Re#re)entarea cu a&utorul listelor de adiacen9?
________________________________________________________________________________
161
Structuri de date i algoritmi
_______________________________________________________________________________
Pentru a elimina de+a$anta.ele repre+ent%rii grafurilor neorientate cu a.utorul matricelor de
adiacen% putem folosi o metod% "a+at% pe repre+entarea cu liste nl%nuite, numit% repre+entare cu
liste de adiacen%&
Cista de adiacen% pentru un $!rf i este o list% simplu nl%nuit% a tuturor nodurilor adiacente
cu i& )n acest fel repre+entarea grafului orientat ; 4B, L5, se face cu o ta"el% n dimensional%
numit% '7P, elementul '7P/i2 repre+ent!nd un pointer c%tre capul listei de adiacen% al $!rfului i&
Exemplu 5.2: Depre+entarea grafului din Bigura 5&# cu a.utorul listelor de adiacen%6
Fig. 5.x:Re#re)entarea gra'ului orientat din 1igura ;7* cu a&utorul listelor de adiacen9?7
II7;7:7 Gra'uri #lanare
Pentru a repre+enta unele structuri geometrice n plan sau n spaiu se folosete o categorie
special% de structuri de date6 grafuri planare&
$e*ini%ia 1.13. :n graf ; este planar dac% este posi"il s% fie repre+entat pe un plan astfel nc!t
$!rfurile s% fie distincte, muchiile cur"e simple i dou% muchii s% nu se intersecte+e dec!t la
e#tremit%ile lor 4dac% sunt adiacente5&
Depre+entarea grafului conform cu condiiile impuse se numete graf planar topologic i se
notea+% tot prin ;& ?u se consider% distincte dou% grafuri planare topologice dac% le putem face s%
coincid% prin deformarea elastic% a planului&
________________________________________________________________________________
162
Structuri de date i algoritmi
_______________________________________________________________________________
$e*ini%ia 1.14. 8 fa a unui graf planar este o regiune a planului delimitat% de muchii, care are
proprietatea c% orice dou% puncte din aceast% regiune pot fi unite printr-o cur"% simpl% care nu
nt!lnete nici muchii i nici $!rfuri&
$e*ini%ia 1.15. <rontiera unei fee este mulimea muchiilor care ating faa respecti$%& *ou% fee
sunt adiacente dac% frontierele lor au cel puin o muchie comun%&
)ntr-un graf topologic, frontiera unei fee este format% din unul sau mai multe cicluri
elementare dis.uncte, din muchii suspendate sau care unesc dou% cicluri dis.uncte 4istmuri5&
$e*ini%ia 1.16. )onturul unei fee este conturul ciclurilor elementare care conin n interiorul lor
toate celelalte muchii ale frontierei&
3#ist% ntotdeauna o fa% infinit% i care are frontier%, dar nu are contur> toate celelalte fee
sunt finite i admit un contur&
5eorema 1.2 CEulerD. )ntr-un graf planar topologic cone# cu n $!rfuri, m muchii i f fee a$em
relaia6
n j m + f 2
Demonstraie 4Komescu, (& /10;125& *ac% f 1 atunci m nj1 pentru un ar"ore 4lema 1&15,
deci relaia este ade$%rat%&
Presupunem afirmaia ade$%rat% pentru orice graf planar cone# cu f j1 fee, i s% consider%m un
graf planar cone# cu f fee& Bie 4x,55 o muchie a unui ciclu> aceasta se afl% pe frontiera a dou% fee 2
i T& *ac% elimin%m muchia 4x,55 se o"ine un graf planar cone# cu nm n $!rfuri, mm mj1 muchii
i fm f j1 fee& 'onform ipote+ei de inducie nmjmm+fm nj1jm+1+f 2" de unde o"inem c% nj
m+f 2&
/orolar 1.3. )n orice graf planar topologic cone# cu n $!rfuri, m muchii i f fee a$em6
4i5 n 2m/3 > m 3f6 > n 2f4 4dac% fiecare $!rf are gradul cel puin trei5
4ii5 f 2m/3 > m 3n6 > f 2n4 4dac% graful are cel puin dou% muchii5
Demonstraie& 4i5 *in fiecare $!rf pleac% cel puin trei muchii, i fiecare muchie unete dou%
$!rfuri> re+ult% 3n 2m& 'elelalte dou% inegalit%i re+ult% prin simpl% nlocuire&
________________________________________________________________________________
163
Structuri de date i algoritmi
_______________________________________________________________________________
4ii5 *ac% m 2 atunci f 1 i n 3& *ac% f 1 i m > 2 atunci n m+1& *ac% f 2 atunci
fiecare fa% are cel puin trei laturi 4muchii5, i o muchie este comun% la cel mult dou% fee> re+ult%
3f 2m& 'elelalte dou% inegalit%i re+ult% prin simpl% nlocuire&
S% consider%m n spaiul tridimensional un poliedru con$e# cu n $!rfuri, m muchii i f fee&
Putem s%-l repre+ent%m pe o sfer% astfel nc!t dou% muchii s% nu se intersecte+e dec!t la e#tremit%i&
3fectu!nd o proiecie stereografic% al c%rei centru s% fie n mi.locul unei fee, poliedrul se poate
repre+enta pe un plan& Araful fiind planar, se o"ine relaia lui 3uler nm+f 2&
________________________________________________________________________________
164