Sunteți pe pagina 1din 317

http://w

ww.face
book.co
m/manu
ale.onli
ne
http://ww
w.faceboo
k.com/ma facebook.com/manuale.online
nuale.onl
ine
Kffi

http://www.ls-inf
omat.ro
VladHutanu Tudor Sorin

INFORMATICA

(filiera teoreticd, profi\i real, specializarea


matematicd -informaticd)gi
(filiera vocalionald,profil militar MApN, specializarea
matematicd-informaticd)

Ciclulsuperioral liceului,
clasaa XI-a

Editura L&S Soft


Bucuregti
Copyright 2OOd @ L&S SOFT
Toate drepturile asupra ocestilucr?lri apar{in editurii L&S SOFT,
Rproducerea integrall6au parliall a textllui din aceasti carte este posibili
doar cu acordul in scris al editurli L&S SOFT.

I\,lanualula fost aprobat prin Ordinul ministrului Educatiei Si Cercetdrii


nr.4446 dit\ 19.06.2006 in urma evaludrii calitative organizate de cetre
Consiliul Nalional pentru Evaluarea 9i Difuzarea Manualelor 9i este
fealizal in conformitate cu programa analiticE aprobate prin Ordin al
ministrului Educatiei 9i Cercetdrii nr. 3252 din 13.02.2006.

Retoronti gtiintitici:
Prof. Dr. Victor Mitrana, Facultatead lratemstica, UniversitateaBucuriti
Prof. grad I Valiana Petrigor,Colegiul Nalional Bilingvceorge Cogbuc

TiparuLerc!lall a S.C. LUMINATIPO s.r.l,


Str. LulgiGalvaninf. 20 bis,sector2, EucureFti

Anultipdririi:
2006

Descrierea CIP a Bibliotecii Nationtle r Romeniei


HUTANU, VLAD
lnformsticl r hanual pentruciclul ruperior al liceului : clasaa XI-
I! - (filiera toretictr,profilul real,specializarrmatcmatictr-informatici)
9i (filirs vocafionali,prolil militrr MApN, specializarca matematictr-
informaticl) / Vlad Hutanu,TudorSorin.- Bucureflti : EdituraL & S Soft,
2(n6
ISBN(10)973-88037-l-3r
ISBN(13)978-973-88037-
I"8

L Tudor.Sorin

004(075,

Edirnra
L&S soFr: H
AdrsorStr.Sdnjeneilornr,8, bl.29,sc.A. er.l, apr,12,Secxor
4, Bucure$ti;
Tcl./Foxr03l-105.62.84;
Mobil:0722-530.390, 0722-51.31.01 ;
E-msil:tsorin@ls-infomat.ro;
WebSiteiwww.ls-infomat.ro.
Cuprins
L d Pr ( ur ur r .
Cuprins

3.2.3.Compararea .........................................
9iruri1or...............................
3.2.4.Lungimea de caractere.....................
Sirurilor ... .............................. 79
3.2.5.Subqiruri............. .............................,.......... 80
3.2.6.Conversiide la Siruri
la valorinumerice Siinvers.................-....--...... 84
3.2.7.Citirea giscrierea datelor de tip St rgdin 9i in figiere text................. BB
3 .3.$ir u r id e caracterelnC++.......... . . . . . . . . . . . . . .............89
3.3.1.Generalitdti....... ................................ 89
3.3.2.Citirea giscrierea girurilof
decaractere....................................... 89
3 .3.3.Tipu|chart........ .......................................
3.3.4.Lungimea unui9irde caractero........,...................................... 93
3.3-5.Copierea ti conctenarea $irurilorde caractere.....-.........-.............. 94
3.3.6.Cautarea unuicaracter intr-un5ir............ ........ ....................... 95
3 .3.7.Co mpararea qiruri|or.......... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.8.Sub9iruri........,.... ........................................ 99
3.3.9.Altefunctiiutilein prelucrarea qiruri1or....................................... 101
3.3.10. Conversia girurilor
ln valorinumerice 9i invers.........................,.....
3.3.11.Citirea9iscriereaSirurilordecaracteredin9iinfigieretext.....
3.3.11.1.Operatia deci|ire.................................................... 108
3.3.11.2.Operatia de scriere................................................, 109
3.3.12. O modalitate de conversie de la 9irla alttip...................................
Probleme propuse....... . .......... 110

Capitolul4. Structuri
de dateneomogene 112

CaDitolul
5. Structuri
de date 124
v:.ual de informaticipentrualasaa Xl-a

C api t o l u l8. M etod a Backtrackins................. . . . . . . . . . . . . . . . . . . . . . . . .1. .9. .9


8, 1 ,P r e z e n tarm e aelo d e......,,,,,,,,.,,,,,,...,..,
i ,.,,........199
8.1.1.Candse utilizeazd metodabacktracking?..........................-............ 199
8.1.2.Principiul ce stdla bazametodei backirackin9................................. 199
8.1.3.O modalitale de implementare a melodoi backtracking.................... 201
8.1.4.Problema celorn dame................,.......................,.-...........-....... 204
8. 2 . [ , , l a i p ulin e lin iiin programulsurs5.......... . . ............207
8.3.Cazulin carese cereo singurd solulie.Ex.iproblema coloririihdqilor....... 210
8. 4 .Ap l i c a liia lem etod ebacktracking
i in combinatoric 6 . . . . . . . . . . . . . . . . . . . . . . . . 2 1 2
8 . 4 . 1O ge n e r a lizare uti15........................ . . . . . . . . . . . . . . . . . . . . . . . . 2
. .1. .2. . . . . . . . . . .
8.4.2.Produscarlezian .........................................21
8.4.3.Generarea tuturor submullimiloruneimu||imi..................-................ 215
8 . 4 . 4Ge . n e r a r eco
a mbineribr..................
.......... .. . . . ............ . . . . -. . . . . . . .2. .1. .7. . . .
-Capitolul
I

Tablouri

l . l . No! iunea
d e ta blo u

Anultrecutam studiatlablourileunidimensionalo
numitouneori,p n analogie
cu matematica,vecto . in acestan studiemtablourilebidimensionalo
numite,iot
pdnanalogiecu matemalica, matrlce.

s Oetlnllla1.1.Untablouesteo structurd
printr-un
identifice
intermediul
sangur
omogena
de acelalifel)cu un numdrbinedeterminat
(formaEdinelemente
de componente.
nume,iarcomponentele
unuisistemdeindici.
Tabloulse
prin
salese identificd

Aldturatavem reprezental un tablou,Un


ri,j, se gesegte
elemental acestuia, pe liniat 9i
azl .
coloanaJ. Esteesenllalde retinutlaptulcd toate
at.z atn
elementelo
tabloului
auacelasi lio.

1. Un magazin oferdsprevanzare a produse. Se doreltesd se rqind


& vanzdrilelunare,valofice,din fiecaretip de produs.Putemorganiza
datelesubformddelablouastfelr
vom numerotaceleE produsecu 1, 2, .,.,ai
lunifele vomnumerota
cu !,2, ...,L2i
elementular,J semnificdvaloareaincasalSdin vanzareaprodusluiI in luna
J a anului- prinurmare,elementele
tablouluisuntde tip real.

& Intreb5liposlblle
a) Dacamagazinut vinde5 produse,cateelemente aretabloul?
in tabloupentrua aflavanzdrilo
b) Caresuntindiciide adresare dinprodusul
5 in lunaseptembrie?
c) Cumsepoatecalcula sumaincasauin lunamai?
Capitolul l. Tablouri

d) $tiindc5, din punclde vedereconomic, anul esto impdrlitln Datru


trimestre
Si ca fiecaretdmegtruarotrEiluni,cumse poatecalculaauma
incasdrilor
dintrimestrulpatrualanului?
e) Cum putemdetermlndprodusuldin venzareacSruias-a incasatanual
sumamaxime?
0 Caresstelunacu celemaimadincaseri?
2 . Totaga,ss poatememora, subtormSdetablou,siluatia la tnvatdtura
a celorn
elEviai uneiclase,Dacenumeroldm pecareacegtia
eloviicu 1, 2, ...,r li materiile
le studiazAcu 1, 2, ..., n, atunciar,J reprerng mediape careo are etevult la
materia J.
intreberlposibile
E
a) Dacdin chsa sunl30 de slevi9i acegtiastudhze8 materii,cateelemente
are matricea?
b) Carsestemalerlala careeleviiaucelemaibunsrezultte?
o) Ca.eeslemediageneral5 a elevuluit?
d) CareesiemediagEneraEa elevllorungiclaso?
$irulexemplelorar puleaclntinuapenlrucesunlloanemultsituatii
in care
seutilizeaze
tablouri
bidimensionale(matrice).

L2. Cumcitimgi cumafiiemun tabloubidimensional


?
In clasaa X-aam invdtats5 lucremcu masiveunldimensionalg. penlrua
adresaunolement al unuivectdrseutilizeazd
unsingurindico,in cazulmataicelor.
vomulllizadoiindici.Maijos,putetiobserva
cumsedeclar5 o matricecu 10liniigi
9 coloane,cuelemenle detipinkeg:

tttr. t dr l@ . l E ra y l t..1 0 ,1 ..9 l o f E 6al r llDr .l rol I9l ,


v." a.talrtd, I
saudirect
v.r .lrrtay
I
f1..10,1..91 ot I
-alr
t in Pasc|,matriceaare llniile1,2,...,10Slcoloanle1,2, .,,,9 Si,de oxemplu,
elementuldepe liniaa treia9l coloanaa pairase adreseazd prina t3. {1.
t in C++, matriceaaro liniile0,1,...,99i coloanele0,1,...,891,do exemplu,
elementulde pe liniaa treia9i coloanaa patrase adreseaziprinat2t I3l.
Uneori,pentrusimpliiate,vom folosiliniilegi coloanelematriceifncepandde
la 1. In acesteconditiise pierdeo tinieSi o coloan6,fiecarede indice0.
Consider5m acestfaDtneesential.
Manualde informaticl pentru clasaa xl-a

De multeori nu qtim cateliniigi cetecoloanova


trebuis5 aibetabloul.in aceslcaz, tabloulse doclard
cu un numer maxim de linii 9i un numdr maximde
coloane,in agalel incatacestasd corespunde odcdrui
set de dats de intrare.Evidont,intr-unastfelde caz
existao ridpd de memoriein-ternd,dar...programulnu
se va termina cu eroare. In figura aldturate,aveli
reprezentatgraficun labloucu 8linii 9i 8 coloane,din
ink-unanumilcaz,utilizdmnumaiprimele4 linii9i
c-are,
primele5 coloane.

Flgura1.1.Exemplu
d iablou

va lunqionacorectdacdavemcel mult 8 linii9i


Programulcare-lutilizeaze
celmulta coloane.

in programul so citeste9i se aligeaziuntablot/.lnilialse citesc


urmdtor
numerulde linii
Si coloane
de aletabloului(tn9i n) Observati modulin
care am afigattabloul- de a9andure incet Si pe ecranse arate ca o
matrice.adicefiecareliniesd fie scrisSpe un rand.

vu !.D, i. j. intsort *lnctudt <iostr.e,b>


!.q rra y t 1. . 10, t . , 9l o f tn t g rt
( i a t !,n.1,J.E f101 I9l t
c d t< < r cn; c!n> > D ,
cd t< < ,n t,, cj ,D >>n,
fo ! (i = or1< !rL+ + )
l o r(J - 0, J< n, J+ + )
lor lr.1 lo D alo ( cdt< < i a t" < < t+ 1< < ' , '
l o r j! - 1 t o n ai o <<j+t <<il =i'
c i n> > aItl ti l t
E ir e ( , at , . tr ,, ,, J , ,l t ). )
-
!6aii1! ( e I i. jl ); fo i (t -ori < ari + + )
t for (J-orJ< n, Jr+ )
cou!< < attl tl I< < t !t
lo! lr . 1 t o ! t uo .dt<<nal'-t

E it e ( ef i, jl. ' ' )t

t in memorie,
tablourile pe linii.Aceasta
suntretinute Tnseamne
cd h inceput
estememoralaprimalinie,apoiadoua,9.a.m.d.
l0 Capitolull. Tablouri

I .3.Aplicatiicu tablouribidimensionale
0 Aplicalia l.l, lnterschimbalede tlnll. Se cilegteun tabloucu n linii 9i ll
coloane.Se citesc, d6 asemenea,gi doud numerenaturaledistincte:< 9i y,
cuprinseintre 1 9i m.Se ceresd se interschimbeliniax cu liniay. La inceputvom
apoipecoloblinutprininterschimbarea
afila tabloulinilial, liniilorx9iy.
ExemPlu:Considerem tabloulde maijos,cu m-3,nE3 9i liniilexE2,yE3:
23)
{1
4 5 6l
[7 8 e J
In urmainterschimbdrii
liniilor2 Si3 se obline:

EI Rezolvare.
I i:]
DupScum arn invalat,pentrua interschimba conlinutul
a doue
variabilese utilizeazAo a treia,de manevr6. Deaceastadatd.se intorschimbd
doud
linii.Amti tentalica manevrasdfie unvectorcun componente. Cu putineatentione
d6mseamace putemfolosica man^evrd o singuravaiabildde acelagi
tipcu celal
componenlelor debazdaletabloului. Inrest,analizali
programuldemaijos:

t ! ' De Dllr ic e a fr.y l l ..1 0 . {i!ctud. <lotrs.h>


1. . 101 o - l h l t t
v.r iat: mrrlct ( tE t @ t t10l l 10l ,n,n,i ,
d, L, J , x , j .xty,[e,
^,
!r, Erqrt cdt<<i a-rt cl !>>ai
'Er cdt<<rnE r, ci !>>!'
(-oiltfa alerelo!-) for (t.0, t< nr l + + )
r r it l' F ' )r r rd l r(!)t fo! (j = 0r j < E ' J+ + )
r 6it ( ' n= ' ) , r a d l a (tr) t t
f or i. - lt ondio cout< < trer Ii < < i + 1< < | , '
f oaj. = 1t on( !0 <<j +1<<i :
-i ;
ci D > Mrtl l tj l t
E 1t . ( ' ! at I t . i , t. ' , J , ' I = r ). ,i
r . dlh( @t . It, J I ),

r r i! 6( ' x s ' ), r a a tl E(x ),


l. ai! ( ' Y r ' ), t a a l h (y ),
(- tiDar..c tabloul ltrIrtll-'
f or lr r lloaalo l or (i to, d< n, i + + )
(
lor J : = lt on(l o l or (i = ori < nr l + + )
t E I t (@ tIt, J l , , ' ), cout< < Mtl tl Ij l < < ' t,
cdt<<eDd1t
Manualde informatlce
Dentruclasaa Xl-a ll

{-tntrschtlib.r6 ltnu-} | tor(J-0rj<!rj++)


foE j:-1 !o n dio | ( u6n=Gt Ix-1] I jl ;
besdn I Etts-11 IJ!@tIv-rI IJIi
tl e r - ur ls . J l; I D t[y-l ] ti l .M,
u tt*, 1! Dt l y ,l l r I l
dltly,jl 'rtr D6, c out < < 4 d 1 ,
I
eidt I fo ! (1.0;t< D ri + + )
ci t h r I ( to t (J.0rj < ntj + + )
I c out< @ r l tl Il l < < ' ',
E&rdr lnwrsEE-r c@r<<ndu,
I
forl:=1to !dio

ro E l. - 1E on. ! o I'
E t t 6 ( E t t i, i 1 . | ' )r I

0 Aplicatia'1.2,Spirala.Secilegteuntabloucun linii9in coloane.


Seceresese
afigezeelemenlele tablouluiin ordinearezultatep n parcurgerea acestuiain
spirala,
incepand cuprimulelement dinlinia1,Tnsensulace'ordeceas.
B(emplu.Fietabloul:

Elemeniele
vorfi afigatein ordinea:
tffil
123598745.
EI Rezolvale.Pentrua putearezotvaproblema,privimtabloulca pe un ansamblu
abetuitdinmai multedreptunghiuri'concenlrice":

Tabloulde mai sus esle un ansambluformatdin lrei dreptunghiuri


'concentrice"
- ultimulareun singurlement9l nu a pututfi reptozentat.
Oupdce
stabilim
numdrulde pdtrate(cum?),afiiemelementele aflatepe ficarlalurda
palratln ordinea
fiecerui avandgrijdca elomentele
cerute, allatein colturlsenufie
afisate
dedoudori.
r
12 Capitolull. Tablour

tyrr6 Dtrlce = alraytl.,10, *iacxua!6 <iostrs.h>


1..101 o! ltrts!,
v.r Dt! utllcet ( i l t D tI10l t1ot,!,i .l ,t t
!, i. J, iDt6s.rt cout<<rirn t cin>>Dt
'.! l or(i = 1, i < -ari + + )
(-ctti!a dl.rlor-) for (j -l rJ< -dr l + + )
E lt ( ' n' ,)r r .d ta (r), ( c@ l < < " ct t" < < t< < .,
f or 1r - lt onito < < j < " 1= "
f o! J ! =l to n a l o ctn> > Gtl l l IJt t
,
Eit( tD.tI t,t. t, | ,
J.' tE' ) . l or(k-1rk< = a/2+ 1;k+ + )
rsd:"D (!at It, Jt )., { fo!(l .kri < .n-k+ 1rtr+ )
c@t<<rBt lkl Iil <<endr,
{ - lis t ee- } l or(i = k+ 1rl < = n-k+ 1rt+ + )
loat ! = Lt ona l i v 2 + fa i o cout<<ur til tn-k+11 <<ndlt
for(i = !-k;i .> -kri --)
tor i t. k ro n-k+l aio c@t<<nlrt t!-k+l1 Itt <<@dr;
E lt ln( u r Ik , i .t ), ro!(tcn-krt> = t+ 1ri --)
foE t != t+l to n-k+1 60 cour<<Mrtil trl <<endlt
rltla(!!r li.r-h+rl )t
lor i .r a-t atoEto k tlo
v ! ir . : . n (n r [D -tr+ l ,L t ),
lor i r- n-k alohto t+1 alo
iEft.lll(4r tl,kl )

0 Apllcalia 1,3. Pe o tabld cu r ljnii Fi m cotoane(a, m numerenalurale


1snrd30). sunt plasatepe unelepozitiijetoane cu litere.conformunuijoc corect
de aCraBBL!. 9tiind cE vocaleleau cete un punct,iar consoanelecete doud_
slabilitivaloareatotaEa cuvintelorde pe tabld.VatoribE 9i n Siconfiguralra
tabtel
se citescdin figierul"rabt..rxr,, conformexemplutui (locurilegoat;de pe tabla
suntmemoratesubforna unorcaraclerepunct)
Exemplu.Penlrudatelede intrare:
35
D. StU
At/!r.
. . 4. .
se afi9eazd20
(Dri3, SrA-5, rnTIE6, SAUE{, Ar-2).

EI Rezotvare.C5ubreacuvintelorpe tabE $i cumulareapunctelorlor este.cle


obicei,primasolutiela cafe ne gandim.AlgoritmulcorespunzetoracesteisolutiioarE
hsa.destulde complicat.Simplaparcurgere a malriceide caractere9i aCunirea
valoilor corespunz5lioareliterelornu este o strategiebund, deoarecese oierd
lerual de Informatlcioentruclasaa Xl-a t3

q-nctajulliterelorcareaparinlr-uncuventpeorizontald
9i unulpe verticab9i carear
rehri luatededoudoriln calcul.Deaceea, vomanaliza Tnplus,pentru fiecarelitere,
* ea tacepartedinlr-unsingurcuvant(areliterevecinedoar pe orizontaEsau
@r peverticaE) $isepuncteaza saufacepartedindouecuvinte(arelitere
obignuit,
pe
Ecine$i odzontale pe
Si verticaE) giatunci
sepuncteaza dublu.

ude <f atrod.h>


tE u: arlEy 11. .3 0, 1. .3 01of, ch.r, c h a r aI!11t31L
tr. a, i. j , aUt:t|!4t i n r n ,!.i , J.i l i r.D .D t,
D, Dt . i4tegt i f s trea f (" rabl a.rxt" ),

ssi s'!( f r ' t . lr la. t *l' ), t

fo r(t.1rI< = r; i++)
!c l:-1 to D alo fo r{J.1, J< { rJ+ + )
t> > ati l tl l t
lor Jr!r. to ! dlo
rs ld( r , at t , J I ) , !o !(i - 1ri < = art+ + )
FAdrr(f ) fo r( J.1r l < ar j + + )
i f (attl IJt I-' .' )
(
for i!=1 to a alo l t ( atit Iil - =' A,lt
1;1==' e' ll
if aI i. jl< > r . ' tha "r at Ij:--'I'll
3trl
( aI i, jI = ' r ,' ) o r
atrl Ij:--'o'll
t! attl IJI--'u')
( ! I l, J I r ! r t ) o!
( aI i' J I = ' r ' ) o r
( s t i' jl = r o ' ) o r
( aI t , j1= ' u t ) tb d D != 1 (t>1 e& atr-1] IJIrt!.
if
l@ D!- 2 '
ll1<a&&
att+lltJIt='.r)
if { t > 1) . n( l { a tt-1 , J l < > ' . ' )
( t < s ) a' d (.Ii + 1 , j 1 < > ' .,)
lf {l>1 && 6ItI ll-u lrt.
tha dlirr.al:lrlt ll l<n &&
elil tj+ll l=r ' | )
if { J > 1) lr d (a tt,J -1 1 < > ' . ' )

( l< r ) a' d (e ti .j + rl < > ,.,)


llB aEa ! =atl!+ lt
)
cout<<9t<<4d11,
Dt : rDt+D'dlr l

Dacautilizam
artificiul
dea boada
matricea punct:
cucaractere
rpntlu i=0,n+1 e:.ecut5

| a*r,r'.'
"0,.<'.'r
I ar.o' . ar.*r'.'
\t "
atuncitestareavecinilor de pe margine
elementelor se realizeaze
intocmai
ca9i tn
cazulcalordininteorulmatriceil

daaa ar-l,j+' . , Blu ar+r,J+,.,


I artreart!+l (celputinunvecinpedireclia
verticala)
r1l

ar ,j -l + .. I a e u !r,r+ 1 * ' .'


r dac l

I dtredh+1 (celputinunvecinpedirectia
orizontatd)
l.|

Se maipoateanalizagicazulincafeo literenuareniciunvecinpe niciuna


dintredirecliile
orizontale
sauverticald(cazln careliteranus-arpunctadeloc),lnsd
problema precizeaza
cA literelesuntagezate corectconform joculuide scrabble,
decinuootfiamplasate litereizolate.
0 Aplicalla{.4. Sonaaeaferecomparaliiesteo motodddesortarccarepermite
sorlarea
a n numre naturale,
l6rea faconicimecaro compar4le
intreele.
Vomprezenta algoritmulpe un exempluin carese sorteazg
cresc5tor
o
numere
naturale:
5, 35,{1, 25,{0 9i30.
Inilial,iirul celor! numerese impartgin 10 clase:primaclas! contlne
numerele carese terminicu 0, a 2-aclas5,celecarese termin5cu 1, ... a 10
clasa,celecaresetermine cu 9.
Penlrumgmorarea numerelor careapa4infiecgreiclasevomutilizao malrics,
denumitd ln careprlmalinieareindicele
!c.r, cu 10coloane, O.ElementeledinliniaO
relinnumarulde elementedingircaresogasesc pecoloanarespecliv5:

t 0 0 0 0 o
lt0 25
30

Oblinemdin nou girul de numere,agezandulein ordineacoloanelorSi in


ordineain carele-ampusin fiecare coloane:{0,30, {1,25, c, 38. impSdim
din
nou$irulin 10 clase,dupda 2-a cifrea numerelor:

1 0 I 0 0 0 0 o
25 30 {o
pentruclasaa Xl-a
Manualde informaticd

Oblinemdin nou Sirulde numere,agezanduleIn ordineacoloanelorSi in


ordineain care le-ampus in fiecarecoloan5:6, 25, 30, 36, 40, {1. De
aceastiidate,9irulestesortal.
a
; Observalli

/ Dacd k este numdrulmaxim de cihe a numerelordin Sir, operatiade


impd(irea numerelor
in 1o clasese va reluade h ori.

'/ Algoritmuleste
"mareconsumator"
do memoriel

vE. A laar ay 11. .1 0 0 1 o f iltnoluilo <lo8treu.h>


integat i n t A l 1 0ol ,u6r[100] [1001,a,
lr ar . ar lay [ 0, . 1 0 0 ,0 ,,1 0 0 1 N r C i f, t, J, k.ci !, zc,
ot ln!gr,
!, !r!ci !. i , j , k, ci f. zec :
l.nt!16rt { c o u !< < ' n.rr.14> > [t
fo t (l .1rt< .nrt+ + )
Erte( r 6 .d l 1 a (tr), { c out< < " A I" < < i < < " 1." ,
' nr ' ) ,
to rl ! . 1lo n alo
)
s!f t e( . at t , i, , t = ,),
r adln( A t il ) f or (l|!cll-1r[rci!<=4rl[icl!++ )
( if {Nrct!>l.) zoc.r.1ot
fo ! (l = 1rt< -nrtr+ )
for (c tr= (r[i : / zce) a 1ot
Nrclf!=l to 4 d,o
u l rIoI [cI!] + + ;
if l|!Clf>1 th6n !i !t t!i !t I0I tctrl I l cl f I = A Il l ,
z oc 6; = z ec 6r lo t )
lor it.1 to n dlo I /b&.aj Air, Mlr i$ wecror

ci! !={.a,li1 dliv zc) fo r (1.0;t< -9ri + + )


@al 10 , i f {uat tol ti l )
! t |t [ 0, c i! ] r { d a t I0 , c l f l + 1 , !o ! (i = 1ri < .l ta! I0l ti ) r i + + )
lllt [Mal I0, eL! L cll I rrall] ( k+ + ,
al kl -!tat Ij l ti l t
{EatlBs iti4 Gt. in Eclo.} )
k!= 0t fo i (I-0rt< .9r t+ + )
lor l.-0 to 9 dto x al I0l ti l .0,
I l ! r . r 10, 11< > 0 th E l
f o! j. = 1 ! o l ra tl o ,i l alo fo r (t.l rt< -ari + + )
cout<<AIlI <<6aatt,
k r E k + 1, l
alk l r z uat IJ ,l l

lor i!=0 to 9 alo


M lt t 0, il. = 0t

lor L:-1 lo n alo


Ei t elE ( aI iI )t
proPuse
Probleme
in
1. Se citesteun tabloucu tinii9i D coloane,numerelntregi Un asttelde tablou'
'l se
coloanelor, numegte tablou peta c
carenr,rmirultiniilorcoincidecu numdrul
pe
6) Pentruun tabloupetraticA, numimdlagonaleptinclpaH' elementeleallale
careunegte
"linia" A[1,1] Cu Ata,nl.

Exernplu.Pentrutabloulde mallos

r \2 r)
l+ \ ol.
lt ')
sunt:1, 5 9i9.
elemenlele
Secero:
principald;
aflatepsdiagonala
al) sumaelementelor
aflat
a2isumaelementelor deasupra principale;
diagonalei
atlate
a3isumaelernentelor sub principald'
diagonala

A, numimdlagonaEsecundattr,
b) Pentruuntabloupdtratic aflatepe
elementele
al'l.1I cu A[1,nI
careunegte
'linia"
tabloul
Pentru
Exemplu.
(' ,,2)
rz:l
\/ I ',
sunt ?, 5 9i 3.
elementsle
Secere:
secundare;
atlatepediagonala
bl) sumaelementelor
aflatedeasupra
b2i sumaelementelor secundare;
ciagonalei
secundare'
allatesubdiagonala
b3isumaelementelor
Cerinlesupllmentare:
. pentrufiecareceriilldsevalaceun programseparat;
. Tnniciunprogram nusevafolosiinshu4iunea lf

coloanele
2, lnterschimbali uneimatrice astfelincatin liniak'
d: n linii9in coloane
elementelesdlie ln ordinecresc6toaae.
Manualde informatice
pentruclasaa Xl-a 17

3. Un leren esle dal sub forma unuilablouA cu n linii gi m co,oane.Elementul


Ali,jl reline allitudineap;trSleluluide coordonatei Si j. Si se afiseze
coordonatele "pal.atelelorva'l (un pelr:iteleste varf dac6 toti veciniisai au o
a liludine
strictmaimice).
4. Determinalielementele9a ale uneimatricecu r linii 9i n coloane(elemente
minirnepe linie9i maximepecoloandsaumaximepe linie9i minimepe coloane).
r' Indicalie.AtentielMaximelesau minimelepe linii sau coloanepol sd nu fie
unice.Dacdvom consideranumaio valoaredintteacestea,s-arputease pietdem
solutii.
5. Penlruo matrice a, cu r liniiSin coloane "cr1.rsr", se cere
cititddinfigierul
sd se afigezecelfiai mareelementdin matriceSiindiciiacestuia.Scrieliprogramul
pseudocod corespunzStor.
6. Penlruo malricede numererealea, cu 5linii9i 4 coloane,
cititede la tastaturd,
se ceresd se afigezesumaelementelorskictpozitivedin matrice.
7. Pentruo mairicea, cu n lhi 9i n coloanecititadin figierul"mat3.rxr,,, se cere
sA se decid; pe care dintfe cele douSdiagonale,suma elementelofconstitutive
estemaimare.Se va afigaun mesajcorespunzdtor.
8. Pentru5 cifren,a,b,c,d ciiitede la tastaturd, se ceresd 6e creezefigierLll
''M!5,rst" caresi conlindo makicecu 2a linii9i 2n coloane, formatddin 4
submalricedisjuncle,liecarecu n linii $i r coloane,una dintreele fiind formatd
numaicu componente egalecu a, una numaicu componente egalecu b, unacu c
9i unacu d. Estenecesardconstruifeain prealabila matriceiinmemorie?
9. Fereaslra,FiinddalAo matrrcecu n liniigi n coloane.Se cere sa se aligeze
loatesubmatricele cu 3 lini gi 3 coloanealematriceiinitiale.Un astfelde procedeu
este utilizalaluncicand,de exemplu,o imagineeste mult prea mare 9i ea esie
al9al5cu ajutorul uneilerestre.
Exemplu:m-4, n=4. lvatric.rainilialdqi submatricele
sunl prezenlate
maijos:
'| 2 3 4
123 23{ 56?
9 r0 1 l 1 2 567 6?8 9 1 0 ll l0 ll t2
l3 1 r { l 5 1 6 910 1l t0 11 1 2 13t{

10. Fiinddaido matricecu n iinii9i n coloane,se ceresd se afigezeelemenlele


in
ordinea sugeratd
in figurade maijos:
t8 CapitolulI Tablouri

'11.FiinddalSo malricecu n linii 9i n coloanese cere sa se


afigezeelementele
in ordineasugeralain imagineaaEturate.

12.Fiinddatdo malricecu n linii9in coloane(pblratici)cu numerenaiurale9i{iind


daledoueelemenle ale malriceide coordonale(x1,y1) Si (x2.y2), caredintre
relatiilede mai jos testeazadacdelementele se gdsescpe o dreaplSparaleldcu
unadinlrediagonalele malricei(principald
sausecundard)?

VarlantaPascal ' :i .l i

a) l! x1-ar.y1-y2 a) tr (ar-a2= .y1-y2)


tltn dEitld( ! D. ) c d t << i D a n ,
'
61a wr i t l E{ tN u t ) t 1 . c d ! <<r $ u " ,
b) l! x1-y1=x2-y, b) 1! (xl-y1..x2-y2)
tl!n trlteln( ! Dr )
'
61a6 wr i te l .n (.!.u . ), 61r c d ! <<r N u " i
c ) t t . bs ( x 1 -y 1 ).a b s (x r-y 2 ) c) 1 ! ( a b s ( x r - y l ) ==. 1 5 s ( x 1 - y 2 ) )
t hn M it h ( tD a ' ) c d t <<i D a r ;
e1a. s r i t.l n (,:c u t ), e l . c o u ! <<" r c u n ,
d) t f . bs ( x 1 -x 2 )= a b s (y 1 -y 2 ) d) tf ( a l s ( x 1 - x 2 ) =- ! b a ( y 1 'y 2 ) )
t hn v r t t h (,D a ' )
61a. s r l to l n (.rc q ' ), 1Eo c o u t <<r l | t r u ,

13. Se dd un vectorv cu m*n componente numereintregi.Caredintresecventele


de maijos copiazdvectqrulv in malricea!r!r cu In liniiSin coloane?Copierease
realizeazicomplelandmai inlai elemenlelede pe linia 1, apoi elemenlelede pe
linia2, ...,iarla slAr9il, de pe linian.
elementele

'/ prinulilizarea
Copierease realizeazd unuisingurcicluforl

Pascal ' :. ri ' Valliihta


c++
a) fo r k.=1 t o n* n dlo M ac t l+ k a ) tor (k-rrk< -nan;k+ + )
dtiw tr,l+k m dt r l: - v lhl, Mat I1+ (k-1) /rl t1+ (* -1)e6 d = vl kl ,
b) for kr!1 to n*n dlo b ) for (k-1; k< E n* ark+ + )
Ma t [li (k-1 ) aliv a, 1+ ( k - 1) rcd Mat I1+ (k-1) /nl 11+(k-1)s nl B vl kl r
c ) for (hrl ;k< -n.nrk+ l )
c) fo r kr!1 t o nln dlo M.t I1+ (k-1) /nl t1+ (k-1)ti D l = vl kl ,
lra t [1 + (k-1 ) dliv D, 1+ ( k - 1) rcd a t) for (k= trk< = ni nrk+ + )
Mal I1+ k/nl It+ k% n].vl kl ,
d ) fo r k:=1 t o nt n do ! t at [ 1+ k
d iw n,1 +k rc dl nl: = VI k l,
pentruclasaa Xl-a
de informatlcd t9

Se de un vectorv cu lrn componente numereintregi9i o matricel|At cuD


Si ! coloane. Care dintre secvenlelede mai joE copiazdmatricea uir in
b.ulv? Coplerease realizeazd astfel:maiintaise copiaz linia1, apoilinia2,
br h sfarsit.linian.

to! ltsl to r alo to r (1 .1 r t< -nr1.+ )


to r J.! 1 t o r dio l o r (J -l rJ< .r, J+ + )
vIJ+ {t - r . ) r nl tt, J l t v tJ { (t-1 ) rdr!!!tIt: IJl ,
' ' [ at
b) lor trrl to r alo b ) to ! (l .1 rl < 6rI+ + )
lor Jr.1 !o n dlo l o r (J -1 rJ< rnr J+ + )
vtl +{t- 1) ' . 1 r - ! t t It, J l t v tJ + (I-1 ) * D l -uatl tl IJl ,
to r L r-l t o n do to ! (tr1 , t< 4rt+ * )
tor Jrrl to r! .lo l o r (l rl rJ< -n, J+ + )
vIt+(J- 1) . r l' . lbt f r . J L v l t+ (J -l ) ral rua! ItI Il l ,
at) !o! lr.1 to n ilo d) !o ! (trl r{ <.!rl + + )
!ot' Jril to a do !o ! { l 1 1 r l < .trrJ+ + )
vIJ+ (1- 1) hJ r r r |r ! l J . tl , v tj + (t-t ) * D l .M!! tr, Jl t

spunsu grila
rilela testele
d); 13.c); 14.b).
Capitolul2

Subprograme

2. 1.Noliu ne a
de sub pro gr am

Definilia2.1.Prinsubprogramvominlelegeun ansamblu alcetuitdin


scrisein vedereaunei anumiteprelucrdri,
declar5ri9i instructiuni
ansamblu implementatseparat printr-un
9iidentificat nume.
Panaln prezent
am fostdoarutilizatori
de slbprograme.
Exemple
de astfel
desubprograme
folosite
sunl:
. Etn,coE,.br, xD, truna (Pascal)
matematice: / tloor (C++);
. de manipulare clo. (Pascal)
a figierelor: / .cro!6( ) (C++).
ln acestcapitollnvelamsa lucrdmcu subprcgrame.
Pentrua lnlelege
noliuneadesubprogram,vompornideladoueexemple.
1. Se considerdfunclial
j
[.x+l , Pentru ri e [-1,1];
I I + {"
t (x ) = { .r + l. P en t ru i (-6 , -1 )'
| t+,r
-e_, P n t ru . t (1 , 6 ).
I

Secitescdoudvalorirealea 9ib. Sdsescrieunprogram


careafi$eaza
caredintre
valorile
f(a) 9if(b) esteceamaimaro.

Ce observdm? Cd at pentrucalcululvaloriifunclieiln punctula, cat Si


pentrucalcululvaloriifunclieiln punctulb, apllcdmacelagitip de rationamenti
lncadrdmvaloarearespectivd (a saub) intr-unul
dintreceletreiintervale
Siaplicam
formula
decalculcorespunzatoare.
Cum procedem? Prinutilizarea
ounogtinlelor
dobanditepanaln prezent,
sciemsecvenla de programcarecalculeazd valoarea pentrun=a
funclieicalculatS
9i se maiscrieo datd(sausecopiazd 9i seadapteaze)secventade programcare
calculeazdvaloareafunctiei
calculatdoentrux-b.
hnual de informaticapentru clasaa Xl-a 21

Oare nu se poate lucra qi altfel?Respunsuleste afirmativ.Se scrie un


srbpfogramcare calculeazSvaloareafunclieiintr-un punct x oarecareSi se
o date pentrux=a 9i incd o datd pentrux-b. Valorile
subpfogramul:
:alculate
Ia
-eleaza celedoudapeluri,se compa|6inheelesi se afiseazdrezultatulcerut.

C 2. Se c tegten, un numdrnatLrralSe citescapoi n numerereale.Se


ceresa ." celen numerein ordineacrescdtoare
a valonlorlor.
"iqeze
-X.' Desigur,gtim sd rezolvdmaceasteproblemeln mai multefeluri,pentrucd
$ln sd memoremLrn9ir de valori(folosindun vector)qi am studiatmai multe
-tode prin care se poate obline ordonafeacrescdtoarea unui 9ir de valori
'iosind algoritmide sortare).De aceastedate, vom implementao metodd
.uoscutd, cea de sortare,dar vom utilizasubprogramele.
Vom scrie un subprogramcare citeqteun vector,unul care tiparesteun
rector9i un al treileacaresorteazevectoruldupeunadin metodelecunoscute.
In acestcaz,programul
ar arita astfe
PaEul- 1 - se apeleazesubprogramul
carecitegtevectorul.
Pasul 2 - se apeleazdsubprogramulcare
sorteazSvectorul.
Pagul 3 - se apeleazdsubproglamul
caretiperegte
vectorul.
Fa16 de sc erea clasicS,aici problema a fost descompusd in ttei
problememai slmple (citire,sortare9i tiperire).In genefal,o problemdcompbxe
se rezovd nai u|or dacd o desconpunen in alta subptoblemomai nici. Apoi,
$anselede a gregila scriereaunuisubprogram suhtcu mull mai lhicidecalacelea
Cea gre9ila scriereaunuipfograrnmare.
In plus, dacd lnk-un alt pfogrameste necesardsortareaaltui vector de
numerereale,metodaclasicdne permitesd alegemdin secvenlade instructiuni ce
tormeazdprogramulpe cele ce realizeazd sortarea,se b copiemin noulprogram
9i se facemeventualele adaptdri(numdrulde componente 9i numelevectoruluipot
f altele).Acesteopefaliisunt deslul de greoaie9i necesitemuH atentie.prin
implementarea modulard,cu ajutofulsubprogramelor, "preluarea"se redlizeazd
rnuitmai ugor.
Putemacumenumorauneledintreavantaleloutilizeriisubprogramelorl
. reullllzarcacodului- odatdscris,un subprogram
poatefi utilizatde cdtre
matmule pfograme;
. elaborareaalgorilmilorpdn descompunercaproblemeiin altelemai
simple- in acestfel,rezolvdm
cu multmaiusorproblema;
. reducereanum5ruluide eroricafepotapereala scrieaprogramelor;
. depistareacu ugurinftra eroailor- vedficemb inceputsubprogramele,
apolmodulin carele-amasamblat (le-amapolatdincadrulprogramului);
. realizareaunor programeu$orde urmddt(lizibile).
22 2. Subprogram
Capltolul

in Pascal
2.2. Subprograme

a funcliilor
2.2.1. Un exemplude utilizare

D Problema2,1. Se cilegten, numarnatural.S5 se scrieprogramele


care
valoarea
atigeazd a expresiilor:
calculald

z,=.*LaLa...a!, =('-*.1.
" -*)'
EI Rezolvaro.Funcliacarocalculeazig1s19:
lscrton su.bc,(nr Lnle!'r) r16.1,
v . a .!ro r1 r
Irl n t g .!,

f , o r l !.1 to n a l o a r.!+ l /i ,
aubDt
-.,

Analizaprogramululanterlor

t esle"frrldtlon
Antelultunctiei lrbD (r r l.ntossr) trarr".
t Functiaso numesle"sulD".
t Ea oste recunoscut5 de compilatorprin faptulc5 antetulesle precedatde
cuvantulcheie"f unotlon".
t Functiaare un paramlrunumit D. Rolul siu este imporlant9i anume
$ecizeazf penfiu ce valoate tr&ulo calculate exptesla. Aia cum vom
sd avemmaimultiparametri,
vedea,existdposibililatea do diferitetlpurl.
t Funcl@are un anufiil llp, carc ptecl4eazd natu'a rczuttatulut in exemplu
lipulesterear lntfucalexpresiacalculat esledo acesltip.
t Funcliaare variabileproprir- adicavariabilocarsuntdefinitein cadrulei. in
exemplu,ele sunl s 9i i. Acestevariabilese numoscva ablle locale.
) Am vdzulcd functialntoarceun anumitrezultal- Tnexemplu,de tip rear,
Obseryalimecanismulprin care am oblinutaceasta,Calculezexpresiain
mod obiqnuit.Rezultatuleste relinulde variabilalocalds. Prin alribuirea
"rul[)-sr ", funcliaa primitca valoarede relurcontinulul
variabileiE.

prezenidmceledoudprogramecareutilizeaza
in conlinuare, funclia:
Lanualde informatlcE
pentruclasaa Xt-a 23

luncltd .u!D(n!1 t6r.r) rral;

f o! lr ! 1 t o n 6 0 s t. rl l tr

w1! e ( t ar ' )r r a d l a (tr),


$! il. ( ! u! D( r ) :5 r 2 ),

v lf n, l! I r r . t . rt
r.z, Dloal I r6al,
furcllotr .u!E!(nrtnt.sr) r !a1,
waE ! !!..1t
i !In!ge!,
b.sh
lor lr-1 co n dto .r.r+t/i,
g!.bt, ! rat

rrilo (,..,)r ncaur(n),


E 6r t r . u! D( n) ,
Dr odt . lt
!o! lrrr co tt dto D!oatt.D!oa.{'
vrlto (rroc | 5 r 2),

t Functla steapelatd intotdeauna dlncadrulunelxpresli,


Apelul funcllei In prhulproqram 9-alacdasflsl:,.*rlr.(sur,9(n),5,2)
r.',
ar in al dolla."!.r t..ubD(!) ". ln prlmulcazoxprosla ca paramelru
sttreculal
pnlruEtr., larTnal dollea, avemo expr6sl0 deatribuire.
ln termlnologlautlllzallTntorlasubprogramelor, ln particular,
in cazul
tuncllllor
- seutlllzEazA
termenll paramotd lotmall9ipalametrtlec vl.

tfN Dotlnltla22, Parametrli


cares gesescin antetutfunclieis numesc
-+-"i,/ paramotdformall.
Atund cand scriemo funqie, nu cunoagtem valoareapropriu-zlsd a
paramekllor,
FunctialrebubsaTnioarca
rzuttalul
corct,oricarearir vbloarea
lor.
Dinaceslpunctdevedere6is numescformall.

Parametril
careseutlzeazd
taapelsenumesc
paramerrl
3r:1Ly,:"t
La apel,lucrurile
staualtfeltvalorileacgstora prin urmare
sunlcunoscute.
acestia
senurnescparamelrielectlvl.
24 Capitolul2. Subprograme

inlreparametriilormalisi parametrii trebuieseexisteo concordanle,


efectivi
la momentul
carevafi studiatd potrivil.

a procedurilor
2.2.2Un exemplude utilizare
O Problema2.2. Se citegten, numdrnaturalSe citeqteun vectorcu n
numere
componenle veclorulsortal.
reale.Seceresdsetipdreasce
esteurmato.ul:
Programul
EI Rezolvare.
tt'I). v.clolratssv [1..91 of iDletet,
wa r tr. i : int ogr ;
v:v. c t or ,
Iro..alur clletc;

dlt.(,tr= ' ) , r e. alln( D) ,


fo ! i:=1 lo D dlo

Ett. (.vt 1. , I = , ) , r . dr n{ wlt l) ,


"

groc.alut. ltt)Arsdc,

fo r tr- l to n dt o Elt er ! ( v lt l) ,

Droccdlur6 so!!62,
var e..:Ll.boolos,
utt:lntes6t,

s.a !.t t . lat . 6r


lor lr-1 to n-1 alo
tf v t t l> v lt + Ll
thaD
b.git
gaail! ! in,
uDt . v lt l t v t t l ! . v t t + lt , w t l +l ] t 'D l n

uncll not gaalt,

cl!..ci
ao rtzt
crDrraac,

Programulconlinetrei proceduri:clt6c, ,o!lz 9i tLDArsc. Forma


princareestedsscris}o procedure
simpli{icate este:
uanualde informatlcioentruclasaa Xl-a

Apelul unei prcceduri se lace pin utlllzarea numerui er',sub forma nu!r.
Mai precis, apelu/ unei prccedui este inslruqiune, numilS instructlunea
de aoel.
La apel, contrclul programului este tansfeat la pima instuqiune a
proceduii- dupecum se lntampldSi la funclii.Dupaexecutareaprocedurii,
se rcvine in programulpincipal la ptina instuqiune carc urmeazdcelei de
apel- in cazuldo fald se intalnegte
o ala instrucliune
de apel.
Ca Si funcliile, prccedurile 6e pot phsa in cadrul programulul intre
declar4ile de va abileii instru4iuneacompusA.
O ce variabi6 a prognmului ptincipalesteSi variabid a procedutii(inversnu
este adevdrat).

L in acost exemplu,procedurilesunt apelale16ft utilizareaparamellor. in


procedurile
realitate, potaveaparamelriintocmaica qi lunctiile.

2.2.3.Structura
unuisubprogram
in osenla,
unsubprcgram
ostoalcatuit
din:
Antot - conlinemai multoinfgmatiiimportanle necesarecompllalorului,
numelesuwogmmului,lbtapatametrilor formali.In oazulsubprogramelor
de
tiplunclie,
contine (valoarea
ii tipulrezultlului intoarsd dfun4ie).
Bloc - cuprindedelin4iiletipuribr de va abile, ale variabilebr,ale
subprogramlor
9i o inslructiune
compusd. Structt/ra
saesteidenlicd
cuc6aa
programului
princlpal, daceesteblocdeprocedura
indilernt saudetunctie.
I, principal
Programul unantgt(program
contine nume)$iunbloc.
Penlruprezenlarea
strucluriisubprogramelor
do tip lunctievom utiliza
diagramele
de sintaxd.

2.2.3,1,Structura
subprogramelor
de tip funclie
infigura estprezentatd
urmetoare struclura
anletulul:

ANTET DE lt$T
- FUI{CI|E PANAMETRI
FORMALI

DEIITIFICATOR
DE TIP

Figu6 2.1.Slrucrura
anrtului
unuisubp.ogGm
de iipruncle
Exemplu:
fwction str@(s,Yth!e!ot) ttellt

.l|@.-a+yt

- anietulesle "furcllor sl'jna(x, y t intgrr) trellr";

(numele)functieieste Eur|. Lista parametrilor


- identiticatorul formalieste:
estedetiptscl (idntificatorul
'!r,y: lnteger". Functia detip);

- bloculesle(inacestcazlipsosc
variabilels
locale):

srlu ! rx+y,

t lmporlant: identificalorulde tip (tipulvalorillntoarsede fun4ie) poatfl: de


{P oricetip ordinal,de oricelip real,de orictip pointersau de tipul strlng
(acestlip va listudiatin acestmanuaD.

Structura
2.2.3.2. detip procedure
subprogramelor
antetuld ptoooduli:
steprezentat
in flguraurmetoare
LISTI
ANTET IDENTIFICATOR PARAMETRI
-pnoceounF

Flglra2.2.structurd
anttllul dllppfocdula
unulsubprogram

Exemplui
D!oc.a\rr. !u!.(va! 3r r.d, x,yt!.41),

- anllulest6:"Droc.dut6 lumr (vrr ltreal, x'ytr.al)t

(numgleprocedurll)
- idenlificalorul estesurr;
- lislaparametrilor "vat E!!611, x,vr!aLt";
formalieslei

- blocul6ste:
Lnual de Informaticioentruclasaa Xl-a 27

2.2.4.Definirea
$i declararea
unuisubprogr_am
Dsgiaparentasemdndtoare, celedoudnoliunidiler). Bunaintelegerea lor
.E ajutasa evilSmanumiteerori.I\Iaimult,acsslonotiunisunl utilizatede orice
tnbaj de programare,
nu numaidePasoal,

Definilia2.4. A defini un subprogram,


inseamnl a-l scrie electlv,
dupdstructuraanteriorprezentata.O problemeimporlanlaeste locul
undesedefinegte subprogramul.
h Pascal,
subprogramele
sedefinesc
in lroilocuril
f. in bloaulprogramututcare.l ut,ttz@E. numitqi programprlnclpal- inlre
doclaralia
variabilelor
9iinstructiunea
compus5:
Drogru.xdtrrlul,
va! x! lnt!'o!t
Droc6dlur6 l,

w!llo1tr(*)

b.sh

2- In cadrul unwtltlor de prognm. votll studlateulterlor.


3. ln blocul unul alt aubptogrum,Acoagtiformgeste proprllimbajului
PEscal.ln oxemplu,procedura t, arg qa subprogramprocedurar. Inllisl
programul va alribuivariabilei
x valoafea 3. Apoiva apelaprocedurar. Ea
tipdregtcontinutullui x (3), apol apgleazlprocedura La randulei,
acaaslaafi9aAunmesai:'u !u:rt !,. '.

Drogra! 6xrq,1u2,

r i. t 14 ( ' u s u n l z r)t

nr il. ln( *) , zt
28 Capitolul2. Subprograme

Definilia 2.5. A declara un subprogram,inseamnd a-! anunla. Un


subprogram nedeclaratnu poalefiiolosil. -

f. in cazutin carc subprogrcnul estedetinit In blocul prognmului p ncipal


sau in blocul subprogramulul, se considerdce a fost Oi declaratpentu
acesta,decipoatefifolosll In aceslcaz,declaraliacoincidecu definilia.

Exemple
. in programulexdDtul, procedurat este delinitdin bloculprogramului
principal.
Ea poateli apelatddinprogramul
principal.
. in programulxeq)lu2, procedurat esle definiidin bloculprogramului
principal,decipoalefiapelaldde acesta.Procedufaz esie definitdin blocul
proceduriir. Ea poatefi apelaiadin t. in schmb. nu poateli apelalddin
program!lprincipal.

2, In bloculprogramuluiprincipalsauin bloculunuisubprogram se detinesq i''


ordlne, subprogamele
declaratpontrus?, s], ..., sr, apoisr esie declaratpentruii, ..., Er, iar 6*-1
estedeclaratpentruar,

Exemple

. Proceduriles1 9i r, pot fi apelatedin progfamulprlncipal.ProceduraEl


poaiefi apelal5din proceduras2, dar s2 nu poatefi apelal6,in absenlaaltei
clauze,dins1:
Dloc.alur att

writt a( t s lt )

Dloc6tlur 62t

6 1t
ffiiE' ln ( ' a2' ) _

. Procedura test conline definilia a doud proceduri 11 91 62. Nici una din
aceste proceduri nu se considerd declarati penlru programul principal.
Amandoud sunt declaratepentru proceduratet. Pentru proceduras2, 61
este declaratb,dar pentru 61 proceduraE2 nu este declaratd.
Manualde informaflce
pentruclasaa Xt,a 29
Drocealur tctt
Drocedluao s1t

r lt or E ( ' sl' )

Drocedur 3?'

E ilolD( ' s 2 ' ),

a2t

p*i9lt"ta rn 2, sepoare
rotusi
caoricesubprogram
definit
llra :ilr_llll _cazut
nrvrurunur.btocsd fie
declaratpenku loate subprogrameld
derinitela
nrverur
acturagi
btoc,ca ln exemplulurmator.

cheie,,forts!rd',
Dclarallass face prln antet,urmatde cuventut

I Observatict,fn acestcaz,definllianu coincidecu declaralia.

Droc6dlur br fonltdt,

t t r ilLn( ' E u s u rr r. ),

E 1! 6t u( , E u .u 8 t b ' )

In cazutIn caresubprogramula lost definilin cadruluneiunildtic,eorooram.


oecraralraunndlii,ctauz .\rs63", aro efect de Oeclarallepentiu
ioate
subprogrameledflnltein cad.ul et (unitilitede programvoi ti studiafe
cadrulacestuicapitot). in
30 Capitolul2. Subprograme

2.2.5.Apelulsubprogramelor
Oetinilia 2.6. A apela un subprogEm,inseamnea-l lanaa in
oxocutare. Penirua puteafi apelaldincadrulunulbloc,un subprogram
trebuie
declarai la nivelul
blocului
respctiv.

2 .2 .5 .1 A
. p e l ulfuncliilor

in programul produsul"a
de mailos esteapelatio funcliecarecalculeazd
dou, numereintregi.ProgramultipSreltesumaintre 1 9i produsul
calculat.In
exemplu, gesiHest?:
valoarea
w.r D, x , y r lt r t egr ,

functlo! Drcil(x,yr lr^t.gr) rl!16!'!t

Dtodt 'xrv,

D,rl+D loll( x , y ) ,
ellt6 tn( D)

) Apefulunei lunclir se .ealizeazAdin interiorulunei expresii.in exemplu,


oxprosiaostoi"l+Droal(x,y)". Rezultatul ar ti losl oblinutmai simpludacd
"wrlth ( 1+p!od(n,y) ) r"
scriam
,
Oboervatll
{.i:
r' in cadrulgxpresiei,apelulste un operand.El intrStn calculcu valoarea
relurnagd funclio.
expreslel.
Dupdaplulluncliei,se continueevaluarea
"
[,lallosestsprezentaloprandulcarereprezlntd
apelulfuncllel.

LISIT
AFEL IDENTIFICATOR PARAMETRI
FUNCTIE FUNCTIE
EFECTIVI

Flgura
2.3.Slruclunopnndului
oalerpr8zinla
aplur
fundioi
Manualde informaticipentruclasaa Xl_a
3l

2.2.5.2.Apelulproceduror _

datepana
acum
racinutire
prezenrarea
unliart
"*"'o?rl?,if,1"'J3.?ii#li?
insrrucriune
i;"1j."1,'J",113i",?lT3*:l"ffi"lxfr,,il!:lj;:::,",,"#H;,j
_rNTRucflUNE usrl
pco ceo une L-i IDENflFICATOR

Figuna
2.4.Strucrllra
insrrucliunij
procdute
2.Dupe
apol,sevaexecuta
instructiunea
cafeurmeaze
instrucliunii
procedurale.
2.2.5.3.Transmiterea
parametrilor
la apel
in ce priv9te
mecanismulde tran!
o,t*""ra
.
i.j"ip,ili,ii;ii;:il'
ffiI#"1THi
?j,ffiT"i':,l";;:fff
f ,:5":
> Parametdl
tormallsuntceitfecutjlnantetuj
subprogramului,
> Parametrll
eto vl suntceilreculilaapetut
subprogramului.

? vdzut,subprogramete
ln..:!jT_"r conrrne por tucracu vafjabitete
gtobajale
' orocurur,care definirra
ror.Atuncrcaroestemorivur
ngcesartparamelril? pentrJ ciie-s,lni

dobenditepend ln acstmomentnu permlt justi,icare


--_ -,gynggtinlete
compteta..Putemspunenumaica ulilizarea o
parametnlor
permiteca subproaramul
sa-riescnsindspendentdprogramut
principat,
scrrcmun subprogram SatuamJn exemjti:;;;'#
.i"loir"ne"fi
carecalcuteazasuma a doueu"rori
r,nvu unpfogramarlrebuise
adunem *cuy, iarpentru
r,"ai".
altul.rncur-- --- -,,""j
vrr x, y..ru r r.slor.t'r
Droc.du!. .uu(a,bttnr.s.rr wa! s!tnr.s.!),

*r E 3, y r = 4,
8r|D(a.y,.s); rr!t!61n ( !u&) ,
( 2, 3. au ), i tEtte l n (s rs ) t
s E A
32 capitolul2:sfE]!gjg!s

in ptogramulanterior,proceduraEuna calculeaz;suma a doud numere


iniregi.
Eaesteapelatede doudoridjncadrulprogramului
principal.
- parametriiformalisunl:"B,brinc6of6r;var s:inreser;"1
- pentruprimul apel,paramelrii
efectivisunl:x, y, sw;
- pentrual doileaapel,parametrii
efectivisunl: 2, 3, 5u.
latdcatevaregulicarelrebuierespectate
la apel:
> Num,rul parametrilor formali trebuie si coincidi cu numerul
parametdlorefectivi.ln exemplu,acestnumereste3.

> Tipul paramelrilor formali kebuie sd coincide cu lipul parametrilor


etectivi6au tipul pammetriloretectivisa poatdfi convertit implicit cdtre
tipul parametrilorlormali, la felca in cazulatribuirii.
De exemplu,dacd parametriiformalia 9i b suntde lipul ints6r, nu esle
permisca parametrii
eiectivisd fie de alt tip (deexemplu,de tipul!a1).

t NL esle obl.galoriu
ca numeleparametrilor
lormalisa coincdacu nume,e
i paramelrilorefeclivi.

> Nu este permis sd delinimlipul parametrilorin cadrul anletuluisubpro-


gramului.Tipultfebuiesd lie predelinit
sausa lie declaratin prealabil.
Exemole
tyD6 v6ctor:a rray t 1. . 9I of t nt n6r ;

oi"."a""" t".t f ", r "r 6qr r , v : v eet or ) , rcorGcr'


Dlocga turo rase{ n: inc s gr r , v ' af f ay lI . .9l of inhesro!); (incofecrl

Paramelriiformalisunl de douefeluri:trunsmisip n valoarc9i transmigi


p n rcle nld. in cazulin care acesliasunl precedalide cuvanlulch;ie var, se
c6 sunltransmigiprinreferint6,
considere conirar,prinvaloare.
Tralarealransmileriiprin valoare9i prin referintSse va lace in paragratele
urmeloare. Pentru moment, prezenldm sintaxa parametrilorformali Sr a
paramelrilor
efectivil

D E N '[IFIC TOR TIP

Figura2.5.
Slftaxaparametrilor
trimili
lanual de Informaticepentru clasaa Xl-a 33

parametriitransmiii ?
2.2,5.4.cum memoreazisubprogramele

in acestparagrafvom analizamodulprincaresunt memor4iparametrii


in momentul
lansdrii a subprogramului.
in executare
-nsmigi
t Pentrumemorarea parametrilor, folosesc
subprogramele o zonedememorie
numitdstlve(maiexact,aceast;zonesenumeqte
segmentde stlva).
+ Memorarea parametribrtransmigise face in ordineain caro acgtia
in antet:delaslangaladreapta.
iigureaza
t Pentruparametriitransmiliprinvaloare,
se memoreazSvaloarea
transmise,
iar penlrucei transmigiprin relerinld,se memorea26adresavariabilei
transmisecaparametru.
t paramehii
in cadrulsubprogramului, 9i memoraliin stivdsunt
transmigi
variabile.
Numeloloresleceldinlistaparametrilor
formali.
Reluam
exemplul
antgrior:
. antelul este: "9rocdur s@(a.b!t!!set, wa! stltrtsor)r";
. la prlmulapel, sunl:s, y, su!, undex reline"3"9i y "4".
parametrii
variabilele
ln stivi sunlmemorals in ligurd,suntprezentate
subprogramului.
givalorile
memoratel

3 | 4 | adresavariabiloisum

Laaldoileaapel,paramehiisuntz, 3, sv!,

2 | 3 | adresavarlabileisum

t, Observalll
Larevenifea
Tnbloculapelant, variabilelor
conlinutul mmorate
in slivass va
preroe.
/ Memorarea vorfi tratatela
dar acestea
in slivaare9i alteconsecinle,
polrivit
momentul (vezirocursivitateal).
prinvaloare
parametrilor
2,2.5.5.Transmiterea
Transmiiereaprin valoare se utilizezdatunci cand sunlem interesali ca
subprogramulse bcrgze cu acea valoare,dar in prelucrare,nu ne inlereseazSca
paramotrul
efecliv(celdin bloculapelant)sArqind valoareamodificatdln subprogram.
Astfel,se pottransmileprinvaloare:

> valorile rellnutede varlablle- ln acestcaz,paramelriiefeclivitrebuie


sd fie
numelovariabilelor.
Exemplu:
w.r a:rdregrt
Droce6u! r6ar (n:lngse!) t

Elt lD( t r )

writrr(n);

parametruln prinvaloare.
estotransmis
t ih programul
principal,
avemdeclaratd
variabita
n, careesteinitializatd
cu 1,
t Apeldmprocedura. La apol,se rezervdspatiuin stivd,spatiucare are
numeleparameirului
(decitol n) 9i estoinilializat
cu valoarea
mehoralAde
n a programului
variabila principal.
ln acostmoment avsmdoudvariabile
n 9i
ambelerotinvaloarea
1.
) in procedurd,
variabila (adlcdla vechiutcontinutse
! stoincrsmntate
adauge1). Evident,
estevorbadevariabtla
nemoraidin slivd,
+ Afigdm
continutul (ceadlnstivd),decisetiperegte
variabilein 2.
t La iesireadinprocdurd, a (dinstlvd)so pierde- adicdnu malare
variabila
spatiualocat.Prinurmare, 2 stepiorduta,
valoarea
t in programul
princlpal
setiperegte
continutul
variabilel
n, adicd1.
paramelrll
efeotlvlsuntvalollsauexpreall,caremailnteisovalueaze.
Exemplu:
Droc.alufe ros! (nr lntegE),
Larualde informaticA ntru clasaa Xl-a

in procedurdse creeazdo variabildin segmentulde stivd,numitdn, carela


:rinul apelrqine valoarea3 9i la al doilea,valoarea23. La iegkeadin procodurd
.onljnutulvariabileise pierde.
ASa cum am vdzut, ln cazul transmiteriiprin valoare,se pot folosi ca
rdrametriofgcliviexpresii.De asomenea,expresjilepot avea ca operanzifunclii.
expresia(r.-y) r (x+y).
Jrmdlorulprogramcitegtedoudvalorix Sjy 9i calculeazd
Exefiplu:
Drcgre Earl)arai
v.r r.,y:int96!,

fuactt@ E'Iu (a,b:intesr) rLlrger,

3',Mr Ea+bt

tuclton all! (a,blIntgr) ritrtese4

dtil..a -b,

lEctton Drodl(a,bt ltrtosr) ! 1n!es6!t

9 rod !ea rbt

b.sln
$!tt.('s.' )t radlh(s),
clte ('y.' ), leadJ . n( y ) ,
Eile1 n(Dlo dl(d L! ( x , y ) , luna ( x , y ) ) ) ,

parametrllorprln referinte
2,2.5.6.Transmiterea

Paramehii prinreferintd
sunl transmigi atuncicandne intoreseazi ca, la
revenirea
dinsubprogram,variabila
transmisasd retindvaloara
stabllna
in timpul
executeril
subprogram
ulul.
I prinreferlntd,
in cazullransmitorii patametrii
efectivitrebuie
seli6 variabfle.
I in cazulsubprogramelordo lip procedurS,tfansmitoroa prinrelerintdeste
mecanismulclasicprincareacestoa intorcvaloricetrebloculapelant,
t Pentruca un parametru sd fie transmisprin relerinlaeste ncesarca
parametrul
tormalsdlie precedatdecuvenlulcheie "var".
) prinreferinle,
in cazultransmilerii subprogramut
relinein stivdadresa
va abilei.
I in acestcaz,ne putomirtrebacareestemecanismul princare,degipentruo
v variabildlransmisase relinoadresasa, in subprogamputemadrcsa
vaiabilanomal (nu indirecl)?La compitare, orice referintdla variabila
respectivd,esle'tradus5"
caadresareindireclS.
36 Capitolul
2. Subprograqe

Exemplu.Programul o procedure
urmdtorutilizeazE care interschimba
vabrile
relinute
dedoudvariabilo.
Acesleasunthansmiseprinreferinld.
var x,yrt [tegrt
Dlocedu lnterscbirb(var s.yrtrcs.r),
war !4:urgr,

@:.x; f lE r Y! { s ;

a !-2r y r ! 3t
intolschhb (r,y) ;
Mtt (x, . , , y ) ,

2. 2. 6.Var ia b i l el o c a l eg i g l o b a l e

Definilia 2,7. Varlablleleglobale sunl variabileleprogramului


principat.
EIesunl rezeruale intr-ozondspecial5de date,numitdsegmentde date.
In versiunea 7.0 a limbajuluip.scat, variabilelonumerice sunl
initializato
cu 0.
Dofinilla 2.8. Varlablllelocalg sunt variabiledectaralein interiorul
subprogramelor. Acestevadabilosunl memoratein segmentulde stlvi,
dupAvariabilele generatede paramelri.Esle sarcinaprogramatoruluisd
asigure inilializarealor cu valoriledorito.La iegireadin subprogram
contanululvariabilelor
localese Dirde.
Un temen des folositin praclicalimbajelorde programareste acela de
vfzfbflftate. A prcciza vizibilitateaunei vaiabile inseamnd a spune care sunl
blocurilede undese poateadresa(cas5-iatribuimo valoare,de exemptu).

t Vorlablleleglobalo suntvizibilela nivolulprogramului


principal9i ta nivelul
suoprogramelor.
ProgramulalSturat
tiparegte
detroiori
2, conlinutul globale
variabilei x.
gsnualde Informatictr
Dentruclasaa Xl-a 37

+ Variabilelelocalesuntvizibiledoarla nivelulsubprogramului
in careau fost
declarate9i la nivelulsubprogramelor
definilein acesla.
Programul aldturattipdregtede doudori 2,
continutulvariabileilocalex. Dace am li
incercatsd tipdrimx din cadrulprogramului
principal,programular fi dat eroare de
comprlare.

t Atenllel Exist2isilualiiin care o variabilagbbalSnu poale li adresateldin


j cadrulsubprogramului, adiceatuncicandacestacontinedeclaraliauneiall
variabile,cu acelaginume.In acestcaz,prin numtse adrseazevariabila
locale. Rogula este urmetoarea:in cazul in carc douA vaiabile au acelagi
nume, dar vinbilit^li diforite, se adresead intotdoauna varkbila cu
vidbilikteamai redusd.Evident,in cazul exislnteia doua variabilecu
qi acelatinume,compilatorul
aoeeagivizibilitale va da eroarede sintaxl.
Programul
de maijoslipereqle2, nu 3:
var arrDrogr,
Dlocodu! at

E lt aln( x )

Alt lermendes utilizatln practicaprogramdrii este durata ds vlall a unei


,ariabile.El se referdla pgrioadade limp In carevariabilaestealocaHiin memorie.
,\stfel,avem:
I duratedatce - variabilaarealocatspatiupo tot timpuloxecuteriiprogramului.
I durala locald - variabilaare alocalspatiudoar in limpul cat se executdun
anumnbloc.
. duralii dlnamlce" alocarea
spatiului prin
de memoriese Jacein limpulexocutdrii
subprograme (in Pascaiavemsubprograme
specialesauoperatori speciale).
Variabilele
cu aceastdduratSde viatess numescdinamlco9i nu se trateazdin
aceslmanuat,
38 Capttolul2. Subprograme

Din acesl punct de vedere pulom spunecA vaiabilele globale au duratd de


viatdslaticd,iat va abilelelocaleau durctade vi4e locald.
Un ullimtemen esle dat de clasade memoraiea uneivariabile.Se referd
la locul unde variabilaeste memorala.Astfel,o variabilepoatefi memoratain
gegmenlulde date,in segmenlulde stiv5 sauin heap.

f Astfel,pe lengdtip, o variabildse caracterizeazd


prin:chse de memorare,
rjP vizibilitateSidurati de vlat{.

2.2,7.Creqeli
frecvente
1. Gregelioareapar la trangmltereatlpu lor nestandard
Beamintimfaptulca un tip esle standarddacaestecunoscutde mbaj(de
exomplu,l!tgr). In caz conlrartipuloste nestandard(de exemplu,tipulcare
descrieun vectorcu componentede tip !aal). lateo procedurascrisegregit:
Dloc . d l u r r (v a ! w ra rr.y tl ..9 9 t of r.al ),
ii'or'

Eroareaestedatddelaplulcetlpulnestandardal varlabilei
v estdEscris
Tn
listaparametrilor.
Programulva
daeroardeslntaxd.
Pntrua procedacorect,tlpulestEdscrisgeparat,ln cadrulprogramului
pflncipal,
printtE 6.
tlrE woctrlllqy 11. .99I o! !oal,

"i.:, ","..t,
!,!oo.dlu!. r {vat vrw.ol),
ii'cr'

2. Gregell-careqpar la atrlbuheavalorlld rotura unelfunclll (valoareape


carefuncllao Intoarce)
lalSo funclle,scrigderonat,
careTntoarce lnveagaE (o sumi).
o valoare
lunctj.o! rusa( n, j.tltrror!) rlnrgor,
v6! 3t lntseEt

.alcuLr 3,
ii'iiiii.r,.",
EroareaconstdIn laptulce in alribuirea"su'l!(n.1) r=Er,'au fost treculi
parametri.
Coreclste'
40 Capitolul2. SubprograBr

i't , in conlinuare,
vgmda un exemplupurdidacticde unitaiede prograrn
1x: numiE opER||tII. Aceastaconlinepalru proceduri:de adunare
scddere, inmuqire
9i impS4irods vadabilg
reale.Variabilele a 9i b surt
globalepenlruprogramulcare ulilizeazdaceastdunitate,iar variabilac poatefi
utilizal5numaiin cadrulunitSlii.In secvntade initializare
se citescvalorib
variabilelor.gib.

Unitateade programesteprezentat?t
ln continuarel
urllt drFlltl:tt

Drco,alur .alrr! (r,b, 16.l) ,


D!ocdu.6 rcad(a.b:!6.:'),
t rocdurc Dftdur (..brrd),
9rocduro t4ralt (r,br r.1),

lqrldot.tLE

Drocodlur adur(a,brro.l),

! . llt ol8 { Gr!r2 ),

Droc(trrl. scad(a,br!.al] I

wllt oln (6 r ! r2 ),

Drcc6aruro Droitus (a, b | lrl ),

r ll! . Ln (c t3 !2 ) r

Droc.dur. t4r.4 (..btN&),


besftr
It bro tlsD rrllsLn ( . tq)aftlir au so rroat lac ,)

b.c!.t
c r.r/b ,
v rt!.l ! (o r !: I ),
cadt

{ r t r 61! ( rb !t ),
pentruclasaa Xl-a
Yanualde informatlce 39

2.2.8.Unitilide program
practicese lac aplicatiicuun numdrmafede programecarede
in activitatea
"rulteori suntde maridimensiuni. O preocupare constanida informaticienilor
esle
ae a pune la dispoziliaprogramatorilor instrumenleeficientede programare.In
acestsens, limbajulPascal olerd posibililaiealucruluic! unitali de program
unlt-uri).

Dofinilia2.9. Prin unitalede programintelegemun ansamblude dale,


procedurigi lunclii, plasate9i compilateimpreunS,care pot fi uqor
ulilizale in scriereaaltor programe,ferd a se cunoagteamanunle
nocesarerealizdriilor.
Forma generalea lnei unititide programesie urmdtoarea:

ttllrt <nume unitate>i


INlIERITCE
lusEs<numele altorunitalideprogram pecareloutilizeazd>il
dategivariabile
ltipuride globale in programulcare
utilizeaza
unitateal
antetede proceduri
9ilunctii
IIIPIJEIIENIIA!!ION
locale(valablle
llipuridedateSivariabile numaipentruunitatoa
ds
program)l
procedurile
gifuncliile
utilizato
deunitaloadoprogram
IBEGIN
.,,,...o ovenluald
sscvenld deprogram careseoxecutS
.......in momenlul
declar6rli program
unilatiide in
.,,....programul
careo ulilizeazd.
E![D. ]

t Prima parle,obligalorie,este precedaldde clauza "rNrERracE'. Aici so


gdsescdelinitiiletipurilorde dalo,variabilolor,
9i sunl enumerateprocedurile
9i luncliiloce pot fi uiilizatedin programulprincipal.Peniru orico tip de
variabiEdoclarataici, se pot declaravariabilede acest tip aEt in cadrul
unitdtiical 9i ln cadrulprogramului carefolosegteunitalea.Se observec5 o
unilatede programare in mod obligatoriudoue pd4i, oplional,o a tria.
Toateprocedurilo 9i funcliilecareaicisuntnumaienumerate potli lolositsdo
oriceprogramcarefolosesteunitalea.
t Adouaparto,obligatorie, se g5segteplasatesubclauza"r!@r.E!@[rAtroN'.
Aici se pol declaralipurile9i variabilele
vizibilenumaipenlruunitateadata.
Tot aici se scriuclartoateprocedurile Eilunctijlecareln parteau fost numai
declarate, precum9i altelece potti Jolosilenumaiin cadrulunitefi.
t Parteaoplionalda fosl prezenlald
in cadrulformeigeneraloa unitdlii.
Y:nual de informatlcdpentru clasaa Xl-a 43

+ Funcliaare un anumilllp, carc precizead naturarczJltatulul ln exemplu,


iipul este aouble intrucat expresiacalculales$e de acesttip.
I Functiaaro variabilepropfli- adicavariabite
caresunl delinitein cadrulei.in
exemplu,s Sii. Acestevariabilese numescvarlabllelooale.
+ Am vdzutcd lunqia intoarceun anumitrezultat- in exemplu,do tip dou51.
Observatimecanismulprin care am oblinutaceasta.Calculezexpresiain
mod obisnuil.Rezultaluleste relinulde variabilalocali E. Prininstrucliunea
"letun d;",lunctiaa primitca valoarede returconlinutulvariabilei E.

in terminologiautilizalSln teoria subprogramelor _ in particular,in cazul


r-rctiilor " se utilizeazdtetfieniti panmetl lormdll gi panmetri etectlvl.

Definifia2.10. Parametriicare so gdsescin anlotulfunclieise numesc


Darametrltormali.

Atuncicand scriemo funclienu cunoagtem valoareapropriu-zise a


:araraelrilor.
Functiatrebuiesi intoarcd corect,oricarear fi valoarea
rozultalul lor.
:,n aceslpuncldevedereeise numesc lormall.
Detlnltla2.11.Paramelrii
carosoutllizeaze parcmetrl
h aplsenumesc
efectlvl.
staualtfol:valorileaceslora
La apel,lucrurite Prinurmare,
suntcunoscule.
;cegliasonumesc parafielJi efectivi.
:enlruapelul"raz-sul'r)(n ) , ", paramelrul
sfectivesten.
] Problema2.4" So citesten, numdrnalural,Se citeqtoun vectorcu n
numefereale.se ceresdsotipdfeasce
:orTrDonnte sonat.
veclorul
#lnclual <lostrca.h>
rc t d c t t . . c ( r . a t e l tl o l .i n t E)

lor ( 1r 0, t < r , t+ + )
( c dr < < r et ' < < j .+ 1 < < i I ri ,
c in> > v r I rl ;
,
)
v olal lor t 6r ( lrt v tt1 0 l ,l l c n)
( int !'aBlt.l,'l!n,

f or ( i= 0r i < r-1 rIr+ )


t f ( v t t ll> v ttt+ 1 ])
( @DEvt ttl I
v t t il E w t l L + 1 1,
v t t l+ 1 1 = i n !n ,
gas lt t l; )
I s hil ( ! l. a i t),
44 Capttolul2. Subprograme

rfoial lcrtu(lnt. w! t10t.tar n)

r or (i = 0 rt< Eri + + )
c@t<<vt Iit <<ndut
!

( ir r v [to ].D ,
c @ t < < tn _ f,
c ln> > n ,
c it 6 rc (v ,n ) t
aor t 6 r(e ,n t t
. c r t u (w ,a ) t
)

Programul
continotrejfunclii:clreEc, sorroz gi ttDareBc.
a La apel, cqtrclul ptognmulut estetansfent ta pima instrudiune a fundiei.
Dupe executarca funqiei, se rcvine ln prognmul prinbipal Ia pina
instuqluno carc urnoa2d celei de apel - ln cazuldo t4a se intelnegtoo al5
nstruqtune oe apet.
3 Cele trcifunqii au pul vort adice nu au vatoarcde rotut. Elerctumeaze
rczuftatul nlnternediulparametilot.

2.3.2.Structura
uneifunctii
in esenle,
o funcliesteatcdtuna
dinl
t Antot . acesta conline nal multo intormatiiimportantenocesare
compilalarulul
numelefunqiel, stapanmelrlbt fomati,tipulrczultatului.
Structura
antetulul
ste:
ttD aur.(l1,!t. Dr!.'l trltor lorflrIt)

Lislaparamelrllor
formallest
deforma:
Darr$t!rr1, Drrdrtrur, ..., Dar.rntnr!

Existdgi posibilitatea
ca lista parametrilor
formalise lie vlde. Fiecare
parametru
arelorma:
tlD rume.

t O.lnstrucllqnecompual- aceasta
cuprindo
declarEiile
variabllolor
tocalo,
propriu-zise.
9iinstructiunile
Poateli tipal uneilunctii
ortcetipdedatacuexceplia
masivelor.
de informatici ntruclasaa Xl-a

ple de anlete:
j,ut Eurna ( iat .. h! b) - funcliaSe numeqteBuna, returnoaziun
'ezultatde tip tnr 9i arodoi parametrlformalide tip tur!, numitia 9i b.
?ota r(i!r u, floar vl20l) - tunctiase numegter, estede tip void
(nureturneazd rezultalprinnume),are doiparametri formali,primulnumitn, de
:rp int, al doileanuniitv, de tip floatr (un tip care felineadresede vectori
cu elementede tipulfloat).

O funclie retumeazd rezultatulla Tntahireainstrucliunii!rurtr, care are


lorma:
letui! a{9tagla,

Trebuio
catipulexpresisi
sdcoincide
cutipulfunctiel.
LalntAhirea instructiunii
r6ru!|l, dupdatribuirea
valorii,
executiafunclioise
)ie 9i se revinela luncliacarea apelat-o.in absenlainstruqiunii
r.tunr,
ulrafunctieise incheiedupdexeculia uttimeiinstrucliuni.
in acestcaznu se
rceniclo valoare,
O luncliepoateli apelatitdg sinstegtor(prlnnume9i listaparanetrilor
darpoatefi incluse
efectivi), 9iln cadrulexpresillor,
caz?ncare,la evaluarea
expresiei
esteaplatd. Aceastd ultimeformddgapolnuestevalabiEin cazul
funqlibrdelipvold.
*lacrudto<tosr!ar.hr in programul
algturatesteapehteo
tunce car calculeazd produsula
lnt rlod (1n! x, tu! y) doui numefeTntrogi.
( !6trn xty,

rllltro ' Programultipdregtgsuma tntrg 1 9i


( lDr *.2,t-3, produsulcalculat.In gxemplu, ?.
ooul<<1+D!od (r,yl ,
l

Apelulluncllels-argalizat
dlnIntoriorul ,'1+9rod(rr,y),.
expreslgi:

Oboervalll

in cadrulexprosiei,
apelulestsun operand.
El intrdln calculcu valoarea
returnate
delunctjo.
Dupaapelulfunclieisecontlnud
evaluarea
expresiei.
La apel,ordlneade evaluarea paiamtrllornu elte dfinlte,Deexemplu,
daceapeldmfunqiar6sr asdel:
cBt(2-3,2+31,

nu qlim dacSlnalnle se efeclueaz scadereasau adunarea.


46 Capitolul2. Subprograme

2.3.3.Declararea
variabilelor

Panein prezent amdeclaratvariabile


doarin corpultunctiilor
- inclusiv
in cel
allunctieirutn ( ) . Variabilele
doclarale
astfetsonurnesc
locali.

+ program
Fiecerui i se alocatreizonodistincte
in memoria
internein carese
gAsescmemorale programuluil
variabilels

Figula2.5.Clotrstzon6inmmorlatnte.ne

Oe asemenea, exlstdposibltitata
ca variabilele
s5 fie memoraleink.un
anumltregistrual microprocsorulul.
in acestcaz mpulde accesla astfelde
variabile
estefoartemic,decis6potobtineprogrameoptimlzate.

) in general,
o variabila pfln4 atrlbute.Acesta
secaracterizeaze sunt:
. claaade memorarci
. vtztb ltatei
. duralad vlall;
. tlpulvarlabllel,
singurul
pecareI,amstudiat
peni Tnprezenl.

1, Cfasade memorare- VealzeazA loculundoesle memoratevariablla


respctive.
O variablld
poatefi memoraH in segmentuldo date,ln celde
dlva,In hoapsauintr-unreglstrual mlcropfocesorului.
2, Vfzfbflltatea liniiletoxtuluisursddjn carevariablla
- VecizeazA respectlvd
poatoli accesate.
Astlelavem:
a. Vlzlbilitate
la niveldebtoc(instructiune
compus5).
b. Vlzlbilltatela nivel de flgiel - In cazulin care programulocupaun
singurligiersurse,singurulcazpe carelltratdmacum.
c. Vlzibilltaiela nivel de ctas, - esto in legeturdcu programaroa
pe
obiecte,pe careo vetistudiaindividual.
iarual de informatice
oentruclasaa xl-a 47

I Duratade vhla " reprezinta limpulin care variabilaresPective


are alocat
spaliuln memoriainternd.Ast elavem:
a. Duratd statici - variabilaare alocai spatiu in tot timpul executiei
programulur.
b. Durati locaH " variabilaare alocatspaliuin timpulincarese executd
inslructiunile
bloculuiresoecliv.
spatiuluinecesarvariabilei
c. Ourdti dinamici - alocarea9i dezalocarea
respectivese lace de c5lre programatorprin operatorisau funclii
specrale,
in c++ variabilelepol fi impd(ite in trei mari categorii:globale, locale 9i
|lnamice.Noisludiemnumaiprimeledou6categorii, globale9i locale.
variabilele

r) Varlablleglobale

Acestease doclardin alaracopuluioricdreifunclii,ca maiiosl


lltnctudl <i.o6t!oa.h>

tnt !o
( rF3 ,
c4 t<<4,
)

cou!<<a<<nal1r
!(),
l

pot
a Si b suni globale.ln astleldo cazuri,variabiblorespective
Variabilele
i utilizale de loale funcljib carc urnead ln lextul surse declaftliei vaddbilei
?spectlve,Dinacestmotiv,astlelde varlabilese numscglobale.
t
Jr La declarare, globalosuntinilializale
variabilele cu 0.
a
Alributele globalesunt
variabilelor

1. Clasade memomre- aegmenlulde date.

2. Vizibllitatea- in cazul in care declaraliileaceslorasunt lnainteatuturor


'uncliilor,acesteasuntvizibilela nivelullnlreguluiprogram(tigier). Daceanumite
iuncliise afle plasateinainteadeclar4iiloracestorva abile,atunciele sunl vizibile
doarpentrulunctiilecaresunt plasatodupdacesledeclaralii.In exemplulanterior,
variabilaa poateli accesatddin coPul oric5reifunclii,dar variabilab poaie fi
accesatd doardinlunclianaLtl().
48 Capitolul2. Subprograme

3. Duratade viaF a variabilelor


globaleestestatice.Ele au spaliurozervatin tol
limpulexecutieiprogramului.

B) Variabile locale

Acesteasuntdeclaratein corpulfuncliilor.Maiprecis,potfi declaratein orice


bloc(instructiune
compusa)al acestora.

l; Variabilelo
declaratein corpulfunclieitt'!tn( ) sunt tot tocale.in programul
y urmdtor,variabilelo
a 9ib sunttocal.

Variabilar estdeclaratiln corpulfunclieir ( ), iarvariabilab estedeclaratii


in corpullunciieinatn( ).

Exemplui

( lnc a.3,
)
D!1n ( )
( ltlt D.at

'
1. Clas. de mmoraroa variabllelorlocalesle tnplibitsegmentulde gitue.
Exlsleposibilitatea
ca acesteasAlie alocatE
ln registrele
micropiocesorului,
cazin
caredeclaratia
lortrebuleprecedatil
decuvantulcheie"iostBrer'.
Exomplui
r.slrt.! lar b'4,

Variabllele
localenu suntinlliallzat
lmpllclt
cu o. in lpoteza
ln careacestea
nu suntinlllallzate
expllcltd ptogramator,
rellno valoareoarecare,numila
valoarerzlduall,
2. Vl?lbllltatea
varlabilelor
localestela nlvelul
bloculul
in careaulosldeclarate.
ln funcliaurmeloare am declaratdoudvariabile de tip j.rr, numitob 9l c,
Variablla
b est6vlzlbiHla nivelul
lunqioi,darvariablla
c estevlzibild doarla nivelul
blocului
ln carea lostdeclaratd.
Exmplu:

c out < < b< < . " < < c t


l
)
lilanualde informaticapentru clasaa Xl-a 49

in programulurmatoram declarattrei va abile,toatenumitea. Unaeslo


globald,iardoudsuntlocale,dardeclaratein blacuridiferite:
llindludte <iostred.h>

cout<<a<<ddll;
I
c4t<<a < < er dlt
,

Inprogram,
seali9eaza
continutulluturor
aceslor (3,{. s).
variabile
I
t Observatii

/ (se potaccesa)
in cazulin care,inlr-unanumilblocsuntvizibile maimulte
variabile,toatecu acela$inume,dar au domeniide vizibilitate
dilerite,se
acceseazvariabilacu vizibililatea cea mai mic5,De exemplu,dacAin
programul anterior
se tipdrsgto a dincadrulsubblocului
variabila funcliei,
so
tipdregte 3, pentruct acestaeste conlinutul
variabllei
cu cea mai micd
(ceadeclaraie
vizibilitate in subblocul
respectiv).
/ Existdposibilitatea
ca,unciclufo! sdconlind
declar4la
ungivariabile
locale.
ln secvenlaumdioarese calcubaasumapimelor{ numerenaturalo.
j. estodeclarata
Variabila (9iinconsecintd bloculror:
vlzlblE)doarfn
t nt t . 4, s -Ot
t or ( t nc t-l rt< .n r li+) s r.t,

3. Dwatade vlalea variabilelor


localeesteatettimpcatdureaze
executia
bloculul
respocltv.

2.3.4.Transmiterea
Darametrilor
Agacumamaralat,parametrii carese gdsescin antelullunclieise numesc
parametJl
formall,iar cei carese gdsescln inslrucliunea
de apelse numesc
paramelri
electivi.

. PrivitiprogramulurmAtor.Acestacontineo tunctiecarecalculeaz6
suma
L. a dou: numerenaturale.
#irclude <ioEt!s.h> Parametriiformali sunt a 9i b.
in! rl:M ( lEl a, in b) Funolia este apelaid de mai
mulleori. Parametrii
eJeclivi
s!nl,
l pe rand:
) 2, 3;
( 2, 3 ) < < 6nd1;
) 2+1, 3-L*2;
co ut< < Bl: M
co ut< < s uM ( 2+ 7, 3- 1* 2 ) < < eDar l i )c,d;
cout<<s\:M (c, il) < <enitl,
co ut< < ellG ( 1. 9, 3. 3) < < 6ndl1,
l

Dupd fiecareapel al funclieise iiparegtesuma oblinuid.intrc parametii


fornali ti cei efectivilrebuie se existeo anumitdconcordantd, carc este desc sd
prin regulile urmebare'.
. Numdrul paiametdlor tormali trebuie se colncide cu numerul
parametrilorelectivi. La aceastdregule_existd
o excepliecareva fl
prezentatai-tr un paragra' separal. In exemplul dat. num6rul
parametnlorlormaliesle 2, iar cel al parametrilor
efeclivieste tot 2
(pentru
unapel).
. Tipul parametrilortormalitrebuiese coinciddcu tipul parametrllor
electivi sau tlpul parametrilorelectivi se poat?ltl convertitimp ctt
cdtrellpul parametrllorformall,la fel ca in cazulat.lbulrll,

6lID(2,3) - paramelrii
lormalisuntexpresiiconslanlede lip inlreg;

.l,e{2+?,3-1,2) - paramelriiJomali sunlexpresiiconstante


de tipintregi
in acestcaz,inainlede apelseevalueazd
expresiile
de maisLrs;
sm(.,dI) - parameirii
formalisunl expresiide tip intreg(dat de lipul
variabilelor);

lllu(1.9, 3.3r - parametli lormalisuntexpresiiconslanlode tip real.in


acesl caz, ele sunt converlitecdlre inr la lel ca in cazul atribuifii(se
lrunchiazd
zecimala). Prinurmaro, sumacalculatd este{.1+3.

t, Nu este obligatoriuca numeleparamehilor


parametrilor
efectivi.
lormalisa coinciddcu numele

Vom analizamodulir] caresuntmemofatiparametrii


iransmiqiinmomenlul
lansdriiin
execulie
a lunctiei.

+ Penlru memorareaparamevilorsubprogramele lolosesc segmentul de


6livtr,intocmaicapentruvariabilele
locale.

t l\,,lemorareaparametrilortransmiFise lace in ordinea in care acegtia


ligureaz6in antet:de la stangala dreapta.
Manualde informaticepentru clasaa Xl-a 5l

, parametrii
In cadrutsubprogmului, lransmi$iqi memoraliln stivdsunt
vafiabile.
Numeleloresteceldinlislaparametrilor
formali.
t Variabilele
obtinute parametrilor
in urmamemorerii lransmisi
suntvariabile
tocate.

latd,doexomplu, in stiveparametrii
cumsuntmemorati in caarlprimului
apeli

,"'-.-----*Ef1]
& Observa!il
La revenireafn bloculapelant,
continutul
variabibbrmemoraie In stiv6se
pierde- dupecum9tim,duratadeviataa variabilelor
localeestelocala.
Memorareain slivd are qi alteconsecinte,
dar acosloavor fi lratatela
polrivt.
momentul
Existddoudmecanisme a paramotrilor,
de transmitere ttanamltereaprln
valoale9l lhnamltereaprlnrefrlnld,
Acstea
vorfi lratalein conlinuare.

r. Tranamlterea prln valoarese utilizeaZaluncicandsunteminteresali


ca
subprogramul se lucrezecu acga valoare,dar in prelucrare, nu ne
interseaze ca paramtrul
electiv(celdinbloculapelant)
sd retindvaloarea
modlflcatdin subprogram.
Sepotlransmlt
prinvaloare:
'1.Valoallo
rsllnutedovarlabllo;
2. Exprosll(ac8tapotconflnglluncfll),

1. Valorlterllnuisde varlablle.ln acestcaz,paramotrii


sfectiviirebuiese fie
numelg caresetrimilprinvaloare.
variabilelor
Exemplu:
ilr.acluile <r.o.tru.ht
votd t.t. (lnr n)

cdt<<n<<ndl,
l

( tn! n.lt
t es t ( n) t
cdt <<D<<ndt ;
)

Parametrulr pin valoare.


estetransmis
52 Capitolul2. Subprograme

t in rrtn( ), avemdeclarate
variabilan, careesle initializaucu 1.

t Apelamtunctra.La apel.se rezervdspatiuin stivd,spaliucare are numele


parametrului(decitot E) Slesteinilializat
cu valoareamemoralade variabita
aa programului principal.In acestmomentavemdouevariabilen 9i ambole
rolinvaloarea1.

t in lunclie,variabila
n esteincrementald(adicala vechiulcontinutse adaug51).
Evidenl, estevorbade variabilareze atain cadrulei.

t Tipdrimconlinutulvariabilei
r (ceadinstive),decise tiperegto2.

t La iesireadin lunclie,variabilaa (din slivd)se pierde- adicd nu mai are


spaliualocat.Prinurmare,valoarea2 estepierdula.

t in natn( ) se tipdregtecontinululvariabilei!, adice 1.

2. Parametilletectlvlsunl expiesllcare mal intal se evaluorzi.


Exemplu:
*tacrud. <lorlr6d.h>
rc!.d ttt (Ltrt a)
( c4t<<n<<.ndll,
l

{ t 6s t (3 ),
l6sl (3 + { i 5 ),
I

t Trunsmitercapin valoarca masivelotpetnite ca tunqiib se inbarcenoile


valoi aloacestora(carcau fostatibuiteln tunqi,).Decs? Numelemasivului
esteun poinlerc5trecomponsnlole lul. Prinvaloarese transmite
acsl
nume.Cuajutorul acestuiaaccesdm compongnlels masivului.

tE^-, ln progtamul
urmator{un4|avactor inilializeaz6veclorullransmlsca
(-^.. patameku,iatin natE( ) seafiseaze
rezultatul:
f,Irctuale <toslr6e.ht
v o: lal v e c to r (tn t x t1 0 1 )
( lor { tn t I= 0 ri < l o rt+ + ) r1 1 l .l ,
l

{ t nr Al to l ,

f or (l n t l .0 r l < 1 0 r1 + + ) c d t< < dl l l < < " ,,


I
taanualde informaticApentru clasaa Xl-a

Transmitereaprin referinli. Parametriisunt transmigiprin referinFaluncl


-a.
:znd ne intereseazd ca la revenireadin subprogram,
variabilatransmisdst re!ine
'?loareastabilitd
in limpul execuliei
subprogramului.

t in cazultransmiterii
prinreferinla,parametrii
efectivitrebuiesd lie referinlela
variabile.

+ In caz]ll transmileriiprin referinta,subprogramulreline in stive adresa


valaDet.

Programulurmdtorutilizeaza
o functiecare interschimbevalorileretinute
ax: de douevariabile.
Acesieasuntlransmiseprinreferinld.
*include <tostrd.r!>
void intrEc(lnt &ar irr &b)

cout < < *< < i t < < y i


l

2.3.5.Definirea
gi declararea
unuisubprogram
Degiaparentasemanetoare, coledouenollunidlford.Bunainlelegore a lor
-e ajulesa evildmanumiteerori.I\,,laj
muli,aceslonotiunisuntutilizate
de orice
knbajdeprogramafe,nunumaiin c++.

Oeflnilia2.12,A detfnl un aubpJogran,irsoannd a4 scie efectiv,dupd


structuraanleriorprezentatd.O problemelmportantdesle loculundese
delinegtesubprogramul.

Definifia 2.'13.A declarc un 6ubprogrum,lnseamneal anunla.Un


subprogram nu poatefj folosit.
nedeclarat

Definilia
unuisubprogram
linelocSidedeclar4iel

(? Programulurmetorconlinedoua lunclii: 61 9i s2. Definiliiteambelor


lunclii se gdsescinainteatunclieimltno. Din acest motiv ete pot fi
-'X: apelatedin ltEin{). DeJinitiafunclieisl este inainteadefinitieilui !2,
deci funclia El poaie fi apelat5din s2. in schimb,din E1 nu poatefr
apelatdlunclia82, pentrucd deliniliatuis2 ostedupdcea a lui s1.
54 Capltolul2. Subprograme

#itrclual <iogtrea.h>
votdl s1o
( cout<<"Eu aunt al'<<endtt
)
r c i (l s 2 ()
{ s1 () r c o t< < " Eu s u a r.2 !< <endl l ;
)

( 3 1 (),
a2ll ,
)

fn silualiaprezentald,totugise poateca sl sd apelezepe a2, chiardace


suntdeliniteTnaceeaglordine.
in asdelde cazurise folosegleprolotlpul funollel (antelulurmatds "; ").
Prototipul
are rolulde a declarao funclie.El nu continedeliniliaacesloia,
*ttr61ud. <Lo.t!.a.h>
wotdl 12 O,
wo l d 1 1 ( )
t .2 o , .o u r< < tEu i u n t rl !' < < enal ,
l
wo rq r2 o
( cout<..i!tr sunt a2r<<.ndl,,
)

{ rt0 t
)

I Programatorii in c++ oblgnulescsa scrie mai lntai prototipunletuturor


Ji funcliilorutilizatede program- fardn ln ( ) - iar dup5functlaInrln ( ) se b
defineascS. In acestfel, oric6funclie- mai pulintlllE( ) - poatgfi apelaie
dinoricarealta:
*tnc1ud6 <loalr.an,h)
rcj.al 51O, // DrotollD 31
rcid !2O; // D.oEoELp a2

{ !1 O ,
l
r c Id s 1 ( )
{ .2 O, c o u r< < " a u .s t s l t' < < 6ndt1r
!
woial 32 ( )
( sloi c o u r< < ' Eu E s r a 2i < < n(l l ,
I
vanual de informaticdpentrti clasaa Xl-a

2.4.Aplicatiicarefolosesc
subprograme-

I Aplicalla2.1, Revenimta exemplulde funcliedat in paragraful


2.1.Acestava fi
:.ezentatTntotalitate.
Seconsidere
functia:

J;r+l , Penlru r ["1,1];


] t.r' + .r,r ' pentru .r ("
1 -,-1);
| pentru re (1 , -).
I t+'I -i-
Se citescdouavalorireale! gib. Sd se scrieun programcareafigeazdcare
:nlre valoribf,(!) gi f(b) esteceamaimare.

Z Rezolvare.Programul
esleprezentat
in continuarel

vlr.tb, vr,vbtr al; # I!c1uat6 <to8lr.M.ht


tsclloE t (x!!a 1) r r ar ; llort t (!lo.t x)

ll (:.<-1) !6tum y,
! f a<-1 lhe n f:ry 6116 it (Dr) r.tuh 6/y,
116 it x>l lh n ! r ! 6/ y l.e retuft y / {l +x *a ) ;
r.G f r ryl (1+x*:.) ,

{ !1 o r!., b,w !,w b,


c o u l < <' a-!, ctD > > a;
c d t< < i bFr, ctn> > b,
v ..t(.),

1 f (v .> vb) cdr< < va< < endl t


th.n ylr.tla(vr) 1Fe coul <<vb< <oDallt
.rr. qrttoh(Vb) l

f Aptlcalla2.2, Se citescdoudnumereintregiI[ 9i r. Se ceresA se tipdrcascd


aelmaimaredivizorcomun9i cel maimic multiplucomunal lor.

Z Rezolvare.Cunoagteli deja modulin carese calculeazacel mai mareciivizpr


:omun pentrudoui numerenaturaledate. Cel mai mic mlltiplu comuna doua
"umerese poatedeterhinalmpdtindprodusullor la cel maj marcdivizorcomunal
or. Prin urmare,scdem o funcliecn$ldc cu doi parametriformalim Si n, care
'lloarceo valoareintfeagd- cel maimaredivizorcomunal lor.
Capitolul2. Subprograme

'' Varlanta
iisbal Ci+ , '
i' , iit , _veitanir :
va! n,n:rEEcg.r, *tn.lual6 <iost!u,h>
lsctiotr @!tlc (!, n: intgor ) lnt (tudc ( tDt D, tnt
!lrretft
i.! (a>nl rl-=rt
6l!. n-4,
it !>n thn D!4-n
o 16 n: - E- b, )

co!1!<<rr,, ci!>>!,
El!. ('h=' ) r r . aun( n) t c o u t <<n r r , , o t n r >n ,
Ei!6 ('a=' ) r r adln( n) t ca=(@dc (!, a) t
Ette1tr(dntlc (n,n) ) t c@t<<c!<<i n<<drn/c[,
Elteln(Dh altw cMatc (&.n) ), l

/ exerctlit
l. Ges(idoudmotivepentrucareparametrii crrrlalc
funcliei trebuiesafietransmigi
prinvaloare9inuprinreferintd.
2. Scrietiun subprogramcIltmnccarcsa returneze cel maimicmultiplu comuna
doudnumerenaturale. Stabilili
loculundetrebuieintegrat acestaln programuldat
programul
9amodificati principal
astfellncetsdseutilizezesubprogramll cerut.
3. Cale exprsiidiforitecare au ca rzullalcel mai mare divizorcomunal
numerelornaluralenenula, b 9i c existd?Tnoriceexpresie
se utilLeazenumai
apeluriale a, b 9ic, Deexemplu,
funclieicrudc aivariabilele trelexprosil
sunt:
cenilc ( crmdc (a,b) , c),
c m ld c (c l ' u d c (b ..), c) 9i
c r d c (c ,c n l c { a ,b ) ).

D Apllcatla2.3.Secitegte
unveclorcur componente numerelntregi.Seceresd
setipareascd comunalvaloilorrelinute
celmaimaredivizor devector.
EI Rezolvare,Dispunem dejade o funcliecarecalculeaze cel maimaredivizor
gi
comuna douenumere am testat-o in programul anierior.Penhuvarietate,de
dataaceastaimplementdm o funcliecu algoritmullui Euclidpentrucalcululcelui
mai maredivizorcomun,algoratm prinimpe4iri,nu prin scederirepetate. Cu
ajutorul cel maimaredivizorcomunpentruvalorilerelinutede primele
ei calculem
doudcomponente 9i memordm aceast5 valoare c. Apoi,penhufiecare
in variabila
dinhecomponentele urmetoare,se calculeazdcel maimaredivizorcomuninke
valoareacurentdmemoratain c ai cea rqinutade componenta curenula
Colmaimaredivizorcomunvafirelinutdinnoudec.
veclorului.
Manuqlde informaticd
pentruclasaa Xt-a

' , c++ lli


varlanta
va. wrdrq:f [1..20]o! jtntser, *ltrcludl <iortre![.h>
a.I, c r lEr.gr,
luctid @dc (D, ! I lnt.q6r ) Iat cudc(trt 3, inr n)
!lnEat,

) f!ll6 ( r t =o )

cout<<narn, cta>>[,
E t ('D-.), ! ait t n( r ) , cd!< < nc6D6nte wcto!r
E.t( rcoqronoat6 wodto!! ') t f o a ( I - 1 ; t <- n r l . ++)
fo ! lr.1 ro E do ! s d( v [ t ] ) ,
c ' r c & dc ( v t u, wI 2 t ), clcurdc (vIlt,wlzl ),
tor l!- ! to s (to l o r {L E 3 r I <. a r l ++)
c r - c eii. ( c . v I tI )t c.ce.rc{c,wttl ),

/ exetctltu
h loculsecvenlei
c < - c @dc (w l l t,v t:: )
tEntlu i!3,n eacutl
c + c e d 6 { a ,| ' ttt }
rfA.tlt pnts

dorimse utilizem,
maicompact,
seavental
p.ntru ill rn xe4ttr
c cmatc(c,vtr.l )
.ftrrlt pentlu
Careestovaloarea
pecartrebuie
sdo aibavariabila
c inaintea
acestei
secrrerjla?
u Apllcalla2.4.T unghlspsclal. S citsscdouenumerenaturatem 9i ! Inal
micldocat10.Se cereca programuldvs.sa afigeze
un triunghi,
dupdregutilepe
crelededucgti
dinexemplele
urmdtoare:

I 9

456 311 5
tB9 t 5 7 I9
2 !a 5 6 12345
7 4 9 123 67891:
34567a9 Junior Division
58 Capitolul
2. Subprograme

EI Rezolvare.Se obseNi cd dacdr=5 trebuiesa obinem Sirut5, G, ?, g.


9, !, 2, 3, ... Problema estede a puteanumEra incepend de lan, iarcand
s-a depdgitvaloarea9, de a reluanumirareade la l. Vom utilizao functie(succ)
care primegteca parametrude intlare un numar k gi returneazEvaloarea
in logicaprezentate
urmetoare, maisus.
Alt aspectal problemeiesterealizareatipeririiacestorvaloripe m linii,linia I
avAndo singurdvaloare,liniaa douadoubvalorietc.Algoritmuleste implementat
in procedura tipar, careare ca parametriformalipen 9i n, transmisiprinvaloare.
Valorilelorsunlcitilein programul
principal.

',;:i i.l;;. l :.1i1 i.


var !,n! integeri *tncludle <iost!ai,h>
!6clid euc {k: iD!sr) :lntq!,
(k==9) rocun 1,
it k = 9 th 6 D 6 u c c .= 1 eLa rluh k+1;
6 l a e s u c c !5 k + 1 ,
rctd ttDa!(tat d.idt r)
I,roc6alur ltDar (4n: irtger) t
var i, j :inlesert l or (i = 1r i < a, t+ + )
( for (j = 1r l < .1, J+ + )
lor i:=1 to r alo bsh
f or l. ' 1 to l d o b 6 i d n
l

)
l

cot< < i & rr, cl n> rr,


wr t t 6 ( ' r !.. ), r6 a a u D (n )t
cqt< < i rrnr.tn> rn,
w! t t 6( ' n r, ), r6 rd 1 n { n ),
l

? exerctlri
1. DupAapelulttpar(n,n) din programul principal,
dacase adaugdo instruc-
liunecare afigeazd valoarea lui r, ce valoareestimalicd se va tiperi?
2. Cum kebuie si arate definiliasubprogramului suc, dace in subprogramul
ttDar, in loc de nCsuc (n), se ulilizeazd instructiuneasuc (n) ?
3, Cum putem delini subprogramulsuo astfel incat secventade afigafedin
subprogramul rigar sa fie:
pentlu i-l,re rocuti
D nt 4 j= 1, i 6x dt i
Ec r i Euc lr )

6cr16 EOI/IT
vanualde informaticA
Dentluclasaa Xl-a 59

] Aplicalia2.5, Se citescdouanumerenaturalem<n.Se cere sa se tpdreasce


::ale numerelepalindrom allaieintren9i n. Un numerestepalindromdacd,cititde
e slangala dreaptaqi cititde la dreaptacetrestenga,rezultatuleste acelasi.De
:xemDlu. numerul121 esteoalindrom,

Z Rezolvare,Sd analizemproblema. Estenecesars5 fie testatetoatenumerele


'_tren q pentruca apoisd fie tipdritenumaicelecareindeplinesccondiliacerutd.
9i
Pentrufiecarenumdr,avem subproblema verific6riiproprietelide numef
:alindromic.Pentruaceasta,vom scrieo funclienumitbpal.in careare rolulde a
:.sta dacd un numdr este sau nu palindrom.Analiza proprietaliide numdr
:a indromico efectuemconstruindrdsturnatul(inversul)aceluinumdrli verificem
:aaaceledoudvalori(numdrulgi sdu)suntegale.
rdsturnatul
Construirea (nu in sensmatematic)
"inversului" unuinumdrnaturaleste9i ea
: subproblemda problemeiverificediproprietalii
de palindrom.
Vom scrieo functie
:lvers, careva retumainversulunuinumdtnaturaltransmis ca paramevu.
Urm6rindapelurile,vom constatacd progmulprincipalapeleazdfunclia
FliE, iar funcliaDalin apeleazdla randulei funcliatnve!s. Programul
apelanl
: iunclieiDallr esteprogramulprincipal,
in timpce programulapelantalfuncliei
:lvers estesubprogram ul palln.
Care este avantajulscrieii fiecareifunclii?Acestaeste dat de faptulcd,
?:!ncicendscdemfunclia,ne concentram exclusivasupraei, deci posibilitatea de
3 gregieste mai micd.Dacddispunemde funcllg,algoritmulin continuaredevine
maisimplu.ln plus,esteposibilca oricaredlntrofunctiise poati fi folosite9i in
-Jlt allorprobleme.
:te cazuri,la rezolvarea
a
t Observatii
a
' Ordineadefiniriicelordouesubprograme devineimportantd,deoarecefunclia
lnver6, de carea nevoiefunctiap.lLn, trebuiedeclaratd
anterioracesteia.
' Faptulcd numdrulal caruiinversse calculazeede hansmissubprogramului
prin valoareeste iardgiun avant4. Cu toateci algoritmulce conshuiegte
inversulluin distrugede faptvaloarea
acestuia,
acestlucrunu esteresimtitde
programul apelant-

fsctio! invls (n:1d!r1nt ) :lolslnt,

whil n<>0 tlo besir


r!=r *10+ t r r c t l 1 0 ,
a: -tr diw 10
60 Capitolul2. Suhproqrame

fu rctio n l) Elin( n: loEs iDt ) : boo1eBn, I int DaliE(1ong n)


b esin lt retuh i n w e r s ( D ) ==n t
DeliD !=inv 6r s ( r ) = ! , l)

wa E nrn ,ilinleqr ; | { tnt n,!,i;


bs in I eoe< < ' u" ,
writ(.n =t) r r adr ! ( n) ; I c @ t <<n t r ='; "cii rtt..
r >>t r ,
vlito ('D='); r eaalt D( t r ) r I f o ! ( i =r r i <=n ; i ++)
f or l: r n lo n alo I if (D al tn(I))
lf Da1 ln( i) t hr Eit I n( i) ; I c d c <<t << n d 1 , .
n d. |
'

3 exetcitil
1. Modificaliantetulfuncliei lnvrg, transformandparamehuln in parametru
transmisprinrcferinFSiurmdritiefectelemodificerii
efectuale.
2. ModificatiantetulfunclieilDvrs, transformandparametrulr in parametru
kansmis prin referinF 9i testali proprietatea de palindrcmfolosindcompararea
s=inw.!s(a) in loc de llrverE(n)=n. ExDlicatide ce aceastemodificarenu
reprezintd
o corecliea eroriiapdrute la cerinla1?
3. Un numdr naturaleste auperpallndlomdacd este palindromatat el cat 9
pdtratulsdu. Scrieli,pe baza programuluidat, un programcare listeazdtoate
numerele cu aceaste proprietate
aflateintredoilntregia9ib (a<b<32000).

D Apllcalla 2.6. Suma cuburllor clfrelor. Se citegte un numdr natural


r<9999999.Se calculeazdsumacuburilorciffelorsale.Exemplu:dacdse citegte
25, se calculeaza2!+5r.133.Cu nurnarul obtinutproceddm
la fel:13+3r+3'.55.
Repetem procedeuli 5r+5'-250.9i iar:23+5r+o!-133. RepetSm procedeulp6na
ce obtinemun numar care este deja prezentin seria generatS.Se cere sb se
afi$eze$iruldevaloricalculaloprinacestprocedeu.

Exemplu:pentrur-25, se afigeaze
seria

25 t!3 55 250 133.

Junlor Dlvlslon

EI Rezolvare.Sumacuburilorcifrelorunuinumdfnaturalestecalculatdde functa
Eurn!.Numeruln (citit)va i memofatde primacomponentd a vectorului6e!i..
Apoi,sumacuburilor sale,de componenta a doua,sumacuburilor
numdrului relinut
de a douacomponentd va fi relinutede a treiacomponentd,
S.a.md. Dupi ce este
memoratdo valoare,ea estecompafate,pe rand,cu cele obUnuteanterior.Daca
este regdsitd,se tipdregtenumarulde termeniai seriei Si seria propriu,zisd
FunctiaEuinacalculeaz6 sumacuburilorcifrelorunuinumer.Functiaesr verifice
dacevaloarean existddejain Siruls ,omat din IE componente.
vanual de informaticdpentru clasaa Xt-a

tytE vocEaEylt. .1001 ot lqlotllt *itclutle <iostran,h>


v.r n!lorslltr sEls:vect
init.t,tntg6rt
ilt 6 e ri al 100J,l ad,l t
fEctid 6tID (ar rodsttrt) :lo!si.t,
v aa s,1/ c :r.!rt !t In t a @ (l nr n)

cttn rcd 1 0,
)
!!=. illw 10
,
rrc E t (tons E /i nt st100l ,
itrt 16)
lucttod 6st(E:loglnlrw.E .:vect
k!htalor) rb61.n, fo r(tE0; i < kr I+ + )
l f (s ti 1E .n) rtu:! o.

l
lor t lil to Is a to
I f 6ttl.a tn on at , . ! . ls ( c d t< < ,n rr, c:Ln> > n,

t E ' ' to(' nr' ), r ad .h( n) t do(


D.s'rm(slta I!.ad-1t ),
s6riaI++taiutn,
) { r ( I at6(n,s.ta.
nrr 6''@(6o!1atttrdt-ll ), lDd_l) ) |
t or ( I r l r ! . <! I l d r t ++)
6odrtrrdl r.a, c ou! < <a o r i a 1 1 1<< n d U ,
util 6rt (a, serla. 1.al-1) , )
loE t:.1 to tral alo
E I t h(!.!la Itt ) t

L, Apllcalia 2.7. Sa se scne o procedurdcare citegteo matricecu elemente


rumerelnkegidin fiqierultextutrT.Txr. pe primaliniea fisieruluisuntdouevalori:
E (numdrulde liniiale matricei) 9in (numerul
de cotoane
alematrjcei).
Urmetoarete n
linii_alefigleruluiconlin,ln ordino,elementeleallale pe liecarelinie a matricei.
Verificalisubprogramul delinit,integrandu-l
lnlr-unprogramdeiostare.
Exenplu:figierulf .t, contine:
34

12 311
9 138
62 Capitolul
2. Subprograme

EI Hezolvare. Pentrua puteafi folositdpentrucitireaoricdrei


matricede numere
Tntregi,procedura ca parametride
vatrcbuisd utilizeze ieqirematricea,
nuqerulde
liniiqinumiruldecoloane alematricei.
ln programul setesteaze
urmator prinlistarea
procedura, matricei:

lt t ) m t . . !r.y t1 ..1 0 0 ,1 .,1 0 0 1 *irclud <lstr&.h>


o! iDtger,
voti l cttsc(i !t utI100l t1001,
Lnt& & ln!& n)
Lt ut t , c o l o Bn , i , j , tn l 6 s r,
{ !6!!e!! r(" tts.!xt' ,Id!.i tr) t
Drocdlur cdlosc(w.r tlEtt
v.r !, nrtDl.ser) i tor (l D t i = 1;l < = ari + + )
v a! i, j ! in t s !, l or (tD r j = 1, J < -!rJ+ + )
!> > nr Itl IJL

. a. laa( ! , ' mt,ta l r) t )

! o! lr ' 1 !o s d l o { i E t n,D , uttr00l l 1o0l ,


ctl l at(r,a,ut),
t o! J rrl to r a l o
l or (i nl t.1rl < .drt+ + )
r r d (t,tl 1 ,l l )t ( tor (r!l Jrl , J< .n, J+ + )
cout< < !a! [r.] tJl < < i i ,

)
c t l6s c ( r,l tD tt, c o l o rn e ) , )
for {t. 1 lo t:Llll alo

lor Jrrl to ooloeo dlo


r r r (atr,J1, ' ,)t

propuse
Probleme

1. Scrieliun program 9iafigeaze


carecalc!leaza fiecdreia
valoarea dintreexpresiile
demaijos, pentru* la
cititde tastatura:

a) G(x)= 5ln(xFcos(x),|ooe(2*x);
b) H(x)= 10*{x}(amnolatprin(x} partea
fractionare
a luix).
{|anualdeinformatice
Dentruclasaa Xl-a 63

2. CoifurileNFL. Existd28 de echipede fotbalin NFL (LigaNationati


:e Fotbalin SUA). Unelemagazineau aparatecafe ofer;-coifur in
ale echipelorcontra0.259. Cendpui monedain aparat,nu
-:niatud
:ii ce coif vei obllne,oricaredin cele28 de coifurjdiferiteiti poateveni
:n aparat (sunt oferite aleator).Scrieli un progfamcare simuleazdpunerea
_onezii intr-un astfel de aparat pend cand se obtin toate cele 2g de coifuri.
rrogramulhebuiese tipdfeasceSi totalulcheltuielilor efectuatepentruobtinerea
:elor28 de coifuri.
JuniorDivlslon

3 Indicalie.Utilizalisubprogramele
predefinite
Rardon SiRddonize.

3. Scrielio funclie care primesteca parametrulungimealaturii unui pdtrat ti


-eturneaza ariasa.
4. Scrieliun subpfogramcareprime$teca parametrulungimealaturiiunuipStratSl
'eturneazA cat9i perimetrul
atatlungimeadiagonalei, pdtratului.
5. Scrielio funcliecafeprimegteca parametride intrarelungimilecetordouecatete
aleunuitriunghidreptunghic lungimeaipotenuzei.
aireturneazd
6. Scrieliofuncliecareprimegte3 parametride tip real,cu semnificatiade tungimi
penlru3 segmente.Funcllava returna1 dacd cele trei segmentepot forma un
triunghi9i 0, in cazcontrar.
7. Scrielio funoliecare returneaza
primacifrda unui_numer
natural De exemplu,
dacdparametrul efectiveste122,functiava returna1.
8. 'Numalultlma cifad", So citescn (numdrnatural,It<1OO)
Sin numorenatlrale
nenulenr x2 x! . . , n!, numere maimicica30000.Se cere:
. ultimacifrda numerului
rl+'r2+....+r,,;
. ultimacifrda numdruluiri,'r '', .

Exemplu:
r!3i x1511;x,'4; x3=3.Programul
tipdreqiei

. 8 pentruca ultimacilrea sumei11+4+3este8i


. 1 penhuca ultimacifraa lui l11'. esle 1.

ConcursutNalionatat Elev or, Sinaia

L Sd se citeascddoud matrice9i sd se efectuezesuma lor. Programulse va


realizaastfel:
. se scrieun subprogram
de citirea uneimatricecu Il liniiSin coloane;
. se scneun subprogramde tipirirea uneimatricecu n liniigin coloane;
. se scrieun subprogramcareadLtne douemahice;
, prugramulprincipalrezuftadinapelulacestor
s!bprograme.
64 Capitolul2. Subprograme

10.SAse calculeze polinomului


coeficientii P (x) = (x+a)", in douevariante.
un subprogram
a) ProgramulutilizeazS carelirmullegteun polinomoarecare
se gdsescink-unvector,transmisprin referinld)
de grad k (coeficien(ii
cu polinomulx+a.
b) Programulutilizeazdun subprogramcarecalculeaze
coeficientii,
a9acum
rezultadinformula(binomullui Newton):

(r+d)' =I.,f,
11. 55 se tipdreascbtoatenumereleprimeaflateintre doi intregicitili.Programul
daceun numaresteprimsau nu.
va folosiofunctiecaretesteazS
12.Scrieliun programcaretipdregtenumereleintregig6siteintredouavaloricitite,
numerecare se divid cu suma cifrelorlor. Programulva utilizao funclie care
returneazdsumacifrelorunuinumir inhegprimitca parametru.
13. se se scrieo procedurd
carepermutddoudliniidateale uneimatricepehatce.
'14.Scnel o procedurdcare Interclaseazd
doi vectoflsortaliqtiindca ace$tiasunt
ordonafldescrescatot
15.Se citescdouepolinoame fiecdruipolinomse citesc
de gradelrl9i r (coeflcienlii
inlr-unvectoo.Se se afigezecoeficienliipolinomului sum5 9i cei ai polinomului
produs.ln ambelecazurisevof utilizaproceduride 6itire,adunare,inmullire.
16. Se citesca valoria, b, n (a 9i b reale,r intreg).Se ceresd se calculeze
valorile
uneifunclii!, definitepe intervalulta.bl in n+1 puncterezultatedin lmpedkea
inlervaluluita,bl in n pddi egale9i sd se afiqezecea mai mare d ntre aceste
valori.Funcliar va fi datt subformaunuisubprogram de tip functie.
17. Un numil ralionalesterelinutprin utilizaaea
unuivectorcu douecomponente.
Scfieli subprogramelecare adund, scad, inmullesc ai impart doua numere
ralionale.Subprogrameletrebuiesd returneze numarulsimplificat.
18. DeolEn tdunghlular. Triunghiulde mai jos esle generatde un algorilm.
Descoperitiacest algoritm9i folosili-lpentrua scrie un programcare citeqte
numirulnde liniisigenereazetriunghiulcu n liniicorespunzdtor.
1
232
34543
4567654
56?898765
679901098 7 6
?89012321 0 9 8 7

JuniorDivision
nsrLalde informatic{ pentru clasaa Xl-a 65

'Itf.Je afigeazdprogramulurmetor?

rEeduf tst (8. intse!) t

!: E a+l, Eit (a),

r 5 5r b) 5 5; c) 6 6t

F- Ce afigeazdprogramulurmdtor?

plocdtur t (B:tntecqr) i

a !=a+ 1, wr t r lD( a ),

r{r(f( f ( 1) ) ) )

b) {t c) 5, dl) eroaredesintaxe.
programul
21.Ceafiseazd urmdtori
FagcalI ,, ll l
vartanlq
#lnclua!. <lortro.t!. h>
fsctloD frlnt!'elr
tD l !o

'
a) 233, b) 23i ct 32r d) 232.
66 Capltolul2. Subprograme

22. $tiindce valorilecititeale variabilelor


a 9ib sunl numerenaluralenenule,care
dintresecvenleutilizeazisubprogramul lncrhnt pentrua oblineprodusulcelor
douenumere?

VariantaPaacal
v ar a, b, t , J , t t tn t s t, *tlcluat <tostre.h>
DrccaluEq inc!@sl (waE x.Irts6r);
votal ticroenr(itrr& a)
( a++t )

r r dln( a) ; r a d l 1 n (b ),

)
lor i .-1 to a d o fot (i = 1r I< = a;t+ + )
f ot j != 1 !o b a l o for(Jrt, J< = brl + + )
tncrdnt (t) ; tncrmnl (t) t
lor l! . 1 to I do !o! (I= 1, i < -arL+ + )
fo ! J!=1 !o b- l t lo for(J11, J < br j + + )

fo r j! = 1 !o ! dlo for(J.1, J < !crJ+ + )

fo! I:.1 ! o I do
tncrdlgnt (!),

de limbajpfeterate,
23. Pentruvarianta stabililicaredintreurmrtoarele
antetede
subprogram suntcorocto:
Drocdu! D(nrlnt69er, var vol d D (Inr n, t4t& v1101)
wt a rl a y t1 ..1 0 1 o f i D !.s e r),
b) !wc!r.oD D(n3lnl6g!rvar

24. Penlrufunctiiledefinitemaijos,caredintreafirma(ii
estefalse?
1) l
' C++ l
Vailanta
t unc t ion f (x rr6 a l ,) r! a l , f!,oat t(fl oat x)
( i f (a< 3) rerurn 3.x-1,
1f *< 3 t h 6 n !..3 ' s + 1 .1s reluE a-1t
6 1 a 6 fr.x -1 )

f unc t r on l l orc g{ fl oar x)


s (x rr r1 ) !r a L , ( i t (a< to) !tun A * x,
i, f x < 10 th e ! g := 4 * a el ao rtun x-l i
1 6 t,= a -1 )
ual de informaticepentru clasaa Xl-a

a) Expresiaf(g(3) ) produce valoarea11;


b) Expresiag(f(3)) produce valoarea8; -
c) Expresiaf (s(f (3) ) ) produce
valoarea7;
d) Expresia(r+s) (3) producevaloarea1{.
caredintreafirmaliisuntadeverate?
Fiinddatdfunctiaurmatoare,

Sscllotr cBt (D1.n2 ! 1ntg6r) :


lonslnl t
4! inv!inl96r,

{hlle n2<>O alo betin


In w '. t nv *10+ t r 2 @ d I 1 0 ;
n 2 !.n 2 div 10

rhil inv<)o ito bsi.n


!t !-41*10+inv rcaI t0,
tnv,.tnv ativ 10

s) car (12,10) relurneazd


1210;
b) cEt (10.12) relumeaze
1012;
c) cat (0.12) returneaza
12:
d) (
clt 12,0) retumeazd120.

at. Fiinddat funcliaurftStoare,cafedintreafifmaliiestefalsS?

rtrl] i
Cac (n1, 12 ! Inlegr)
i longiDl,
elr n za tlnhec ! ,

whllo tr2 <>0 alo bgln


n 2 !tn 2 . liv 10,

r) car (-12.13 ) returneaza-1213;


b) csr (12, o) returneazd12;
d) cat ( 0.12 ) returneaze
12:
d) clt (13,12) retLlrneaze
1312.
Capitolul2. Sub

27. Se consideradeciararile
urmabare:

rcial cdc6! (:Lnt r\I201, tn!


B l xol , i i r !, i sr r, tE t cl aol r

rci d n6u(i trt A 1201, i nt al 2ol ,


iar b, idt n, in! c[a01. irte
r)
rcial htera(lnr i1201, tn!
B t2Ol rtnt n, l at n, tnt C I{ OI,

rcl al D l f,(i st A I2O]. tnc B I2Ol ,


tD! n, lnr a, iut cl4ol, i[t&
D)
rcl,dl Elhin (int AI2OLiET& r)

in care:

- conc.r are rolulde a relumavectorulc cu I' componente, vectorobtinutdiF


concalonarea componentelorvectoflrlui
A de Il etemenlecu ale vectorului! cu !
elemente. De exemplu,din t!E{, B=(2.5.3), n-3, se obline
C - ( L.2,3,7, 2,5.31, D-7.^-11,,2,3,7),
- R6ua are rolul de a returnaveclorulc cu p componente, vectorobtinutdin
reuniuneamultimilorde numerenaturaledrn vectoriiA cu |l elementesi B cu !
elemente(presupunand c6 n conlinevaloridistrncte9i E continevalori;istincte)
D e e x mplu, din A .(1.2,3,?), t l-{ , B . (2 , 5 , 3 ), n . 3 , s e o b lin e
Cr ( 1, 2. 3, 7 ,5 ), p ' 5 .

- rntr6 are rolulde a feturnaveclorul


c cu p componente, vectoroblinutdin
intersectia
multimilor
de numerenalurale dinvecloriir\ cu,n elemente si B cu !
elemente(ln aceleagicondili ca gi ln cazul reuniunii).De exemplu,rtr
l - ( 1.2.3,7), n'4, B - (2,5,3 ). n,3, s eo b lin ec r (2 , 3 1 , DE z .
- Dlf are rolul de a returnaveclorulc cu D componenlo,vectorobtinutdin
diferenlamullimibrde numerenaluraledin vectoriia cu n elementesi B cl.lD
elemente (ln aceleagicondilii ca 9i tn cazut reuniunii).De exe;ptu, din
B , (2,5,3 ), re3, s e o b lin e C: (1 . ? ),p r2 .
^- ( r ,2 ,3,11, 'n={,
' Ellndr are rolulde a returnavectorulcare contifletoateelementeledistincte
ale vectoruluiinilial cu tl componente,prin eliminareavalorilormultiple.De
exemplu, penlruL= lL, !, 2, 3, 2r, rn=5,Sereturneazd A- (1, 2, 3 ), n=3.
A. Se cilesc doi vectorix cu . numerenaturaleSi y cu b numerenaturale.
Elementele din fiecarevectornu suntneapdfatdjstincte.Caredintresecvenlelede
mai jos-nu calcuieazdreuniuneamultimilornumeretornaturalerelinutede cej do
vectori?RezultatulSeva odsiin veciorutz.
ia.ualde informatici tru clasaa xl-a

r C o l cEt ( x , Y . a. b, ? ,,9 ),
El i h i n ( z . D) t
I El i n i n (x , a) , E lir d n (Y .b ) t
co a ca t ( X . Y . a, b. z .D ) t
c EL i n tr ( Conc lt ( t ( ,r, a ,b ,z ,9 ),9 1 ,
d El i xn i s ( x ,
a) t E lin i n (Y ,b ),
R a (x, Y . a. b. z . 9) ,

e. Se citescdoi veclorix cu a numefenaturale9i v cu b numercnaturale.


E.renteledin fiecarevectorsunt distincte.Care dintresecvenlelede mai jos
aculeaze intersectiamullimilornumerclornaturaleretinutede cei doi vectori?
;.r!ltatulseva gdsiinvectorul
z.
. : D i , fl x .Y I a,b,z,9 r ,
D i - fl x tz, atE,z,9 r t
! Di f (X, a. Y , br z , D) t
DIf (l r, z , b, D. z " D) t
.l tDte rE c t ( x , a, 1. .b . z ,D )
!i In te !6 e c t . ( X , Y , a,b , z , D );

C. Se cilesc doi vectorix cu a numerenaturale9i Y cu b numeronaturale.


:emenieledin fiecarevectorsunt distincte.Caredintresecvenlelede maijos nu
se va gasiln vectorulz.
=lclrleazenicix-y, niciY-x? Rezullatul
r) htrc (X,I, !'b, z.D),
Dl"f lX.Z, a'E ,2,9r,
!) Inl!6 (X, Y, !,b, z. p),
Dtf.lY,Z'btD,z,rlr,
.) Inters (Y, x, a, b, z, P) t
Diflx.z,E'L,z,El,
t) Dlf (X,I, a.b, z,D) t

?8. Se considerdsubprogramulurmdtor:

Dloceduro A116 (!:inlger), vold atIs (Int n)


va r i tj ,k 3int ger , ( h ! l ,l , kt

k, !2 rn_1r I r - 1,
(fo r( J E tr J< t l k-2.t+ r) /2, J+ + )

f,or j:=1 ro (k-2*ir1)dllw fo !( J -1rl < -2' i -1, J+ + )


El, r 6 ( . ' ) i
l o r l: E l lo 2*i- 1 d o
rtt ( t *' ) '
Capitolul2. Subprograme

A. Dacdr=8, catecaractere
"*" se afiseazdpe ultimulrandtipdrit?
a) 8t b) 15t c) 1 5 r a) L7.

B. Dacdn-{, cetecaraciere"'" se afiEeazd


in total(petoaterandurile)?
a) 8, b) 16, c ' ) L2t d) 20.

C.Dacar=20,catespaliisescriuinaintea
primului ".",pepenultimul
caracter rand?
.) 10t b, 20, c) 19, d) 1.

29.Seconsiderd
subprogfamul
urmator:

ttt wctrrlrayl1. .l0l of !'ttet rctat s(lnt vt10l )


( Iat l l i rl t4l ,t,J.zt
Drc.alur R(vs vrrect),
for (i :0, t< 4rl + + )
v r t A : ar r . y 1 1 ,.a ,1 ..tl o f b ,l t
for { J:3rJ> = 0rJ--)
( al l l tJl .vttttrt
vl tl /= 2t
fo. ltrl to 4 alo
ror J:Ea dkmto l dto l
to! (t= 0r1< arl + + )
A lt r J : rrv l tl @ tt 2 , { z" A I0l ttl t
l or (J.1tl < arJ+ + )
v lt l rEv tl l d l w 2 ,
,E Z,?+ A IJ] I' .I
lor '
I:El o a tlo
)
l
to! JrE2 to 4 alo
z r . : ,2 + rtJ , i L

A. Careesteconlinutul
luiv dupdapel,dacalnainte
estev. ( 1,2,3,4 ) ?
a , v- 11 ,,2,3,4rt b't vc ({,3,2,1., I
c) v= ( 0.1,5,10), iU vs(0,{,5,9).

B. Caretrebuie
sefieinilial luiv,dac5dupdapelestev- (1,6,10, O) ?
continutul
a) v=t2,4,6,4) t b) v= (1,6,10,0),
c) v= (0,10.5,1), it) v=(1,9,3,2).

C. Pentrucare dintreexempleleurmdtoarede configuraliiale lui v la intrargain


subprogfam,continutulacestuiala ieirecoincidecu cel de la inhare?
a) v=(13,10.s,11) t b , v -(2 , 3 , 9 . L 3 r,
cl != lO, r..2, !2r , d ) v = (1 , 4 , 9 , 1 5 .
l,ianualde informatic6pentru clasaa Xl-a 71

30.Se consideresubp.ogramul
urmetor:

ttap !@t=arrayt1,.10l o! iDtee|er; i.nl dqr(in! n, ilt n.


j.rr 41101. inr Bt10l)
f sction clq) (!,n! tntor, ( lnt i-0,
A.B!v4) !rr!|l; (I<4 && i<=tr &&
khtx6
aIU l E B Itl ) t+ + '
if(i>n 6.8 i>n) !tun 0;
elBe if(i>n) rtum lt
tthtl6 (t<4) edl (1<-n)
1B e i !(i > r) !tun -1,
.n dl (a til:stil ) do i: : i+ 1; 6I6e i r(atl l < B l tl )
ir (i>n) ard (i>n)
rlljh -1;
Ise
el8e if i>tr tbs c!g).=1 relr,e lt
ela6 l! l>r tl6 cq):--1
)
6 ts t r alll < Blt l
thd CtEr!=-1
er8e C!@!=1;

funcliaapelatepenhufiecaredinkecazurileurmatoaG?
A Ce valoarereturneaze

.) h E 3, n- 3, A - ( 1 ,2 ,3 ), B -(1 ,2 r3 );
b) n = 2, n= 3, B = (L ,2 ,3 1 i
c) n !2, nr 3, ^=
A - (( 1
L ,3
,2 ),
), B -(1 ,2 ,3 );
d) n :1, nr l, Lg( 1 ), B E(1 ).

B. Penlrun.5, l'.-(!t2rEt7tzl, B-(1,2,!), stabilitice poatefi


valoare
^-3,
a treiacomponentl
a vectoruluiB astfelincatfuncliase returneze
valoareao.

.) 3; b) 5:
c) nu existeo astfelde valoafe; d) 2

c.Penlrux-(1,!,5,7), v-(L,2,1,7), stabililice valoripotfiscriseln casete


aslfel incat apelul cntr)(4.rl,r<,y) sd returnezeaceeagivaloare ca 9i apelul
c n u ) {4,r l ,Y,x) .

a) 2 9irespectiv3: b) 2 Sirespectiv 5;
c) nu existdastfeldevalorii d) 3 9i respectiv5.

D. Pentrucare 9ir de vectori,fLrncliaCmp, apelatdpentruoricaredoi vectori


consecutivi
in 9ir,rctumeazeaceeasivaloare?

a ) A = ( 1,2,3) , B=11,2,31, clL,2,2\:


b ) A - ( 1.2 ) , B= ( r,2), C=(1,3);
c ) a = ( 1,3 ) , B= ( 1,2), C-(1,3);
d ) A= ( 2) , B = ( 1) , c = (0 ).
72 Capitolul2. Subprograme

31,Scrietisubprograme
pentru:
A. Calcufuf
valorilor o sfera(afieji votumlpe Itazavalortirczei
ce catacler|zeazl
saler.
B, Calculul
valorilor
caracteristice
aleunuicon (razabazei,generatoarea
g indltimea)
pebazavaloriivolumului
conului9ia arieisale
laterale.
C,Oblinerea descompuneriiin factoriprimiaunuinumernaturat n.
D- Ordonrea componentelor pozitiveale unui gir de valori,valorilenegative
rdmanand pepozitiilelorinitiale.
E, Determinarea uneisubsecvente palindromice a unuigjrde numerenaturale de
celmultdouacifre.
F. Verificarearespectariilimiteide vitezdpe un sectorde drumpentruun vehicul
carelltcarcurge 9i careestetnregistrat la diferitemomente de timpde o camerd
vidoo,Setransmitvilezamaxime admisd v, numdrul decamerevideo& distantele
fatade punctulde inceputal sectorului de drumundesuntamplasate camerele:
dr,arr,...,d,
ii momentele la cares-a lnrogistrat prin dreptul
ttecereamobilului
fiecdrei
camererr,t.,...,t".

Rispunsuri
1 9 . d) ;20 . c );21. a);22.bt;23. c);24 , d l)i2 5 . b ), c ): 2 5 . a ):

27 .A, b ) , 6) ; B . a), d); C. c );

28 , A, c) ;B. b);C. d).

29. Indlcallo:fiecarenumSreste scdsIn binErpolr ljniea mahrcei.Se afigeaza


numerelezecimaleoblinutedin nuntereleln binarde pe fiecarecoloanEa mairicei.
A. c) , B. r ) , C. a).

30. Indlcalle:func,tiareallzeaza
compararealexicograftc5 a doi vectoricare retin
numeronaturale. A"a) 0:b) -1:d) 1i d) o; B. c); C. b); O.d).
Capitolul3

$iruride caractere

. 1 .C e neralitati
din plin 9irurilede
Prografielenu lucreazenumaicu numere.Ele utilizeaza
se poateciti
lorar ti loartegreuca,de exemplu,unprogram
. In absenta
afiganumeleuneipersoanesau numeleuneilocalite$.Ne putemimaginaun
ce caractereca unvectorin careliecarecomponenle re$noun caracler.
Dupd
seStie,tiecarecaracter
estememorat prinutilizarea asctr. 9irurilede
codului
pot fi citile,afigategi prelucratecu aiulorulunor subprograme
puse la
ziliede limbai.
de caraclere
Sirurile auaplicalia
uriage
ln viatareal5.St vedemcatevadintre

Cine n-a folosil un editorde texte?Chiaracum,cand scriemprogramele


PascalsauC++utilizamun edilorde texte.Luaticodulsurseal unuiprogram
(lisierecu extensii.paa sau .cpp). ObservaticA sursaesls un figierlexl in
careliocareliniea ei, esteo liniea figieruluitexl. Prinurmare,fiecarllniea
ligieruluilexl conline un gir de caractero.Ce operalii putem lace cu
ediloarele?De exemplu,pulemmodillcao linie.O asllelde operalieconsu
in includereasau qtergereaunuisub$h(caractereconsecutive din Intoriorul
unui 9ir). Astfel de operaliiso tac, ii vom vedea cum, prin prelucrarea
girurilorde caractere.Alteoperalli:a) Ftnd - este o oporaliode identilicare
a unuisubgirin cadrulunui9irde caractero;b) RDlacoesteo operatiede
inlocuirea unuisubiir cu un altul;c) cut esteo operalisprincare,dln cadrul
unulgir se extrageun subgiral sdu 9i acoslaestememoratln cllDborrdl
Prin pasre se insereazaun 9irde caractere in cadrulaltuiSlrde caractre.
9irulexemplelor ar puleaconlinua.Puteligdslaltel6?
t Ali invetal,Ia "TehnologiaInfomalioiqia Comunicatiilod',
cum,de exemplu,
putemcrea labele(Excel,Word sau Access).Am vezutce liniiletabelulul,
pot conlinevalorinumerice,dar 9i aliabetlce,care sunl giruride caractere.
Putemsorta liniileunui tabol dupd o anumitdcoloana(de exemplu,dupa
numelepersoanelor, De aici,rezultece intregirurilqe
in ordineallabotice).
caractereexistdo relatiede ordlne,corezpunzdtoare ordondriialfabolice.In
informaticd,o astfel de relatiese numegteordinelexicognticd.Ctrm se
ordoneazballabetic(lexicografic) mai multegiruride caractere?Caresunt
orincioiilecare stau la baza acesteiordondri?Desoretoate acesleavom
invdtain acestcapilol.
t Limbajeloactualepermitnumaiinlroducereadatelorsub formdde Siruride
caractere.
Luali,de exemplu,o componontd
de tip edttr, componenEstudiatd
la'TehnologiaInformatiei
9i a Comunicaliilo/'.
Chiardacavreli,de exemplu,
74 Capitolul3 - Sirurlde caractere

sd inlroducelinumarul12, veti introducede {apt girul de caractere'12'.


Programulva convertigirul de caractere'12'in numerulinlreg 12. Nu
intoldeaunao astfelde operaliereusegte,penlruce esle posibilca persoana
careintroducedatarespectivise gregeascd. De exemplu,in loc de girul,12,,
se introduceghul'1@'.Aceastainseamdece in timpuloperaliei de conversie,
se efectuoaza9i o anumitdvalidare.in cazulde fald, trebuieelectualao
validarenumeicS.Componentele sludialela Tehnologia InJormaliei
afigeaz
girui de caractere.Prin urmare,dacJ realizdmun astfelde program,este
necesarsE converlim in ghuri9i invers.Cumefeduemastfel
valorilenumerice
de conversii?
Conversiilesuntprezentatein acestcapilol.
inhucatexistediferenlesemnificativo intre modulin care sunt retinulesi
prelucralegirurilode caracterein cele doue hmbaje(Pascal9i C++),preientare;
acestotase va lace separat,

3.2.$iruride caractere
in Pascal
3.2.1.Noliuniintrod
uctive
Poaieati observatcd, paneln acestmoment,nu am msmoratcuvinte.
Acestea au fostdoaratigate.
in Pascalse poatelucracu ugurintd
cu ele,datofitd
fapluluicilimbaiul
esleinzestratcuunlip dedatespecial,
numit6tri.ns.
Detlnllla 3"1. O succesiunede caracterecupfihselntre doud caractere
apostlof se nume9te9rr de caractere.

Exempl6i'Itn sl!'; 'rolrl|na s numlra bobocll'.

2 O inlrobaretintre caraclrolgcare alcdtuiescairul se poategdsi 9i


'Jr De exomplu,S'rul''|1r 'slr' estelcris corecl? -
apostroful?
Rdspunsulcomporteo anumitdnuantars.Pentrua includeapostroful,se
folosegle un adificiu: acesta este kecut de doud ori. PAn urmare, shul ,alt
'st!' esteIncorocl, corecteste 'A1t ,'Etr'. Atentiet in memorie,lirul ,art
',a{rt esle retlnulca 'A1r '6tr', decicu un singurapostrof, De ce este
nevolesa se procedezeastfel?Motivulesle dat d faptulcd, dac5 am procda
nu ar putgadecldeundeso tormind9irul,cu atte cuvinto,care
altfel,compilalorul
esteapostrofulfinal.
in Pascal,penlrua pulealucracu girurilede caracterose folososcvariabilele
de lip sr!r.ns. Tipulstltrs eslo predeflnlt,
adicaestecunoscul,nu avemnevoie
sel declardmcu ryP.
Pfogramulaldturatare declaratao
variabiE t, de lip srrtEs. Ea esie
! rc , I 9ur as ' ,
inilializatecu girul 'tr)ufaE', apoi este
afisate.
oentru(lasaa Xl-a
vanual de informadcA

Pentrulnceput,sA analizdmmodul in care o variabilede tip stlinsf


lemoreazaun qit de caraclere.Peniruaceasta,pornjmde la exemPluldai in
anlerior:
rrogramul

7 I p u r a s

tlol rtll rt2l tt3l tt41 ttsl tt6l tI7) tt8 1- - - - ' tt2 ssl

Ce observdm?Penlru o va abil6 de tip ating se rczeNa aubmat un vectol


au 256 de octeli,numerotalidela o la 255. Primuldintrcei are rclulde a r4ine
.umeruldeoct4i ocupalide jir.
in exempluldat,qirul ' reDu!.E' estoalcdtuitdingaptecaractere. Octeliide
a 1 la 7 memoreazd caractoreledin careeslealcatuilgirul.Restuloctetilor,de la I
a 255 au un continulneprecizat. De allfol,nici nu ne interoseazdconlinutullor.
Obseryali faptulce afigareas-a realizai,Tnansamblu, prinprecazarea
numelui.
intrucet o vdiabild de tip EctlnJ menotea?e cuvintele lormd de vector
de caracterc, exisldpogibilitateasd accesen dircct conlinulul'ub
urul octel, a$a cum
s!nlem obignuiti,Astlel, ttll retine codul caracteruluir, tt2l reline codul
caraclerului, 9.a.m.d. Programulcare urmeaz6atigaze acela9icuveni, pe lilgro:
va! t! 3trlng,
i:lnle tr,

t r!rIel[ra sr,
lor t t. 1 ! o n alo M t l6( t lt ) ) t

l\4aimull,putemmodillca unuisinguroctet,agacum rezullddin


continutul
programul
urmator.
war ! . alr ln g ,

t t r ' t oDu ra a | ,
t 16l t r t I t,
r lt (t) ,

in locde 'a', r I5 t retine, I , . Prjnurmare,programul


afigeaze'rDu!ts'.
de tip strlns existeposibilitaleaca
in cazulvariabilelor atibuircasd se facd
pe
direct,nu litete,agacum rezultddin programul
urmdtor:
wa ! l, z! s r r lngt

! tr rr4Nra s r t

r ir ( z) ,

in urmaalribuhii,variabilar retinecuvantul"+Durag"9i acestaesieafigat.


76 Capitolul3 - Sirurtde caractre

Am vizut ce pentruo variabilS de tip srling se retinautomat256 de octeti.


din careprimulretinelungimea.in multecazuri,acestnum5resie preamare- se
consumdmemorieinutil.Din acestmoliv exjsH posibilitatea ca o variabi\ de tiD
Blcit EE se lie declan6 in agafel tncAtsAocupeun nuner mai micde octeli.
Exemplu:vat t: Errtlrst{l t
Variabiiar, ocupS5 octeli.Primut,cet de indiceo, are rotulde a reline
lungimeacuvantuluimemorat.in aceslcaz,vaiabilapoateretinecuvintece au cel
mult4 caractere.Programul
aligeaA h!ma'.
var t! s c lt nt lal t

1 11 6( r ) ,

Ce facmin cazulin carecuventul careva fi memorat,


are un num;rmai
marede literedecatnumSrul
deocteliai variabilei
careil memoreazd?
ExemDlu:
v.r tt 6 trtn g l 4 l t

iii 'o*"oro*',
ln astfeld cazurise ttin numaiprlmelcaractere,
atateacate pot li
memorate.
Inexemplu,variabila ,DANS,.
r relinecuvantul
am lnvelat,caracterul
. _ Qypa_c.um blankse memoreaze ca oricarealtut,pin
codulsdu.Prinurmare,o variabibde tip strtns poateretinemaimultecuvl;ie.
pdnunulsaumaimulteblank-uri.
separate
ExemDlu:
vrf nt,et rrrlns,
i',-r. 'ron z"r,"rra,r
in concluzie,
prinutilizarea
variabilolor
de tip srrlns avemavantaiul
ci
putemadrosagkulde caractere prinuflltzarea
atetln ansamblu, numelur
varlabllei,
cat9ipecaractore,
prinutilizarea
parantezelor
drepte.
Acoslanuestesingurulavantaj.Limbajuleste cu procecturisi
inzestral lunct,i
careugureazemultlucrulcugiruri16
docaraclere.

3.2.2.Concatenarea
lirurilor
Pentrua concatenadoue girurlde caraclerese tolosesteoperalorul,+,.
Operatorul'+ , estebinar(adic5are doi operanzi)9i poateaclio;a a;upradaltor
de lip sking. Ce intefegen:'prin concdtenarc?
pentruclasaa xl-a
tB.ual de informatice 77

Definilia 3.2. Concatenareaeste operaliaprin care din doue giruride


caracterese obtineun al treilea,formatastfel:primul$ir (cel aflat in
stanga operatorului),urmat de al doilea gir (cel aflat in dreapta
ooeratorului).
=te|nplu:
Diogie sr6,
vli t, 2. 6tti^9,

! .='aceElri
z .- t a q91u, ;
E t- r+zi
dit6 1n (t),

r programul doudgiruridecaraclere(t:-t+zr):
Et5 se concaleneazd
. t relineqirul'acst,;
variabila
. variabilaz retinegirul' xengru';
. prinoperatia(t+zr) se oblinegirul,acBt 'rlq)1u';
. giniloblinutesteatribuilvariabilei
r.

I Observalll

1. Dacdam fiscrigtr.r+tr programular fiafigat| xeryrluacEt'.De


aci lragem concluziace opeatia de concatonarcnu este comuaatfud(conleazA
:/d neain caresuntlrecuticei doioperanzD.
2. Obserudmcet este de impodantsd tinem cont d pozitiablank-ului(al
loilea 9ir esteprecedatde blank).Observallcddacdam facutconcalenaraz+t,
3r. obtinut girul t exry)luacsst ', caroosteprecedal
de bl6nk,
3. Trebuiesd avemln vodorecd giruloblinutin urmaconcatendrii sd poatdfi
"remoralIn Tntregime sd
- variabilacdreiai se atrlbuie fis declarala
cu un numir de
cctelicaresA permitdmemorareasa,altfelgirulva li memoratlrunchiat- adicevor
i memoratenumaiprimelecaractere, ateleacateincap.

3.2"3. Compararea
lirurilor
Oricatar pdreade curios,shurilede caraclgrepotfi comparate.
Astfel,doud
Siruride caractere(nolatea 9ib), se potgdsiin unadin relatiilo:
. a=b - celedouegirurisunl
egale;
. a>b - girulaestemaimarodecatgirulb;
. a<b - girulaestemaimicdecai9irulb.
Capitolul3 - iruri de caractere

Dar cum se pot comparadouaSiruri?Se nu uiiemce 9i dou5caraclorese


pot comparadupecodullor.Am vazutmodulln care.-au fostcodificalecaraclerele.
dupa o anumitalogice: daca un caraclerumeazA anuia,in ordineafabe ce, afunci
el are drcpt cod un numet mai mare decetal cancterului cdruiaii umead.
Exemplu:codulcaracterului
d estemaimarecu o unjtatedecetcodulcaraclerului
c.
9irurilesunt succesiunide caractere.Prin urmare,compararease face pe
prezentem
caraclere.In conlinuare algorilmul
de comparare a doudgiruri.
Fie doud giruride caractere,nolatecu a (cu n caractere)9i b (cu !
caractere),
+ Se compardcodurileprimelordoud caractere(aflatein slangagirurilor,de
indice1). Avem3 posibilitdti:
. dacacodulpdmuluicaracleral girutuia estemai maredecatcodul
primuluicaractefal giruluib, atuncia>b,
. dacdcodulprimuluicaracteral Sirulujbesle mai maredecatcodul
primului
caracler
algiruluia,aluncia<b (b>a),
. in cazde egalilaiese compardcoduribcaracterelof
do indice2.

+ Dacen<a, 9i in urmacompardrii
primelorlll caracterea rezultategalilate,atunci
.<b (b ar maimuliecatactere).
+ Dacdn>n, gi in urma compareriiprlmolorn caracterea rezultategalltate,
atunciarb (a are mai multecafactore).
+ Dacen-n li ln urmacomparddituturorcaraclerelor
a rozultalegalitate,atunci
celodoudqirurisuntegalo(a.b).

ExmDlel
. ar'abc,, bE,bacrft. Aluncia<b, pentruce alll estea 9i are codulmai
mic decetb t1l careestob.
. aE'abc', bc'aba'. Atuncia>b,codultuialll esteogalcu codulluibllt,
codullul at2l esteegalcu codutlui bt2l,iarcodullui a[3t estemaimare
decetcodulluirrI3l.
. ar t abc . , br ' alrca' . Aicirn=3,n-4. Aluncia<b, codullui!t1l eslo eqalcu
codul bt1l, codullui at2l esteegatcu coduttui btzt, coduttui;t3l
'ui cu codulluib I31 9i n>Ill(girulb are maimullecaractere).
esleegal

Compararea de caractereesteextremde utitein sortareaalfabelicS


Sirurilor
a cuvintelor(ca in diclionar).Ordineaasitel impusese mai numestesi ofdlre
lexlcog@ficd.
pentruclasaa xl-a
Vanualde informatlce 79

,a, in programulurmalorse sorteazdalfabeticmai multogiruride caraclere


>-y' (cuvinle). Pentru aceasla, se declara un vectoJ in cate fiecate
-'-' component6 estede hpErrins.

Algoritmulde sortareesteunulstudiat(care?),motivpentrucatenu revenim


prezentat
asupralui. Programuleste ln continuare:
tr.t cuvlEle = .ffaytl..101 of atlitrlr;
var wr cuvrnr6t
lEr ltrLngt
n . t! b!4,
i!v! boolau;

fo!i!=ltoDa lo
rc.dlln (v Iil ) ,

lnw != f als E;
lor I t. I to D-l alo
tt v lt l > wI I + 11 ! h*
b6sln
! . v t t l,
v' ! lt
El : . v lt + 11,
v t l+ 11 ! = ! ' ! nt
r 4v r i r dt
eDd

lorI r. 1 !ot r dlo


wlrt ln(vltl ),

3.2.4.Lungime a;irurilorde caractere

Dofinitia3.3,Prinlunglmeaunui9irde caraciere
Tnlelegem
numerdde
cafdctefeoe carcaceslale contin6.

Ei(emple:
. Sirul,tt|!M' are lungimea{;
. Firul 'n'In! ' are lungimea5 (9i blank-ulestecaracte4.
renlruaflarealungimii
unuigiravemdoudposibilitdlil
lunctieiLengrh, carearelormageneralil
1. Prinulilizarea
f un c tl o r l e n g th { S ! Stl i n r) r Integ!,

S'intoarcelungimeagiruluis - fumdr inireg.


tolul3 - siruridecarac:

e Exemplede ulllizare

a) vera: atrlngt
c! lnteger,

5 :- 's ler t , t
c :- 1n9! h( a) ;

In urma atfloufil. vaflabt|ac relrne7.

b) ln condiliilede mai sus, l|llreLn(lersrh(a) ) afiqeaz 7.

2. Dupd cum am invelat,octelulde indice0 reline lungimeaqirului.pentru:


oblinefolosimfunctiaold astlel:ord(alol). De ce a9a? Atuncicend scre-
a[0] ne referimla un caracier.Folosindaceastdexpresieobtinemcaracterulca
are coduldal de numdr(in bina0.Deci.penlrua obtinecodulsdu, utilza-
functiaoril.

9,-. l.n proglamulurmdtorse afigeaz tungimeaunui 9ir citit. Tiparireai


(-./L. lace In ce'edouamoduriotezentale:

!cl! o( r a= r o. d1n{ ! ) ,
').
{rt!61n( rLqql@. shulur. a st6 ',
rELteh ( ! lursd.ed slrulut a 63re ,, ordl (atol )),

Un,cazapartede Sirestegtrul vld. ptin gt vid irtelegen un Ft f6d


caracferEvidonl,ghulvidare lungimea0.
n,"
Exemplu:a r ' ' . Am initializat
variabilaa, de p strt ng, cu girulvid.
-

3.2.5.Subgiruri

Dellnitla3.4.Fiinddatun9kdo caractere,
prinsubglral seusoinleleg
un Slrde cancterccorsecutyecarese rogesescln girulinilial.
Exmple:
. girul ' harnLc ' are ca subgirgirul
'!nt ' . Acestaincepein poziliaa treiadin
girulinilial(3 caraclere);
. $irul .n $a' are ca subgirgirul ,IIA'. Observemlaptulce subgirulaparede
doudori- lncepend 1Si 3. prnurmare,in cadrulunuiSir,
cu poziliile r.rnsubsk
poateapergade mai multeori.
. 9irul 'hahic, nu are ca subgirgirul ,rnLt', chiar dacd primetetre
caraclere(rnt) se regesescin girulinitial.
vanual de informatici pentru clasaa Xl-a 8l

Eunctii
ceaclioneaziasupragirurilorde caractere_
Exisid mai mulle procedurigi functiicare aclioneaz asupra girurilorde
Acesteasuntprezentate
:aractere. in continuare.
> Funcliacopy arc rolulde a extrageun subgirdin cadrulunuigirdatl
fuction copy ( E: strlnsr inceDut, lusfin t irt6ger) : Etlins,

-n0e:
. variabilaB (detip srfins) - contineSifuldincarese lace extragerea;
. i.ncelNt - relinepoziliade inceputa sub9iruluicarese extrage;
. lunsin - relinenumaruldecaractere carese extrag,

t, in cazulin careprinparametrullungimespecificdmmai multecaractere


pan5lasJargitulgirului.
decalare9irul,seextragcaractetele
programulurmdlor:
var a, b: 6trln9;
i, J: b y let

wrtt ( 'a = ') , r eadllt r ( a) ,


d.tt ( ! t= t) , r 6* l1n( t ) ,
wrlt(' j-'), ! 6adl1n( J ) ,
b rE coDy(., tr J)t
utl rn(b ) t

glrul,un r:{r,, { penhul9l 3 pentru


oacdse cite9te J, variabih
b va reline
sub9irul
't6x,.

> Functia dacdun9ireslesubgirpentrualtul:


Dosareroluldea veritica
fu!|dtlotr poB ( subal!, Et strtas) !byt.t

Se scriu,in ordine,urmdtoriipafamelril
. Eubstr " sub9irulceutat;
. sl! - girulincarese lace ceularea.
Funcliareturneazd:
. 0, dacanu a fostgas subgirulceruti
. poziliade inceputa subQirului,
in cazulin careacesiaa fosl gesit.

Exemple:1. Fiegirul'abcde'. Se cautesubgirul'bcd'. Acestaestegasil,iar


luncliaretuheazd2 (poziliade incepula sub9irului).
Dacdse cauti subgirul'cz',
luncliareturneaza
0 ('cz' nuestesubsiralgirului'abcd').
82 Caoitolul3 - Sirurl de caractere

2.-Programulurmdtorcitegledoui giruria 9i b Siverificedacdb estesubsiral lui


a. In ambelecazurise dau mesaje.Dacab nu a fost identificatca subgiral lui a,
sau,in cazcontrar,se aligeaz poziliade inceputa sa.
var !, b! rr!in!"
n! lnt.g.r,

G1!.('a -,) . iaalla( a) ;


ctt.( 'b- ' ) r r . . dr a( b) ,
n := Do . { b, . ) ,
I! n 0 lh.tr wrt!.h('b au sat aubsir al Lul a')
-
.1!.6: Ll. I n( ' b .!!. . ub8t r .1 lut a 3t tnceD tn
Dor t r I . t , ni,

> Procedurain!.rt aro rolul de a insoraun 9k de caraclereincepandcu o


anumita pozitie, ln all gir. Pentru aceasla, ea primegte ca paramotrl
urmeloarele:
procedure iDsert (sir_d_ins: slring; var Fir_unda_in6:
rtrl.ngr Dozr Int.ger) t
und:
. rt!_4c*i.!r! - girulcarourmoaA a liinsrati
. !i.!_u.qiL_1ns - iirul in carese faceinserarea:
. por - poziliadincarese facelnserarea.
Exemplu:
v.! r, b! rlrlng,

Ett.( ' .. ' ), !.rd L r(r),


F l! . ( , b. ' )' r.rc l a (b ),
t E r . r t ( b , r, !),
E il. lt r ( r ) ,

in programul amcititdoueva abiledetlplrrtns, a 9ib. girulr4inut


antrior
devariabilab in girulrlinul
esteinserat devarlabila
a lncepandcupozitia3.
Exomplu:dacar relinegirul'!bcal, 9i b rellnegirul'123', programul
afigeazd
r!b123c a' .

> Procedura
dbl.r. are rolulde a gtergsun subgirdin cadrulunui9ir dat.
Pentru eaarecaparamlri,
aceasta, in ordins:
tloo.dlur. tt l.t.(vrr rr.!: .trhgr tlillc6, n!_crr ! lntgr),
unde:
. sl! - variabila giruldincareselacegtergerea;
carecontine
. primului
rnattc. - indicele caracter alsubgirului
carese9lerge;
lrerual de informatic{ pentru clasaa Xl-a 83

E efiolu:
Programulurmeto.citogleun 9ir de caractere intr-ovariabiEde tip srrisgf,
rLrniiea. $iruluicitil i se glergesubgirulcareincepoin pozilia3 9i are tungimea2
rsui caractere).De exemplu,dacevariabilaa retlnegirul 'abcd6,, se afiseaz6

tr r il. ( t aE ' ) , re .a l l n (r)r

] Apllcalla3.1. in programulurmalorse lisloazAindiciituturorapariliilor


sracterului
citilln 9lr:
va! sirr atrint;
. bt ar r i. ng [1 ],
Dorn. Dorv! b!.tt

$llt I n ( |ht lo a l u c rt l tru l ' ), ! .d l tr (sl !),


vflt.ln ( 'Ialroalucll calactolul t), r.ldltD (ct!),
Doz n t r lE s ( c h , .Ir) r
Doz v . r 0,
lthll Dortr <> O do
besltr
Dorv rE 9orv+Doz4,
r ' t . h( D o z v ),
s t r t r c o ty (.I!, D o rr+ l , 2 5 5 ),
Dor n !- D o r(c h , s tr) t
elal

L, Apllcalla 3.2. 9tergorealuluroraparlllilor


unulsubgirdincadrulunui9ir:
war 3l!, .ubrLr! .!r{nc,
Doz, lutrsr b!rt,

G I ! 61n ( ' t t r tl o d u c tt s l ru l ' ), !6 a a l 1 tr{ B l .!);


E lleln( t lnt ro d u c l l sub8ldl' ), r6 adrD (substr),
t as r E lnrth (.u b Bh );
Doz t . Dos ( B u b 6 t!. 6 tr),
{hll Doz <> 0 dlo

delt ( . t!, Doz, 1un9) t


Dor : - D o s (B u b s h , Btr) t
84 Capitolul3 - Siruride caractere

0 Apllcalla 3.3. inlocuireatuturorapariliilorunui subgircu alt sub9ir.Analizati


programulurmdtorpentrua descoperimodulin cares realizeazd aceasta:
ws! alr, alr,slera, ei._aalauga! ! strinqt
Doz. lsg. b!t,

r1 tl!( ! lnlr oduc li Bidl' ) r .eadla(6ia),


Eitt! ( t lnlroduc6lt sttul car6 s strs);
r.aatln ( si!_strs );
Elt6ln( t lnlroducli riar clre se udlau!'a) t
rqdln { 3t!_adlauqat) ,
1!ng != length ( 5l!_t6ra ),
Do r t ! t Es ( air _t r a, r Lr ) ,
vbil Dor <> 0 do
be!dn
at 16r ( Eir , Doz , lus ) ;
Ia.6rt ( s1r-.alaurat. ELt. coz) t
Doz : : Dor ( s i. r _6t 6r a, 6i.r)t
.nd,
r1 !61 n( r t ! ) t

de la qirurila valorinumerice
3.2.6.Conversia Siinvers
Fiegirul,123'. Evident, acesta estodiforitd numerul
123.Dupdcum9tim,
qirulocupd{ octeli(nu uitali,primuloctetrlinlungimoa). Numdrul123,dacS
estememorat de o variabilS delip hrs6!, ocupddoiocleligiesterollnutin cod
complomentar. Limbajul dispunededou, proceduricare realizeazS
conversiade la
valorinumerice la girurigiinvers.
> Procedura
str areroluldea transforma
o valoare Tngir.
numoric5
pr oc d u r Str(x Ir IJ g tt zec ,1, va! grB tl hg),

PnlruaceastaI se lransmit,in ordine,dolparametri:


. x - variabita(valoarea) numerice- poatefi lnheagdsau reald;
. s - variabilade tip grrlns caroretineSkulconvertit.
Exemplu:
w.r a, alrlns,
Dr anEegof,

rttc (,n- ')r readrr(r),


.tr(a, .),
vrlrettr(.)

in programul de mai sus se cilegte o valoare lnlreagd (!). Valoarea oste


convertitecetre tipul srllns - variabilaa are acest tip. Rezultatutoste afiqat. De
exemplu,dacd se citegte 123 se afigoazi 123. Pane aici nimic spectaculos.Dace
*nual d informaticepentru clasaa Xl a 85

rn li alisatcontinululvariabilein, am aveaacela9irezultal.Atuncila ce folosesc


stfel de conversii?Penlrua pulea da fdspunsultrebuies; mai invetdmceva
:espremodulin care puiemapelaprocedurarr. Am fi pututsa scriemapel{Jl 9i
tr(n!{,a) r. Observatilaptulcd, dupe numelevariabileicare se aligeazA
r) au fost puse caraclerul:' 9i numdrul{. Acea'ta inseamfi cZ an cerut ca
-ta:
'.zultatul (de tip st n0 sA ocupe 5 octeli - unde pinul retine lungimea,deci 4
tleti pentrumemolate,
Sd analizdmacummoduldeefectlarea conversiei.
.+ Dace variabilar reline numarul1234, variabila! va retine girul
'!2 34 t.

+ Dacdvariabilan relinenumdrul123, atuncia va relinegirul ' 123' .


Rezuhacd 9irul,fdrd ocletulde lungime,ocupd4 octeli.In aslfelde
cazuri,9iruleslecomplelalin stangac! numdrulde blank-urinecesar.
= Dacdvariabila n retinenumarul 123t5 atuncigirulva fi ,12345'. Cu
alle cuvintenu se respectdcerintanoastre,pentrucd dacd ar Ji tost
respectali,rezultatul
ar fifosi eronal.
Acum putem rAspundela inirebarea:la ce folosescastfel de conversii?
Programalorul va aveagrijdca intoideauna numdruldq octeliai giruluisd lie mai
inaresau egalcu numbrulde octeliaivaloriiconvertite. In acestfel, la afigare,vom
9ii careestespaliulocupalde gir Siputemsd atigdmrezultalele aliniale(tabele).In
.onlinuare,ne ocupdmde conversia valorilorrealecdtregiruride caractere.
Exemplu:
v!! a: stflns,
xr f6 at,

x.a -6 7.7 491


atr{a:1 0:2 r a) ,
Mi!e Ln (a)

in programulde mai sus se convertegienumSrul-67,7s9 cdtre un 9ir.


Cerinlaesleca qiruleleclivsd ocupe10 caractere,dinlrecareultimeledoudsd fie
zecimale.Evident,doudcaractefevor fi semnul,-, qi punciulzecimal.in exemplu,
se obtinegirul' -57.79,. Ce obsorvdm?
intotdeaunanumarulzecimalelor solicilatde programator este respeclat.in
" cazul in care numdruleleclivde zecimaleoste mai mare decat numArul
solicitatpentruconversie,inainteaconversieinumerulesie roluniil:Dacd
numdrulsolicilatde zecimalear li fost O, s-ar fi atigat -6? (deci punctul
zecimalnu ar fi afisat).
r' in cazulin care numerultotal do cilro al pa(ii inlrogi + numdrullotal de
zecimale + 2 (caracterelede semn 9i punctulzecimal)ocupa mai mull
decalnumdrultolaldeoctelisolicitalipentrualigare,acesladin urmenu este
Capitolul3 - Slrurlde caractere

Cu alte cuvinle,se lrunchiaznumaizecimalele


respectat. nu 9i parta
Tnkeagd
a valoriireale.Deexemplu,dacdamti scrisr.:112, giruloblinutat
fllogt'-67.7e,.
/ estepozitiv,semnul'+' nu
ln cazulln carenum5rulcarese convortegl
estetrecut:
Acumstudiemconversiainvercddo la tipulEtlt'lg cetrevalorinumric
gkul'123, sepoateconverti
(inlrogisaurgale).Doexemplu, c6trevaloarea
deiip
turt.s.ri 123.
De la inceputprecizdm cd nu lntotdeauna conversia
reu9e9te.
Deexemplu,
dacaincerc5m 9econvrtim Sirul'1r2' ceireo valoaredetipllrega!, conversia
nu reu9e9te,pentrucdgirulcontinecaracterul' r' ,
> Psnlruralizarea
conversiei procodura
utilizAm vrl. Eaarevi parametri
9i
anumo:
IEoc.ihrr. nrl(. r.lfttry, vr! vuf.btl.,.jd|erla., va! coq-rrlrtlEr) t

unde:
. girulceurmsazA
. - oonling a ficonvertlt;
. vrlhbth-nun llor - variabila
de lip intregsau real careva
retlnerezultatul (valoarea
convrsll numerice),
. co4-.r - variabllid tipInlreg,Dupeconvrsle, aceasta
va retine0
dacl convergla
a ruglt
sauo valoare de 0, ln cazcontrar.
dlforltd

programul
Sdanallz6m urmdtor:
vrr rr rerl.ag,
x , . !r h !.r.!,

y r r . ! . ( r a i ru L ..r. r), n rd tn (r),


v r l( r , a , .r),
l! .r r 0 th.n w!r.t.ln(t conv.r.tr r !d!l! ', x)
.1 ..
b.sin
E i !.l u (to o rv .r.L . nu . r.u.i .!' ),
rti l .r!(x )
.nd

Programul
citegteun 9ir d caractere
carestoretinulln variablla
de iip
.trlat r, Seincearca conversia girului
cStreo variabile
dotiptnrogor. in cazd
Tncaretentativa
a reusit,se aligeazA corespunzdtor
mesajul 9icontinutul
variabilei,
numaiunmesajprincarseanunldfaptulcAtntativa
altfelseaflgeaza a e9uat.
l|rral de informaticd
pentruclasaa Xt-a

a
Observalii
t
. Dacd girul de caracterecilre este precedatde un num6r de blank_uri.
conversiareusegte.
Exemplutgirul ' t2 3 ' so poaleconverticdtrevaloarea123.

' 0ac5girulde caracterecilreesteurmatdo un numerde blank_uri,


conversia
nu reugegte.

Exemplu:9irul,123 r nu poaleficonvertilciire o valoaronumerice.


/ DacASirulconlineun singurcaracterlilere,ol nu poatefi converlitcatreo
valoarenumericd.De exmplu,girul ,12i, nu poateti convertit.Exceptie
'ac ghurilede caracterecarerespoctasinlaxauneiconstanterealein forme
(deexenptu,'7.r-3')
Ftiinlilicd
Dacevariabilacareretjnerzultatul
ostede tip intreg,iargirutconlinpunctul
zectmal,conversianu reugegle.

Exempfui91ru,tr,23t nu poatell conve jt cdtrco varjabilede tjp intreg,


dar poatefi convertilcdtreo variabilddEtip !6a1.

Dace in uma conversieise obtinoo valoarnumericecare nu poateli


memoratdde variabilarospecllv5,
programulsetgrmindanormal,prineroar
oe executate,

f Apllcalla3.4. Programul urmebrtesteazadacdo valoareintrodusd


est
.umricd
9i dacdestecuprlnsg
ln Intervalul
I1o,2ol i
var .1rr .tri,nt,
.rorr., !.D!.e.E'
walo.r.t n.lt

*trll.rn( j. slnt
' lntroauc.r ' ),
eal (rtr. v.torro, .!oar.) r

Glt.ln(,v.1. ltrrlodu.a est. .!onata, )

t! (walo.!. < 10) or (varoa! > 20) rh.D


wrft.Ir( tw.l. nu ..r tn tnrw.rul aloltt ')
elt t . tn ( 'ohl ' )
88 CaDitolul3 - Siruri de caractere

3. 2. 7.Ci t i r e aS is c r i e r e ad a t e lo rd e tip Str in gd in 5 i


in f i$ier et e x t
r) Citheadatelordetlp slrtls
Acestevariabilese citescincepanddin pozitiacurentda cursoruluipendesle
cititnumerulde caraclerenecesartipuluisaupanes-a aiunsla slarsitulde linie.
Programul de maiios demonstreazE acesllapl (dacdlinia1 a figieruluiare 3
caraclere,se vor aligadoud un rand9i unulpe al doilearend).Dupdcilireaunei
pe
asttelde variabile,pointerulse alle sau pe caracterulce umea26 dupd ultimul
caractercititsau pe cR. In situatiain carepointerulse afb pe cR 9i se fo4eaz, o
noui cilirede tip srftng, se retumeazd ghulvid.

vA! f : t . at i
a: dr r lng12l,
b: gt r dr gt

aa al9m ( ! , t ! l, alalt ) t
rB 6t ( f ) t
ra dt ( f , r ) ,
wrtrtn(a);
!A at ( ! , b) ;
EIt. lr ( b) t
clo s . ( l) ,

s) Scdereadatelorde tlp srrtns


in general,continululuneidatede lip 6rrtns se scriein llgierTntotalilale.
Optional,numelevafiabileipoatefi lrmat de 't' 9i de un paramelru,ln, Pentru
dalelede acesttip, se iau in considerare lungimoaefoctivda giruluii-i valoarea
parametruluim ce specificanumdrulde pozitiipe carese facescrierea.In cazulin
care valoarealui n este mai micd decetlungimeaeledive a girului,aceastase
ignore,Sirulva fi scris in inlrsgimo.Dacd valoarealui n sste mai hare dec6l
lungimeaeieclivda girului,acestaesle scrispe m poziliialiniatdreapta,iar in lald
se punblank-uri.
Exemplu:se scriegirul' ltatlan'.
war !!t a t,
a i ri 6 tri s s l 5 l ;

ls r l s n (1 ,' F l .ra t' ),


r.Eit (f ) ;
a! ! r -,l ta l i s ,;
G il. (1 , Bi r:1 0 );
c r o 3 . (t);
Vanualde informaticiDentruclasaa Xl-a 89

3.3.giruride caractere
in C++

3.3.1
. Ceneralititi
Am invStatfaptulcd o constantd de tip 9irde caracterese decbrelntredoue
caractere", de exemplu:'calculato!'. Dar cum se relineln memoriainterna?
Aceastaeste retinutdsub foma uoui vectotde caracterc.Primulelement,cel de
ndice 0, retanecodulagcrr al caracterului 'c', al doilearetinecodul Ascu al
caracterului'.', ..., 9.a.m.d.Convenliaeste ca ultimuloctet sd relin5 o (codul
caracleruluinul). Prin urmaro,pontrua relineSirul"ca1cu1aror" trebuiese fie
.ezervatecel pulin11 elementede tip cba! (10 lilerepluscaracterulnul)- adicd
11octeli.l\4enliondm cd penkufiecarecaracteresterelinutcodulAscrr.

Vectoriide caractercpot fi initializatila declarare,caracterulnul fiind


,nemorataulomat.

Etemple:
. cb ar v 6c t ( 111
-' c a l c u l a to !" .
. cb.r vect I I t icatculdto-n. in acest caz, compilatorul
lace calculul
numdrului
deoctetinecesad.
. cba! vat t100l :"calcu!..tor'. Am rezeNatmaimultioctetidecatera
necesar,

3.3.2.CitireaSiscrierea de caractere
5irurilor
Se propune urmetoarea probbme: sd se cifeascdgl sd so afisozo
cuvantul
'calculator'.
Penlruaceasta,ar trebuisd procedem astfell
. relinem unvectorcucelpullnu compononto
delipcha! - itl eremplu2o;
. citimcuvantul,
caracter
cucaracter;
. il afigAm.
Proglamul
umetorrealizeaze
toateacestea:
*tncludi <lo.troe.ht

( c r lr r [ 20l ,

f o! ( t . 0r 1< 1 0 r1 + + ) c ID > 6 l tl ,
t t 10I ' 0,
lor { I ' 0r t < 10 ;t+ } ) .d r< < a t1 t,
90 Caoltolul3 - Siruri de caractere

Se recunoastem de lucauestedeosebitde greoaie.


cA o astfelde modalitate
Dar dac5 citim un cuvantcu patru litere?S'ar puteascrie o secvenldcare sd
citeascecuvantulpendb intelnireacaEcteruluiENTER, inse Siaceastemodalitate
estegreoaie.
Limbajulc++ permiteca lucrulcu Siruride cafacterese fie cu mult mai
simplu.Relacemprogramulanterior:
l+inclual <Loatr6a.h>

{
ch.r rI20t;
c iE > > .i
c dt < < a t
l
I
li Observatii

r' Caracterul
nulesteaddugat
automat.
"/ Procedandca maisus,putemcitioricecuventcu un numdrde pandb 19
caractere
- excluzand
caracterul
nul.
Putemsd rezervdm, pecareo arela dispozilie
in limitamemoriei programul
" unnumdrmaimaredeocteli.
Exempluichar !t1000:.
v' Un vectorpoatofi adresaipe componente.
Exm p lu:
. [0] -,c', a fll -'a', 9.a. m. d .
Din pdcate,prin metodade mai sus nu poatefi cititun gir carecontinemai
multecuvinteseparateprinspatii.De xemplu,dacela rulareaprogramului anterior
tastdmqirul" t n oI!",se va afi9a"Un".Aceastainseamndce citirease faceastfell
. Se sartoatecafacterelo
albe.in exgmplu,s-auseritblank-urile.
. Se cite9teSimlcare incepecu primulcaractercare nu este alb Si se
la intelnifeapfimuluicaracteralb(ln exemplu,blank).
sfergeqte
Din acestmotiv,pentrucitireagirurilorde caracterevom utilizao funciiede
unlip special,pe careo prezentamln continuare.
> Funclial
cin.gt (vdtor_al_calacter, int rr, cbrrr' \nt )
citegteun 9irde caracterep6nacandesteindeplinitd
unadintrecondiliile
de maijos:
. au losl citilenr-l caraclore;
. lransmis ca ultimparameiru(implicit,"\r').
a fostintelnitcaracierul
de informaticepentru clasaa Xl-a

Ohservalii

Suntcititegicaracterele
albe.
nul.
Esieinseratcaracterul
Caracterul nu esteinseratin 9k'
lransmisca ultimparametru
estetroculin modtacultativDacenu estetrecut'se
Al treileaparamehu
n e c ae ste'\n'|.

PflviliurmebareleexemPle:

Secitegteun 9irde maximum2 catacterel


ch r! r l1ol,
cl tr.g et ( a. 3) ,

exemplu,dacetastam'rurlsr ti En!! se citegtegirul"tl!"' careva fi afigat


l-alel ca mai sus,dar citiroase inlrerupela lntehheacaracterului' s' saucand
fostcititeI caractereale girului.
ch l r allol,
cta .s 6t ( r . 10, ' s ' ) t

in c++ Dotexistamaimultefunctiicu Ec6lallnume,dar careditrdprin


primiti.
parametrii Astfel,existd9ifunclia:
otr'g't()
Eaareroluldea citiuncaractsr
r5 parametri. (flece6tealb'fieca nu)'

t Obs6rvatle.ln cazul utilizlrilrepeiata functiei otr's'tO cu kei


i/ parametri,apareo probleme Analizafprogramulurmator:
*tncluale <lo.t!6u.h>
f:LDclrile <.tilas'h>

( ch a! llt t l100 0 l . ,t!2 I:5 1 ,


co ut < < iair 1"
cl n. s el ( . 1E 1, 1 0 0 0 ),
cl n. s l { ) ,
co ut < < ' alr 2
cl a' ! ' l( 41t 2, 25 "),
,

Dacadupdprimacitirenu am lilolosit functiaatn's't ( ) fara parametri'a


douacilirenu ar mai fi lost efectuaE De ce? SfArsitulprimului9ir lntrodusa rosl
maicatprintastareaetttr' Aceastaa fecutca in memorie(buttet)sd RepAstrat
caracteiul'\n'. La a douacitire,noulgirva lncepecu acesta Prinlogicafuncliei
92 Capitolul3 - siruride caractere

cu trei paramehi,citirease facepandb intalnirealui.in concluzie, se citegte9irul


vid. lJtilizatorul
nu mai apucd sd igi tastezetextul.,Prin utilizareafunclieifdrd
parametri, acelcaracterse citegte9i nouacitircse poateefectuafad prcbleme.

3.3.3.Tipulchar*
Vectoriidecaractefeau o proprietate Priviliprogramulurmdtor:
deosebitd.
l+itrclualo <lost!6u,h>

t
c haa .Il l u u s a o '
c @!< < .+ 1 < < n
,
ln urmaexecutai, se tiperegte:
"asa Ea a".

2 De ce? Limbajulc++ peamiteca un vector de caracteresd fie adresal


,i4 incepandde la un anumitoctetal sdui
> cand scriema, adresdmvectorul" in ansamblullui - incepandcu
primulsduoctet(celcaferelineprimulcaracter
al giruluide caractere);
puleamscriea+0;
echivalent,
> candscriema+1, adresdmvectorullncepand
cu al doileaoctet;
> candscriem!+2, adresdmvectorullncepand
cu al treileaoctet;

Din acest motiv,programultrpdregtepentrua+l 9ir!l ndsa", penlrua+2


girul "r!", 9.a.m.d.Mai mult, vectoriiastfel adresalipot fi accesalia9a cum
suntemdejaobignuili. Astfel,pentruexemplulanterior,(E+1) [o] retinecaracterul
'a', (!+1) [1] relinecaracterul '6',etc.
Dupd cum observali,a+1, a+2, ... sunl expresii.Orice expresieare un
anumitlip. Caroestetipul lor?Tipulacestorexpresiiestechar*. Ce semnificalie
are?Semnificatiaesteceade adrcsd.
Definilia 3.5. Numdrulde ordineal unui octet in memoriainternese
numegteadresaocletuluirespectiv.
Oefinilia 3.6. Adresa unul vctor de caractereesle adresaprimului
sauoctet.
.:. O vafiabild
detpul charr poaterelineadresaunuivectorde caracte|e.
.:. in C++,numeleunuivectorde caractereesteo adrcsdconstantede vectof
9i poatefi atfibuituneivariabile
de tip cha!*.
de informatlcd clasaa Xl-a

urmdtorul
Considerdm exemplu:

*hcrud6 <io8tr6n.h>

( cha! a [13 nI'. 4r1 ur , ) pt


D-a, c4t<<t<<ndll;
D++r c4r<<D<<nd1,
t++, cdl<<D<<D(u;
cout< <9 I1l < <datl t

)
cu un gir.
Am declaral un vectorde caracterenumita, pe careFaminilializat
de tip char*
asemenea,am declaratsi o variabilS numitdD. ln acesteconditii,
F-lem atirmacd:
. D-ar este o atribuirecorecta.VariabilaD va reline adresavectorulua de
caracterea, adicdadresaprimuluisdu octet.ln schimb,akibuireaa=Deste
penhuca . estoo constanlece reprezinte
incorectd, o adresd.
. dupeatribuire,putemutilizavariabilaD in aceleagicondiliica variabilaw. De
exemplu,putemafigagirulrelinutprin"cat<<D<<adll,t'
. dacd la continutulvariabileip se adaugd 1, aceastava reline adresa
vectoruluial cdruiorim octetcoincidecu al doileaoctetal vectoruluiv De
exemplu,daci tpdrescvectorulse va afita "ns!|[)ru".Notilveclorso poate
adresaii pe octeti.Exemplu: e(11.
. se pot face 9i sclderi lntre adrcse.ln aceslcaz, rezultaluleste intreg.De
exemplu,prin 9-. se obtineindiceleln v, al primuluioclet al vectorului
retinutde p. Testata
programull

unuiSirde caractere
3.3.4.Lungimea
Penkua puteafi folositefunctiilede prelucrare a girurilorde caractero,
febuie se fie inclusfigierulantet"6rrlns.h", tot ala cum includemfigierul

*lbcludlo <loalrod.h>

> Functiasrrln arerolulde a retumalungimea a unui9it(tn calculul


efectiva
lungimii Forma
nuintrecaracterulnul). generale
este:
s k ,t a t!1 D (c h a r' ) t

unde:
. Elz-t esteuntipintreg,ulilizal memoiei,delinitin "!trtEg.h"
in adresarea
(ilputemprivicapetipulunstsmsdint);
. argumentuleste detipcbar. (adicdo adresd
cdtreun9ir).
Capitolul3 - Siruride caractere

Programul un9ir9iafigeaze
de maijosciteFte numerul pecare
de caractere
leareqirulcitit(exclusiv nul):
caracterul
*i4c1uale <iot!d.h>
*include <strins.h>

{ c b. r 6 t1 0 0 1 t
c t ! , 9 (.,1 0 0 ) ,
c ou! < < ,,s i tu l c trtr l re r< < a tl L etr (a)< < " c.racri " ;
l

A9acum gtimdin lucrulcu tablouri,atribuirile


do lorma!-b, undoa 9ib sunt
vectoride caractere,nu sunt permise.Tot aga,o atribuhede formaa=nur 6l!'
nu estepermisd.Astfelde operatiica 9i multealtelese fac cu anumitefunclii,puse
la dispozitiede limbaj.Pentruca acesteasa poatdfi folosite,trebuiesa fie inclus
figierulantet"Errlng.h", tot a9a6umincludemfigierul"toEt!6rn.h". Ordinea
de includernu are importanld. vom prezentacelemai uzualefunclii
In continuare,
Simodulin careacestease folosesc-

5l concatenarea
3.3.5.Copi erea sirurilorde caractere
> Functiasrrcpy areformageneraldl
c h .r * s trc D y (c h a r* d 6 6 t, char* E urs.),

9i are rolulde a copiagirulde adresdsulBa la adresatlst. Copierease termind


dupi ce a fost copiat caracterulnu1. Se returneazeadresa doEt. Analizali
codulurmdtor:
*lnclud <lost!ln.h>
*tnctudl6 <6trtls.h>

( c h! ! .Ir0 0 l r' s 8 i .!i , b (!.0 0 l .i a l t 8tt' ,


8! t oD! ' (!,b ),
c out . < .,
l
ln programul de mai sus se copiazain vectorulde caractere
a thul de
caractere vaafiga"rlt str". Aceaste
relinutdeb. Programul copiere
simuleazd
ahibuirear
a.b.
standardBricar areformageneralil
> Functia
char* stlcrt(chrr' dl6st. ch.r* sursa)t

9i rolulde a adaugagiruluideadres5aleBr giruldeadresdEurEa.$irulde adrese


sulsr rdmanenemodificat. Aceastdoperatiese numeitecorcraerare gi nu este
comutativd.Rezultatuleste adresagiruluisulsa, iar Sirulva avea ca lungime,
sumalungimilor celordoudgiruricareau fostconcatenate.
rEisal de informatlcdpentru clasaa Xl-a 95

Programul
urmdtortiparegte'r!r! Dcrs":
*itrc1qa!6 <iotre.!.h>
*inclual <6l.tng.h>

{
c her . 120I - ' ' l u " , b tl o o l ." s a s ." .
alt c at ( a. b ) t
cdt<<.,
l

; Functiastrrclt are formageneraE:


cbrr lEtflrc.t(cha! .al6Et, conrt ch.! aiz.-t a!)t
'8u!Er,

i ace)agirol ca atrcatcu deosebreace adauga$dul destinaleprlmllrr octellal


?ruluisursd.Adlugareacaracterelor se faceinainteacaracterului
ru1. Funclia
tumeaz5 adresadeinceput a iiruluidestinatie.

3.3.6.Ciutareaunuicaracter
intr-unsir

> FunctiaEtrcht areformagenerald:


c b a r. E tl c b r(c h r! * r. lDt c)t

ii rolulde a ceutacaracterul,c, in giruli. Ceutarca se facede la stAngala


dreapta. ln cazulTncarecaracterulestegAsit,funcliaintoarceadresasubgirului
creincepecu primaapariliea caracterului citit9i se termindcu caractrul
nulal
in caresefaceclutarea.Altfel,lntoarce
9irului o expresie detipchrri cuvaloarea
0 (adicdo adresdvidede9ir).Exemplele careumeazdnevorlemuri.
ln programul secautdTngirulr cafacterul
urmetor 'r ' . Acestaestegdsit,iar
programul girul
tipdreqte "ra 6!ru. Evident, acegtaestesubgirul carelncepecu
, t r,
caraclerut
*tn.ludo <Ior!r..!.h'
*Lnclude <ltrlEg.h>

{
c ha! a[ 20]rrAc e .t. .rt.n r
c out < < alr c h r (a , tt ' ),
)

O Apllcalla3.5,ln unelecazurine intereseazd indicele


ln cadrulvectorului al
caracterului
cdutat.Acestase obtineca diferenld
tntredoudvaloride tipulchrrr.
Descdzutul
esteadresareturnatedefunctie,iarscdzetorul
esteadresavectoruluiin
caresefacecautarea.
96 Capitolul3 Siruri de caractere

de maijostipdresteindiceleprimeiaparitiia caracterului
Programul 'r', 9i anumea:
ilinclual <iosrred.h>
#inclual <ahlnt.h>

{
c har a{ 2 0 1 -rAc o s l a s l e i ;
c ou! < < 6 trc h ! (a r ' l ! )-e ;;
l

D Aplicalia 3.6, in programulurm6tofse citegteun gir 9i un caracter.Dace


acestaeste gdsitin gir, se tiperelteindiceleprimeiapariliia caracteruluiin Sirul
altfelprogramul
solicitat, semnaleaza faptulce acestcaraclernu exisl, ln 9ir.
*lnclud <striEs,h>

(
c har 6l l o o l , rr,c ;
c dt < < n l n Ero d l u c ti 6 l a 1 n ; c i r.ser(a.100),
cout<< rcalacttul cutat "i sln>>ct
t = . t lc hr (a .c );
if ( t ) c o u t< < i l trd i c 1 6 6 s c r< <r-at
6Is cout<<lstnl, nu conline aceat caractr t't
,

1,,'
Observafii
Variabila
t estedetipulchar,.
Testulde apartenenlaa caracteruluila gir s-a fecutprih a vedeadacd
variabihr retinesaunu 0 (adicao adresdnulddegir).

D Apllcalla3.7. ln progfamulurmdtorse listeaz6indiciituturorapariliilor


cititin girl
caracterului
*Incrud. <losl!u,h>
lllncludl <st!j.trs.h>

{
c hlE . t 1 o 0 l , rt, c ,
. dr < < n l trtro d u c tl s l ru t' , c l n.g6r(.,100),
cdl<< !'caracl6nl 4rat cln>>c,
"

t-.trchi (!, c ),
I ! ( t) c o u r< < rl n d l c 6 1 a t6 ' < < t-a< < eD i tl ;
) wh11 6 (t);
1

Fiecareadresdde subgir,cafeare ca primcaraoter6el relinutde c, intrdin


calcululindiceluiaceluicaracier" dinea se scadeadresade inceput.
fEi;l de informatic; pentru clasaa Xl-a

, :rnctia Eerfch! are forma genelal

cha! *strrch!(const char *4, int c),

$:lasi rcl cu stlcbr, deosebifea fiind ce inloarce adresa ultimei aparilii a


:a-derului (dutarca se face de la dreapta cdtre stanga) Ea este utilizatdln
@2a in care se cautd ultimaaparitiea caracteruluiln cadrul lirului.

$irurilor
1.3.7.Compararea
. Functiastldtnp are formagenerala:
llt s trc r@ (c o n a t chat rEl , conat cl rarr62);

r ioluldea comparadoudgirufidecaractereValoareareturnatieste:
<0, daca r1<62;
=0, dacd s1-E2;

>0, dacAa1>82.

1 oar careestemecanlsmulprincarese comparddoudgiruride cacter?


Fiem numirulde caraclereal 9iruluist 9i l! num5rulde caractereal 9iruluia3
cd primeleI caraclero
Sapresupunem alelui61 coincidcu primele t alelui 82.

f t+1 al giruluis1 este mai maredecatcodul


in cazulin carecodulcaracterului
caracteruluicorespunzebr$irului avem61>E2.
E2,
: l+1 al giruluis1 este mai mic decatcodul
in cazulin caro codulcaracierului
cacteruluicorespunzetor girului62, avem s1<62 In cazul in care 9i la
aceastecomparatie avemegalitate, avempatruposibilit6li:
. ambeleSirufiau un numdrstrictmai marede caracteredecat1+1, cazin
de pe pozitiat+2;
carese compareca inaintecaracterelo
. s1 are i+1 caractere,iar s2 are un numdrde caracteremai maredecet
i.+1.lnacestcazs1<82:
. E2 are i+1 caractere, iaf 61are un numdrde caracteremaimaredecat
i+1. ln ace6lcaz a1t62:
. cazTncaros1=s2.
alat E1 cat 9i s2 au 1+1 caractsre,

Pe scurt,un gir s1 este mai mic ca allul 62, daoeln diclionars1 ar figura
inainlealui s2.
Exem p le :.so are">g,
98 Capitolul3 - 5iruri de caractere

Probatirelaliade ordinedintredoue cuvinte(giruricafe nu conlin


albe)prinutilizarea
,' caractere programului
urmebr:
*incLude <iostran.lI>
*lnclud6 <alliDg.h>

{
c hE E EI1 0 0 l ,rrl 1 o 0 l ;

cour<< ilnrroduceti sinl a rr ci,tr>>a;


cout<< 'lntsoatuceti situ1 b r, cltr>>bi
6dat=alrc,ril' (a, b) ;
i! ( 8 q [l BL < o ) c d t< < ra < b ri

t f (s ffi a r> o ) c o u t< < i B> b tr'


1 6 c o u r< < n rtb n ,
l

FunctiaBtrcn\p faco distinctie intrc litercle ma Si mici ale alfabetului.

FunctiaErrlcrur areformagenerali:
int 6 trtc rn p (c h a r * s1,cbar rE 2)t

9i acela$irol ca srrcryr. Diferentaestecd nu face dlstlnclielntre lfterelema Si


mlcl.
Vectorlde cuvlnle. Existdaolicatiiincareeste necesarsd se lucrezecu !t
cuvinle- lnlebgendprin cuvanto succesiuno d caracterecare nu sunt albe.in
acestcazavem posibilitatea
se declardmvoctoride cuvint.Acesteasunl,de fapl,
matricecu elementede bazede tip cha!.
Exempluicbcr c l10l [2sl ,
Fiecargliniedin cel 10 ale matriceipoateretineun girde caraclere.Acestapoale
aveacel mull 25 de caraolere(incluslvcaracterul potli adresaleprln
nul),Cuvintl
r I0I (primul
cuvent), a l1l cuvantulal dojlea,
9.a.m.d.

n Apllcalla3,8. ln programulurmbtorse citescr cuvinte.Acesteasunt sorlate


aliabetic:
*i.trc1udl <toat!6e.h>
*ltrclude <BrrlDg.h>

(
chlr cuvln!6t1ol 1251, tlE1251t
ial i. a ,q e s l l ,

f or ( 1 .0 ; t< n ri + + )
( cou!<<"cuvanl "
c in > tc u w tn t.ttl ,
de informatic5pentru clasaa Xl-a

f or ( i- 0, t< n -1 ri r+ )
ir ( s t r d r, ( c u v i n t [l .l ,c u v tn t ti + 1]) > 0)
( st!c!,L (mn, cuwtnr tit );
trcty(cuwint [tl , cuvitrre ti+1] ) t
s lac D y (c u w l n te l i + 1 1 ,:!u ) ;

)
l

f or ( i= 0r i< n r I+ + ) c d t< < c u v tl to ttl < < !dr;

Dacdpot comparadoudcuvinte,atuncipot sd le sortez.Am folositsortarea


s'|. rnterschimbare. cu pfecederecei fundamentali,
latdcd, algoritmii, potfi fotosili
? hf-un contextdiferitde celln careau fostprezentati.

3.3.8.Sub5iruri
, FuncliaEtrstr are formageneraldl
c ha! *6t ra tr(c o l s t char *s1, ooagt char rE 2),

9 arerolulde a identifica
dacdSirul62 estesubgir(caractere
succesive)al girului
rr. Dacdacestaesteidentificat,funcliarelurneaze adresade lnceputln cadrul
pruluist, altfelretutneazdadresanuld(o). Cdutarea se face de la stangala
Ceapta. In cazulincareE2aparedo maimulleorifn cadrullul s1, se returneazd
adresadelnceput a primeiaparitii.
Eremplu: lie cha! sltl.'xyzr", 62firtryzn, atunci Errsrr(81.s2),
turneazd 61+1 (adresacaracieruluiy in s1).

f Apllcalla3.9,ln programul urmdtorse citescdoui giruride caractere


9i se
t6steazedacdal doileaestesubqiral primului. programul
ln cazafirmativ, afileazd
ndicelecaracterului
deinceDut al subsirului
*Lnolud <:Lostr6s.h>
*tncLualo <strtas.ht

(
c h. r s ir t 10 0 0 l ,6 u b s tr I2 5 1 , rt,
cout << trlrrlloducll tstut n,
c in. s t ( E i r,1 0 o 0 ),

cout<<'lntrcdluc.ri subslnl c.ut.r t't


c i. n. s et ( au b s l a .2 5 ) t
t E s t t s t r ( B lr , s u b 6 i r),
I ! ( t ) c ou t< < tr.a re 6 u b .i ! s i a i o I ndl l c.l i < < r-6h,
16 cout<<"nu 6Bt dubslrt',

'
100 Capltolul3 - Siruride caraJllI!

D Aplicalia 3.10. gtefgereatuturorapariliilorunui subgirdin cadrul unui 9ir


lmediatce am identificatadresade lnceputa subsiruhi,restulgirului(f6rdsub9ir)
estecopiatpe poziliade inceputa sub$irulL
*lnc1ui!6 <1ostr6i.h>
*tsclua! <6!f1ns.h>

( c bs r s r.s I1 0 O 0 :, ti b 8 l EI2 5 l . rD,


ht lurs-subatrt
cout<<'lntloduc.ti !4tul !t
c t n. so t (6 i rr 1000)t
c t a. se t(),
cou!<<'lnrroaluceli sul,3lnl tr,
cln,g'Eliubs,tr,Zrlt
tung-sublltEatllo! (subrir) i
Dt 6trs t!(s tr.s u b s i r),
vbtl6 (D)
( sltct y (D. ltrlus-aulctr );
D- s trs tr(D , s u b 6 i r),
,
c 4l< < s ttt
)

unuisubqircu alt subgir'Vd laspe


tuturorapariliilor
I Apllcalla3.11.lnlocuirea
modullncareprogramul
dvs.sddescoperiti urmdtor aceasta;
realizeaze
*1Dcluil6 <todlr.r.h>
*lncl.ual <.lrrns.h>

( c hat !t!l to o l , M a [l 0 o l , s to l s[t5:. adl autte' ], *D,


lnt 1u!'-3!.rs, lung-.dlaug,
cdl.<"lalroducotl teacuL
c t n. r l (6 1 r,1 0 0 ), "
cttr. sot O ,
cout<.rttlocuh subdlrul ",
c ln.s .t (.t rc ,2 5 ) t
c ln.s .t ( ),
cdl<<iou subar.lul ',
c ln, t l { d b u g ,2 5 ),
lunc-!torsrstrlsn { alrs ) ,
lsq-aahuc.!t!rd (.dau!) t
Dr B ta s tr(.i r, a r.rg ),
$nt l . (D )
(
! 3 1 0 1 .0 , //.u b s tr wid,
atrncat (De, ell,D-ait) t
lrrc.r (!!n, aalrus) ,
sttcal (Ds.D+luns-3trs),
. tl c D Y( l t,D [);
DrstrEtr (D+lug-adttug, aterg),

c' ot< < a i r,


)
i:_Lral de informaticA
pentruclasaa Xl-a t0l

. j ; . Alt ef u n c t i iu t i l ei n p r e l u cr a r e$air u r ilo r


r
-- r: a strtok are formaOenefale:
cbar +sE rtok(cha! 161,'c o n s t c h a ! * s 2 ),
:-_:.: ,rlde executareesteutmatorul:
N grrulBr este consideratca fiindalc:tuitdin 0, 1, ...,a entitd\iseparatePrin
Jnulsau mai multecaracterecu rolde separator, iar giruls2 ca fiandalcdtuit
dinunulsaumai mullecaracierccu tol de separalol;
Exemplu:girul s1 este" tltaM, tata si bsicul". 9iruls2 este:
sunt blank-ul9i virgula,rezultdce
' , ". Intrucalcaraclereleseparatoare
eftitdtile
sunt:
. la primaapelarecarehebuiesd lie de forma6trtok(a1.62)r, funcla
intoarceadresaprimuluicaracteral primeientitdli(in exemplu"D"na"). In
plus,dupd prima enlitatesepaEtoruleste inlocuitautomatprin caracterul
nul (cod0):

' urmdtoarele apeluriale functieisunt de formastltok(Nutr,, E2),', iar


funcliaintoarcede fiecaredat6adresaprimuluicaracteral urmatoareientitdli
9, dupi ea, este addugat caracterul
nul - aceastapermite ca entitatease
poatdfl exhasdcu u$urintd.

Tn momentulin care Sirulfemas nu mai conlineentitdti,funclia intoarce


adresanuld.

I Aplicalia3.12. in programul urmebrse citegteun $irde caractere.Entildlile


se
:lnsdere a fi cuvinte- giru de caracterecarenu suntalbe- separateprinblank-uli
;lsau virgule.Programul listeazd
entitdlile fiecarepe un rand.
depistate,
Sinctudd <loatroM.h>
+in clu de < 6t r ins , h>

{ cha r s lr l1000lt s par at or t l= ' , ! ', rt,


cin.s6r ( 6ir , 1000) ,
p:a trtok ( Bt r , a6t aiat or ) ,
while { p}
{
co uc < < D< < nd1;
F=sLrtok (NUIJL, s6Parato!) ;
l
l

Variabilap relineadresade inceputa entitdlii.DacAentitateaestegesita,D


va fetineo valoarediferitdde o, caz in careentitateaeste afigatd9i se va cduta
urmatoarea entitate.
t02 Capitolul3 Siruri de caractere

D Aplicatia3.13.Programulurmdtorcitelte un gir de caractereii tipdregtegirul


oblinutprin eliminareablank-urilor.
In lapt, se sepad entitdlile,care sunt afisate
unadupdalla.
#iDcluale <ioEtre,h>
#iDcluale <atlitr!'.h>

( c har s l rl 1 o o o l , s o D a ra to rl l = n ," . *Dt


c in. s e t (s l r,1 0 0 O) ,
D= B t E to k (s i .,s 9 a r. o r) t
while (rr)
{ c ou t< < D t
D-arrrok(NllL, sDrrator) r l

> FunctiaEtrcsDn aaeformagenerale:


aiz 6_t s tfc s l )r(c o n s t char *a1, conat char rE 2);

9i are rolulde a returnanumarulde caractereal giruluis1 - caractereconsecutive


careincepobligatoriu cu primulcaracter- carenl, se gdsescin giruls2.
> FuncliastandardsrlEpr are formagenerald:
siz_t E trs 9 n (c h a r * 81. cha! * 82);

9i are rolulde a returnanumlrul de caractereal ghuluisl - caraclereconsecutive


carelncepobligatoriu cu primulcaracter- cares6 gdsoscin qirul62.
ExemDle
1. F ie c har * 6 1 = rA a 2 d e fn . i s 2 E tr 123n' . A tunci : stl csD r(s1,s2)
returneaze 2 (pentrucd primeledouecaracteretAi 9i 'B' din 61 nu se gdsescin
s2), iarErrsF ( sl, s2 ) returneazd
o (primul caracter
din61 nu se gdsegteln s2).
2. F ie dr r ar r s t!' A B2 d ftr. .6 ? ' !1 5 I' 3 2B rj r. A l unci : 6t!c6ps(s1,62)
retumeazd0 (pentrucd primulcaracter ,r' din d1 se gesegteln s3), iar
grrElxr(s1.s2) tetumeazd tA"
3 (caracterele '1" '2' dins1 se gdsesc
in E2).

I Aplicalia 3.14.Se clteqteun gir de caracterecare nu conlinecaracterealbe.


Sd se verificedacaqirulestealcdtuitexclusivdincaracterenumellce.
Vom felineun vectornumitctfle. Componentele lui relintoatecaracterele
numerice0-9. $irul de caracterecitit are toatecaracterclenumericedace toate
caracierelesalo - numdrul lor este dat de sr!1n - se regdsescprintre
caracletele
veclotuluicifte,
*incluils <Iostrod.h>
*lncludl. <Btllnq.h>

( c har c u w s ttl 0 0 l t c i .fE e l l = " 0 1 21455789" ,


cout<<rlntroduceli cuvstul nt ci4>>cuvatrtt
it ( arrspn ( cuvanr, ctfre) ( cuvst ) ) cout<<'nuric",
1so cdt<<nnonunerlca, --BrElen
! rfcamatice pentru clasaa Xl_a 103

3.15.Se citegteun 9ir de calacterecare nu conlinecaracterealbe


dac: sirule alcetuitexclusivdincaracterenenume ce
ii{rF tine un vectornumitclfre. Componentele lui relintoatecaracterele
;f9. Cuvantulcitit are toate caracterelenenumedcedaca toate
rcloruluiclfr - numerulbr este 10 - nu se regesescprinhe
leclor!lurcuwanl,
h-tual6 <loatles,h>
|lEiude <slriner.h>

.: clst cu vEn ! I 1O 0l, c if ! t 1= ' 0123456769 ';


@l<<trIrtroalucecl cuwa4tul i; ctD>>cuveti
i! (a crcsDtr ( c it ! , c uwanl) = = 10) c oul <<n c o t c t ",
tEe cou l< < r inc or ec t n,

:"rctia strhrr areformageneral6:


cbar * s trx w !(c h .' *E );

. . . 'z') in lit e remic i(' a '


5-yertegtetoateliterelemari('A' . . . 'z')
Functiaintoarceadresa
remenneschimbate.
.aracterelor
=..i|)clla
rlrq)r areformagenerala:
cha! rs tl u p r(c b a r * s) t

mici('a' '.' ' z ' ) in lile rema ri(' l . . . o ' ).


literele
$ ? L l de a con ve r titoate
kJ, caracterelor rdm6nneschimbale. Funcliaintoarceadresaa ln programul
!r-3tor se citeqteun cuvant.Cuvantulcitit
se cu literemafl
tipdregte
*tncluS6 <tosrreli,h>
*!.aclud. <attj'ngr.h>

( c ha! at 2ol ,
cd!<<" hlroducll cuvantul u, cltr>>.,
. dt < < alr uD r{ a ) t
1

, FuncliaBtrDbrk are formageneralJi


c ha r rs trp b rk (c h a r 161, char * s2)t

$ aclioneazd in felulurmatori
. Cautdpdmulcaracteral giruluiEllns2 Dacdestegdsit'returneaze adresa
altfeltrcce
sa din cadrulgiruluis1 9i execlliase termine, la pasul
urm5tor.
. Cauteal doileacaracteral girului61 ln s2 Dacaestegesit'returneazaadresa
sa dincadrulgirului
s1 9i execulia se lermind, la
altfeltrece pasul
urmltor.

. dacd nici un caracteral giruluiE1 ntl apa4inegirului82, funcliareturneazd


adresanu15.
10 4 Capitolul3 - siruride caracteR

Exemplu:lie char * E1="abcalefgbljkLbnoDqrstunw:<!'z rr, nc12".


'.2 -
Atuncigrlpbrk ( s1. E2) returneazeadresaE1+2 (adresacaracteruluic,pento
din l gdsitin s2).
cd acestaesteprimulcaracter

0 Aplicatia3.16.Se citescdouacuvinte.Se ceresd se afigezetoatecaracterel


primuluicuvantcarese regdsescin al doalea.
*tactuil <ioaltu.h>
*i.!c1ual6 <strlnr.h>

( c h! ! @ v e tl I1 0 l , c u e a E te tl ol , rD i
cout<<'ratloahcotl Dli&ul cuwet ! ; cin>>cuvstlt
cout<<'titrodluctl a1 atoilea cuvel cl4>>cuvut:;
D-lragbrk (cuvrntl, dw&12 ) , "
whil6 (D )
( cout<<Dlol <<e!all,

D=alrtbrk ( D, cuv&t2 ),
t
)

Caraqlerele primului
cuvant,tncepandde la primul,suntcdutateln al doilea
Aceastase facepornindde la adresa
cuvant.Oricecaractergesitse tipdregte.
girului,returnatd
de 6rrDb!k. Apoi,variabilacare conlineaceastdadresese
incrementeaz5. Aceastapenkuca, la urmetoarea c6utare,sd nu fie returnali
aceealiadresdde9ir.

3.3.10,Conversia in valorinumerice
Sirurilor li invers
Umetoarelefunctiiau prototipulln 'sttlllb.h' 9i folosescpentru
conversia
valorilor In 9irgiinvers.
numerico
> Funcliaarof convertegteun qircdtretipulalouble.Daceconversiaequeaze
(setntalnegte
un caracternenumeric) valoarealntoarsdeste0. Dacdprimele
caractere
alegiruluisunt
albe, acesteasunt ignorate.
tloubl ltof (corEt cbar rB),

Obsorvatiile $ipentruurmdtoarele
suntvalabile 3 funclii:
> Funclia ungircStretipullong dloublo:
_atold convertegte
1o!g alodrla cbar rE),
-atoltl(coE6t
> un $ircltre tipultst:
Functiaatol convertegte
Lnt a to i (c o l d t cbar rs)t

> un 9ircdtretipulrongl
Funqiaarol converte9te
Io rs a to X (c o n g t chl r ,3),
fli!6'ma:(i Pntru claSaa xl-a

1i7, S citesteun textabetuitdin maimultecuvinte.


Secercsase
es.rra,"lorilor numericeintalnitein text. Se presutunecd valorile
irurr r-aduse corecl.
s in entteti. DacSo entitateeste alcituiti exclusivdin ,+,,
-oard
e :re. atuncieaesteconve{itein double si adunatab o variabilS s.
:-:
[:G:r& <io.tles.h>
&-:rd6 <6!ai,ug.h>
4 *' salo <sldlib .h>

*u sir [10 00 ], s er r Er . t o. t l :i n, c i. f r e I l i +- ', rD,


-!0123456769
: 5. ser { air,1 00 O ) t
> ! trtok(6ir, a D. r at or ) ,

.: j.l (arrsDn(D,c I f r e) : es ! r 1n( D) ) 6+ = a t o f ( D ) t


D:ErrEok(Mt1,L, aDaiator) t

c@t<<iatjs nuerlor hlalnlE ln alr est .<<at

:r_-a cvr are rolulde a converti


o valoarede tip doutrl cdtreun 9ir.
:e--ierul nulesteadeugat girului
automat FormageneralA
oblinut. este:
:5r' ecvt (cloubl valoara. int poz, lntr zc, ht* B6M) t

' vaLoar - valoareade convertil;


. Doz - numdrulde poziliipe caretrebuiesd le ocupeSiruloblinutin urma

. zec - adresauneivariabile, de iip lrrr, careretine,dupdapel, numdrul


zecimalelor Decarele are numdrul:
. a6rltr - adresaunei variabile,de tip tar, care are rolul de a memora,
dupdapel, 1, dacanumerulestenegaliv,sau o, in cazconlrar.
Pand in prezentnu am studiatmodulln care putemobline adresaunei
abile.Relinelicd dacda esteo variabild,&a esteadresaei. Funcliautilizeazd
mecanismde transmitere a parametfilor pentruca sd poatdreturnaanumite
Jltalepe care le gdsimin variabiblerespective. ln cazulei, variabilazc va
ne dup5apelnum6rullntfegilor,iarvariabilaseffr semnulrezultatului.
Funclianu insereazdin gir nicipunctulzecimal,nicisemnulnumdrului. $irul
cclinutincepecu cifracea maisemnificativd a numerului.Pentruca qirulobtinutse
jie corect,estenecesarse fie prelucrat, de caireprogfamator.
ln continuare, Dacd
.Jmerulpoziliilorocupatede 9k (Doz) estemai maredecatocupddata,Siruleste
completat ln stangacu un numdrde o necesar.ln cazulin care numdrulpozitiilor
estemai micdecetcel ocupatde num6r.rezultatul esterotuniit.
c v u{ v al, 3, & z c ,&6 !l h ) ;
l06 Capltolul3 - Siruride caractere

- dacd val reline 1234, atuncise returneazagirul "123", zec rqine 4 9i


BE relne 0,
- dacd va1 reline 1239, atuncise reiurneazegirul ,12{", zc reline 4 9i
Eetn! reline0.
- daci val rcline1, atuncise feturneazdgirul"100", zec reline1 9i EeE
relrne0.
- dacdv.t reline-0.001, atuncise returneaze
9irul"100", zec reline-3
9i stnjlre{ine1.
Penhua ve convinge,rulatiprogramul
urmatori
#ticrudo <ioslrs.h>
*tlclual. <stdUib.h>
tincludle <atllss.h>

( aloubl !!lmr,

char nunlr_8tr t20l Ftrn, nsar--t'ler t20l tr,


-'
cou!<<nritr; cla>>nllmr,
//c@werl6sc nllmnX al tiFarosc rezult.lul
// asa .u oare f,urnl'a! dI funclle
6t!cty(r1fu!_!tr, ecw! (nunarr 19, &zc, &6eE))t
cd l<<uEinl es l6 ' < < s w! _s lr < < t i <<s h a . r < D d l ,
ll 9iaLr\crez alnl D6nln ! tlDlll rzulratul aF{ cu
// .t a6t 6Dr at do ut luz lc or .
l! (.ou) sttcat (nllmrl)rl, n-r ) '
athc.t(auM )rltnur.r_8i!r zec) t
sttcat ( nus ar ir . L, n. i) ,
alncrl (nl|Nllrr6t,nlrMr_str+zec, 3),
cout<<nun rlrrI,
)

> Funclialtoa are rolulde a converllo valoarede iip tnr Tntr-ungir,a c5rui
adresdestememoratd ln variabila
slr. Valoargabaza retinebazadenumeratie
cdfe caresa sefacdconvefsia(deobiceibazaeste10).In cazulbazei 10,grul
oblinut
retine eventual,
Fi, somnul"-". lntoarce
Funclia adresa qirului
obiinut.
c har * l l o r(l n t v a l o a r , c h ar * E l r, l nt baza)t

> Funclia ltoa are acelagiefectca j.roa, deosebifea


fiinddat5de faptulcase
convertegtecdtreSko valoarede tip lorg lnr.
c bar * l to !(l o rg va1u6, c h a! tsl !, l nt baza)t

> Funclia ultoa are acelaqiefectca iroa, doosebirea tiinddatdde faptutca


se converte9to
catre9iro valoarede tlp ungIgnat tong.
c h. r * ult o a (u EE tEre d lons value, char * { r, i rt b!za),

se maipot utilizaurmatoafele
Penlruconversii, funcliil
vanual de informatici pentru clasa
a Xl-a 't07

. |'uncla
1o trs 5 t!to1 (c ons t c har .s, c h. ! r * eD d D t r , int baza),
=Je-'olul-de_a.
conve(i un grrcatre lonE. ln afara gjrutuicare trebuie
-.lncrapnme9teca parametrude Intrare convertit,
adresaunei;arjabtlede tip.i;;;. ;;;;
:pel, adeastdvariabildva retinepoziliaDr
:.rverr,t.Deexemi;d;;il'iJ.?[J#Y,:ffi
;"$""1i,':.,il;?!'.:r"x",'"""!
g"
:.:llfl:1:9acesteiinformalti?
t""metru rerine
adresa ,n, . Dar
caracterutu;
careesterost!l
:v,stenlet Cu ajutorulei se pot depistaeventualeb;rori uoa-r-ri"
::unci cand se inkoducdatele.priviti sirr
e clar ca
-x,zatorut
a dorir
saIntroou"a
unnuri..du/rindffifi:i:;:
lpticalia S.te. programul
""L"lH'y
urmdtortesteaze daceo valoareintrodusd este
-3
-irmerice-
9i daceestecupfjnsd in intervalut
fro, zo:. i""iripiJpii;;; A;
1-Ti'-.96ndcompardmnumdrulcaracteretor
:garrtale-a convertitecu ,rld";-" -i'Jri
aresemnificaliacdinkeggirulestenumericVariabrta r"ai* trebliesJ
:orUnag, 10 sau15,adicabazain careesteconsideral numdful subformadesi;_-
*tlcLuat. <io6!ro.!,h>
#tnclult. <srdltb.h>
#lDcludL <srrtng.h>

( c h. r nt lM r tz o t, ra d tr s a ;

v = s r r t ot (n re r, & a d !6 s !, 1 o ),
if (adr66a-nlre!t !!tr16tr(n@r) )
cout<<nD!!a contln. caract6r

rf (v<10 ll w>ro) cout<<odara nunollca I af,ara ltntt1


e1a "r
)
> Functla
dtoubl Brrrod(corlst char ,s, chu **ndtDtr),
:onvene9teun 9ircdtredoubre.
; Funclia
1oa9 aloubl *Blrtotat(const cha! * ( 6) , r *6 a d D r r ) ,
cha!
:onvenegteun gircdtre tors atoubXs.
> Funclia
unsls!dl Lons srlrout(congr cha! *s,cba! *.naEtr,inr baza),
aonvertegte
un gircekeuastgmatlons.
ln caz de depdgire- adicanumdrul
-,rr^'"['
:l?l:-!pl'l p"t.,
i,*ii]"11;"::ro::5
*Jiil:::j;1U?":"H,:!
:ffiff":",J: incareser""'*i"-""il]i,p!
":?JF..jl'"!3lil1li",l"?.''o''
Capitolul3 - ruri de caractere

3.3.11.Citirea$i scrierea
lirurilorde c.aractere
din $iin
fifieretext
3 .3 .I L l . Op er atiade citir e

Pentru
a citio liniea unuifigiertext,sepoatefolosifuncliaurmdtoare:
stlllle(cba!. Aal.res._sl!, Int Nr_car, cha!=. \n' ).

Functiacitegteun girde caractere,


pan: candunadintrecondiliileurmebare
esteindeplinita:
a) au fostcititeNr_ca!-1 caraciere;
b) a fostdetectatsfargituldelinie:' \a'.
Evident,in acest fel, la o citirepot fi adusein memoriecel mull 32?65
caractere(vezilimiteletipuluitrr).
t
h Observalii
r' Caracterulcare marcheazesfar tul liniei '\n' nu este inseratln gir, in
schimbesle insotalcaracterul
nul(marcheaz6 sfarqitutgirului).
r' Estesuficientse apelEmfunctiacu primiidoiparametri,
ultimultiindimpticit.
r' Dace se doregte,ultimulparamekupoatefi apelatexplicitcu o vatoare
convenabild, caz Tncarecitirease facepanah intAlnheaei sau pandcend
au lost cltitollr_car-l caractere.
Programulurmdtorcitegteliniecu linieun figrertext ale c6ru,linitnu au
fiai mult de 5oo de caractere $i afigeazdl:niitepe monitor.Nu se
'+'-' cunoagtelungimeafiecererlinir.
-y'
{atncludo <!sl!.&.h>

( f al! 6 M t(i l .d t!!' .l o Er rl n ) |


c hr l ,In l 6 _ c l tL ta [5 0 1 1 ,
tthtl (!,gt,llao (r,lll_clrtrE, 501) )
cout<<Llnl*cltltr<<traU ;
,

t Observalle foarte impodantit Prin f>>r,irie_ci!ira, cilirea se


J' efectueaza
astfel:
a) incepandcu poziliacurentda pointerului
se sar toatecaracterelealbe;
b) se citesctoatecaracterebpanab inlalnireaunuicaracleralb_
De exemplu,daceo liniea figieruluiconllnegirul " Afara Dlouan, se
citegtegirul"Af arC'. Testalil
Erlal de informatici pentru clasaa xl-a r 09

Operatidae s c r ie r e
3.3,11.2.
Scrierease face prin comanda f<< ELrr. Prin aceasti instrucliunese
F intreg9irul,lncepandcu poziliacurentda pointerului,
inclusivcaraclorelo
albe.
exemplulurmdtor:
'Irdza!
*tncluate <latroe.h>

( fa lied n I ( ' l. dht ", ioa ! r out ) ,

!<<,Dri@wBr at i,
!.cLo r6 ( ) ,
l

d e la Sirla a lt tip
l -3 . 12.O m od a l i t a t ed e c o n v e r s ie

Existi Si alteposibilitati
de conveEiede iiruri la altetipuride date.Un tip
lEecial,numitlErfsr!|tq pemitechiardeclararea (lluxurilor)
stream-urilor de
. tiruricetrevariabile.
"Citirea"
seefectueazd
cuajutoruloperatorului ">>" lalelca
tn fi9ier.

Un Fk x retine"1 2 3 a s'. O funqiespeciald(numitAconstructor)


iiruluix, un stream(llux),numltln6. Ea are doi parametri: glrulx 9i
ri g i
-rgeazam ea lul: ls h. t E 6 !s l E s (x , l rrl o n (x ))r.

"Citirea" seefectueazd cuconversle cdtretipulrespctiv.


Programul
va afila
-('nerele1,2,3,4!5 cateunulpeliniel
*tnclual6 <tostloa.h>
Sl ctud!. <.t!atro!.h>
*ttrc1udo <strLnq.bt

( . h! r *I l- ' 1 2 3{5i,
{3crrt!6re lN(x. dtr1.n(x) ),
lnl nrt
drt16 (trs>>!r) cout <<nr< <6l!all,
l
,
t Observati
cit desimplusedetecteaze girului.
sfargitul

Tota9a,se pot"citi"maimultecuvintedintr-ungir.Programul
urmdtor
citelte
qi le afigeaze.
cuvintele De aceastd datl se considedcA esteSirvalid9i cel de
lungime0, faptcareconducela o nouacitire9i decila ciclare.Pentruaceasta,
defiecaredatd,setesteazdca lungimea
Siruluicititsefienevida.
esle prezentatinconlinuafe:
Programul
*tlclude <to8lrn.h>
*tacluate <st!st!6.ht
*ln.Lui!6 <scrtas.b>

(
c h a ! x tl .' l Me s ra ra 4 buD i cai ,
char cuv.ll I201,
ls rrg tl e ! l n g (x , s trl n (x ) );
vhtlo ( lns>>cuwMt && Errletr(cuwMt) t
cout< <cuvBn! <<.ndl ;

propuse
Probleme
un text.Cuvlntele
de la tastature
L Se oitegte prinvirguE
se considertseparate
spatiusaupund Catecuvinte aretextulcitit?
2. Se cite9tede la tastaturd un text9i o succesiune de caractereOe cateod
intalnimaceastd succesiune ln cadrul
textului?
3. Secitegteun text.DouAcuvintepotfi separate printr-unul
saumaimultespalii
Secere sd se eliminespatiile
inutile.
4. Se citegteun figiertextcarecontlneo singurdpropozitie,pe o llnie.Programul
rcatanjeazeliterelein fiecarepropozilie, ln ordinealfabetice, pdstrandlocrll
cuvint;lor.Numailiterelede la'A la'z'sunl ateclate. Celelaltocalactere rdman
neschlmbate. legirea Numele
vafi totunfigiertext. estealesdedvs
figierelor
ExmDle:
|!AE PRTCE Ot BREIO rg s1.25 PIR lOttlID'
aac DDSEI l! tfit [o oP $1.25 Prl RRETU.
IIIC T]ICENEI PI.A'IE READ 0?6-243,
ala .DEIEEE oHtLtJ N"Rs r?6-Ez3'
Junlol Dlvlglon
5. Crestereautomati.Scrietiun program caresd mereascatoatenumerele care
aparlnh-undocument (cititdintr-un
figiertext)dupdun procent
citit
de la tastature
De exemplu, dacese introduce 12,procontul esle:12%.Toalenumerele trobuie
cudouAzecimale.
afigate Testali programul dvs Peiiaza:

'Batranul Uc Donaldl'E avea ? wacl oa! alaalau 120 d 1tt!t at


laDtg p zl. El vlreau acasa 1. { P.M"

Juniorolvl6lon
pentruclasaa xl-a
, r.ual de informaticd

+t;#trd$5,,:l;;''
''""'-*$puW "ourt*t 'txEor
.'t" r\qieru\
,jii""Jt$:il),::':'Jiji:*":tiall"' *qnJ" 'n Division

elevii cate studiazalimbajul


_ Problemade lucru in colectiv - numal pentru
oascal,Sirud generalizate'
cd'inPascar' cucare
sirur.e
,.*" iryx:Tlii;Jtrtur
'irlt[t:*if ijr$"'i'ii"?i'li!i;
.';***f*,f",'l*i:",1p,{i
},::#:'"1i"$11
ScrielisubProgramele urmdtoare:
caredetermin5 lungimeaunuighi
' subprogram
a doudgiruri;
subprogramcarepermteconcatenarea
' pentfualtul;
care dacdun 9irestesau nu subgir
identificd
' subprcgram
careconverteqte un $ircdtreun intreg;
' subprcgram
careconverteste un inteq c6treun Eir'
r subprogram
un cdtreun numatreal;
r slbprogramcareconverteste 9ir
careconveneEte un realcSireun $ir;
' subprogram
poziliea alttll9lr;
careinsereaza un girpe o anumita
' subprogram
(se cunoaqtepozilia
care Sterge un sub9iral unul9ir dat
' subprogram
a subSlrulul)'
deincePut
intr-unfigiertexti
. subprogfamcarepermltescriereaunui9ir
girdintr-unfigiertext
. subprogram carepermitecitireaunui
Capitolul4

Structuride dateneomooene

4.1. Notiuni introductive


La "TehnologiaInlormaliei9i a Comunicaliiloi'am invdlat sd lucrim cu
tabele(Excl sau AccsE).Se considerdm o liniea unuitabel.De exemplu,ea
conline numele unei persoane(30 caracterealfabeiice),varsta (un intreg) 9l
salariulbrut (un numdr real).Liniile,in loialilaiealor, alcSluiesctabelul.Fecand
abstracliedo faptulcd la "Tehnologia Informaliei 9i a Comunicatiibi'se lolosesc
programegalafdcute,specializate, destinateunorutilizatoricdroranu li se pretinde
se pol punemaimulteintrebdri,cum ar fi:
sd lie expe(iin informatictr,
cum se poalerelinein memorieo liniea unuitabel?
cum se poateretineunlabelpe suportextern?

Rdspunsulla primalntrbare
estedat de existenta
unorvariabile
speciale,
careauo structurd
neomogone. O astfeldevariabilS
esteimpe4i15,
la randulei,in
mai multesubvariabllo
numite,uneori,c6mpurl.Pentruexemplulconsiderat, o
variabill.s-o num)mPts, va conlineo subvarlabi\: numilbN6e, careesteun 9lr
de caractgre; o alla, numite v.rsta, penlru care se alegeun tip inlreg 9i o alta
numite gal!!tu, de un lip real Aslfel, observem cd variabilaPls es:e
neomogenS din punct de vodero al spre
slructurii, de exemplu'de u_
deosebire'
vectoriare aro toate componentele de acela$ilip Cum se declard9i cum s
utitizeazdo astfeldo vaiabild von invdfa in acest capitol
in ceeaco privesterdspunsulla a doualnlrebare,o posibilitale
de a reline-r
tabelestedatddo creareaunuifiglercu tlp,
t CreareaFi exploatareafiglerelorcu tlp nu lace parledin programadvs ct
,l esterecomandabilsd le studiatiinmodindivdual.

in Pascal
4.2.Structurineomogene
4. 2. 1. Tiou l n e c o r d l
dedaleinvdlatepanein pre?str
in practict,aparsitualiiin careioatetipurile
nunesuntdemarefolos.Sdanalizam unexemplu

t*, Presuounemcl dorim sa prelucremanumite date referitoarela maj'rllii


elevi.Pentruliecare elev.cunoastemi
Xanualde informati(apentruclasaa XI-a ll3

1" NumeleSipfenumeie - se retinein Etrilgl2ol ;


2. Nolala matemalica -va abildde tip reaat
3. Notala fizicd- variabiEde tip realt
4. Varsta" variabildde tip byte,
detipchar reline'B' sau' F'.
5. Daceestebdiatsaufate- o vadabild

Obserualifaplulci informaliilereferitoarola un elev sunl eterogeno(de la


numelode tip 6trinE, panavarsta de tip b!.te), In Pascal,exisl5posibilitalea
ca
loato acesle inlormaliisa se regeseascd intr-un singur tip de inregistrare,
numitREcoRD.
in programulurmelor,obserudmcum se declare(in acestcaz, 61ev), cum
se cilelte9i cum se afigeazdo variabild(numiti) de acesltip:
tt'D6 lw = Eecoral
n u 6 . 8 l ri trs [2 0 ],
D-jdst, n-flzr ro!l;
warst.r blt,
66*t chalt
ndt

ffitt6 ('n se 61v , ) , ! adln( , nu! 6) ,


Gj.t ( tnota rnlldnrlIcs !aallt{6
'), 'n-.rtd.!),
wrtra ( ,no ra r t z Lc a I ) , leaat t n( . . D_! t z ) ,
BI!.('va r6t! t ) r ! 6! dln ( . v r ! 6t a) r
Mtr6 (,s el , ) r r adlD{ c . 3o: t ) ,
$rt!6 1n ('nu 6'. 6. nu$6) ,
srtreltr('trora n !ou!i.r 6.r_na!),
w!l!6ln ( 'no la f t r t c a ', ,"n- ! lz ),
wrt!l,n { 'va r s t r t , . v a! ala) ,
rtteln ('s el r , 6. s x ) ,

t, Observatii

Penhua adresa
unanumit detlpEcoBD,se foloselte
campal variabilei
numele
ei,urmat
de',',apoide
numeb cempulul.
campulnr,mal variabilei
Exemplu:. numereprezinlS .
r' in cazulincareavemmaimultecempuriadiacente(careurmeaa unuldupa
altul)qi de acelaqitip, le putomdeclaradeodata,separanduleprinvirgulS.
Exemplu:campurile: gi "Notala fizicd" suntadiacente
"Notala malematice"
qidetip rea1, decideclaralia
este;
n_natr n_flz ! rsal,
4 Capitolul4. Structuride date neomogene llanual d informatici P.

) latacumaral, in memorieo lnregistrare


do acosttip - ocupd35 de octelil
inregistr
4.2.3.
2l octeli 6 octeti 6 octeli I octei l octet
t.rz in genral,camF
htrebare:dararcoaD?|
Cempurile
uneivariabilede acesttip pol li cititesauatisateindividual.
De
li sepolatribujvalori,potintrain calcul,
asomenea, tol individual.
Dacda Si b suntdouavariabibde acela9itip REcoRD
se pot facefdre
degenul.:.br.
atribuiri
Problome

4.2.2.Accesul
simplificat
la cAmpuri
Ala cuma fostprezentat, modulde accesla campurile unelvariabile
de tip
Rlcori.Deslodeosebit de groi- intotdeauna
punemnumelevariabileltn latd.in war ! lwt
roalitate,
accesulh campurileunelastlelde va abilese poatefacemultmaiusor,
prinulilizarea
instructiunii
wrtH,cuformagenerald: vlrh dlo
D.tLn
wlth v.!1, varz, ,.., va& cto instrucliun w! ll. ( 'E
wlth drtl
ii arerolulca,in cadrulinstructiunii
subordonate,
adrosarea
sa sefacesimplilicat, b.sl,
adlcaprinutilizarea
exclusivea numelul cempului. EII
rlll
programul
Reludm anterlor,
dardeaceastll
dateamutllizat
instructluneawtrb: tlat
olalt
t!4r. .1.v r t.coEdl
tr'rm! .rrtncl2o),
DLt'l|t' Lltrt r.!1,
vrr.ttr bdt., Pentruunelev,s
..xt chart lipulRtconD(lnclude 2
.rdr campurllor cargo aba[
w.t .r .l.vt fi putullace9l aia: ..
astfeldadresare esteI
b.sla
Putemaveaotic
b.srr arcoRD,careInc
l|rr.t.( In',m .I.v , ), !.a{h( trM),
EIt.(,tro!| rl|t.tlltlda '), r..(Ur (n_tr.ar) ,
nr lt. (' rc tr l j .rl c a ' ), !.rd ttD (n_!k)t 4.2.4.Vectoride
erlt. (,v.r.!r i), !..(U.n (va!!ta) ,
EIt. (,!.s 1 ' )r r.rc tn (..x )r Agacums-aar
v r ll .l n (' trs ..,n u n 6 ),
v r rl l .1 tr(' n o t.
detlp RrcorD,
n l t rl l tl c .' ,n :@!),
w! l r.h (' n o ta l l l l c a ' ,A-!tr), AdresareacAmp
r i. t.In (,v rts ta t,v a rl tr), paranlezedrepteintr
r it .h ( r3 e 1 ,,. x ), propriu-zisd
setacea9
t;, .: DacI v 6st\
X!# ' urmator), atu
prinv ltl .nu
-1-'
ryrual de Informaticipentruclasaa.Xl_a

1.2.3.
inregistririimbricate
in general,campurilecare abatuiescun tip FrcoRD pot avoa odce
. tio. O
ntrebaretdar REcoRD?
Respunsut en"fi.utiprdgr";rl ;r;itor, ' -
esleatirmativ.
Drot!s r3t
ttD. ld = Eocolat
! ! r m , . tl tn s t2 o t,
tl!!a_a: rcolat
zi, lsat h'r'tt
a[, 1E!oger,
.rlrdt,
n_rut, 4_t12. r.al,
v.rrtar !rj't,
6exr char,
.nal,
w .! 6 r t @r

Ett6 ( ' nu$. .t.v i), loaaun(nur),


wlth dat._n dio
b.stn
ic i! . ( , r t ua n a rt.rt!., ), !.!a l ta (rl ) ,
n!lr.( ' lura trr.r.rtt ,), !..dh(ruJrs),
v r lt . ( ' aDuI n .s !s !Il ' ), !.d u n (a n ),
.nil,

. Pentruun olev,se cltescnumel9i datanagteril.


Aceasladinurm6ostde
'eentru
1_o-,":p-!"d!9:.rlra, tuna_
9tanurnagteriil. aOi""a.u
mpua6f caro abetulescs_afolosit, din nou,lnstrucliunea "i.pir]i"i.:-"
wIrE. Adro;area
pllut fac 9i a9a:..dla!a_n,zt, 6,dla!a_n.tuna, s,ar
.at.lrr._n.an. Evident.o
tfelde adresareesle greoaleSjnerecomandale...
Putmavea orjceleniveluride imbricare(un tip nrcoF.D inctude
tI n!coa.D,careincludeun altul, un atl trp
S.a.m.d.).

2.4.Vectoride inregistriri
jlTlr s-aardtat,etemenlete
unuivctorpotti de odcetip,deciinctusiv
.,-
rp RtcoRD.
campurilor
,Adresarea se faceprinnumelveciorului,
urmatde perechea
de
?nteze inlre care este trecutindicelecomponentoi,
jpot
-drepte
priu'zise
selaceasacumaminvatat. "eieclii
*gtorut,irinregistrarea
eslede riperev (cain programul
l-
gC.' ,D_19.1.""f
urmalor),
atuncinumelese selecteazdprinwlt).nul, iar ziuariagterri
pr|nw lll .nuttl.!t_
| 4. Structurlde date neomooene

9i de aceastadatd,pentruselecliasjmplilicald,
se poateutilizacu succes
instrucliuneawlm, aqa cum rezultddin programulurmdlor,unde se citegleun
vectorcu E inregistreri
de tip etev:

ty!r6 td E rcoi(l
tru e 3 6 l ri n s [2 0 ],
data_a. rocord
z i ,1 s s .b l rr ;
e !a rE e g e rt
endt
nd;
wector_irregiatfarl t arraytl..9l ol rv;
war v: voclor-hrstgliaEit
tr, ir inttr;

r t t ( t q= ' ) ' ! a a u n (n )t
f or i. = 1r ot r a l o
wtth yttl alo
b6ritr
E l l e (' n u n .1 v ,), ! a a un(nl rre),
wlth dlatLn tlo
bgtn
E I! (,z tu ! n .i t6 !l l ' ), r.l autr(zt),
q !i !6 (' l ' ,s n ri t6 !{ I' ), r!drn(l un.),
*ailo ( '$u1 trrrl .ri i ' ), ro.al l n(rnl ,
ndl,
eadl

4.2,5.inregistrare
cu variante
Nu toaleTnreglstrErlleau o struclur,fixi (acelagl
numdrde cAmpurl)aga
cumau lostceleprezenlate. Sunlcazudcendun tlpinregiskareare o partsllxl
urmatidoo partevarlablll.
Si pregupunem ce ne lnlreaeaz! o altuallereferltoarela studlllunel
percoane. O astfelde inrogistrareare o paneflxddatdde campurlle carerelin
numele,varstaSitipulde studii.O persoand poatesenuaibestudii,cazin cargnu
maiesienecesar sa avemalt6inlotmalii,poatesd fllgcutcatevaclasede gcoald
genorald(ne-arputeainteresa liceul(cazin caredorlm
cateclase),sd fi terminat
s5 gtim anullermlneriigi otagul)sau sa abd studllsuperloare (ql atuncins
inlereseazd facultelii9i numerulde ani de studiuTn cadrulfaculetli
^numele
respective).
Inconcluzie,in iuncliedetipuldostudii,inrsgistrarea
arataa el.
Limbajulpermiteca inregistrdrile
sd aibd o slruclurdvariabild.
Cum so
realizeazd
aceasta?
in p mul 6nd, trcbulercltnd ce parteava ab e eateptaaaHln cadrul
inreglsttt l dupd parlea flxd. O parte va ablld ae dezvofte h cadrut
inrcglstdrii dupe vab le pe carele la un cemp sltudtln cd.lrulpdqll flxe.
pentruclasaa Xl-a
tlanualde Informatice lt7

In programulcareurmeazz,se exemplificd descriereaunuitip de inregistrare


,ariabile,selecliapd4ii variabilefacandu-sein funcliede yalorilepe care le ia
mpul Erudii. Pentruselectare,se tolosegteo clauzdspeciaEnumitacasE.
lampuldupecarese faceselectiaaparodescrisin aceasuclaua.
Cempul selector trehuie se lie de tlp odinal cu un nundr finit de
demente. ln lunclie de -vaiorilepe care le poate lua cempul selector,se va
.ezvoltaparteavariabile.In esenld,se scriupe randvalorileposibileale campului
leleclor. In dreptulfiecdreivalorise trece parteape care trebuiesd o conlind
-rregistrareain acestcaz.Aceaslase incadreazd intreparanlezerotunde9i poate
' chiarvidd.Cam purileprezenieinire paranteze
se scriuseparateprin I r ' .
programulurmetor(carecitesleo singureinregistrare)l
analizali
tlrD Drsoda r6colal
-
nt r e! Et lins l30l;
varsta: Iryl,
caE atuatii. char of
,f,: ( );
ts'! ( nr - c lt inles r ) ,
' 1, . ( d_t ! inl. t ! ;
olas : s t r lng) ;
's': ( f ac : r c or d
rl,@-f : 6t!1ng[?0] t
an-s: ba't6
nd)
en't'
var D! I)r.osa;

rite ( !)r r oaalln( D. n' l@ ) ,


'n w6
ffitt6 ('va rala t); r 6* t lD ( D. v . r at a) ;
{rtt6{'Etud ltl t ) r r adln( r , 8t udt t ) ,
da se D.6 tud ul of
,!|, r b6 gin
d lt e( ' nllM r o1a66' ) r r a a t 1 n ( e . n r _ c l ) ,
ndl;
tI' r bo c lt r
w!1r ( ' anu1 l6nlnar ll lt c u l u l ' ), rrdln(D,aa-l),
vllt ( t olaaul ' ) , roaaltn(D.olas),
nal;
tst 3 b ecin
q r lt e { , ns s l6 f ac ult r Ell' ), !adlln(t. !!c.D6-t) ;
srlt ln( ' st de s t udlli !.cu1t!!6 ') ,
!adUn{ D. f ec . as _r ) t

I Observalii
Pentrufiecareinregislrare de acestlip compilalorulrezervdnumdrulde
octelinecesariceleimailungivariante.
Estepreferabilca cilireauneivariabile
de tip lnregislrarecu variantesd se
lacAprinutilizarea
instrucliunii
cAsE.
I 18 Capitolul4. Structurt
de dateneomogene

4.3.Structurineomogene
in C++

4.3. 1.T ipul s t r u c t

in practice,
aparsitualiiin caretoatetipurile
dodateinveFtepanain prezent
nunesuntd marefolos.Pentru a inlelege
aceasla, vompornid la unexemplu.
ggt- Pr""rpun"rnca dorimsa prelucrem dat6reforiloarg
la maimullielevi.
CX.' Astlel.pentrufiecareelevcunoagtem:
L Numele - ch!! l2ot i
2, Prenumelo - cha!t201,;
2. Notamalematice - florr;
3. Notainformatici - florr;
4. Versta- t!!,
Observatlfaptul
cd inlomatlllerteritoare
la unelevsunleterogene: qkurld6
caractere,numererealosaulnlregi,Cumamputearezolva problema ptinulilizarea
cunosiinlelorde caredispunem? Ar ll ncesari cateunulpentruflcar
5 vectori,
informalie.Aslfelam aveadoi vectoricu lmente de bazdFlruride caractre
pentrunume9l prenume, dolvectorlcuolsmente de baz5deflp froer pontrunole
9i unulcu lementede bazddetlp tnt pentruvArste. Fieceruielevt, ii corespund
componntele d alefleceruivector.
O agtlgldeabordare estegreoaie, nenalurala.
Ar ll cu multmaibinedact limbaiular dlspune de unmcanlsmprincarelbcerui
elevs5-icorespundd o singurdlnrggistrare.
in c++ exlsti un tip de date,numltrlruec, carn pemiteacesllucru.
FormageneraEste(ceesttrecutlntreparantezedrptestgconsidrat
lacultativ):
.trucl IEun rtruollrrrl
{
[<tiD> <nun w.lt.btrrL nul6 valLlbtta, ...1>l ,
I<!1r> <ntrm wrrt$lrAt. nus6 vrrr.ablla. ...t>l ,

I llj..t. a!. varlabtl.l ,


Pentru
exemplul
dat.structura
este:

t
cha! nur. 120l, Dr.nuD. I20l,
lloat rcr._$t., not!*r..!o,
1nl w.r3!a,
,,

9ls numeileGlv.
de Informace tru clasaa Xt-a

Eristddouaposibititiilidedeclarare
a vaflabiteto.
care,alcdtuiesc
structura.
1,A'a cumrozult.dinfoma generate, scriindtasfar'itnumele
variabiletor:
.Enrct ly
( c har a u e l 2 o l ,
D ! n l @ t2 o t;
rroaE notLn te,not._l[to;
1ur v.aata,
) inrl. tru2,

AIci,t|tr1 9i Inr2 suntdoudvariabile


detjpulelev.
2, Clasic,declarand
variabilele
asacumsuntem obisnuili:
elev lnr1. tlr!2,

Definiiia
structurijpoatefiquraatatir
oupa
.
incruoerire
oeiijer;;;i;,:'i""::lill,,:I,J:iiH"J,.:,nT;nT:
Sepune
J"fo'
urrllaloarea
lntrebare:liind vanabila
esremodartata de un tip Erruct, care
de accesu camo.,rit" .irt1Y.o
deseleclie nitaic-ui.il#6:i;;,.",J'ii:,aceasla sfoJosegle
oirecta, operalorul
Fi" t!;' or"riabitSd6tiput616v.Atunci:
S;.
reprszintd
girutnu.e! atvariabei tnr;
] l.nr,nu.b
lll,"*. ,-_ _
' t0l reprezintE
prlmul
. Llr,rlora_llr _ reprezlnti caractsr al girului
nuri:
campulao"._r"". tr,..
Inprogramulurmetor, secil9te9lsetipdr9te "l-u"li"oit"t
o variabilg
d6tipul6r6vj
*trclude <to.l!.!,h>
Irrtot .tv
t c hlr N' l n l z o t, ,r.n u tn l 2 o t,
r106r ror.\_!!t.,nottLtnlo,
lnt vllrt.,
,,
Drln ( )
{ .l.v tn4
:a:..]!t-. ", crn>>in!.D!'n,
couE<<rpr(|tru!. n, ctn>>lar.DreDre,
cou!<<rltorr !.te!!tca n!
cln>>tnr.nora_n!t.,
oour<<'!ibt. latot[artca r,
cr!>>rrr.rota-h!o,
c out < < nv r E l t! i ,
clnr>ln!,va!!t.,
c out < < ' t ur c tt{ r,,< < .rd l
i<<inE.D!D|ls
<<.nau
< < r nr ,D o t. Mt.i < .n d I
<<inr.aot._tnfo <<!dl
< < inr .v a !a ta ,
.
r2 0 Capitolul4. Structuride dateneomogene

intre doudvariabilede acelagitip struct so poatefolosiatribuirea.Astlel,


dacd inr1, ini2 sunl doud variabilede tip e1v-,prin atribuireai!!1=lar2,
variabilainrl ia aceea9ivaloareca variabila1nr2. In c++, o asttelde atribuirese
mainumestecopierebit cu bit.

4.3.2.inregistririimbricate
sau un alt lip
continein interiorul
Existdsitualiicand un lip shucturat
structurat.
Privititaoul
urmatorl
ettuc! .le
( c har nu .1 2 0 1 , D re n l ,e 1 2 0 1 t
stsruc!
{ int cl.sa,
f lo q t n o t [2 0 ] t
ldit u s ti .;
lnt vr!at.,
),

sdu se gdsegtoo alt5slruclurd,de


Siructurade bazdesteelev. in interiorul
aceastedald ldrd numo. daf pentru care exisle declarate"o variabili" numite
ci de un numoprinintermodlul
sltultl. in realilatenu estevorbade o varlablle,
Am vdzutcd, ln general,elementele
cdruiapoalefi accesaiun elemental structurii.
prin
se acceseazE numelevariabiloide
structurii rospective.
lipulstructurii

Fie lnr o inregistrarode lipul rv. in acste conditil,accesarea


; elmenlelor
situatein interiorul se faceca maijos:
substruclurli
. i.nr. sltuatl6.chB. - se accesea2d
campulclasaal
subslrucluriii
. Lnr.6ltuatl..not6lol primanolda
- se accsseazd
vectorululinclusfn subshuclurd.
umetorprezintd
Exemplul o altdposibililale
dedeclarare
a structurilor:
arnc! .ldl
( c ha! t r uo l 2 o l . D i o n | l m [1 0 ],

{ Irr claaa,
t loa t ro t6 1 2 0 1 t
Isltuatl.-l, sllu!tl6-2i
iDt va!6t!i
tl
pe |angeafte tipuri,doud slrucluri
Tipul structuratc1.w1, subordoneazd,
sltuati_l 9i struarle_2. Formaste echivalenld cu cea in care cele doue
siructurisuntdescriseunadupdalta.
in praclicd,se lolosegtelermenul"lmbdcate" penlru una sau mai multe
slructuriincluseunain alta,ca maisus.
Vanualde informatlce ntru clasaa Xl-a

4.3.3.inregistriricu structurivariabili
Pentruinceput,vom sludiaun tip apartede datdslructurai;,numilunio!.
Analizaliprogramulumalor
#lacluat6 <iostEod.b>
slon teat
{

c har bI 10l,
aioubt ci
),
lain ( )

r6ar varrinr It
c!'D>>war.c; cdt<<var.c<<eaaD,,
cI!>>waE.b, cdt<<var.b;
I

Variabilava! eslg do tipul urio!. Ea contineun intreg, un vector de


caraclere9i o variabildreald.Cole lrei cempurisubordonaleocup2,respectjv2
octeti,to octeli9i 8 octli.in realilate,pentrutoatevariabilele
s-auretinut10 oc,teli
- adice odelii necosai pentru a memoracempulcel mai lung- Aceastainseamnd
ce, la un moment dat, se poale menora doar un slngu cemp dintrc cele
subordonate.In exemplu,am utilizal la inceput varlabilaintreagd"apoi girul
oo caraclete.
latdformageneraEa uneiuniunl:
ulrLon [<nunIa ustu.atl>l
(
<tlp> <r rm varlabtla> t
) tltEta d varlablll t

Cu exceptiafaptuluice numaiun cemp poatefi ocupalja un momenldat,


loatecelelalleregulisrrntidenticecu celedo la slrucluri. Bine,veti ihtreba.dar la
ce lolosesc"uniunile"? Suntsitualiiin careinregislrarile
nu au lorm,t {rx,ci va'..jrtl
Ca se fiu clar.voida un exemnlu.
Sd prcsupunem d nte intoreseazao slualie rcfeitoarc ta studiite unei
pe6oano.O astfeldo inregistraroare o pane lixe datd de campurilecare retin
numelo,varsta9i tipuldestudii.O persoandpoatosa nu aibdstudii,caz in carenr.r
mai esle necesarsd avemalte intormalii,poatesd li fdcuicalevactasede Scoatd
generaE(ne-ar puleainteresaceteclase),sd fi torminalliceul(cazin care dorim
se qlim anul lermindriiii ofagul)sau sA aibd sludii superioare(9i alunci ne
intereseazd,numele facultelii9i numdrutde ani de studiu in cadrut lacuftatii
respoctive).
In concluzie.
ln luncliede tipuldestudri,inregislrarea
arataaltfel.
Limbajulpermiteca inregistririlesd aibe o dructuri valiablti. Cum se
lealizeazAaceasla?
't22 Capitolul4, Structuride dateneomogene

Uniunilepot fi inclusein struciuri.La randullor, structuribpot ri inclusein


uniuni.Penlruexemplulnosku,inregistraaea are o partefixd careesle alcatufta
din
numelepersoaneirespective 9i o variabildde tip char, numileBtudil, carerotine
tipulstudiilorpe care le are persoanarespective. Astfel,dacepersoanarespectivd
nu are siudii,reline . f,, dacdare catevaclasede generald,roline ,g', dacaare
liceul,
retine'1".,iardacdarestudiisuperioare, ! E,.

Apoi urmeazdparlea variabildcare esle o uhiune.Aceasla conline o


variabilanr_claEe - penlrucazulln care reline 'E', o slruclurepentru
cazulin caresruilii, retine'I., 9.a.m.d.-srudll
in resl,citireaSialilareainrogislrerii
se
face, de fiecaredal5, sub 6wlrch, in iunctiede dalelo citite sau continute.In
concluzie,inregistrarcaarc slructuravaiabile, dar ocupdun numdr llx de octQl.

f Uniuneapoatefiguraoriundein interiorulstructurii- nu esto obligaloriuca


j' Analizaliprogramul:
aceaslasAlie scrisala sfdrgitulstructurii.
*lnclud <loatrd.ll>
sttuct Dr.osa
{ c har Dl l $ t3 o l . Btu d ti t

t
1nt nr_c1.a6,

(tEl aD_rt
c b .r o rra [2 0 ] r

(cbar na6_! 1301,


tal nr_a!t,
)t.cu1late,

It

{ Dr6oaa! Dr.,
cout< <'!lte Doraolnr ., cln. t6t (D6!s,nllre, !0 ),
cout<<.8lualll !-lara s-cno!!l., l. - l loq1r s- suDelloals ) ",
ch> >Drs . 6lualtI ,
awlt c h (D r6 .rl u a l L l )
(
r1l@r c1.a. .,
cln>>Dr6. a!d.nr_c1as6,
brsrk,
c a. . ' 1 ' r c o u !< < o a !N t l 6 m1 !a !11 l l cq1ul " ,
c l n > > D 6 r.. l l d l ,tl c q .a!_1,
c d t< < n o l l a u l r,
c i n rrD o rs . a l l l .l i .c 6 u .orar,
brak,
crse ' Ei I c o u t< < i n l ,m l ta c u ttartt i ;cl !,st(),
cttr.sl (rerE..tal.lacullat,nl,s_!, 30 ) ,
cou!<<"nr rni tl6 arudliu n,
c l n > > D rs . rl d .l a c u l l l t.n._$1,
l
Manualde informaticepentru clasaa Xl-a 123

//afisz itrr9rirt!.!.
coqt<<Drs . su!< <nau ,
awtlch (!Er8. srudrtt)
{
c B s 6 ! f . : c o u !< < rn _ s rudl i i " , br..k;
!!l@r cta.e n<<96ra. sril.Dr-cx.a, br..k,
c a ' lt t c @ t< < ra t n l B t Ii c u l , h n
< < D e rs .a l d .1 1 c e u .u -t
< < " l n o r.s u t n < < D r..a!d.l i co.or.!, br..k;
1 flcult.tll "
<<D!4. stal. !tcult.!. !|lfu-t
<<' nr et al. rtudtu "
<< 9!.. ald.facult.t..nl-anir
l

propuse
Probleme
1.Cititiovariabile
cu urmdtoarea
structurd:
. nuns_etevt 30caracter;
. dlata_nastrll:
z1 r intreg;
Iun. t inlleg;
.ll t intreg;
. notr ltllttlrtlca - real;
. notr lnfolmatlca - real;
. nola 6ng16!a - teal;
. a.tllr - ral;
(mediasecalculeazi,
nusecitegl).
Tegtalldacddateleau fost introduse coreci.Cltlrease va verificaprlnafigarea
rezultatului.
2" Cititia inrglstreri Tnordlnaalfabotic5
de lipulcllde malsus9l afigali-le a
numelui,
3. Aceeagiprobbmeca ceaanterioard, se va laceln ordinea
numalcd aligarea
descroscatoare
a rnediilor.
4. Presupunend se referela un examende admltero
cd lnregistririle dd, se se
aligezein ordinodescresceloare In limilaunuinumdrde locurisaupane
a medlilor,
candseepuizeazd toateInregisvdrilo cu modiimaimarisauegalecu 5. In
elevllor
cazulin carepe ultimullocavemmaimullielevicu aceeagi modie,toliaceqtia
sunt
consideraliadmigi.
Programulva aliganumdrul delocurilnplus.
Capitolul5
Structuride date

5.1.Conceptul
de structurdde date
Orice algoritmprime9tedate de intrare,le prelucreazd9i obtinedate de
iegire.ln fiecarecaz, datelede intrare,dateleintermediare- cele createin timpul
pfelucrdrii- 9i datelede ie9iresuntstructurate(organizate)
intr-unanumittel care
coresp!ndeintrerii,necesitdtilorde prelucrare
saua celorde utilizareulterioard.
Penlrua veni in sp jinul programatorilor,
limbajelede programareevoluate
(de exemplu,c++ sau EaEcal) pun la dispoziliaacestoraposibilitatea organizarii
datelorin anumite"gabloane", numitetipuri de date. l\4aiprecis,prin tlp de date
se inlelege:
multimede valori;
reguldde codificare
a acestorai'
multimede operaliidefinitepe mullimeadatelor.
dedatepotfi:
Larandullor,tipurile
. elmple - descriudate care apa(in unor mullimicafe nu sunt
caproduscartezian
rezultate alaltormultimi.
Exemplu:lnt.
. atruoturate- descriudatecareaparlinunormullimirezultate
ca
produsoanezianalaltormullimi.

; l. Privitidectaratia
demaijos:

tl l' vCrtbnta
iidbcat' Varhhtai++
tyDe latlotr.t'lecodl
D, qt 1t r t 6g6! ,
eDd ,t

Printipulde maisusse descrieslfucturauneivariabile capabiEse retind


numereralionale. carepot fi memorate
Fie .trl mullimeavalorilor prinutilizarea
de tip iattonal poalememora
tipuluiinlreg.Fie.lr=l'-191. Atunci,o variabile
valoricareapa4inmultimii alx r. Evidenl,
eslesarcina programalorului
cavaloarea
retinutddevariabilacofespunzatoare luiq safiedifefita
de 0.
r ln uneletucf5riveli fnlalnideiniliialelipuluide datecareexcludregulade codificare.
Aici
se porneslede la ideeaca nu intotdeauna estenecesar,pentrua lucracu tipul respectiv,
sa cunoa;temregulad codilicare.
Manualde informatlci oentru c'asaa Xl-a 125

2. Maijos, esteprezentalun alt exemplu:

i VarianlaPacal VarianiaC++
ltDe veclor-aEry l1..1OOl of ral, al oubl a[1OO],

FieB mullimea carepotfi relinute


valorilor de tipulreal.Alunci,variabila
s
poaterelinela unmomentdatunelement almultimii:
8x 8x.,-xI
--;7
Practicaimpuneulilizareaunorstrucluriale datelorde o marevarietale,care
n! se suprapun intotdeaunapestetipurilecarepol fi descriseprinlimbaj.

Oefinilia5.1. Prinstructurede datevominlelegeun ansdmblude date


caracterizatprin relaliileexistenteintre ele 9i prin operaliilecare pot li
efectuatecu datelerespeclive.

Vom numi nod, o variabilSde un tip oarecare.De obicei,acst tip esle


skucturat.Dupa caz, termenulnod poatela lnlocuitcu arlbol, inrcgistnresau
enthate.
ln cele mai multecazuri,"ansamblul de date"careformeazdstructuraeste
alcdtuitdintr"omultimecu un numdrvafiabilde noduri.
Relaliileeristenteintre noduri9i operaliibcare pot fi efecluatecu ele vor fi
prinexemple.
Prezentate
a
t Ds rotlnutl

r' Tipulvariabilei
careabetuie$tenodulnu caracterizeazd
structurade date.

'/ Structurade daleesteun conceplabstract,Maiprecis,conceplulinsinenu


precizeazdlo6ul unde structurarespectiveva fi mernotd (clasa de
memorare) 9i nicidetaliile (celecaretin de limbajulfolosit).
de implementare
r' ln facultalibde profil(calculatoare,
informatce)se studiazadisciplinanumit;
"Structurlde date". Ea este una dintredisciplinelecarese includin cadrul
mai larg al informaticii,tot a9a cum, de exemplu,algebrase studiazdca
disciolinaaDartea malematicii.
r' ln practioas-au impusanumileslructuri.AcestlucruestedaloratJapluluice
existd multi algodtmicare le utilizeaze.Ele vor fi tratate,pe scurt, in
paragrafeleurmetoare.
126 Capitolul5. Structurlde date

5.2.Structura
de tip listi liniari

5.2.1
. Prezentarea
structurii
Deflnllla5.2, O listd liniad esteo colecliede n>0 noduri,x1, xz, ..., x.
allat intr.o relalie de ordine. Astlel,x1 este primulnod al listoi,x,
esleal doileanodal listei,...,x" esteultimulnod.

permise
Operatiile suntl
. accesulla oricarenodal listeiin scoDul
citifiisaumodificerii
informatiei
conlinute
deacesta:
. addugarea unuinod,inditerentdepozitiapecareo ocupaln liste;
. dpoziliapecareo ocupeln liste.
unuinod,indiferent
9tergerea
. pozitiei
schimbarea unuinodin cadrullistei.

t Faptulca sructuraeste liniaralnseamnecd frecarenod, cu exceplia


Jir ultimului, (careli urmeazd
areun singurnodsuccesor ln lista)ii, cuexceplia
primuluinod,are un singurpredecesor(carese aflSimediatlnaintealui
ln listd).
Dacgvorbimla modulgeneralde o structurede date,/,u ne inteteseazd,
pentrumoment,nodul in caro aceastava li implementaE (adic5undeeste
memoratd9i cumse efectueazd permise
operatiile asupraei). Pur9i simplu,ne
imagindm
listaca maijos,undefiecare
nodI memoreazd informatiahfr:

Exgmplo
do apllcalllcaroutilizazd
listeliniare:
t, Evidenla sftualiel
scolarea elevllotunelclase,Flen numdrul
elevilor.Aicl,un
nodretinenumeleunuielevqi noteleladivergel Vomaveadocl,n noduri,
materii.
Nodurilevor fi memoratetn ordineaalfabetice a numelorelevilor,ln clasa
respectivdpotfi transferali
elevidinalteclase,cazTncar6se adaugdnodurl.Din
clasd,uniielevipotplecaln alteclase,cazIn caresegtergnoduri.
b) Se doreltese se relindun 9irde numorenaturale,
ln ordinealn careau fost
cilitede latastature.
Aici,unnodrelineunnumernatural,
Nutoateaplicatiile
utilizeaze
listeliniare.Exemple
de structuri
carenu sunt
listeliniare:
. sedau! oragegiSoselele careunescuneledintreacesteorase:
. gonealogic
arborele al uneipersoane.

I
t
Manualde informaticd clasaa Xl-a

5. 2. 2.Lis t ea l o c a t es e c v e lni a l
Din acest momentne punempfoblemasd vedemmodulin 6are se poate
implementao listeliniare.

O primd forme de alocareeste cea secventiald.ln cazulacesteialocari,


noduite tistoiocupdpozilii succesiveln nemoie Acesttip de alocarese intelne9te
des. de cate ori utiliz5mvectorii.Altfelspus, primulnod al listeiva fi relinutde
primulelement alvectorului,aldoileanodal listeidealdoileaolgment alveclorului'
I.a.m.d.
urmarimmodulln careputemefectuaoperaliilepefmisecu o
in continuare,
listeliniarS.

!) Aooosulla orlcale nod al llstel se poatefacecu mareuiurinld.Dacddorimse


adresdmnodulk, atunciscriemvtkl (presupunand cd vectorulcarc relinenodul
se nume9tev).

b) $tergeleaunul nod, Indlferentde pozlllapo careo ocup5in listi

Fielistaalocatesecvenliall

Elimindm 3 (gtergem
nod- continut
aldoilea conlinutul
nodului2):

9i pentrua nu pierdeinformatii,
Pentrua pestrastructura ca
esteobligatoriu
informatiile
retinute
de nodurilecareurmeaze noduluigtersse fie deplasate
cdtre
stAnga:

t Practic,de aceastadata. nodul2 (elemenlulde indice2 al veclorului)va


.6 relrneinformatiacelui de-altreiloanod: nodul3, va reline informaliacelul
de"alpatruleanodiq.a.m.d.ln multeaplicalii,aceastemodificare nu prezinte
importanF.

c) Adlugarea unui nod, indiferentdo pozlllape ca.s o ocupi ln lble

Fielistaalocatdsecvenlial:
r28 Capitolul5. Structuride date

Nodul 2 va conline5 (practic,adaugdmun nod). incepandcu nodul 2,


deplasamtoateinforma!iile
asociatenodurilor
cdtredreapta:

Acumse completeaze
valoarearelinutede nodul2:

tl Observalii

9i de aceastddate,nodurilevor relineinformaliidiferite.De exemplu,nodu


3 va relinece anteriorrelineanodul2, 9.a.m.d.

ln concluzie,la alocareasecvenliald,
accesulla nod esle foarlerapid,dar
adAugareasau qtergereaunui nod se fac cu efort de calcul, pentrucd
necesitddeplasdrialeconlinuturilornodurilor.

5.2.3.Listealocate
inlentuit
Existedouefeluride alocareInldnluitdi
alocaresimplu inlAnluit{ 9i alocare
dublu inldnfuita.ln acestparagrafprezentdm
pincipiilealociriiinlenluite,
urmandca
in paragraful
urmdtorsd aretemmodulincareimplementdm listelealocateinldntuit.

1, O listaliniardsimoluinlintuitdesteo structurade formai

I ET*;].- li''.T;d',L--* ---t]l_tq

V Semn'ficatia notalirlor folositeesteurndtoarea


-7
. rdrr, ad!r, aatr3, ...,!d!" reprezinta adreselecelorn inregistdri;
. 1n1, 1n,, ..., ,.n" reprezintdinformaliile
conlinutede noduri,de attd naturd
decatcelede adresa.
r rlL - are semnificatia
"nicio adrese"" elementul
esteultimulin lisu.

Dupd cum observam,fiecare nod, cu exceptiaultirnului,retine adfesa


noduluiurmdtor.

2. Alocareadublu inlinluit6. Alocareasimplu:alanlJitapermrteparcurgerea listel


intr-unsingursens(de la stengala dreapta)In cazulIn carese doresreca listasa
poat5fi parcursein ambelesensuri,se utiljzeazd alocafeadublutnlantuite.Aici,
Uanualde informaticepentru clasaa Xl-a 129

iecarenodfelineadreselepredecesorului
9i succesorului
sdu,a9acum se vedein
igura urmAtoarei

5.2.4.lmplementarea inlintuiteprinutilizarea
alocarii
vectorilor
ASacum am lnvdtat,listaliniardestealc5tuitddin maimultenoduriinhecare
exlstdo relaliede ordine.ln cazul alocdriiinEntuite,informatiamemoratdde
''ecarenod va cuprindeSi un cempde adresd-in cazulalocdritsimpluInlenluita-
sau doue campuride adresd-in cazulaloce i dubluinl5ntuitd.In acesl paragral
vomstudiaimplementarea alocbriisimpluinldnluitA.

' late rum se descrieinfofmatiadintr-unnod, in cazul listeloralocateslmplu


inl6nluit,atuncicandacestafelineun nufnerintreg.

VarlantaPa8oal Va anta C++


tj7p6 Adrgdrltrr6g6!t !!Ddf lnl adra6t

info: j.nt9er,
{alr_un r Adrsa, ldbos! adb_urs,
tt

. Penlrumemorarealisteilolosimun vectorcareare componontele


de lip Nodt,
descrjsmaijos:

Vartdnta
C++ il
Li. E la- . r r ay 11 ..1 0 0 0 1 of Noal, n odl IJ[10001t

Din descriererezultdcd lista poateaveacel mult 1000 de noduri.Acsta


este spali uI di sponibi l.
Priviliexemplulde mailos:
I
lf
130 Capitolul5. Structuride date

Dacefacemabstractie
de implementare,
listaestel

trE\Er\E\,Err
,i Ce observam?

st Fiecarcnod trebuiesd relind$i adrcsanoduluiormdfor.Adresaoste,de lapi,


indicelecomponenteidin vectorcare relineinformaliaasociat5noduluiurmdtor.
Prinutmare,necesarulde memorieestemaimare.
b) Noduilenu ocupdadrese succesivein memole.De exemplu,degiprimulnod
al listeiesteretinutde primacomponente (de indice1), al doileanodal
a vectorului
listeiesteretinutde componenta de indice3 a vectorului.
Dinacestmotiv,vomfaco
distinclieintre numdr-ulunuinod (acestaesteln cadrullistei)Si indicelevectorului
undeestemomorat.In exempluldo mai sus,nodul2 reline5, iar gl ostomomorat
de componenta de indice3 a vectorului.
practicaa implementdrii
Pentrurealizarea aparo seriede probleme.
Acestea
vorfi rezolvate
in celece urmeazi.

E Problema1. Geslluheamemofiel.ConceDtul de listdnu Drecizeaze


numdrLtl
do nodurlpe care ea le poateavea.ln practica.num5rulde noduneste limitat.
Aceastainseamndcd, la un momentdat, numirulde noduripoatefi depeg[ Prin
urmafe, programulcafe lucreazdcu o asdel de liste trebuie se gestioneze
spatiuldisponibil.

in acestecondilii,vectorulcare relinenodurile,va fi dublatde un altul,ale


cdrui componenterelin l sau 0, dupd cum componentade acelagiindice a
veclorului! reline sau nu un nod. Eventuat,se poate utilizao variabildcare
memoreaze numeruldecomponenl alvectorului
carerelinenodurile.

ocupat 0 0

E Ploblema2. Accesulla un nod al llstel. Spre doosebire do alocarea


secvenliald,
undeaccesulesteimediat,la alocarealnlantuiteaccesulse face
cu primulnodal listei.Dacdnuacesta
incepend estenodulcdutat,
setrecela nodll
(oricenodconlineadresanodului
urmetor urmator,
S.a.m.d.).
E Probloma3. Adiugareaunui nod, Sa prcsupuhem cd ln listade maijos
dorimsdadeugam,
dupSaltreileanod,unnodcu informalia
9.
ganual de informatic{ oentru clasaa Xl-a l3l

ocupat 1 0 0
r 23a56

Prin testareavectoruluiocupat,se observbc5 primul element liber al


vectoruluiLesleceldoindice2.
nodulca ocupat(ocu9a! 13] va retine1)
a) [,4arcdm
b) Memoram
informaliar
9.

ocupat 0

c) Noulnod va retineca adresaurmdtoare, adresaurmetoare relinutdde al


nod(oentru
treilea nouluinodsefacedupl acesta):
ce introducerea

ocupar 1 0
r2

adrssanodululnou Introdus,
d) Al treileanodva retineca adresaurmdtoare,
cdacestas-aintrodus
Dentru dupdel:

ocupat 1 'I 1 0

listava fll
0updaceastdmodificare,

.8..m.".q,,trq,E
t3 2 Capitolul5. Structuride date

E Problema4. glergereaunui nod. Se presupunem


cd ln listade maijos dorim
sa gtergemaldoiba nod.

ocupal--+ olllrlllo

Al doileanod se gdsegtein elementulde indice3. Prinurmaro,ocupar [3]


va reline0. In continuare,
primulnodva relineca adresdurmdtoareadresanodului
3 (pentrucA acestaurmeazdnodului2). Aceastdadresdse ia din campulde
adreseurmdtoarea noduluicareurmeazdsa fie sters.

ocupat 0l0lrlllo

Observatifaptul cd. degi nu am gters informaliaasociatenodutui,acesta


j"t dovineinaccesibilprinparcurgerea
listeiincependcu primulnod.

Listava devnii

Fr'1....[8.=ror
t Dezavantalelalocdriitnldntuitesunl
1. Accesulla un nodal listeise faceprlnparcurgerea
nodurilor
careil
preced.
Aceasta necesitSunefortdecalcul.
2. Informaliile prezente
deadresd, ln cadrulfiecdrui
nodocupememorie.
t Avanlalelealocdriiinldnluite
suntdatede faptulc6 operatiile
de adeugare
sauellminar
a unuinodsetacrapid.

Exemplelesuntdatepentrulistaliniaresimplulnlanluite,
dar bjneIntelese.
ne permitse deducem singurimodulde efectuare
a operatiilor
respective;enhu
listedublulnHnluite.
taanualde informaticdpentru clasaa Xl-a t33

5.3.Structurade tip stivi

Definllia 5,3. Stiva este o liste pentrucare singureleoperaliipermise


sunt:
. adeugarea unuielementinstivd;
. ultimuluielemontinlrodus
sau modificarea
consullarea,
eliminarea,
in stiv6.

Stivafunctioneaz;pe principiulLrao (r,ast rE rlrsr o,o.El - "ullimul


intratprinulie$it".
Pentrua inlelegemodulde lucrucu stiva,ne imaginim un numaru do
farfu i identice,a9ezateuna peste alta (o "stivd"de farfurii) Addugareasau
scoaterea uneifarfuriise face,cu uqurinta,numaiin varfulstivei Dupdce am scos
toatefarfuriiledin stivd,spunemcd aceastaestevidd.Oracetar pdreade simplu
principiulstivei,elare consecinleuria9ein programare.

) Stive/ese pot aloca secvential(ca vectorii).Fie srttl un vector.sllll,


sr t2 t , ...,sr Inl potretinenumailiteresau numaicifre.O variabil5k indica
in permanenld adicdultimulelemontlntrodus.
varfulstivei,

Exemolific*m, moduldelucrucu gtiva:


ln continuare,

tr literaa, vadulsiivelva fi la nivelul1 (k-1).


ln stivainitialvid6se introduce

H in stivdlitefa B. decik va luavaloarea3.


Introducem

E Scoatemdinstivepe B (a nu poatefi scosdeocamdate);


k.1.

I Scoatemdin stivdpea stivardmanevidek=0.

t, Observatii

Tnmod practic,la scoatereauneivariabiledin stivd,valoareavariabileice


indicevarful stivei scade cu 1, iar atunci cand scriem ceva ln stiv6, o
valoarereziduale
eventuald se pierde.
1 34 Capitolul5. Structuride date

Pe un anumitnivelse reline,de reguld,o singurdinformalie(literdsaucifre),


insaesteposibilse avemmaimulteinformalii.

in cazulstivei,alocareasecvenliala nu prezintdmaridezavantaje,ca In cazul


mai generalal listelor,pentrucd nu se fac operaliide inseraresau gtergere
in inle orulstivei,ci numaiinvarfulei.
Singuruldezavantai,ln comparaliecu alocareadinamiceinlSntuiteestedat
de faptulcd numaruldenoduricarepot fi memoratela un momentdat osie
mai mic- depindede gradulde ocuparealsegmontuluidedale,

veli intalnitermenulpusB pentruoperaliade


ln literaturade specialitate
adeugarein stivda uneilnregistrSrigipop, penlruextrager,

Esteposibilsd vd tntfebali:de ce nu putemaccesaun elemenlalslivei,chiar


dacd nu este ultimulintrodus?Nimeninu ne opreqteldoarc5, in acestcaz,
nu respectdm principiul
stivei.

Exemple
-.

1. FuncliaManna-Pnuell.
Se citeqtex2. So ceroprogramul
pentrucalculul
funcliei:
(-.
,
_. = x -1, x>12
r{x
'' ) {
+2 ) ) , x< 1 2
l F(F(x
Vomlncepoprina studiamoduldecalculalfunctieipentru
x!15 Fix!g:

f(1 5) r t { t

f (8 ) - f ( f ( 10) ).f (f (f (1 2 ) ) ).f (f (1 1 ) ). f (!(f (13) ) ).f (f 112) ).f (11)


rf(f( 13) ) . f ( 12)r1 1 .

va folosio stivd gT 9i o variabilenumitdk, ce indicaln


Algoritmul
permanenle
veIfulstivei.
Algoritmul peurmdtoarele
se bazeazd considerente:
. la o noudautoapelarea functieif, se urcdin stive(k se incrementeazi
cu1) li se punenouavaloare;
. in situalialn care,pentruvaloarea
aflatape nivelulk, se poatecalcula
funclia,secoboard ln stivd,punandu-se
peacestnivelnouavaloare;
. algoritmulse
incheiecendseajunge
In stiv5la nivelulo.
L.anualde informaticdpentru clasaa Xl-a 135

Pentru dat,prezengmschematic
exemplul funclionarea
sa:

l-l T';l Tl | '.


HHH E
eslo przenlatinconlinuare:
Programul

'I Pbgcat i
tlVartantb
"
va ! at r . ! ! ay ll..l o 0 l of lltncludle <todtroas.b>
ttr! s tt100l ,t.k,
n, k r I nt 6t . r ,

rl !s { ' na ' ) , r e a d l n (r),


kr: 1, d! lll r : n,
6 tf1 l .a,
ll s c l|t l< 12 lh n b e rl n w h t l e (kto)
l .! (stIkI < 12)
s r [ k l ! t s t I k -1 1 + 2 ( k+ + ,
6r tkl r.r Ik-11+ 2,
)
k r . k - 1,
it k > 0 ( k--,
t hn ,! [k ] r..! Ih + l I-1 l ! (k> 0) 3! Ik).B t tk+ 11-1,
)
rl c r t ( ' t ! ' , 31I 11-1 ) c o u r < < i n.n< < 6r t1l -1,
l

t, Se poatedemonstra
valoarea
ugorce pentruvalorimai micidecAt12, functiaia
11.Observatia multprogramul,
simplificd darexemplul
a fostdatin
a[ scop.
pe produsulcartezian
2. Functialui Ackermann.Se dd funcliade maijos,definit?i
N)4{.Secitoscn9in. Se se calculeze
Ack(n, n).

m= 0
=)
ln+l,
A ck(m,n n=0
i A ck(m-1 ,1 ),
IAck(m-1,Ack(m,nl)),altlel
Pentru
a elabora
algoritmul,
studiem
unexemplu
numeric:
e ck(2 . 1) a c k (2 ,0 ) ) &c k (1 ,1 ) )= ack(1, ack(0. ack(1,0) ) )
. a ct ( l, ac- k. c( k0,( L
E c k (o .1 ) -a c k (1 ,
)).a c k (1 ,a c k (0 .2 ) ):.ct(1.3)-E ck(0,ack(1.2) - )
ac t (r,1 ) ) )= Ec t(0 ..c k (0 .a c k (0 . ac!r(1,0) ) ) ) = -
-a
a ach
ct((0,
0, !6c
kk{(0, 0,. c t ( 0r
a c t(0 ,1 ) } ) ) !a c k (0 ra c l . {0,ach(0,2) ) ):
.ck{0, . ac |c ( 0, 3) }= .c t(o , a ) 1 5 .

Penhucalcululacesteifunctii,folosimo stivadubE,s!. Iniliat,valorilen 9i n


se retinla niverul1. Pe nivelulkalstiveiserelinvalorilecurenten 9ia ln funcliede
valorileacestorase procedeazdastfel:
. penlruD 9i lr diferitede O,ostenecesarun noucalculde functie,cazln care
se urc5in stivdSipe noulnivelse punargumentele II 9i n-1;
. pntrucazulltEo, se remenepe acelaginivelin stivd,punandin loculluin
valoareaD-1,iarin loculluin,valoarea1;
I h situatialn care n'0, functiase poatecalcula;se coboardin stiv5 9i se
lnlocuie9tevaloarealui ! cu D-1, valoatealui ! cu valoareacalculatd
anronor,
ln continuare, prezenumgraficmodulde functionare
a algoritmului
pentru
exemplul
acx(2, L ) I

't0 01
20 11 11 11
21 21 21 21 21

10
11 '1 1
02 12 12
21 13 12 13 13

0 't
11 02
12 12
t3 13 13 04 ack(2,1)=5.
137
pentruclasaa Xl-a
ranualde informatice

lat . st t1o000l t2l t


i r4 )e st iw. = ar s av 1 1 ..1 0 0 0 0 .1 " 2 1
of iutegr;

cout<<nFr; cj'n>>b,
a. n r k!l,nl6gt,
cout<<ra:r i ctnt>lrt

s t t k l t 0 l =i ,
s l lhl I 1 l =E t
ebil6 (k>0)
lr (srtkl tol & & stl kl lll )

5 t ttl Iol -stIk-11t0l ,


6t l kl tl l = sttk_11 t1l _r,
)
it ( 3t I k . ll < t 0) a a l
( 6t t k , 21< > 0) tt ( tt tkl l 1l )
{ st tkl tol ' sttkl t0l -1;
st [k] t1l ' 1,
)
6l t k , ll r - s t(t_ 1 ,1 1 t
3t I t , 2l: ' 6t t lr -1 ,2 1 -1 { k--t
tr {k> o)
( 6t l kl tol ' .t tkl [0! -1r
t! s t t k ' 21= o I tkl t1l -6!tk+ 11IU 11'
)
)
6t t h. ll ! ' s t [k ,1 ] -1 , c o u t<< " .c ( i < < s<< ' . ' < <
D < < rl qu< < 3r[1! t1I+ r,
)

kt.k-tt
r! k>0

bgtD
tlIk, t l t r r t lk , ll- 1,
sttk,2l r e6t t k + 1, 21+ 1

rrt t oln ('ac ( ',


"b. + 1) "n, ' ) ' ' ,
!t [1 ,2)

pentruvalorimiciale lui!r gi
Functialui Ackeinann ia valorioxtremde mari
I r. De exemplu,nu veli reu9isdcalculaliAck({, {).
lncercali.
r3 8 Capitolul
5. Structuride
date

5.4.Structura
de tip coadi
(-s_-.. Deflnllia5.4.O coadees{eo listdpentrucaretoateinse|5rilesuntfacute
k'F) la unul din capete,toate Stergerile
(consultdrile.
modific5rite)
ta celdlal
- capet.
Coada funclioneazape principiulFrFo (FlrE! In rirsr our) -
" pimul intratpimul ieFit".
Este cu totul nerecomandabild alocareasecventialda cozii, deoareceln
aceastAsitualie, are loc un fenomen de migratie a datelor cetre ultimele
componente (celede indicemare).
ale vectorului

.-? Sa presupunemca simulamo coadacu ajutorulunui vectorcu zece


ay. componente. care retin numereintregi.Inhoducemin coadd,pe rand.
-'-' numerele1. ,. 3. {.

Dacescoatemdin coaddpe 19i introducem


in coadepe 5, coadava ardta
in felulurmetor:

Scoatemdincoaddpe 2 9i inkoducempe s:

I
I Se ob6erudacestfenomende "migralie".

propuse
Probleme
1. Caredintrestructurile
demaijosnuesteliniard?

trEr'E tr tr{l
E*E
13
E* E
E l:I
a) d) d)

2. Unvectorrelinepepozitiilede la 1 lak noduleuneilisteliniare.


Flecare
lemenl
(nod)felineunnum6fnatural.
alvectorului Seceresdse scrieun subprogram cale
insereaza
in list6,pepoziiia
p, unnumdrnaturat cititdelatastaturd.
inual de informatrce
pentruclasaa Xl-a t39

.emplu:k=3;v=(L,2,31,p=2. Numarul
cititeste5. Duparutarekebuiese
em:
!a ; v= { 1 , 5 ,2 , 3 ) .

Un vector.e(ine pe pozitiilede ta 1 la k noduile unei tiste liniare.Fiecare


rment al vectorului(nod) reline un numer natural.Se cere sd se scrie un
bprogramcarc gtergedinlistdnodulaftatpe pozitiaI), 1<r)<r.

lemplu : k E3;v= ( 1,2,3) ;D=2.


Duperulare
trebuie
se av e mik = 2 iv -(1 , 3 ).
Pentruproblemaanterioard,
caredinheafirmaliile
de maijos estefalse?
Pentrua gtergeun nod aflat pe poziliaD sunt necesarek-p deplasdrispre
ingaalecontinuturilor
celorlalte
noduri.
Subprogramulva aveaparametrulk lransmisprinvaloare.
Subprogramulva aveaparamelrulkkansmisprinrefeinta.
Oacdk=p, nu se efectueaza
deplasdricatrestAnga.
Lllcrar In colectiv. lmplementarealistotor alocate6inplu lnldnlult. Scrieli
set_desubprograme carecreeazagigestioneazd o list5tiniaresimplulnlentuite,
rcatasecvenlial(prinutilizarea
unuivectoo.
Lucrareln colectiv. lmplemenlarealistelo. alocatesimplu inllnlult. Scrieli
setd-e.subprograme
carecreeazd9i gestioneazd o listdliniardsimpli inldnluitd,
,catalnldntuit.
Sortalin numerenaturaleutilizandalgoritmut de sortareprininse4ie.programul
utilizao listdliniardalocatdint6nluit.Caresunt avantajeleutitizdriilistej,tocate
lnluit ln cazulalgofitmului
de sortareprininsedie?
Crealio listdliniaracu n noduria/ooat' secvential.Nodul1 va continenumdrul
nodul2 numdrul2, 9.a.m.d.Se genereazd alatorun numdrnaturalk, mai mare
I 9i mai mic decetn. Noduribde la k la n vor fi, ln aceast5ordine,Drimete?n
a, urmatede nodurilede la 1 la k-1, ln aceastdordine.Afigatilistadup! D asflel
inverseri.Observalietaceasta esle o modalitatede a genera aleator o
nnutarea primelorn numernaturale,

in cazulin care, pentfuo listd liniardalocateinHntuit,campulde adfeseal


mlil!r nod relrneadresaprimuluinoct,se obtineo lbte circulaJe:

Crealio listdcirculardin carefiecarenod relineun numarnatural.De


nenea,scriejisubprograme deinseraregigtergere
a unuinodal listeicreate.
140 Capltolul 5. Structuride date

10, In jurul arbitruluisunt agezati!r jucdtorinumerotatiin sens orar. Arbitrul,


incepandde la un jucetor K numardpene b M. Persoanala care s-a oprit
numdr5toarea este eliminatedin cerc. Arbitrulrcpe procedeulincepandcu
persoanaurmAtoarecelei eliminate.Procedeulse repetdpend cand rdmaneun
jucatorL. Se se scrieun programcare:
. cite9te M, N, K gi-ldetermind pe U
. cttegte!d, N, t 9i-ldetermind peK.
11. Urmdrilisecventaurmetoarc,care se refefela o stive, unde puEh a este
operaliaprin care se punein stivavabareaa, iar poD este operatiaprin carc se
extragedin stiv5.
Euah 1, Pu6h 2, PoDr Fush 3t PuEh 4r polrr por)

, Caredin afirmaliilede maijos ,u esteadeveratd


dupdexecutareasecventei
de maisus?
a) Dinstivdau fostexkase,ln aceasteordine,valofjle:z, 4, 3;
b) stivaestevidd; c) stivaconlinevaloarea1; at) stivaare un singurnivel.
12.Scrietisubprogramele careimplementeazd
o stivd.
'13.Se cilesc11valorinumerenaturale.Se cereca, orin
utilizarea vedeliproblema
uneistive, anterioara,
valorilecitite
sdseafiseze ln ordineinverse
14, ln figuraalituratdavem{ vagoane,numerotate cu
1,2,3,{.Se pre6upune cd pe liniaC lncaptoalecele {
vagoane 9i ca unvagonaflatpe liniac poaleli mutatnumai
pe liniaE. Secereca,prinmutdrisuccesive devagoane, sd
avempe liniaB vagoanele intr-oanumitdordine,in oare
primulvagoneste cel aflatla iesireade pe liniaB. Cars
Figura
5.1.
dintregirurile
devagoanedemaijosnupoatefioblinut?
a)12 3{; b) {32 t; c) 3421;d) 3{ 12,
15. Se se scrieun programcare,pentruproblemade mai sus,citegteca datde
intrareSirulvagoaneloraflatepe liniaA 9l girulvagoanelor
care kebuieobtinutpe
linia E. Se cere sd se afigezegirul mutdrilorde tip push rr_vago, 9i pop
ff_ylgoa (alj recunoscut,desigur,o shucturdde tip stivd) prin cafe se poate
oblineqirulvagoanelofde pe linaB. Dacdacest9irnu se poateobtine,tn momentul
ln care se .ajungetn situalia unei muteri imposibile.sa se afrgezemesajul
'Inrrostbl.l'.
16, Scrieli un set de subprogramecare gestioneazao coadd. Coada va fi
amplementat5 prinutilizarea
alocdriiinldntuite.

Risounsuri
1. d) 4, b) 11. b) 14, d)
Capitolul6

in recursivitate
Introducere

generald
6.1. Prezentare

Becurslvltalea este una din notiunib lundamentaleale informaticii.


s-a fdcutdupd anii 80. Multedin limbajelodo
Jtiizareafrecvenlda recursivildlii
a.ogramare evoluate9i mull utilizate- Fortran, cobol - nu permaleau scrierea
.7ooramelor tecurstve,

Detinilia6.1,Reculslvllatea
esleun mecanlsmgeneralde elaborare
a
programelor.Ea cong6 in posibililateaca un suwrogrcm se se
autoapeleze.
Recurclvllatea practice
a aperddinneceslteti daledetranscierea directda
matemalice
'ormulelor Intlmp,aceslmecanism
recursive. a fostextins,liindutilizat
'n elaboraroa
multoralgoritmi.

6.2. Modulin carese realizeazd


autoapelul
ln acestparagraf
vominvdtamodulincaresubprogramoleseauloapoleazd.
Mecanlsmulrecursivitdlil
9i modul
cum so gandelteun algoritmrecurslvvor fi
prezentate
in paragratele
urmStoar6,

6.2.1.Realizarea in limbajulPascal
autoapelului
Dupdcum 9tim,Tn limbajulPascalsubprogramelo sunt de doudfelurir
acostase poateautoapela,
procedurl9ifun4ll. Oricaroar li tipulsubprogramului,
insemodulincareserealizeazaulotransferul dilgrd.
t in cazul prcceduillor,autoapelul se rcalizoazA Win apelulprocodurii
respectivo, ei.Apelulsefacelatelcaln cazulin careprocedura
dininloriorul
esleapelal5dinexterior.

prezentata
Procedura in continuare
esterecursive pe randuri
9i afi9eazd,
.' separale, 7, 6, .,.,1:
numerele
142 Capitolul6. Introducere
in recursivitate

Dlocetlure exdDlu (n!iarge.) ;

E t t ln (n ),
ex lq )l u (n -1 ),

t In cazulfuncllllor, autoapelulse realizeazaprintr-ooperaliede atribuiro,


operalieprin care numelefunclieitrebuiosd figureze in parteadreaptda
operatorului
do atribuire.

suma 1+2+. . . +7:


Funcliaurmeloarecalculeazd
lsctl@ sl,u (nrlnts!) tltrt.ofE,

!aFn+surnl(n-1) r

r llaln( r { r !! (7 ) ),

6.2.2.Realizarea
autoapelului
in limbajulC++
polli delipulvotdsaude unahtlp.in acst
Dupacumltim,tn C++funcliile
din urmdcaz,funcllllerelurnaz5
o anumltdvaloar. Orlcarear fj tipulfuncllei,
aceastasepoaleautoapela, lns5modulln care6erealizeazd
auloiransletul,dlletd.
t in cazulluncliilorde lip votd, autoapelul se ralizeaAprinaplulfuncllel
respeclive,
dln interlorul el, Apelulse lacla fel ca Tncazulln carefunctia
steapolatddlnexterlor.
Funcliado mai jos ost6 recursive.
Ea aligeazi,ps randurlseparate,
numerele?, 5,...,1i
*trclud. <lostr.lrn,h>
vord dtq,lu(int n)
( r ! ( n r .0)
{ cou!<<n<<sndlr
air)lu (n-1),
l

'
)
pentruclasa
uanualdeinformaticA axl-a 143

t in cazulfuncliilorcare nu sunl de tipulvolat, auloapelulse realizeazdprin


instrucliunea!e!urn. Ea este de lorma relum .erq)reEia, dar in
expresiafespectivd lrebuiesa inlregifunctiacarese autoapeleaza.
j3.-, Functia suma1+2+.. . +?:
calculeaze
urmeloare
-,,'.
*iDc1ud6 <ioEtrea,h>
int sl,fu {int n)
{ if (n1 .0) r 6t um n+ El, m ( s - l) t
I

( co ut<<6 llc(? ) ;
)

I recursivitdtii
6.3.Mecanismu

f Probbme.Sd se calculeze
recursiv
n!.

r) Pentrua scrieo lunclierecursivd acela9icalcul,vom pornide


careefectueaze
a o de'inilie a lurnt. Acoasta
recu/sivd esle:

fl ^ -^
n t- fact(n) ".-: c , ?n c N
' ' - l"
ln
.
lacl(n-1), alllel

Deexemplu,pentrua calcula3 t, proceddm


astlell

3 l -f , ac t ( 3) F 3X f a c L (2 ) = 3 x 2 x f,a c t (1 ) E3 x2xl xfrdt (0) s3x2x1x1:5,

Flnclia rocursivdfact no facoaltcevadecAtse lranscriodgfinitiarecursivd


orezentatA
anlerior:

varlantaP;scal vartanta
ci+ i .
S1ncludo <i.o6lBln.ht

tunclton lact (tr.Lntger) : ( ln )


( If r.lun 1,
elBe r . ! u n r *t a c t ( n - r . ) ,
l
1f n.0 th n factt . l
e 16 e lEcl.: nr f ldt ( n- 1)

c dt < < f a c t ( D ) t
l
cit ln(!sc!{.) )
144 Capitqlul6. Introducere
in recursivitate

? Care este mecanismulpnn care subprogramele


se pot autoapela?Sa ne
j amintimmodulrncaresubprogramelerremoreazSraramekrilransmisi.
> Pentrumemorareaparametrilor,
subprogramele folosesco zond de
memorienumilSstive {maiexact,aceastazondse numegtesegment
de stvA).
Memorareaparametrilor lransmigise face in ordineain care acegtia
figureazdin antet:de la s6nga la dreapta.
Pentru paramehiitransmi$iprin valoare,se memoreazdvaloarea
hansmisS,iar pentruceilransmi$iprinreferintdse memoreaz;adresa
variabilei.
> In cadrul subprog.amului,
parametriitransmigigi memoratiin stivA
sunlvariabile.
Numeleloresteceldin listaparametrilor
formali.
In capilolulanterioram studiatproprieHtilestructuriinumild stive. Exact
acelea9iproprielAlile are Si segmntulde stlve. Singuradiferentdestedatd de
laptulce gestiuneasegmentului de stivAesle ldcutdautomat.Mai exact,codulin
limbai magind, oblinut in uma compildrii,contine secvente prin care se
gestionoazsegmenlulde slive.

) La apelulsubprogramuluise depunin slivd,in ordine,parametriitransmigi.


De asemenea,tot in stivdse rezerv, spatiupentruvariabilelelocale(cele
doclaratein subprogram).
Aceslaesteun primnivelalstivei.

t in cazulin care subprogramulse autoapeleazepe un al doileanivel,se


depun din nou parametriitransmigi$i se rezervdun nou spatiu penlru
variabilele
locale.
pfezenEmgraficmodulin carefunctioneaze
in continuare, fecursivitateain
cazullunclieifacr a programului
anterior.Aceasti funclienu are variabilelocale,
deciin slivSse depunedoarparamelruln.

La primulapel al funcliei facr se creeazdln


segmentulde stivd o variabilAnumitd n, care
reline3 - valoareaparametrului
formal.

E
Funclia se autoapeleazd.De aceastd date
paramelru'n ia valoarea2. ln stivdse creeazaun
nounivel,carc rejineD cu valoarea2.

Funcliase autoapeleazd.Patametr!lr ia valoarea

H
1. ln stivdse creeazaun nou nivel,care relinen
cu valoarea1.
Yanualde informaticepentru clasaa Xl-a 145

rad=] Functiase autoaDeleaz5.Parametrulnia valoarea


I o. in stivdse creeazdun nou nivel,care retinen
cu valoarea0. Funcliaia valoaGa1, autoapelul
nu maiare loc.Se revinepe nivelul3.

,--lrl-*, ,,^,_, Pe nivelul3 se e{eclueaze


''- -' Se revrneaDoioe nivelul2.
cabulul1*1=1.

" F-l*+
"tr
rdcF2 Pe nivelul2 se efectueaze
calculul2*1=2.
5e revtneaporpe n|vgtut1,

".*E*l Pe nivelull se efectueazlcalculul3*2-5.


Se revineapoiTn tnat!( ).

Aicisoaliseazd6, adicds-acalculat3 t.

a) lvlaipulineficient,
nr se poatecalculaglprlntr-ofunclieca in exgmplut
urmdtor:

Varianta
Pascal l VadantrC++
war vaL ,n,D. inc6g ! , #Includ <lost!u,h>
Drocedure lact (w!1,, n t Intg!, rcldl laot (r.!t valrlnt n,lnt&
wa! Drodrlnbsr),

lact (vaL+l,r,t ro<l) t


trodr: =D.oal*vat ,
f.ct, (val+l,n,9rodl) l

{ itr! val,n.D.lf
c dt < < r n r , , c t n >>n ,
E it e (,n - ' ), re adlt r ( n) ,

)
r46 Capitolul6. Introducerein recursivitate

Sa analizm 9i penlruacestexemplumodulin care se electueaz calculul,


pentrun-3. Funcliaaretreiparamelri: prinvaloare,unulprinreferinld.
doitransmigi
lalAconlinutul primul
variabilelordupa apel:

EEE 1 | 3 | ReferinFc6tree

Pentruce wa1 estemai mic sau egalca D se electueaza:Dlo.tlEDrcd*va1r.


Inaucatvariabila9 a lost tansmisdprin referinld,programullucreazbcu aceaste
variabila,
in loc de Dloil. In concluzie,
se eleclueaz,D-D*w.lr. Apoi,funcliase

2 ReferinldcdtreD

E 1 ReferinldcdtreI)

Peniru cd va1 este 2 mai mic ca 3 - se efeclueazdprod=Diodl*wa1,


dupd
care luncliase autoapeleazd.

3 3 Referinta
ceker)
2 catrep
Referinle
T--1 1 3 ReferinldcatreI)
l"l

Pentruce val este3 - maimicsauegalcu 3 - se eleclueazd Drod.Drod,vd,decip


la valoarea5, dupecarese revinepenivelul2, apoi1, apoiinprogramul
principal.

,l Observrtli

/ Dupdcum rezultddin acesteexemple,subprogramul lucrgazd


cu daleleatlate
pe un anumilnivelal sliveipeniruvariabibblransmiseprinvaloare,variabilele
locale9i variabibleiransmise prinrefefintA.

'/ Existdposibilitaleaca subprogramul sa lucrezedirectcu variabibbglobalefard


ca acesleasa lie iransmiseprinreferinld.
DupecumStimvariabibbglobalepolfi
accesate din oricesubprogram. ln exemplu,am preleralvariantade a trececa
paramelru vaiabilatransmisaprinrete nla,atatdinmotivedidacticecat9i pontrLl
a asiguraindependenla subprogramului. Dezavantajulesledatde taptulcd stiva
valiincercal:suplimentar cu adresaacesleivariabile.
le Manualde informa cAoentruclasaa Xl-a 147

,t. exisldposibililatea
in cazulunuinum5rmarede auloapelSri, ca segmenlul
alocat, ln careprogramul
spa(iul
de slivesd depeseasce caz se va termina
cueroare.
presupune
Recursivitatea in comparalie
memorie
maimult5 cuiterativitatea.

6.4.Cumgandimun algoritmrecursiv
?
Pontrua ne familiariza
cu rationamentul vom pomide la caleva
recursiv,
intuilive.
exemple

5 1. Wlrth.O camordde luatvederiarein obieciivun televizor caretransmilg


imaginileprimilede la camerd. Evidenl, sovavedeauntelevizor,
in telgvizor
iarln acestauntelevizor...,
9.4.m.d.
Pescurt,ln oricetelovizorsevedeuntelevizor.
2. Anunl,lnanumite rostauranteamlnlalnitanunlul:
"Azinusefumeazd!".
3. Constatare.glili povostea cusdraculcarea prlnsunpgti9or deaur.Acesta
ll spuneomuluicadacdii dddrumulii indeplinegt orlcarear fi ele.
3 dorinl,
OmulTidddrumul, ii spunprlmadorinld,peqlllorul
i-oindeplinegte,
li spune
a douadorintd,pFtlgorul A heiadorintda omuluiestesd i
l-olndeplinoglg,
n selndeplineasce 3 dorinte..,
Lesandglumala o parte,constatem c6, ln general,o gendirerccutsivd
o
exp mAconcentrct anumilE starc,carc se repetEla lnfinlt. Aceas'dgendircse
aplicdin elaborcrcaalggltnllor rccurcivi,dat cu o nodlflcarcesenflald:addugarea
condilieide teminarc.ln absenlaacesleicondilii,nu poalefi vorbade algorllm,
lntrucgt lrebuiesdflelinit,
aboritmul
+ ln ebborarea algoritmilor se apliceralionamentul:
rcurslvl ce ae intampll
la un nlv|.aelntemolila orlcenlv|.
+ Subprogramul lrebuie se conlind inslrucliunile
care s autoapeleazE
corespunz5loare
unuinivel,
+ StaratratalSde subprogram se ges9tepo un anumilnlvelal stivei
(variabilele
rezultate parametrilor
in urmalransmiierll 9i variabilele
localeale
subprogramului).
a
b Lft Observatll
le
r' Un algoritmrecursivs elaboreazdutilizendacosttip de gandire,nu o
gandire
precum pandacum,cendamlaboral
cealolositd algoritmi
ilorativi.
fi r' Pentruorice algoritmrecursivexisteunul itorativcare rezolveaceeagi
probleme.
'/ Nuintoldeauna
alegerea recursiv
unuialgorilm reprezinie
unavanlaj.
r' Numeroasele
exemple
careurmgazevdvorlemuriasupracelorafirmate.
148 Capitolul6. Introducere
ln recursivltate

6.5. Aplicatiirecursive

6.5.1.Aplicatii
la caresetranscrie
o formuldrecursivi

D Aplicalia6.'1.Se citeqlex2. Se cereprogramul


pentrucalcululluncliei:

-.. lx -1, x>12


''
lF(F(x| 2 ))x < 1 2

El Rezolvare.Aceastdaplicaliea losttralalailerativ,prin ulilizareastivei.in caztrl


tratdriirecursive,
nu facemaltcovadecatsd lranscriem deliniliarecursivda funcliei.

'. ':,:i I VarlantaPascai, "'.1 Vaildi q C1+;. , Lt' ,


#tacludto <torhd.h>

(x,lnt s r) r lr legeE, Iat u!r!|a (1n! x)


( 1! (x> -12) retrn 8-1,

tho[ u6.rEr-1 rtuh t!,I|m(Danna(*+2) )t


6I6e u6a r .'!lsa (ria6a (x+1) ) )

cdr<<!|lEr(a) t
edtern(|!'a6ll(x) ) l

f in comparalio
cu abordarea
lleratlvd,
abordarea prezinle
recurslve avantajul
S scrieriiconcentrate.

0 Aplicalla6.2.Se dd functiade mailos,definitepo ![,ot.Se citescnumerole


n 9in. Si secalculeze
ack(n,n),

fn +]. m=0
=
t" ' '
A ck(m.n ) n=0
l A ck(m-1 .1) .
IAcktnr- l. Ack(m,n- l)), altfel

EI Rezolvare. 9i aceastaaplicalie prinutilizarea


a lost trataleiterativ, stivei.in
cazultratdriirecursive,
nu lacomaltcevadecetse lranscriem definiflarecursivd
a funcliei.
Algoritmul
recursiv nunecesild
comontarii.
Manualde informaticapentru clasaa Xl-a 149

var a,n:$!c3rr; Sirclude <ioat!eu.h>

a ck(n, n !iDres r ) r lnt ger t i,Dt Ack(lnt !,Int n)


( if (In) iturtr !+1,

rhe! ack:!n+1 if ( t.)


r6tun Ack(i-1,1),
la n=0 lhe a ac k : - ac L( r - 1. 1)

ack: ac k ( a, t r - 1) ) ach (!- 1, act (D, !- 1) );


-ack ( n- 1,
I

E* 6(rG.)- r eaaun( n) ; { c d t <<" ! - " ; c i n >>e ,


E t(\n =r)- r eaalln( n) r c d t <<r n c n t c i n >>a ,
rite ln (Bck{n, n) ) cout<<ack(!,8) t
)

f in comparaliecu abordareaiterativd, recursiviprezinta


abordarea avantajul
i sc.ieriiconcenlrate
giacelaal sculiriiprogramatorului
do uneforlsuplimenlar
in elaborarea
aloorilmului.

J Aplicalia6.3.glrul lui Fibonaocl.Se consider5


gin/tdetinttasfletr

U,,

Se ciieglen, numdrnatural.Sd se calculeze


u".
!) Rezolvare.Functiaflb hanscriedelinitiarecursive:

f!.Dcluate <tostre.lr.h>

fj.b (nrtntqer) 3tDt6s6r, tnt ltb {i.n! n,


{ tt (l n) !tum 0,
. If n.0 lhetr !i.br.O
it (n= E t) r.l un 1,
if tr=l tltn ftbr=l
elB e f t b, = r i b (r-1 ) + ftb (d -2 ) r 6turn ftb{n-1) + l l b(n-2) t
)

Etr e ( . N- . ) , r e a tu .n (n ); ( c o u l < < raFn, ch> > !t


e l ileln( f ib( n) )
I
150 Capitolul6. Introducerein recursivitate

I un p@gramcarc calculeazd
in aceastasituatie.estecoted se se foloseasce
a, U" ilentiv.SA neimaginer'r
cun lunclioneazd aceastafunclie.

PentrucalcululUi fib(n) esle necesarse se cunoascdflb(n-l) 9i


fib (n-2 ). Parametrii continuipand
acestorfunctiisunidepugiin stivd.Procedeul
candestecalculat flb(n-1), apoisereiacalculul pentrufib(a-2). Acesllucru
esteextremde ineficienlpentruvalorimariale lui n (ex. rl=100).Se calculeazd
urooca sumdintre u$ Siueg.PentrucalcululUi urr se calculeazaurs 9i ur. Dupa
ce calculamuee,reluemcalculelepeniruues

O asllel de recursivilate se numegle recursivitate in cascadd. Rulall


programulpenlruo valoaremai mare a lui r 9i ... asteptali.cat de simpluse
rezofueproblemaiterativSicatestede rapiddaceaslametodd...

Prezentem carenu ncesitdcomentarii.


varianlaiterativa,

,,vtir!;ita:'b";Pb
: r,.,;,ill[.1 1"i.'
wa. E , f 0, f I , f2 , t !tl t c r, {Itrclual <lo8tr.r.h>

E t r 6( '!., ) !.rd 1 tr(n ),


' { l n! n,!0.0.t1.1,f,2t
c4l < < nnrr, ctn> > ni
tf 1! ( l D ) cout< < t0,
n=0 lh6n r,rll.ln(fo)
tl (trrr1) cout< < !1,
t! D-l lh.tr wrltltr(lt)
{ l or (Irt t-1, t< = nrl + + )
f or 1 !.2 lo n dlo { f2.r0+ f1,
tO-tLt
l1-t2 t
1 2 ,-1 0 + t1 t
!0 ,.t1 , l
1 1 ,-!2
I
v llt .l r (t2 ) )

n Aplicatia6.4.Se daudoudnumerenaturalea 9ib. Se ceresAse calculeze


cel
maimaredivizorcomunal lor.
gl Rezolvaro.Utilizdmo detinilierecursivd
a celuimai marodivizorcomunpenlru
doudnumerenalurale a 9ib:

fa, a=b
= - b.b).a> b
"rm6q12,51 lcmmdc{a
Icmm dc( a.b- a)<.ab
Manualde informatice
Dentruclasaa Xl-a 151

Aceast5detinitieestetranscrise
in lunctiarecursive
crEl.tc:

,'';:, ;'i ,L-,- v"iianrec*r :


va! a,b!Inl69r, #includl <ioatra,h>

cddlc (a. b: intg6!) .lates6lt iat cnnatc (itrt a,int b)


( if (a==b) iluh at
i.l a-b ths cmdlc: =a
il ( a >b )
lhn clottc !:ceitc ( B-b, b ) retufr ffillc (6-b,b),
else @!alc ! =citl(lc ( a, b-a) 61s r t u r ! @ldc(a,b-a);
t
Ett (,.E, ) r ra dun( a) t
rb rr ) r ra at ln( b) , ( c out < < n a =n ; c t n >>a ,
E I t o(
( cNndlc (.,b) ) c dr < < n b r r , c l a >>! , ,
wtiteln
c dt < < . m t l c (a,b);
I

probleme
Bezolvimaceeagi (utilizand
iterativ demaisus):
dlinitia

w.r a.br!-ntgar, *tDclud! <IorlrM.h>

rl t ( t ! r t ) , r a a l tn (a ) |
c o u l < < rar,, ctn> > r,
tttr.to( t br t ) r r d l rn (b ), o o u r< < rb.,, ctn> rb,
i!
. > b lhn. r . . -b l l (!> b) ...-b,
6l! . brrb -a , b.lr-a,
( , c'l[dc: t , a) r1..
wrtl.ln 6out<<'cfindcrn<<er
)

ptobleme,
Peniruaceaste 6steIndiferont
cevariantlderozolvaro
soalege.
pnvua calcula
D Apllcalla6.5.Sdsescrleo funclierecurstue sumacifrelor
unui
numafnalural.
tnltlal,prezenlam
EI Rozolvare. varianta
iteralivat

! ' A ! nrrr1 nt.9 .r, {llncluaL <Io8lfdn.h>


Eft.{ ta rt ) r r.Aaun( E) ,
cou!<<nnrr, cln>>n,
$hll n<>0 ilo borLtr
a r !a+a lodt 10t
nr . n dllv 10,
nal;
mltln( ' s.', s) )
t52 Cap.'.oaua6aad?ea1la

Retinemldeea:se izoleaziullimacifre' iar lui n i so ahibuiecatulintreg


.1"dinirevecheavaloare9i 10. AceastSideefoloseqtepentrua gdsio reiatiede
recurenta.necesareelaboreriivarianleirecursive.Rolaliilesunt scriseprin
dinPascal(stanga)qiC++ (dreapla):
utilizare;operatorilor

n= 0
=
s(n)
n=0 =
rol, altfel
{l'.oaro+stnaru ',', {l'u,,*r",,0,,altfel
sumaulilizandrelatiaprezentatd:
de maijos calculeazd
Programul

*lucluat6 <iortleu'h>

luction 6(n!inlesr) ! integei;

1! n=o lhn a !=o ( i f (tE ) rtutn 0t


lse E:.n @d 10 + a( t r dliw 10) 1s6 letuh tr110 + 6(tr/10),
l

Elt6 (,n., ) . iaaun( n) , ( cdt< < " n!rt crnt> tt

Existdposibilitateaca un subprogrcn sd se autoapelezep n internedid anui


subDrcatan-Dinmomentce s'a ralizatautoapolul, esle vorbade recursivitale
9l
cum aiesta nu s-a realizaldiroct - ca in exemplele anleioare'o astlol de
se numegleIndlrecu.
recursivitale

glrurilodeflnitorecurenlastfelra"a; bo'b; a,b>oi


E Apllcafla6.6,So oonsiderd
a*'jb''
s" = , b" =

Sd se scrieun programcaresd clleascea, b 9i n 9l sd se calculezea" 9i bb'

lrll ,i' ' V6rla a C++


*IDcIud6 <lollres.h>
{taclud <!|!lh.h>

fun ctlo n b n( n! lnlos t ) , r eal;

an(n: lnt!'et) !ralt tloublo b4(tat !),


furclion
doubl s(ant n)
{ if (tn) rlrh .,

( 6( a- r + bn( n- 1) !!uE (!!(r-1) +b r ( n - 1 ) ) /2t


o 1s6 s!= ) /t
)
Ianual de informatici pentru clasaa Xl-a 153

luctld bd(DrlDtoelor) rr6alt atoubl br (iEt D)


I bsla
I i! blo tLn borsb
els bE t t 6q.c ( an (n-1) *bn (n-1) aqrt'(e(n-1) rbb(r-1) )t
l

rr{t6 ( tar t ) , r . dllD( . ) , { c @ t <<i a E r , c i u >>a ;


c o u l <<i b =' r c i t r >>b ;
wiil6(.b =!) r r adt ln ( b) t
c o u t <<n t r - ! t c i n >>n ,
rite(!a =\)i ! Bit ln{ r l) i
c o u t <<a t r ( ! ) << ' t <<b ! ( a ) ,
Eiteh (s(r):5 !10. ' ' ,
b !( b) . 5! 10) )

6,5.2.Aplicatii de o formuli de
la carenu dispunem
recurenta

0 Aplicatla6.7, SA se scrieo lunqie recursivd carecileglocaracter 9i le


aligeaze
in ordinoa
inversd girului
citirii,Sfargitul estemarcatdecaraclerul
'0".
EI Rezolvare.
Conform principiului,
ceselnEmplala un nivelseinlampl5
la orice
nivel,vomgandiluncliarecursivd
astlel:
. secitoglounoaraclot;
. functia;
dacdeslgdiferitde 0, se reaplaze
r sotiperogts
caracterul.
Ralionamentul pentrua scrieprogramul.
estesuticient
VarladtaC++
#tucluala <roscft.r.h>
vol.d lnvo
( char 6, clrD>a,
i ,f (rrE t 0, ) i .D vo,
I! a< > ' 0, tb o n l n v ,
)

( tnw( ) I

3 exerct1tu. Moditicatiprogramut
astfolincat caraclerulo - care marcheazi
sfargitul
Sirului- sa nu tio tiparit.
154 Caoitolul6. Introducere
in recurslvltate

penlrua transforma
D Aplicatia6.8.Sd se scrieo tunctierecursivd un numdr
naturaln,din baza10 in bazal! (1<k<10).

EI Rezolvare.Sd ne amintimalgoritmulclasicde trecerodin baza10 in bazak.


Numdrulse impartela h, se relineroslul,catulse lmpartela k, se retinerestul...
panacandcatuleste mai mic decatlmpi4itorul.Rezullatul se obtineprin scriorea
in ordine inversea resturilorobtinute.Practic,tiperirearestuluise faco dupe
auloapel(caSila problemaanterioard).

v.r D. b! inles ert *tnctual <to6t!6u,h>

s r anlod( n, br i n t g e r) t rctal trMbfo![(tEl E.i.! b)


war rBt!intgri
tl ( n >r b ) c!a3toa(!/b,b) t

)
t h. n lr r aat o m(tr a l i v b ,b ),
( c d t< < .r." , cl tr> > n,
c o u!< < ,brrari , cLn> > b,
tal ssfor& (E ,b),
E it o( ' n! , ) , re a d l x !(n ), )
w r l! 6( ' baz a! ' ), re a d U n (b ) |
l! . f o' ln( u, b ),

{1,2,...,r)9isecertoatepermulerib
D Apllcalla6.9,S6dd multim6a acesteia,
pentrunr3 avomi
Exomplu:
l 3 , L , 2 r, t2 ,3 ,7 ', {2 ,1 ,3}, (3 ,2, 1} , 11,,3,2rtt, ,2,3r .
EI Rozolvare.
in vederoa problomi,
rezoNerli urmebarele:
obserydm
. cu unsingurolmsnt(1) areo slngurS
multimea permutare:
{1};
. permulare
dinfiocare (1,2, .. .,n-1' ({ar,a:, . . .,!.-r}), so
a mullimii
permulerl
oblinurmetoarele alemultimii(1,2. . . . , r) i
{r, a,, a!, . . . . a! - 1, a1} ;

t!!,n ,a!,..,,!"- 1, a, I ;

{al,a 1,n ,..., a. - 1' . 3} ;

(a l, a,, ar , . . , , a"- 1. r ) .
tsrual de informaticipentruclasaa Xl-a

Pentru n=3, privili reprezentareadin


.' figuraaleturate:

Avem in vedere posibilitateade revenirela situatiainiliald:dupd ce am


opefato inlerschimbare a elementelor
rr 9i .j, urmalade o reapelarea funcliei
peniruvaloareak+1, interschimbdmdinnouar cu aj.

v.r D: aar r y [ 1 .,8 ] o ! l n t 9 6 r, *tftrudt. <to.t!.u,ht


n. lr Lnt 6s er t i l r t Il oLa,
Dloc6dlur tiDaf,
( fo ! (tnt l = 1rl < .nrL+ + )
!o! 1r r 1 t o n d i o v E tt6 (D l tl ),
l
vold t.rdr! (lni t.lnt n.
Dlocalur Dn!'.lt (k,nr l!!et6!t Inr D IIOj )
v a E D rv o c to rr, ( tnt, 1,,6,
vl r 1, J , c r l! l. lr, t! lkrrn+l) ttD.r( )|

( D l hl ' kt
!o! (tr1rt..krt+ + )
{ crrl l : t
D fl l rtIH ,
Dlk t t r t ,
! o! Lt r l !o k dlo D.flnut (k+l,n.D) ,
crD :,
D 11l rD l k: ,
DI ll r : elk l ,

( k + 1 ,[,D ) l
Det ut )
'
l
DI ll t . Dah l ,

D g fi ut (1, !,D ) t
l
v!t ! e( ' nq' ) , l e a ttl n (tr) t
r5 6 Capitolul6. Introducerein recursivitate

fl Aplicalla6.10.AlgoritmulFill. Se di o malricebinarS.Valorilel delimiteazd


o anumitasuprafatdinchisdin cadrul matricei(elementeleapa4inandaceslei
supralelesuntmarcatecu 0). De asemenea,se dau coordonatele x 9i y ale unui
un punctdininleriorul
elementalmalricei,semnificand acesteisuprafete.

^[i
ll
00
11
.0 0

Suprafala inchiseeste dala de elementeleA(1,1), A(2.1), A(2,2),


A( 3,3) ,r ( 3,1) .

Considerdmcoordonalele(2,3) ale unui punctsilual in interiorulaceslei


supra{ele. programului,
Dup6executarea matriceatrebuiesb arateaslfel:

11

"lr
^ll 11
It
00

t, Algoritmul
se dovedegte
extremde ulilin colorarea
atuncicandsuntcunosculecoordonatele
uneisupralete lnchise
unuipunclsituatin interiorul
ei.
Acestalgoritm gisubdenumirea
eslgcunoscut dealgoritmul
Frr,L.

EI Rezotvare.Pentrurezolvarese folosegtelunctiascriu( ), care se auloape-


baze. Initial,malricease bordeazecu doudliniigidoudcoloanece conlinelemente
careau valoarea1. Aceaslaarca scopevitareatesluluideiosifedin malrice.

Funcliascrlu( ) lunqioneazeas el:

. lesleaA dacS elementulmatriceila care s-a aiuns {de coordonate


(*,v) ) are valoareao:

. in caz alhmativ,acestaia valoarea1, iar functiase autoapeleazi


invecinate(sus,jos,dreapta,stanga);
pentrutiecaredintreelementele

. in cazconlrar,se iesedinfunctie.

esle prezenlatin conlinuare:


Programul
ganualde informaticeDentruclasaa Xl-a 157

Drogre uE)lert *includlg <loat!6u.1D


v.r a:@lflcer afray i D r a tt.0I t10l , i , j ,n, !,* ,y,
t 0, . 9, 0. . 91 o ! i n t g 6 rt
rcid scriu (int x/inl y,
i, j, r , ! . x , y . in te q r,
i D ! at10l I10l )
tlocdu! acriu (x,y:lrtogeri { i f { l al rl tyl )
var a:Etrice) t ( a l al tY l = 1,
scrl u(x+ 1.Y ra);
i! al! , 1' 1. 0 t hd scl i u(x,Y + 1.);
scri u(a-1ty,E ) t
scri u(x,y-1,8) t
s c r t u( x + 1, y , a ), )
s c r iu{ x ! y + l, a), l
s c llu( s - 1, y . a ),
s c r t u ( x , y - 1, a )
( cd !< <'!{E tr, ci tr>>ai
co u !<<i N E ,,, c1n>>n,
fo r (i = l rt< E n;t+ + )
l o r {j = 1, j < E a, J+ + )
w tle( ' M E ' ) r r e (t1 n (n ) ; { c@ !< < ' e l ' < < i < < ' , '
Elt o ( ' l [ t t ) , r 6a d h ( n ) , < < j < < ' 1= ' ;
for ltsl to a alo ci !> ratrt Ij l ;
fo r J!E1 to n ( t o
l
l o r (i = 1rt< .trrt+ + )
vrr.t ( ta(I,t, t , t . l, t lr r ) '
re.iua(att,Jt) t a t0) Ii l = 1t
at l l tl l = 1,
lor i.r!l to a do ,
fo r {t-1rt< {,t{ + )
! I O , t 1r 11, { a l l l l 0l .tt
aI a+ 1, t 1 ! ttl tE + 11.1,
'.1 ,
!o! l!.1 to a alo c d t<< i xE {, cttr> > k,
c o u r < < nyri , cI!> > y,
! t t , 0l t . 1, fo r ({ .rr r.< ar 1r+ )
at t , n+ l1! 11 { fo r (1.1, J< .E tJ+ + )
cdt< < ati l Il t,
wi to{ ' x a' ) ' r o .a l x n { x ),
rtl o( ' Y t ' ) , le a i l ta (y ), )
!o! tr.1 lo |[ dlo
coul<<onalt<<endtl,
t o! J r . 1 t o n a l o l o ! (t-1rt< -E rt+ + )
wlt t ( at t , jl) r ( l or (J.1r J < -!r J+ r)
cdr< < .tIl IJl ,

)
l

!o ! i: - 1 E o r a to

for J , - 1 t o ! d o
E it e ( u I i, jl ) t
!
r58 6. Introducere
CaDitolul in recurslvitate

n Aplicalia 6.11. Problemafotoglatiei (apllcalleFill). O lotografiealb-negru


estereprezentate sub formauneimatricebinare.Ea lnfeligeazaunulsau thaimulte
obiecte.Porliunile
corespunzitoare (sau
obisctului in
obioctelor) matrice
au valoarea
"1".Se corosd se determinedacefotogralia unulsaumaimulteobiecte
reprezint5

doueobiecte:
$xi' in malriceaurmdtoaresunlreprezentate
l; ; ::l
^=lr
rJ
un gingurobiocl:
iarin malriceade maijos estereprezenlal

rt000r 0r 0I Il
'=lor, tl
lr000J
Ca 9i in problemele anlerioare,pontrua evitatestuliegirildin matric,
aceasta avendvaloarea
estebordaltcu linii9i coloan "0".Algoritmul estetot cel
dinproblema selacep8 dire4li.
(Flll),daraicicSutafa
anlorioard
in programul se cilegtemalricea9i s oautdprimulelment"1'
princlpal
prinlreelemenlele acesteia.
Soaplaze apoifuncllacoq)act ( ) carearerolulde
a marcacu o loaleelemenlele apa4inacesiuiprimobleclidentitical.
matriceicare
La revenlre, se lesleazedact maiexistdglomente cu valoaroa "1" in malllc6.In
caz alhmaliv,s poatelrageconcluzia ce fn fologlatleaveaminitlalmai multe
obiecte (altfel,
lotografia
contineaunslngurobiecl).

v ar ar lr E r y t0 ,.9 ,0 ..9 1 o! #Iactud. <Io.tr.u.h>


tn r !t10: t101, i ,J.a,!,
l, J , t l, r , r ..y ttn t.s 6 !,
graltrboot.an, y,
volal cdpact(IDl x,lrl
Droc.dluE. codDAct rn! .t10t ttot )
( x , y r lnt . s . r , w .r .rM l E tc ), ( r ! { al xt l yl )
( !IxI tyl ,0r
t! a tx,yl th6r bslt
'r cowrac! (x-1.y, a) ,
c dDac t ( x -t,y ,e ), cdD l ct (x-1.y+ 1,.) ,
coqract{a,y+ l ,.),
cdll)act, (a-t,y+l, !) |
co$,act ( x+ 1, y+ 1, a) ,
c odDac l (1 i ,y + 1 , a ),
co4'aot (x+1, y, n) ,
ooDA c l (* + 1 .y + 1 ,r) t
coq)act (x+1, y-1, a) ,
c o4, ! c l (x + 1 .y , a ),
corw,acr {x+1, y-1, a) , coqract (x.y-1. a) t
cdD A ct(* -1,y-1,a),
cond,.c! (x,y-1,.) t
coriE..t ( x- 1, y- 1, E) , )
I
pentruclasaa xl-a
de informatlce I59

Git ( r!r_! ) ! ad r n( D) , ( c d t< < r u= nrci .!> > n;


cit ( '|N-! ) '- ! * lrn( ! ) ; c o u t< <.N -" i ci D > > nt
lo! l:-1 to n d o fo r (t- 1;t< ari + + )
ro r (JE 1;J< rn; l + + )
( c dt< < " a t" < < t< < ' , '
w t it('a lr,i, || t , j, t l= r ) - <<j<<'l ="
! |drn (.[t, JI ) c ID > > al tl Ij L
,
for i:=1 to n a to fo r (i = 1ri < = n;i + + )
{ a I0 l Ii l = o;
at0,il:=0; a [[+11 l i l = 0t
aIn+l,il !=0,' )
fo r (t. 1rt< 4rt+ + )
lor lr El to n (lo { a l tl tol
-0,
.l i l l tr+ 11= 0,
aIi,01 :-0t t

{ y ++ , }
rh l l (yr.n & & .Ixl l yl t-1) t
)
unlll (y.n) o ! ( at x , y ) El) w h tl 6 ( (xl a) & & .Ial tyl I E 1),
urt ll (s.b) o a (.t s , y ] ! 1) t c d u ra ct (* ,y,.) t
co4)rct(x.y,r),
to r (t= 1;t< .nrt+ + )
lor t:!1 lo ! alo fo ! (j .1,J< -nrJ+ + )
,.! (al tl IJl ..1) sastc.1,
If !I1,lj=1 th.n i f (rl ai t)
gaal.t trtn6t c o u t< < ' uI aul r. obt.ct6n,
1! !'a6r.t Lre cotrt<<"un obl.cl',
th6n ritola( ,

elao wrtteln(

propuse
Probleme
1, Calculali
recursiv
sumaa n numere
naturale
cilite.
2, Calculali
rocursiv
expresiile:
a) 1x2+2x3+,.,+nx(n+1);
b) 1+1/2+...+1/r;
c) 1/(2x3)+2/ (3r{)+,..+n/( (!+1) (r+2) )
t60 Capitolul6, Introducere
in recursiviratE

3. Se citescn Si k (numerenaluraleE>k). CalculalirecursivCj, prin uiilizarea


formuleide recurenlS:C: = C:-l + C:-t Esteeticient?

4. Scrietiun programilerativcare rezolvdproblemaanterioar;utilizandaceeag


lormuld.

5. Calculalirecursiv(; prinutihzarea
lormulei:

[1. t= o ;
cI =1"-l+rc;. ortt"r.
L /{

cu cel necesarpentrurezolvarea
Comparalitimpulde rezolvare problemei
4.
6. Scrieliun subprogram
recursivprincarecalculatorul
ghicesleun numarnatura
ascunsde dumneavoaslra (numarul esle cuprinsintre 1gi 3oooo).Atur.
propuneun numdri, se va respundeprin:
candcalculalorul
1, dacenumdruleslepreamare;
2, dacdnumarulestepreamic;
0, dacdnumdrulaloslghicit.
7. Scrietiun subprogramrecursivcare calculeazacele cuvintedislinctecu 2E
caracterese potformacu n caraclerer 9i tr caraclereB,
8. Calculaliconlormformuleiurmeloafevaloareamaximbrelinutdde un vectoro
numerenaturalecu n componeniel

fvn l n - l:
m a x{v l .vl2l....vlnll < "trl'
' - vI l. V l2 l. . . . V ln
- | lr.V ln l, J t rt c t .
lmax(mnx,
9, Se citegtsun numernaluraln. Se cere sd se scrieo funclierecursivdca'.
relumeazicea mai micdbazain carese poaieconsidera n.
10. Scrietio lunclierecursivdcarolosteaz daceun numdrnaturala>1 eslepr n
'11.Scriglio lunctie recursivecare relurneazesuma olementelorpare ae u.r
vectorcitil.
Exemplu: n-{ gi v.{2.2,5.5),seretufneazd10.
Pehtru
12. Scrielio fun4ie recursivaprin care se testeazddacd un num5rnaluralx s
regesegleintrecomponenlele unuivectorv cu n numerenaturale.
'13.Scrietio lunclie recursivdcare primeSteca parametridoud numorenalura
l<J 9i un numdrrealxIi,jl Siretumeazd txt (parteintreaga
din x). Nu s+
vorlolosifuncliile
spocializate
ale limbajului.
de informatici pentru clasaa Xl-a r 6t

;..eti o iunctierecursivdcareverificedacdun veclotcu componente numere


este palindrom(afigareacomponentelor de la 1 la !t cu
coincide afigarea
a D j a 1) .

nume ll cilrelorpe care le are un


l:reti o functierecursivecare returneazb
naluralprimitca parametru.
Scrietiun subprogramrecursivcare afigead, cilrd cu cifra, oglinditulunui
nalural,
pfu: pentrun=123,se afigeaze32L-
recursiv
Sretiunsubprogram carereiurneazd, unuinumernalural
oglindilul
plu:penlrun=123,se relurneaze
321.
Scrietio functierecursivdcarelesteazadacAun veclorcu $ numere naturale
true, iarin cazconlrat,
numaivaloridistincte,cazin carefuncliaretumeaz6
zd false.

Scrietiun subprogramrecursivcaredescompune ln toalemodurileposjbileun


er naturaln in doudnumere119inr, r1<n, a cerorsumaeste!.
Pentruun vectorcu n componenle de num5r
o saul carearesemnilicalia
numdrulin 10.
er, seceresdsescrieo functierecursivicaroafiseaze baza
plu:pentrun=4 9iv- (1011),se va returna
11.

Scrielio tunclie recursivdcafe aligeazdvaloareaunuipollnohln Punclul a.


icienliipolinomuluisunt dali intr'un vector.Astfel,pentruv- (1,2,3) avsm
InomulP=x2+2x+3.

. Fie functiadefinildpe N'xN'.Se citescn I k. Se cere sd se scrieo tunclie


lecursivdcareevalueazd funclial

k> n
ke { l,n}
1<kcn

23. Calculatis (n, k) nerecursiv.


funcliadefinitdpo N">cr:
24. Calculalirecursiv9i nerecursiv

F(n,k)= t:-,,0-,1-no(n-,,0) k=0sauk>n;


k=n;
Iirn 1 < k< n.

Comparalieficientacelordouamoduride
calcul.

L
t62 Capitolul6. Introducerein recursivitate

25. SAse calculezerecursiv9i nerecursivp (n, t) , definitpe N'x!r":

P( n+h ,k)=P (n,1)+P (n,2) +..,+P(n , k ), d a c d1 < k < n ;


P(a.t)=1, dacak-l sau k=ni
P (8. k) =0,dacak>!.
26. Calculaliiterativgi recursivcel mai rharedivizorcomunpentrudoud numere
naturale utilizendalgoritmullul Euclid:
'n9in,
n/0 +O
c m m,,oc( m n )lcmmdc(rmmodn),
=1 f c mmd c { n mo / " n ).
cmmd c { mn )= l
lm. n 0 lm, n=0
Pascal C++

27.Ce se afigeaze
lat irrltxn(r(12))r /cout<<t(12)r ?

{ t! (n) rl urr 10rt([/10)+


ne6l0,
El.e lotum 0,

cl L2i
b) 21i
c) eroare dl6 e:(cuta!6;
d) 0,

28. Co calculeazdfunclia umdtoaro?

nhl
( tr (n)
rl um (atr-ro),n + t{!-1),
elB rtun 0,

a) sumaprimelorn numerenaluraleimparo;
b) sumaprimelorn numerenaluraleparei
c) sumanumerolornaturaleparestict mai micidecatE;
d) sumanumerolornaturaleparemaimicisauegalecu n.
ualdeInformaticentru clasaa xl-a

Pentrucare dinile numerelede mai jos, care sunt parametride intrarepentru


ultimele2 numerealigatevorfi o?
ia urmdtoare,

wrttln(n rcil 16)

I s e dt leh (n );

.) 295;
5) 1021t;
:) 1000;
1) 10000.

-eslelo de la 30 la 33 se referd la funclia de majios, undo vl 9i v2 sunt vectori


:r.rn componenlenumele nalulale:

Dlocdluro r (r, t, J ! ttr!69r); voidl !(dnr n. tul t, ttrt l)


{ i -! (1 < .n & & J< :4)
Ir (1< . n) M d ( J < .n ) th o n ( 1 ! (vl trl < v2 tl l )
] c o u t< < vl Il + { l < < t r,
Ir vr tll <v, tJ I thoa l s e couc< < v, fJ+ + I < < " " t

w! 1t 6 ( v 1[ I ] . ' ' ), l
)

ll vL s! \1 cotrlln ata!.
// tDc.geil d Ltaltc.l 1
wrtt. (v2 tl1, .),

r (n, j., I ) ,

la
30, Dacdn esle egal cu 3, va=o,,2,31 9i v2r(4,s.1) ce se afi9eaza
apelulr (n, 1, 1) ?

a)123;
b ) 1 4 2 531 ;
c) cerinlanu estecorect6;
d){5 1 .
itolul6. Introducere
in recursivitata

31. Caredintreafirmatiilede mai jos sunt corectedacd n este 3 si apeluleste


t ( n, 1. 1) ?

a) intotdeaunase vorafigacel mult5 numere;


b) inloldeaunase vor atigacel putin3 numere;
c) intoldeauna
se vor afi$acel mujt3 numere;
d) intotdeauna
se vorafigacel pulin6 numere.
32. Dacan esto 3, pentrucaredin datelede maijos se afiseaz un numdrmaxir.
de valora
dislincte,
dacaapelulestet{It,1,1)?
a) v1= ( 1.2,8 ) 9i v2=({,s,5);
b) v1-(1,2,5) 9j v2= ({,5.6 ) i
c) v1: ({,5,5) 9i v2-(1,2,3};
il) v1= (1,2,3 ) 9i V2:(a.5.6).

33. Ce va afisa lunclia la apelul r(1,1,u) d a c a n = 3 , v t = (1 , 2 . 3 ) 9


v2= 14,5,6r?

a)123; b)r.23{55;
c){55; d) nici o valoare.

Tesllede la 3a ia 36 se referdla programul


urmdlori
-----l-
vqrlanta
eas-i
llD vctorlarlay [1. . tO] of #tEctsdl <{o6tt6s,h>
:DECT' ht e,n, i ,V 1201 ,
vlr !, r,l ! lnteser,
vold b(Inr k, la! n)
{ I! (D )
Drocalur b (k, rIrlateCr), ( b(k+ r,r/2),
i ! (!* 2) cout< < vl kt < < nd1r
)
I
b( k + 1. n a tr.w2 ),
I! n nott ?-1 lhen
E lls ln(v l k l ) r,

l or ({r1rt< !arI+ + )

b(1,a) t
loa llE l ro n d o r a d rr(v ttt );
leadln( r ) rb (1 ,u ) ;

34. Da can- 4, v=(1,2,3, a) 9i n-2, c aliseazaprogramul?


.) {; b) 3; c) 2t d) 1.
al de informaticapentru clasaa Xl-a 165

oacd D=4, pentrucare dintrevalorilede mai ios ale lui n se afigeazSdoue


t\?

)4; b) d)].

Daca valoarea lui aflgeazdtoate cele { valoriale


ui?
c) 0; d) Nu existeo astfeldevaloare.
urmStoaro'
f/. in funcliade maijos inlocuililinia" ." cu unadintreinstrucliunile
astlelincat?unclias5:9iincheieexeculia farderoarepenlru oricevaloaroadmisibil'
a aroumenlului:

VarlantaPascal VarlantaC++
lunctlotr s(E!lnleser) ! inlosort
(

l
,

a) rturr *(a-2);
b ) x: =n (n nod 2) ; b) retur! x(n%z) i
c) return x(n-1);
d ) x: =x(n dt v 2) , d) roturn !r(E/2).

Teslele38 sr 39 se relerala functia


de rraijos:

VarlantaPasoai
tuacllon !n(at r.nb6cr) t in!lr;
{
It n.0 th ! 6 n3 .1 lf (n-.0) rlurn 1,
els.n r63 rBn(n _1 ) + 7 e1s rtul4 !*e{n-1)+7,
)

38.Dacdluncliaosieapelatdprinen({ ), de celeori se autoapeleazd?

a) de4 ori; b) de3 ori; c) de5 ori; de sive


d) depinde

39. Pentrucare dintrevalorilede mai jos, care sunt pafametride intrarepenlru


iLlnctieise teminb cu eroare?
luncliaan, executarea

a) o; b) -1; c) 1; de maisus
d) niciunadinlrevalorile
itolul6. lntroducere
in recursivitat

40. Pentruprogramul
de maijos,do cateori se autoapeleaztunctiad?

fsctlon e {n. inrogr) : intgr, #tnclual <:Lost!.!,h>


if tr-o thtr s!=2 t ir (n==0) lerun 2;
if n= 1 t h n s !t1 il (n..1) srus 1,
er 8 . n != s (n -1 )-s (n -2 )+ r
!!urn aD(r-t ) -a ( t r - 2 ) +1 ,
)
r lt h( s ( { ) )t
t cour<<e(a), )

!) de 8 ori; b) de 4 ori; c) de 9 ori: at) de 2 ori.

Indicaliii Rezolviri
1 , S " = 1+ 2+ . . . ,r-l + n ; S.+ S !-r+ s ;

^ '' f0 , dacan= o
[S- 1+n, atflel
7. Existl (2n)t pormutSri
ale literelor.
intrucatpenhutrecarepermutare
conteazddacds-a inversat
A cu L, (2n)t s impartela nt. pentrucd NU
conloaza
daces-ainvorsat
B cuB (2n)t, selmpartedinnoulant.seobline:

.-''"_ c;
17, I

tll.nl
8.

hl Matn(lat E)
M!*lD(n!lnleser) !lat6gr,
ur rua.l.ntger; Ir (!.E t) rl uh vl 1l ,
Il a=l lhn udrls3=vt1l ( !q-ua* l r(a-l );
t! (rux<vlrl ) rerun vltrl;
|! wrrl t x i b (n _ 1 ), .la rtuh na,
i! w<vlnl rh n )
id * h r.v l n l ,
ls M.xLsr.rnlx,
oentruclasaa Xl-a
de informaticA 167

cilramaximda numaruluigise adund1


Secalculeazd

!r1s(n,2) .
lunc$ade maiios se ape\eaz6
tO De exemp\u,

in! Prii(tnt a, tnt i)


PriD(n, I rinlegr) rboolet ( i t (t> (i D t) (6q* (n)+ r) )

tr t>tsEc ( sqrt (n) ) +1


EheE Prtn:=!tu6 tl (nqt-=o) ttun 0,
e l se l etuh P i i !(n,L+ t ),
lf D trodl I=0 ,
lhn P!ie!=f.16
1s6 plin ! EPr is ( a, l+ 1) ;

'i,' ,ir ' i ' r

dutn!(nttstsr) ritrtgr, ( l! (a:to) r6tun 0,


1.6 rtur! s'|u(n-1)+
(vtn: t62rr0)
' vl nl ,
)
61s stltl.l t rsuna (n-r) +
or ar ( v lnl @ d 2 r0 )* v l D l t

, ' VarlantdPascal ct i
i"iliiiI VqildntA '' I
tnr aDartt!(tnl n, tat x)
aDartlno (tr,3rlacsger) !booLolnt ( Mr-.o) roturn 0,

:L ! (v[!]-E x) retuE r,

aDArlla !.fatso rel ur! A D artl n(t-1,a),


)

lhe! 4Dartln6!
-tso

aDartl.e 3 ( tr- 1, x ) t
-ADarcln
168 CapitolLrl6. Introducerein recursivitate

13. Esteclasiculaloorilmde cautarebinard

lnt PInt (tnt t.int j.fl-oat


P!trt {i. J : lntgoEra: reqt) .i!t!'eat
war Ml.Jloc, tntsort i .f ( j -i .> 1)
( ui j l oc= (t+ J) /2,
tr J - i> 1 tf (x=-!ttJloc)
rruh Mtjloc;
bsiu
uijt oc ! = (i + j ) tl i w 2 ; it (x<trij loc )
tt x.MtlLoc
rhoD PIarrdrlJ!.oc P Int (t,l ttJl oc,x) ,

tf x<Mijloc thn P hl (ui j Loc, j ,s) r


Pitrt t ( 1, ltlJ toc, s) )
-Pltrr
els e Ptn t t.Ptrr (MtJ ro c .l ,x ) sls relun i,
)

14. Initial,se apeleazecu DallEd'or(1,n):

VarlantaC++
tac Palttrdbd(tnr I,
(
lf (t>.J ) r6tur! !.,

(vti.l l.vtJl ) rtuln


il
16 rturn
P.ltndrd(L+1, J -1) r
t

15 .

: VarlanlaC++

(tr<10) r6tun 1,
l6e reruft rEci! {a/ro} +L,.
)
de informatici pentru clasaa Xl-a 169

Variabilaniav,transmisaprinreferin!5'trebuiese rqind' inilial'0

Drocedturo osundla (n : lnletr,


war ninwtlnl696r) t

ntav! Enhv*lo+n @dl 10,


otlIndA(n dltw 10, ntnw) ,

18. Functlase apeleaz,cu Dlstlncte ( 1'n):

ir;l
tnt DLsttscto(i'Dc I.lnt n)
Di.6tlact (I, nrr.4!etor) | b@!.ean,
var gaaltrbooleln, Ir (l-.n) return r,

lor (J.t+1rJ<'4, J++)


lhn Dlatlnct!-tn It (vtll.-vlJl ) gasit-l,
tl (s.31!) !!uh 0t
o1s rotqn
gasit t-ta 1s6, Dtstlnct(i+t.n) ,
ro! Jt.t+l to a do )
lt vItl.vIJl l
lhetr 9a6tt !=tnet
if gasiE
thsn Disrlnctet 'l.1Ee
ls Dlatlncto t-
Dlgr lnc r e (l + 1 .n ),
170 Capitolul6. Introducere
in recurslvitae

19. Apelaticu DeEcorFu'r ( 1, n):

Dfoc.alure DoaconlDun{i,n!interr); rctd DEcotqrn(inr l, iEr a)


{ tf (i < = a/2)
it i<= a dlv 2 thn t cdt< < t< < ' n< < n-t< < ndl l t
n.coi qD un(i + 1,n) ,
r it 1a (1 , ' ' , n -t)t )
D6E c or E rn (1 + 1 ,n ),

20. Apelalicu Rfac (r, r) |

lnt Rf6c (lDr t.tnt r)


Rlac ( it a r lE!se!) : lnts6r; { If (i = .r) l etul n vtrt,
Il i=1 !he! Rt ac ; = v [ 1l rel ur! 2* R el ac (t-1rn) + vl tl ;
l
Re f.c : : 2r Rt . c ( L- 1, E) + VI t l,

21. Apelalicuvrtoaro (r, a. a):

Int valoa!6 (lnr t,Inr n.tnt a)


valoar. ( j., a, ! r lnts!) . tatga!, ( If (I..r) l eturn vtl l
lso rorulD .*valoar(1-r,
it i. r l th 6 n v .l o .re t.v l 1 l n,a)+ vttl ,
orra valoa! ! larvrlodre (I-t, )
n ,a )+ v ti l ,

22,Esteineficient
sdcalculam
recursiv.
23.Sdpresupunem
ceavemdocalculat
a (a.5 ). MaiTnEicalcutdm:
8( L ,1) - 1 . g(L,2l-0, S (1,3).0, ... , g (1 , 8 )ro . Urme a z A .

E1 2 'L l- r , 8(2,2)11.s(2,3),0,,.., s 1 2 , a r-o


9 !1,11 .1, 8(3.2).8(:r1)+2s(2,2t-3 , s lj. 3 lE r, s (3 , . ). 0 , ...
8 ( {,1}.1, 8({,2).s(3,1)+28(3,21-7 , . . .

Cuxceptia prlmeilinitS ( 1, x), pentrucatcutul


elementelor de pe tiniat, S (1, k)
se lobsescrezullatele
atlaiepe tinlaI-1, adicda ( t-1,,.).
de informatica tru clasaa xl-a

15.in cazulincarek<8, avem:


P ( n, k ) = P ( n-k + k ,k )-P (n -k . 1 )+ P(n -k , 2)+ ...+ P (n-k,k)'

Itrt P(I!t n,l nt k)


P (! ,k!int.se!) !t nl. gt ,
var l, s . j,nt96!, tl lk>n) tetum 0,

if k>n then P !-0 t! ( h= .1 l l kr.D ) aetun

if (krl) or (t . n) { t ot (1.1t i < .t-kri + + )


.+ = P (!-t,t),

)
I
for lr-1 !o t - k do
a:.a +P (n-k , { ) t

27. ari 2a. d); 29. b); 30. r)i 31. a)' b); 32. r)i 33' d);

34. c); 35. b); 36. !); 37.d);

38. a); 39. b)i


40. a) Autoapelurilese efectueazi dupd schemade mal ios:

6 2 Exmplu
Flgura

Acum.vedeti"oe viu"motivulpenlrucar'in caz.tlunorastflde formulede


recurenta,Tn car;, in expresie.interulnmat multi operanzice se calculeaz
ested oreleralmlodaiteratlvd.
recurslv,
Capitolul7

Metoda DIVIDE
ETIMPERA

generali
7.I. Prezentare

OtvroEET ltrpEnAeste o tehnicespeciab 9i se bazeazdpe un principiu


extremde simplutdescompunem problemain doue sau mai mulle subprobleme
(mar u9oare),caro se rezolve,iar solutia peniru problemainitial5se obtine
combinandsoluliileproblemelorin care a lost descompus5.Se presupunece
fiecaredinlre problemelein care a lost descompusdproblemainiliald,se poate
descompune ln alte subprobleme,la lel cum a fost descompusdpr6bbmainitiald.
Procedeulse reia pana cand (in urma descompuner,ror repetale)se ajungela
problemecareadmilrezolvare imediai6.
Evident,hu toate problemelepot fi rezolvaleprin utilizareaacesteiiehnici.
FSret6amade a gregi,putemafirmacd numerulloresierelativmic,tocmaidatoritd
cerinleicaproblemasd admitao descompunere repetate.
OrvtDE Er hrpERAeste o tehnicdce admiteo implementare recursivd.Am
invilat principiul
genoralprincarese elaboreaze
aboritmiirecursivi:
ce se inlampl6
la un nivel. se intempldla once nivel {avandgrij6 sd asiguramcondiltitede
lerminare). Tot aga,se elaboreazeun algontmprin DtvrDE
Er lvpEFA.La un anurril
nivel,avemdoudposibiljtdti:
1) am ajuns la o problemecare admileo fezolvareimediald,caz in care se
rezolveglse revinedinapel(conditia
de ierminare);
2) nu am ajunsin situaliade la punctul1, cazin caredescompunem problemain
doud sau mai mulle subprobleme, pentrutiecaredin ele reapeldmlunctia.
combinemrezultatele Sirevenlmdinapel.

7.2.A plicatii

7.2.1.Valoarea
maximidintr-unvector

O PJoblema7.1, Se citegleun vectorcu n componente,


nomerenalurale.Se
ceresd se tipereasca
valoareamaxima.

? Problemade mai sus estebtnecunoscuta.


Cumo rezotvemutitizandtehnica
i D'vrDeEr h,rPEBA?
:ual de informatice entruclasaa Xl-a 173

Rezolvare, Trebuietipdritdvaloareamaximddintrenumerele
relinutoin veclorde
: la j (initial
i=1Si j=r).

Pentruaceasta,procedemaslfel:
. daca l=j, valoarea
maxim5
va tiv lll
. contrar,vom lmp54i vectorulin doi veclori (primul veclor va contine
componentele de la I la (i+j ) aliw 2, al doiba va conlinecomponentele
do la (i+j) dtiv 2 + 1la J, rezolvdm subproblemele (afldmmaximul
penlrufiecaredin ele) iar solutiaproblemeiva fi data de valoareamaximd
celordouesubproblemo.
dinlrerezultatele
o'ogmulesteurmdtorull

va r v:a rf ay l1. . 1O l or #lncluato <los!!e.h.h>


tn t w t1 0 l ,n,
n .l r lnles e. t
trt u (ttrt l ,l E l J)
funotld @*(1. J :1nl6sE)
tl (tE = J ) rotul D vttl ;
va r..b .i tr t ger t
( a q l x (t, (t+ J ) /2),
t: t.J b .rIM ( (1+ l ) /trl , J ) r
th n ! @! E wt ll i f (r> b) rotum at
1!6 E6turn b, '

a t.Mx ( i. . ( t + l) a l l v 2 ), )
b ..ux ( ( t + J ) dltv 2 + 1 ,J ),

thob mx: EA ( c o u t< < " r -" , cl n> > n,


6ls tr8tqb, to r (l n t t.l rt< .nrl + + )
( c o u !< < ovti < < i < < i l rr,

t
c o u r< < ,! w _n< < rq (1, n),
)
to r l t.l t o n dlo

w rl to ( ' v t r , ' 1. ' ),


re d a t h( v t t l " )

EI! h ( 'mx-',Mx(1, n) )

t, Algorilmul prezenlat este exclusiv didaclic, in practice esle prelerat


clasic.
algoritmul
I\,letodaDrvrDE
Er IMFf,r

prininterclasare
7.2.2.Sortarea

D Probtema7.2. Se consjderevectorula cu r componente numereintregi(sa_


reale).Se se sortezecrescator,
utilizend
sortareaprininlerclasare.
Interclasarea
a doi veclorja tost studiatd.Dacddispunemde doudsiruride
valori,primulcu n elemente,at doiteacu n elemente,uinUuf"
poateobtineun vectorcarecon!inetoalevatorilesortate.Algoritmul
""rtiteiiun;i ".
de interclasare
esrepenormant, pentrucA eleclueaz'cel muttm+n_1compardri.

In ceEce urmeazd,vom utrhzaalgorilmulde interclasare


in vedereasorla_
unutveclotDnntnlerclasare

EI Rezolvare,Algoritmulde sorlareprin inlerclasare


se bazeazdpe urmdtoarea
roee:penlrua sortaun veclorcu n elementell imp54imin doi vectoricare,odaE
sorlati,s inlerclaseazb.

. ConformstrategieigeneraleDtvtDE problemaesle descomous::-


ETlirpEFA.
arreOouasubprobteme de acelagitip9i,dupdreTotvarea
lor,rezullatele se comb.:
(rn panicJtar-se
Interclaseaza).
Descompunerea unuiveclorin alti doi vectoricare
urmeazaa I' sorlati are loc pana cand avem de sorlal veciori de una
sa_
oouacomponenle,

in aplicalie,funcliasort sorteazdun vectorcu maximumdoua elemente


-
lnrorc lnterclasoaze rezultalele;dlvtq) implemnteazeslrategiageneralea
m6todelstudiate_

lY D v ec lo rra l rry 1 1 .,1 Ol o r *1nc1udl6 <tostlearn.h>

a, lr j. n r s 6 r, voidl aort (lnt D,tnt q,


1nr at10t )
Droc.dlure sorr (D,qrhrot (
4
v a r a rv c ro !),
tl (!tD l > atcl )

rl D t-.aqt t
tf alDl > a t q l
,
)

a t Dl : = a tq l ; rcid Inrrc(tnt D, tnr qr


i .nr r,1nr atl ot )
( l nt btl ol ,i rj ,ht
1= D ' Jer+ I, kE 1'
informatica

trocealure int.rc w h tl (i < = r & & j < = q)


(D ,q .r:inl6gea; wa r a tv e c to t), i f (a l tl < = 6tj l )
t b l h l - al i .l ;
i , J. k : t nt s er t i=i+1,

)
i !.D, l. - r + 1, k ; . 1;
wh tl ( i< = d) . nd (j<=q) dlo t b tk l .atj l ;
tl e l i l < = elJ I t lF n I _ j +1;
b tkl: - at il; l
i : = i+ 1; k ! . k + 1
!o ' (i = 1 rJ< ati ' + )
{ b tk l =atJl ,

j != l+ 1, k.=k+1 l

l o r (t= j rJ< .q, j r+ )


fo a j: = i lo r at o { b l k l =al i l ,

b l k l ! - aljl; k ! .k + 1 l

fo r (l = D ; i < ..I; l + + )
!o ! t!=j r o c a to { !ttl E b tkl ,

t lk l t = aI il; k :.k + 1 l
)

vol(l d1wlts, (lnt D.Int q,


tnr at10I )
a ti l ! E bt k l, kr.k+1
I! ( (q -p ) < -l ) sort{ D .q,rl

Drocedulo allvlq) a l tw tq r(D ,h.a),


(D, q r Inl.srrwa r arw c t ot ) , dllvIDD ( r+ 1. q, a ) t
j ,trl a r c (D ,q,e, r),
(q-D) <.1 l
if th en Eoll( D, qt a)
l

n,.(D+q) auv 2, ( int i,


altvluD(D,n,a), c d !< < rn r i , cr.n> > n,
dltvl4D (r+1, q,.) , fo r (L .l r l < .nr i + + )
Int rc (D, q ,n.!)
( c o u l < < ' a I i < < t< < ' I ri t
c l n > > 6tIl ,
)
a l tw L l D ( 1,n,.)t
rtt( tirt ), ! ad lln( n) ,
ro ! (t-1rt< .nrt+ + )
lor ir- t to a a lo c o u !< < al tl < < i n;
( ra I r, i, t lE' ) ,
l
rt t
readr r(.1 i1)

alivliE )(1 ,n,.) t


tot l.-1 to a d o c t t oln( alt l
Metoda DvDEr IMPERA

-ln continuare,calcuEm numerulaproximativde compardrielectuai de


FieacestaT (n). lvlaisimplu.
algorilm. presupunem
n=2k.
O problemase descompuneIn alte doud probleme,fiecare cu !/2
componente,dupe care urmeazeinterclasarea
lor, care necesitdn/2+n/2=n
comoaratji:

{0,. n=1;
=lzrll
T(n) l* n. aru"r.
I 12,]

T(n)= T(2k) = 2(T(2k1)+zka1=2112x


11+2k
=2T12k2 +2k-11+zk
=
21 1 2 r -2)+2k
+2r -...2k+zk+...^ 2r= n + n + . . . + n- n . k = n . lo g 2 n

7.2.3.Sortarea
raoide

n Problema 7.3.Flevectorula cun componente


numere
intregi(saureale).Se
cerecavectorulsd
fiosortalcrescdtor.
El nezolvare. Eslenecesare o functiopoz cafetrateazao po(iunedinvector.
cuprlnsd intreindiciidali de 1r (timitainferioard)
gi ts (timitasuperioare),Fiotd
acsteifunclll
estedea pozltiona prima componente a tttl poopozitiekcuprinsa
intr611 9i ls, astfelincattoatecomponentele vectorului
cuprinsointrelr. qik-1
sd fig maimlcisauegaledecetafkl gi loalocomponentelo veclorului cuprinse
intrek+l SiIs sdflemaimarisauegalsdecata ltt,
in aceastd
functieexlstddouemoduride
lucru:
a) t rdmane conslant,J scadecu 1;
b) t cregtecu 1, J rdmaneconstant.
Functia
esteconceputSastlel:
. inilial,
t valuavaloareati, iarj valuavaloaroa
ls (elementul
careinilid
seaflepepozilia
tt sevagesimereupeo pozitie dat6dej. saudeJ);
. selreceln moduldelucrua);
. atetlimpcatt<J, seexecutii:
- daceatil estestrictmaimaredecalatji, atunci se invorseaza
celedouarumere giseschimbd modul
delucrui
- I gi J se modificd
corespunzetor modulujde lucruln carese aild
programul;
- k iavatoarea
comund a luii giJ.
pentruclasaa Xl a
l&nual de informatice 177

9 *, e .n u a- ( 5,9,3,1,2 ), r.i=l, 1s= s ;mo d u ld elu c rua )l


. i= 1, j=5;
. atll>Et5l, decise inverseazd aflalepe poziliile
elemenlele 1Si 5,
decia={ 2,9.3.1,5) qi programul
heceIa modulde lucrub ) i
. L=2, 1=5'
. a t2l >a Isl, decia=12,6,3,r,,9, 9i se revinela modulde lucrua)l
. iE2, j= 4:
. a t2l >at41,decia=(2,1.3,5,9 ); s e t re c ela mo d u ld elu c rub );
. i- 3, j=4;
. lunctia se incheie,elemenluiaflat inilial pe pozilia 1 se gdse9te
acum pe pozitia4, loate elemenleledin slanga lui tiind mai mici
decat el, totodaldtoate elementeledin dreaptalui fiind mai mari
decelel (k=4).

Alternantamoduilorde lucruse explicdp n faptulce ebmentulcaretrebuie


oozitionatse cbmpardcu un elementallai ln dreaptasau in stangalui' ceea ce
impuneo modillcarcorespunzetoare a indicilorI 9i j

t Dupaaplicarea{unclieiPoz, esteovidentca olementulcarese allS initialin


,l poziliari va ajungepe o poziliek qi va ramenepe aceapozitiein cadrul
vectoruluideja esenlaalgoritmului
sorlat,faptcarereprezinta
FunctiaeuxcK are parametrii1t 9i r6 (limitainferioara
9i limitasuperioare).
metodaDNIDE
in cadrulei se ulilizeazd ETIMPEBA, dupdcum urmeazd:
. Poz;
seapeleaza
. seapeleazourcKpenhurt 9lk-1;
. seapeleazd
ourcK penhu
k+l 9if6.

va;ta;rta
c++ .
! ! r D v 6c t or larra y I1 ,.1 0 0 1 o r *lncrudo <Iost!M.h>
l n ! atl ool .n,k,
rcr.d Dor (tst U.l.nt lr,ht&
war l, t r , k r inls r;
k ,tl r 41100! )
{ l nl i 11l , Jrl s,c, i rE 0,.rrE -1,
Dr oc edur Do z (1 i ,L s :i n te g 6 .; v h l r (t< J)
rar ktitrt96i, ( tf (ati l > atJl )
v E i a rv c Eo rl t { cratj l t.tl l E A tl l ,
al l l E c, c-i l ,
wB r i, j, c , 11, j 1 :i n r e e r, i 1= -J1; l 1E -cr
,
j :J + l 1r
j 1t = - 1, )
i:
- t it
)
178 Capitolul 7. Metoda DMDEETIMPER^

voldl qur.ck (tnt li,tnt ls)


( t! (l t< Ia)
tr .tll >rtjl ( D or(l t.l r.k,!),
qul .ck(tI, k-l ) t
qui ck(k+ 1.Ia),
c!Erti1,
)
. lJ I !!a l tl t
)
t r I iI !-c t

t l! = _ j 1 , ( Int l,
l1! . -c coqt<<nn=n, clr>>n,
to ! (Irl rI< tnr1+ + )
i! = l+ : 11 , ( coul < < i a Ii < < t< < i t r,,
j
'-J+J1
)

l or (t.1rt< -!rl + + )
Droc.dur. CuLck(lt, lr:ltrr.g.!), cdt< < A Ii l < < udl l ,
,
t! r i< r .

Dor ( r t r r r,k , a ),
quic k ( 1r . ,k -1 ),
c qt c k ( k + l, l ,i )

! o! trrl t o n (l o

w! 11. { r . l' , t ,' !r' ),


! . r dr a( r t t l )

c ulc k ( 1, a) , _
lor t t r L t o r (!0
t E Lt . la( . t t l )

RefinelltSortarea
rapiddefectueazl
In medlel!.log2n operalii.
frr
! Demonstralla
necesne
cunogtinle pe carenu lo avelila nivelul
de matematic5
acstui
andestudiu...
pentruclasaa Xl-a
rlanualde informatictr 179

;.2.4"Turnuriledin Hanoi

I Problema7.4.Se dau 3 tije simbolizate prina, b, c.


EII
:e tijaa se g5sescdiscuridediamelredilerite,a9ezate
i ordinedescresceloare a diametrelorprivitede jos in
s!s- Se ceresAse mulediscurilede tija a pe lija b, utillzandca tij5 intermediare
pe
IEI
lja c, respectend
urmeloarelereguli:
. la fiecarepas se muleun singurdisc;
. nu eslopermissd se aqeze!n disccu diamelrulmai marepesleun disc
cu diametrulmaimic.

M Rezolvare.
Daci n=1, se facemuiarearb, adicdse mutddisculde pe tija a pe tija b.
Dacdr=2, se fac mularile!c, !b, cb.
in cazulin carer>2, problema se complicS. Notdmcu II(n,a,b.c) 9lru1
celorn discuride pelija s
muterilor pe lija b, ulilizandca lije intermediara,
tija c.

Confom shaiegieiDtvrDE ETlrvrPEFA,lncercdmsd descompunem problema


in alle doud subprobleme de acelagilip, umand apoi combinareasolirliilor.In
acestsens,observdmcd mulareacelor11discui de pe tija a pe tija b, utilizandca
tija c, osteechivalente
tij5 inlermediard cul

- mulareaa n-l discuride pe tijaa pe tijac, utilizand


ca tiji intermediard
lijab;
- muiaroadisculuiramaspe tijabl
- mutareaa r-1 discuride pe tiia c pe lijab, utilizandca tijd intermediard
tijaa.

Parcurgereacelor trei eiape permite delinirea recursivd a girului


A(n, a,b, c) astfel:
n=1
H(",',b,o=
{;?;,1,",",b),ab,H(n-r,c,b,a),

exemple:
.' Priviliurmdtoarele
'l) penlrun=2, avem:rI( 2. a.b. c).rl (1. a, c, b) . ab, s ( 1, c, b, a) =ac, ab. cb;

2)pentru
n=3,avem:
!t(3 ,a ,b, c ) . I r ( 2, a, c , b ),a b ,s (2 ,d ,rr,a )= E (1 .a ,b ,c ),ac,B (1,b,c,t),
a b ,n {1 . c . a, b) . c b,fl (1 .a ,b ,c ) = a b , a c ,b c ,ab,ca, cb, ab
180 Capitolul 7. ldetoda DMDEETIMPEM

VariantaPascal
{iDcluale <ioElred.h>

Drocduro he (n:in!sert
e. b, c : c ha! ) t
voi(l h6n (int n,cha! a,

( ir ( a =- 1 ) c o u t <<a <<b <<e u a [ t


Eil6 1n( a, b)

{ hd(n-1, a.ctb),
h atr ( a- 1, a, c , b) , c o u l <<. <<b <<e a d 1 t
Gite lt r ( a, b) t hsn (n-1, c, b, a),
h an ( n- 1, c , b, a) )
l

{ c o u t <<" N =n ; c l n >>n ;
vltre ( tlc= ), r 6adln( n) ; a-ta|, b r 'b t , c ='c r
'
ar-ta ', b :Erb' ; d! : ' c i,
)

7.2.5.Problema
tiieturilor

D Problema7.5, Se dA o bucatddreptunghiulard de tabli cu lungimeat 9i


indllimeab, avandpe suprafalaein gAurjde coordonate
numereinlregi.Se cere
sd se decupezedin ea o bucatede arie maximdcare nu prezinlagduri.Sunt
oermisenumaildieturiverlicale$i orrzontale.

EI Rezolvare.Coordonatelegduribr sunt relinute in doi veclori xv gi yv.


inilial, precum9i dreptunghiurile
Dreplunghiul care apar in procesultdioriisunt
memoratein program prin coordonatelecoltuluidin stanga-sus(x,y), prin
lungime
9iindllime (L,n).

Pentruun dfeptunghi(inilialpornimcu toatdbucatade tabld),-verificamdace


avemsau nu o gaurein el (se cauidpracticprimadinceles gduri).In situatiacand
acestaprezinteo gaur6, problemase descompunein alte patru problemede
acelagitip. Dace bucatanu prezintdgeuri,se compardaria ei cu aria unei alte
bucStifdrdgaurd,gdsitein lazeleprecedenle.
MenliondmcA dreplunghiulde arie maximetdrd gduri este retinutprin
aceiasipararnetri
ca 9rdreptunghiul
cu 95uri,in zonele*F. aF, LF, trF.
in concluzie,problemainilialdso descompunein alte palru problemede
acelagitip, mai u$oare,intrucAtfiecarenoudreplunghi
are col multr-1 gduri,dace
dreptunghiul inilialaveaD geuri.La acoasteproblemlcompararea solutiitor
consld
in a retinedreptunghiulcu ariamaximddinlrecelefardgduri.
!{anualde informaticApentru clasaa Xl-a t8t

cu o gaurS:
Fiedreptunghiul

h . xv(i),yv(i)
x,y
gauratrebuiesA indeplineascd
Pentrua se afla in interioruldreptunghiului,
s multanconditiile:
1) w{ i) > x ;
2) x w( i) < * + 1 ;
3) w{ i ) > y ;
4) lr y ( i) < y + h .

ve{icaldprinaceaste
Dacdlacemo tdietura gaura,oblinem
douddreptunghiuri:
1) x , y , x v (i )-x , h;
2) x v ( t ) , y , 1 + x -x v (i ), h.

in uma uneitdieturipe orizontald


se obtinceledouddreptunghiuril
1) x . y .L .1 ry (1 )-y ;
2) x , r r y(i ), 1 , h + y -try (i ).

Programul
esteurmdtorul
VarlantaPascal
t ype vect=a lrdy I L". 9l of *Inc1udl6 <tostr6M,lD
lnt l, h , l , n , a ! , y ! , 1 ! ,
hl,r d l 1 0 l , ! r y l 1 0 l ,

1 f,hf: Int6 q6 r , woldl dhtl){lnE r,lDt yrlnt I,


lnr h, i.nt& x!, !.nt& yf,
Int& l!,rnt& h!,
Int w tro:,Inr !ryt101)
(a, y ,1, h :inte go r, ( Irt saaj .l -0.r..1,
var xf? Yf,1f ,hf : int 6s 6! r v h tl a (1< .n & & | rasl t)
wa r w,lrylvcrJ i 1 ! (r.vl tl > x & e sl tl <1 &&
vB ! g asir:bo ole an ; !ry[il >y &e lrytI] <y+h)

{ a l i ntr)(a,y,w Ii l -x,h,xf ,
y{,1f ,hf ,F,]ry) ;
while (i<En) anal (nol saalt) d l nr)(w l tl ,y,1+ x-w l i l ,
h,af.yf,1l ,hf,w ,try),
t!(wtll>* )a I(wlil< 1)
a ti nE )(x,y.1,!ry1i 1 -y,xf ,
an d (w(il >y) and yf,,Lf,,b!,w ,!ry),
(rrytil <ylh)
a ttu[)(atrryIi l , 1.h+ y-rry[i ],
then tasit !=tae xf ,yl ,l t,hl ,F,rry) ,
el5 e i ! =i+1;
)
142 Capltolul7, lretoda DvtDEErlMpERA

rr (1.h>1frhf)
d lqr(x,y,w I il -s,
n,xf , r . f . ll, ht . w, ! r y )
d La r(xt'tl t , y . r + s - pI t l,
!,:. ! . ! { . r t , hl, s , ! : r ) )
dhD (a. !., 1, yv I I I -r, )
Br, y f , Lt , \ t , w, ! a) t
altq ) (x,tr y t ll, 1, h+ y - w I t l,
xl,yf . lf , hf , R, ! r y ) { c 4 t <<'. r n , c l n >t a t
lor ( t n t l '1 r l <t n r t ++)
( c o u t <<'x t " <<I <<" 1 =i t
r! (1 * h)>(1t * b! )
c o u t <<n y [ . <<t << n 1 - n ,

o' o1l l < < rl rn, cID > > l f


co(rt<<ilrrn, clar>ht
(1t4, ( 0, 0. l, b. x!, y!. u.
hl ,* v,w ),
cout< < nxr' < < rl < < n yrn< < y!

!o! tlrl to a alo

EIt.( raI , lr '


', t, )t
t.rd h(wttl ),
|, t , ),
"Elt.( 'yt ':.'
r..dra(tryItl )

dltqr { 0, o . 1, h, *!, y!.


Lt , bt , N trry l t
I
t r ll. I s ( ' *. , , |t !. ' y .' ,y !,
x - |,1 !, t h r
" h !)
Manual pentruclasaa xl-a
de informaticA t83

7.3. Fractali

Fractaliiau fost introduFiin anul 1975 prin lucrarea revolulionarea


matematicianuluifrancez Benoit Mandelbrot.'O teorie a seriilorfractale".ce
reunegtetotodat6diverseleteoriidinainteasa. Eleste cel carea inventalcuvantul
"fractal",
de proveniente
latini ('frangere"
- a spargein fragmenteneregulate).
Noliuneade fraotal a aperut ca urmarc a studiuluivielii reale, in care
informaliageneticSconlinutdin nucleulunei celule se repetd la diferitescdri.
Calculatorulpermile ca o anumitefigurd (de exemplu,un segment)sd se
transtome intr-o alta, formatddin mai multe figuri iniliale(de exemplu,o linie
frantd)Si fiecarefigurd oblinutesA se transformein mod asemanator(aceste
transformdfi necesitdfoartemultecalcule).
Acesteformegeometriceau fost considerate ln trecuthaoticesau "aberalii
geometrice",iar multe dintre ele erau atat de complexe incat necesilau
calculatoare pertormantepenlrua le vizualiza.Pe parcurs,domeniigtiinlificeca
fizica,chimia,biologiasau meteorologiadescopereau elementeasemanabarecu
fraclaliiin viala real5.Acegtiaau proprielimatematiceexkem de interesante,
carede multeori contrazicaparenta,daracesteadep}gesccu multcunogtinlele de
matematice dinliceu.
lnaintede a prezentacatevaexemple,trebuiecunoscutemai int6i noliunile
de bazi pentrua lucrain modgrafic.Acesleavorli prezentale
in continuare.

de qrafici
7.3,1.Elemente

(varianta
7.3.1.l . Ceneralltiti Pascal)

LimbajulPascalcontineo seriede procedurigifuncliicarepermitrealizarea


unor aplicatiigrafice.Acgsteasunt reunitein unitaleaci PH, ce se gdseqtein
subcatalogulrrNrrg.

Pentruca o imaginese poatdapdreape ecran,calculatorul utilizeazeplaca


video,carediferaIn functiede memoriavideo9, alli parafietri.PentrLa accesao
placd video, trebuie sd folosimanumiterutine speciale,specitce lof numite
Dalver"e.LimbajulPascaldetineo colecliede astfeldecomponente sofhiaregiln
functiede placace a fost detedatein sislom,se incarceun driversau altul.Aceste
figiereau extensia"bgl". Deoareceperformantele componentelor hardwareau
depdgitcu mult capacitalilecca sas EGA,ne vom refeti in conlinuaredoar-la
driver-ulvca(VldooGraphlceArray),dezvoltaide firmalBM.Driver-ulvcapoale
lucraTnmai multe moduri,insd vom preferamodulstandardde lna td rezolutie
'"vc}Iu" (constantd
de tip intreg),ce poateafiga540 x a80 punctein 15 culori.
184 CaDitolul7. MetodaDMDEErIMPEM

Selectarea qi a moduluide lucruse face prin utilizareaprocedudi


driver-ului
iEitgfal)h. Aceastaare trei parametri:sdlivr (de tip lnteEe!) care conline
codulasociatdriver-ului, sinode(de lip intsr) care relinemodulde lucru9i o
variabilade tip rlins, carearatAcaleacrtre unitateaGRAIjII.Formageneralda
acesieiproceduri esle
initslapb ( sitriver, Emoile. 'ca1e' ) r.

Primiidoi pamehisunttfansmigi
prinreferinld.
Initializarea graficse poatefaceln douefeluri:
sistemului
1) prina solicitasd se identificeautomatplacagraficd$i corespunzebrei sd
se incarceun anumitdriver9i sa se selectezemodulde lucru- cel mai bun din
punctde vedereal performantelor:
Dlocctur inits;

qdriver 3= detectt
initgEaDh ( 9diiv6r. !tr@dl, ,c: \tt\bst, ),
if srEDhresult<>o rh6n

srireln {$ Tenr Bt iv B eauet Bt z ) ,

Conslaniaalorect are valoarea0 9i se specificdproceduriiidentificarea


automatd
a driver'ulur
9,a modulurde lucru.
Vom retineaceasteprocedurdpentrucd o vom utilizain exempleleulterioare.
2) prin indicareacu ajutorulprimilordoi parametria unuidriverSia unuimod
de lucrusolicitalede programalor (ln acestcaz,nu se poateexecutaprogramulpe
uncalculatorce nu estedotatcu placagraficaspecificatd):
sdlrtwor :: l,GA;
grcdl .E VdAllIi
lnltsrath ( tilr:twr, slodlo, , c r \tt\b91, ),
if s'raDhra6ult<>O thn
b6sln
uil6l n ( sTonlativa esualal / ),

grafic5poatee9uadin diversemotive,cum ar fit lipsa


Tentativade initaalizare
unitdtiictrAPE,caleaindicaHgresit,eic.Testarease realizeazd
cu functiaintreagd
srarrhrssult care retumeaze0 in caz afirmativSi o valoarediferitede 0, in
cazconttar,

t Odataintra{iIn modulgrafrc,nu se mar poatescriepe monitor,


ca pend
j acum (cu wlite sau writIn) le9rreadrn modulgraficse face prin
procedurii
utilizarea cLo6eslaDh.
Manualde lnformatici ntruclasaa xl'a

(varianta
7.3.1.2. Ceneraliteti C++)

LimbajulC++ (in variantaBorland),conlineo serie de funclii care permit


unoraplicaliigrafice.Acesteasuntreunitein figierulGR.aPllrcs.
realizarea II, ce se
gdsegteTnfolderulnrcLItDE.
Pentruca o imaginesa poatdapdfeape ecran,caloulatorul utilizeaz;placa
video,carediferdin functiede memoriavideoSi alli parametri.Pentrua accesao
placd video, trebuie sd folosimanumiterutine speciale,specificelor, numite
Driver-e.LimbajulC++ detineo colectiede astfelde componentesoftware9i in
functiede placace a tostdetectatein sistem,se incarcaun driversau altul.Aceste
filiere au extensia'bgrl". Deoareceperformanlele componentelor hardwareau
depiigit cu mult capacitatile
ccA sau EcA, ne vom refefi in continuaredoar la
driver-ulvc'a (Vldeo Graphlcs Ar.ay), dezvollatde firma lBl\4.Driver-ulVGA
poate lucra in mai multe moduri,inse vom preferamodul standardde inalta
rezolulie"vcanr" (constantede tip inheg),ce poateafiga640 x 480 puncleln
15 culori.Fi9ierLrl
ce continedriver"ulutilizatesle''EcAvGA.ccr".
Selectareadriver-ului9i a moduluide lucruse face prin utilizarea'Iunctiei
lntrsEapb. Aceastaare lrei parametri: ralrlwor (de tip Lntser) care conline
gdod (de tip tqtes6!) care relinemodulde lucru9i o
codulasociatdriver-ului,
vaiabilede tip 6crtns, carearatdcaleac5treunitatoacnars. Formageneralda
acesteifunctiieste
lnlttraph ( &gdltlvot, &glnode, "cal6" ) ,.

Primiidoiparametri prinreferintd
sunttransmigi
Initializarea graficsepoatefaceln doudfeluri:
sistemului
1) prina solicita
se se identifice placagrafice9i corespunzdtor
automat ei sd
se lncarceun anumitdriverqi sd se solectezemodulde lucru- col maibundin
punctdevedereal perfomantolor:
voIC tltt ( )
( cdrr.vs! r DEM|,
lnltgrcDh ( &g<blvo!, &trcde, iEt \ \BoErrA$Dc\\Bor') t
1! (srarhresutr() )
{ cout<<"t.ntatlw. $!.ualt6. r,
cout<<iA!'.sa o c!!la Derllru A hchiale,..rt
slch( ) ,
4t t { r ) '
)
l

Constanta DErEcr are valoarea0 Si se specificdfunclieiidentificarea


automatd
a driver'uluiSia moduluidelucru
Vomrelinefuncliatrit ( ) pentrucdo vomutilizaln exemplele
ulterioare.
DIVIDEET IMPERA

2) prir rndicareacu ajulorulprimilordoi parametria unuidriver9i a unuimod


.
de lucrusolichatede programator {in aceslcaz.nu se poareexecuta;roQramuloe
un calcula{orce nu estedotatcu p'acagraficaspecificatd):
qdlrivor != VCtAr g@alG := VcA'lI,
ini,lsraDh (Egdlrlyer, &grode,
'E ! \ \ BORT,ANDC\ \Ber ' ),
tf {srathrsutt ())
t cou t<<nr 6nr at iv a ! r eus lr e, r,
cou t<<t r t r DaaE o t at a Ds t 4 a lnchidte,..!,
rerch ( ),
exi.! ( 1) ;

Tentat;va
de inilializare
graficdpoatee$uadindiversemotivecum ar fit lipsa
. .
unrlal GRApErcs.calea Indicatagregit etc. Testarease realizeazacu fun;tia
intfeagdglal)hreBult ( ) care retumeazdo in caz afirmativgi o valoaredjferitd
de 0, in cazconlrar.

Odateintra!,in modulgfafic,nu se maipoatescriepe monitorca penaacum


jt (de exemplu,cu cour). le$rreadtr modu,grafic se face prin
utitizarea
procedurii
closesraph( ).

Atenliel Pentrua pltea scrie9i rula programeC++ ce utilizeazamodulgraftcal


lirnbaiului.
trebuiebifatdurmdtoareaoptrune,din meniu:
Opllons/ Ltnker/ Librarles/ craphlcs llbrary.

7 .3 .1 ,3Se
, tarea
c ul ori l or
l i proc es udle d e s e n a r(ep a s c aiil C+ + )

Cu sigu/ant6.placa video utitLatSde dvs. are performanteSuDerioare


moduluistandardVGA. ce se regdsegteln dnver.utlimbajuluipascarsiu Ci*.
rertru a generatrza
Insa.vom consideramodulmenlionatanterior,ce poatereda
15 culori,reprezentalo
pe a biti.

Fiecareculoarede bazd are atribuitdo constantede la o la 15, precum


LrmeazS. 0 - btack (neg'u)i1- btu (atbashu)i 2 - s!n (verde); 3 _ cyan
4 -!d (rosu):5 - D.gr!. (violet)i5 _ brows (naro)i ? _ ltghrsrsy
{rurcoaz}j
(9. doscnrs);I - dsrksrey (grrlnchis);9 - ttqhrbtu (albaslrudschis)i10 _
Ilsbtslen (verde doschis); 11 - ltshlcyan (turcoaz deschis): 12 _
r.iqhtrd (ro$udeschis)t13 - ltshtrusnra (violetdeschjs);1a _ y11o!,
(galben)Si15- $btr (atb).

f Acesteculorisunt cele ir\plicite.penkli a ulilizamai multeculori(dar nu in


i aceras'!.np).se poatescl.imbasetul(paleta)de culori.inhucatin acest
momenlnu sunl necesareo mulUtudine de culofl,nu vom prezentain detaliu
acestaspecl.
Yanualde lnformaticlpentruclasaa Xl-a t87

) Penlrua selaculoateade lundal,se utilizeaze (in Pascal)sau


procedura
(in
funclia C++)
atbkcolor ( culoar ) r,
Exemple: stbkcolor(5) r sau ietbkcolo! (RED) , .

t Selectareaculodi cu cate se desoneaze se lace cu aiutorul procedurii(in


Pascal)sau funcliei(ln C++)
stcolo! (culo.r., ,
Exemplu:aetcolor(15) r sau s.tcolor (nsrTE) ,

.L Ob8ervalii
Schimbareaculorii nu afecteazece am desenatanterior,ci doar ce este scris
dupaapelulacesteirutane.
C++,numelesimbolical culoriiso scrieobligatoriu
in cazullimbajului cu
maluscul9.

Ooeratiade desenare
Oricarear fi modulde lucruales,un punctse reprezintd printr-unpixelde
coordonalex (linia)9iy (coloana), ambelovalorilntreglPunctuldinstanga-sus are
coordonatele(0, o). Pentrua ne mutsla pozilia(r,v), vomlolosiprocedura (in
Pascal)saufunctia(ln C++)Dovsto(*,v). Psnlrua trasao liniede la punctul
curent,determinat anterior,panela o noudpozitle,vom utilizaprocedura (in
Pascal)sau functia(in C++)1lrto(!.1,v1). Astfel,vom oblineo lanieIntre
puncteledecoordonale (x.y) 9i (x1,yl).
Exemplu.Maijos,esteprezenlal un progrance deseneazd o liniepe diagonala
principald (de
a ecranului lacollul dinstanga-sus la collul
dindreaptajos)l

De asemenea,doud functii foarte utile sunt s6tltraxx 9i c.tD.xr. (in


Pascal)sau rottna:tn( ) 9i sth.xy( ) (in C++).Acestealntorcvaloareaminimd
9i respectiv,maximda coordonatelor de pe ecran.Astfel,cu ajutorullor se poate
obtineo independenterelativaa programelor falade modul9rafical sistemului
I88 Capitolul7. I\,4etoda
DvrDEErtMpER^

7.3.2.Cutba
lui Kochpentruun triunghiechilateral

Se considereun kiunghiechilateral_
Fiecarelaturea sa se transformda$a
cum se vede in figura urmitoare(se impartein trei segmentecongruente,se
elirnindsegmentul
din mijlocAise conshuie$te
deasupraun tfiunghiechilateral):

Figua7.1.Exempu de kanstomafe

Fiecarelaturda aceslurpoligonse transforma


oin noJ dupaaceeagiregula
Se se vizualizeze
figuraoblinutedupdrs pagi(nurndrcititde ta tastaturd).

t Aceastacurbdestecunoscutaln literaturade specialitate


ca fiindcurba lui
j Koch (Herqevon Kocha fost matematicansuedez9i a imaginataceastd
curbain anul1904).
Programulprincipalva apela,pentrufiecaresegmentcareconsUtuie o lature
o proceduranumitdseneraror Aceaslaexecutatr;lnsformarea
a lriunghiului, de
Is ori, avand ca paramotride inhare coordonalelepunctelorcare conslituie
extremitelibsegmentulua, numerulde transformdrifdcute (n) qi numdrulde
hansformdri caretrebuieefectuate(1s). Pentrua inlelegefunctionarea
pfocedurii,
trebuies5 avem un minimumde cunogtinlespecificegeomeirieianaliiice(ce se
poatefacefdrdmatematice?).

. FieAB un segmentde dreaptd,undeA esteun punctde coordonate(x1,y1),


iar B are coordonatele(xr,yr).Doud punctep1 9i p, impat segmentulinlr:un
anumtraport,notalcu k

.. .tr-k \
rt=-;-' tt=_. rt-;-l.
- t:

Demonstrali
singuriacesteformulel

_ Fie segmentulAB cu A(x1,y1)Sj B(xr,y2). pLtnctete


Considerem C Ai D care
impartsegmentul
in treisegmenlecongruente.
punctuluiD:
Aflamcoordonata
, DA - r,-2 i. r, r2 r,
t' =
- D B = -' t 3 l
"=
Problema consta in stabilirea coordonatelorvaduUi noului lriunqhi
echilaleral.Acestease obtindacese rotegtepunctLlC i1 juru punctutui
D;J
unghiultt /3. Rotaliao efectueazd
procedura
!otp1ar.
Dentruclasaa xl-a
Manualde informatice 189

s la bazaprocedurii
Se prezentamalgoritmulcare Enerator:
. se porne9tede la segmentul AB;
. se determindcoordonatele punctuluicare constituievarfultriunghiului
echilateral(sd-lnotemcu V)i
. in cazulin caresegmenlulnu a fosttransformatde 1E ori, se apeleaz;
generatorpenhusegmentele AC, CV,VD 9i DBI
. conkar,se apeleazeprocedura caretraseazeliniafrentdACVDB
in programulprincipalau fost alese punctelecare determindtriunghiul
echilateralinilial * plasat in cenlrulecranului- Si penku fiecare segmentce
o laturda acestuias-a aDelatprocedura
constituie senerator. Odatatrasdcurba,
se coloreazd interiorulacesteia.
Programul
esleurmdtorul:
VarlantaC++
* ls c luale' lr r aphtc s . h "
var Lr gdrtwer, srcdo, #inc1ud6 <i,oerEd,b>
1E rinteg6!t #includ6 <alallib.h>
:nEa! l@a ! r[r69ef ; #includle <co!ro.rr>
*ltrcludo <Eth.!t>
Dlocdture tlltst int gdrlwr,srodle, 14, t t

p.oc6dur6 rolDl$ (ac,Yc,xl.


y1:intog6r, var a,yr intesor,
rcld lolplan(ht xc,idt yc,
Int x1, int yl,int &a.
a r- roual ( ac+ ( al -xc ) * lnt &y,f1oat sghi)
co8 (ulshi ) - (y1-yc) r {x E cetr (xc+ (x1-xc) tcos (ua&i) -
( YI - Yc ) r 3 1 t r {u r s h i ) );
y r- rosdl(yc+ (xl-ac) * y E c s t l { y c + ( x 1 - *c ) , B t D {u n s h t ) +
sin(s!'bi) + (yl-lE) | (vt_vc) *co6 (unshi ) ),
l
voidl d6sn6r {Int a1,tnt y1,
lnt x 2, lDt y2,l,nc x3,ia! y3)
tlocaluro doaonz {x1,yl,x2,
y2, x l ,Y3 rI nt 6er ) , { r c v et o( x l, y l) ,
11n6r o ( at iv ( ( 2 *x 1 +x 2 ) , 3 ) . q u o r ,
div { ( 2r y 1+y 2 ) , 3 ) . c u o t },
U! to ( (2*x 1+ x 2) diw 3 , linet o( * 3, y 3) ,
(2iy 1+ y 2) dlLv 3 ), linet o ( dt w( ( x r +2 r x 2 ) , 3 ) .cuor,
line to (x3. y 3) t diw( ( y 1+ 2r y 2 ) , 3 ) . q u o t ) ,
lt t r.to ( (x 1+ 2r x 2) dr lv 3 r lint o( x 2, y 2) , )
(y 1+ 2r y 2) dlt v 3 ) r (lnt yl,
voial getrerllo! xl,i4!
I in6to (x2 ,y 2) , 1nc x 2, int y2,tnt n, irc 16)

lolDlah ( dlw ( ( 2 *a 1 +x 2 ) , 3 ) .quor,


gne r.ro r ( x l, y l, x 2, y 2, div ( { 2* y 1+y 2 ) , 3 ) . q u o ! ,
alt v ( ( x 1+ 2* x 2 ) , 3 ) . q u o l ,
v Er a ,y:a nt egr i at iv ( ( y 1+ 2* y 2 ) , 3 ) . q u o l ,
x , y , t LPr / 3) t
t90 Capitolul7, MetodaDrvrDEFr
IMPERA

r (!< r6)
fo rD16 ( (2* x 1r x 2) aliv 3, { s arato!(xl ,y1,al i v( (2* al ,+ a2),
(2 * y1 ry2 ) alir 3, ( x 1+ 2r a2) div 3) .quot,tl i w ( (2* y1+ y2) ,
a , lyt"+ztyz} dt v 3, x , y / Fi/ 3) t 3).quot,tr+ l t1a);
se!rator(al i v( (2* xt+ x2),
3) .quot,dtw ( (2ry1+ y2) ,
c'n era tor ( x 11y 1/ ( 2* x 1+ * 2) 3) . quot,a,y,r+ t,l a) ,
a liv 3r (2* y 1+ y 2) div 3r gnorator(* ry, dl l w ( (* 1+ 2rx2),
3) .quot.dl i v( (y1+ 2ry2) r
gneralor ( (2*x1+x2) div 3, 3) ,quol ,D + 1t La) ;
(2* y1+y2 ) dllv 3, gnorator(attv( (x1+ 2* x2),
x,y, a +1 ,13) i 3) .quol ,dl i v( (y1+ 2* y2) r
G'4ei.ror (a,y, (a1+2ix2) div 3).quo!ta2,y2.tr+ 1, 1a),
3, (y1 +2 * y 2) dt iv 3, nr 1. ls ) ;
tnnlor( (xlr2*x2) diw 3, e 136
' des6n6z(* t,y1,x2,y2,a.vt,
(y1 +2 ry2 ) dt w 3,
x2,y2,n +t" , ! a) t

la ate En z( al, y ! , a2, y 2, x , r ) i


t cout< < nl 3= ,' ; ci D > > r!t
tntt { ) t

rr = gl[l*( ) -320;
, ) r leBt llE{ 18) ;
ril6(,1 8: sotreaqro! ( l50r !'6tut {)-150,
16 O+IJr sotu:<y ( ) - 15 0, 1. 1s ) ,
gnelator ( 160+r/, ggt!u:<r' ( ) -
rr!.g elms-32 0t l 5o, 160+ ' j l l v(L,2),quot.
96nrdtor ( 160. golr!:.rr-150, srMr.y()-150-
16 0+!, g .tda : ! lf - 150, 1r t d) , ci l (E * (8ql t ( 3) /2) ),1r 1,6),
qe!rator { 16Ort ,96lm:iy-150, getrrrtor (16oral tw (!r 2),quol ,
160+tr dlr 2,gte!|.!r-tso - c6l trl r.y()-150-
I]* a ou ail { sqr t ( ! ) / 2 ) , 1, r s ) , c6t1(tJ, ( sqrt ( 3) /2) ) / 160,
g.!rator{160+tr dtlv 2/ gelnddr- sl MY y ( ) ' 1s0, 1,16)
150-r* round( sqrt (3) /2) , r60, 5 r!1116ry1 (1,4) '
!'6cl!6:r]r- 15 0 , t, 1a ) , f l ooal ttl L (dIw (q6tuB ' { ), 2)
. . r ! l11ar y l{ l ,b l u 6 ), . quor/ div ( sorndor ( ) ,
fXoodfitl (Cstrls dliv 2,
gotGrqr' aliv 2 r rdl) ,

Privitimaijosrezultatele ponhuditerito
obtinute valorlaloluils:

! a- 2 1 s :3 Is-{
Figua7.2.Exemplo
de fractaLi curbsilu Koch(triunshl
formatic! alutorul echilateEl)
9anualde informatici pentru clasaa Xl-a t9l

7.3.3.Curbalui Kochpentruun pitrat

unpakat.Fiecare
Seconsidere dupacumsevede
laturea sasetransfofmi
-r ligura
demaijos:

- --t-L-r-
Figura7.S.Exmplu
de lransromare

Fiecaresegmenlal linieifranteastfeltomatese transformd


din noudupd
aceeagi reguld.Se ceresa se vizualizezecurbadupdL. transformdri(valoare
c titdde latastature).
TEnsfomarea9i desenarea unui segmentsunt realizatede procedura
dl6n. Acasta
areca parametde intrare
coordonatelepunctuluacarc
determin6
segmentul, numerulde kansformariefectuate(n) 9i numerulde transfomdri
cerut(I!).
Procedura
conlineurmetorul
algoritm:
. dacd nu a fost efecluatnumdrulde transformari necesar,se
calculeazA punctelor
coordonatele caredelermin5
liniafrantioblinutd
pornindde la segment
9i pentrufiecaresegment
din aceasgliniese
reapeleazdprocedura
desen;
. contrar,
sedeseneaze
liniafranEobtinutd.
ln final,figurasecoioreazd. esleprezental
Programul in conlinuarl

ril
. ,tI r,rll, Varldma
Pascal. ,
*ircludt 'rr.Dhtc.,h'
vrr gdrlw!, g!od6,I! !iDtse!, *Lacludt <to.tr.u,h>
*lncluaL <.tdltlb.h>
DlocealuEo lalls, *tncrud. <conto.h>
*includt <d!h.h>
Droc6alur rolDls(ac,yc.x1. Lal sal!lv.!.!|!odl., 1.. t ,
vaE a,yrlnt.gert

l
itolul DtvtDEETIMPEM

Drocalure atean(x1,yl,s2,
y 2, n. 13. int s e !); v o i a t rotD l & (i ns xc" i nr yc,
v ar x 3. a4, *5, x 6 ,x 7 ,* 8 ,x c , i D! x1,l nt yl ,i nr & x,i nc dy,
y 3. y 4, y 5, y 6.y 7 ,y 6 ,y c ! i n to g 6 r;
{ ...
,
v o l d d66r(i nr x1, i rr y1,i nt
x l! = { 3*x 1+ x 2 ) tl i w 4 , x2,i nt y2, i nt n.i D t l s)
y 3. = ( 3*y 1+ y 2 ) d i w 4 ; ( i nr x3, x4,x5, x6?x7,y3,
! o! D1d( x ! , y 3 , x l ,y 1 .x 4 ,y 4 , xc,y3, y4 ty5,y6 ty7 t!8,yci
- D i /2 ) t ( x3= al i v(3* x1+ x2,4) .cuort
*c: = (xt+*2 ) dliw 2,
y c : = ( y 1+ y 2) a l i w 2 , y3= al i v(3ry1+ y2, 4).quor;
r ot Dlan( *c ,y c ,x 3 ,y 3 , x 5 ,y 5 , rorD r.s (x!,y3, a1,y1, x4,y4,
-vt P r/2t i
- D !/2 1 t xc-di v(x1+ x2t2) .quort
r ot Dld ( x c ,y c , x 3 ,y 3 t
yc:di v(y1+ y2,2).quor,
a6 .y 6 ,' ti /2 ) i
rorpf an(xc,yc,a3,y3,x5,y5,
x B ! = ( a1+ 3r* 2 ) a ti v tt
y 8 ! = ( y l+ 3r y 2 ) a u v 4 , -r{_pt/2) r
rotpl an (xc, yc, * 3.y3r x6,y6,
r ot DI aD( x 8,y S,x c ,y c , x 7 , tr7 .
M P t/2),
Di/2 ) t agrdl v(x1+ 3* x2, 4).quor;
ygE di v(y1+ 3* y2, 4).quor;
l otsD fq4(x8,ya,xc,yc,x7,y?,
NL,PIl2l i
desen(x1,yl ,x3,y3,n+ 1, 1s),
.1os6n(x3,y3,x4,y4.n+ 1r 16) ;
dE en(x4, y4.x5,y5, r+ 1,Is);
al eFn(* s,y5, xc,l .c, n+ 1,Is) ;
al 56n(* .,yc, * 6,y6, n+ 1,1s) ;
ddan{a6?y6,x?ry7rnrl , 1s) ;
al eaor(17,y7,x3,y8,n41, 1s),
d6gen(x3,y3, x2r y2, n+ 1,1s) r
)i
( tuvro (x1,Y1) t
Li ato(x3,1,' 3);
); l i nel o(* 4,y4);
lj
1i n6to (* 5,ys );
),

)
sllte ( tlsr, ) ; t eadlln( 1s ) ;
lDl.ls; stcolor (ral) t ( c o ut< < ' 1a= " ,. cl n> > ts;
d.a n(1 00 , 1 0O, 300, 100, 1r t s ) , tD i t ( ); sstcol or(6);
d.s n(3 00 , 1 00 , 300, 300, 1, 1s ) t d e sen(100,100, 300, 100r1, 16) ;
al66 D( 3 00 ,30 0, 100, 300, 1t 1s ) ; a t eseh(300,100,300? 300, t,1s);
ara a(1 00 / 3 00 t 100, 100, 1, 1g) , d lB n(300,300, 100, 3Oo,1,Is),
s6 rf illstyxo ( 1t blu) , d B .n (100,300r 100,10or 1,1g ) ,
floodlliU (getjtla* allv 2, 8 etf,i 11sry1{ 1,!),
q6t!Er.l' div 2, !6al) f,loodl l t1 (di v(s6@ s( ), 2)
.quot, alj.v( !rtm:rr' ( ) ,2 ) .quot,6) ;
s rcho; cl osgl aD h ( );
vanualde informaticipentruclasaa Xl-a 193

pentru
oblinutein urmaruldriiprcgramului,
Suntprezentatemaijos imaginite
:lieritevaloriale lui 16:

de fraclalilomal cu ajulorulcudei luiKoch(palral)


Fsura7.4.Exemple

7 .3 .4.Ar borele

Seda unsegmentAB.Cu ajutorul unarbore,a9acum


luiseconstruieqte
vedein figura
demaijos:

I
I
Figura7.5.Exemplud
hanstomar
in

Lungimea fiecdreiramuriesieo treimedin lungimea


initialda segmentului.
Fiecarelaturdse transformdin modasemenetor. Se cefesd se vizualizezo
figura
astfelrezultatd,
dupdI6 transformdri.
Pentfuoblinerea sepfocedeazd
ramurilor astfeli
. se considerapunctulsituatpe dreaptadeterminate
de segmentli
penlrucaleavem:
CA r,-.rr, J r,-r, y, J y) 3 y, y,
i= - =j : I =-
cB t-l l-l 2
. serotegteacestpunct lnjurulpunctului
B(xr,yr)cuununghidez /4;
. in jurulluiB cuunghiul-z /4 .
punctul
se roteste
194 Capitolul7. MetodaDtvtDE
ETIMpsr

In urma acestorrotaliise oblin coordonatele punctelorcare, impreundcu


punctulB, determindsegmentelece costituieramurilearborelui.
Procedura deEenezaro ca parametri de jntrarecoordonatele
unuiseamenl
numdrulde transformdriefectuate{n) Si numdrutde kansformericare irebuie
efectuate(rs). In cazulin care nu s-auefectuattoatetransformdrile,
se traseaza
segmentul(cu o culoareoarecare),se cajculeazecoordonatelepunctelorcare
determind ramurile9i, penirutiecarosegment,se reapeleaziprocedura.
esteprozentat
Programul maiios:

ue6 grlDh, crtt $ i trcl ual o' .l !athi cs,h"


*Lacludl <iost!6!!l.h>
vaE tdlrtv!, sroale, 1d 3ilEClt
{hcrud <ltdlib,bt
:!Ex, !d* . iE!69ort *lncludle <coato.h>
Drocdlu!6 lnltg, *hclual <uth,h>
ln! ldrr,vor, !E!od!.1., Lt

Drocodlure rotDle (xctyc,xlr


yl rl!!esE, var s,yrlnct6!,
ulslit ! rolr ) , v o tdr rctD l M(,.. )
, ( ... )

9rocilur alEne! (xL tyL,s2,y2, rcidl ala4z (Ltrr x1,tnr y1,


rI . I r r ir t gor ) , I nt x?,l n! y2,tnt n,tD r I!)
va r *r y r t nl6s 6r,

t 66tcol or (1+ r| sdd(15) ),


rcveto (:.1,yl ),
r ot c olor ( 1+ r a n a l o r(1 5 ) ), 1l n.!o (x3,y2) |
t lowr o( x l, " 1), rotD l an (x2,y2,dl v(3rx2-
llner o( x Z , y 2), nl , 2 ) .quotrtl l v(3.yI-yl ,, )
r olDl. t r ( x 2, yr, (3 * a 2 -* 1 ) d l v .cuol ,:r,y,!d_P r/{),
2, ( 3J y 2- y 1) a l v 2 ,* ,y ,ttI/4 , t al 6den.r (xe,y2, s,y, n+ t. rs),
d63r 6z ( x 2, y 2 ,x ,y , n + 1 , I!), tol D l a4(x2,ya,dLv(3r:.2-
r ot DlaE ( x 2, y 2 , (3 .x 2 -x l ) d tv al , r) .quor, dttv(3.y2-y1,
2. ( ! r y 2- y l) d l v z ,trtv , -D i " t4 1 , 2),quot,x.y, -!t_P Il l ),
dlr onez( x 2, y 2 , x ,y ,rr+ 1 , l !) , dl e.ea, { x2,y2, n,y,tr+ 1, 13),
,
nal, I

vr lle( t 1s r ' ) , c o ut,< < n1ar q, cl D > > I5i


re .d tl n (l s ),
i nM), srcoror (5),
d l B soz(al tv(setME ( ),2)
s6lbkcolor (shit6 ) ,
.quot,sotut< t/(),
alesonsz(getM* duw 2,
gern *r,, glin|s al i .v(straB ( ), t),{ uo!,
aIIv 2,
gtNr.y- 2 5 0, 1, 1g ) , tel u:.rf ( ) -r50,1, La) ;

)
vanualdeinformaticA ntruclasaa xl-a

Pentrudiversevaloriale parametruluide
intrare16, vom oblinearborii:

Figura7.6.Exemple
delraclalido tipalborc

t. Observa!ii
Exemplglograficeprezentateau tosl generatepentruvalorimici alo lui 16
deoarecela tiperire,detaliilesuntgreude observatpesteo anumitelimitd.
cenerareafractalilorrepfezinteo aplicatiea recursivitdlii,
tehnicaaplicate
fiind DN|DEEr h,rpEFA.Penlruvalorimari ale lui 18, timpulde efoctuareal
oalculelorpoate fi 9i de ordinul zecilor de secunde,ceea ce poate fi
considoratun inconvenientmaior.

propuse
Probleme
L Se citegtea>1, numdrreal.Se ceresa se scrieo functiecarecalculeazeh(a)
cu 3 zecimaleexacte.Nu estepermisdutilizarea a limbajului.
funclieilogaritmice
2, Scrielio funcliecarecalculeaz5prlnmeiodaDlvlDEETlrrPEaasumanumerelor
retinutedink-unvector.
3, Referitorla problemaanterioard: algoritmului
care este complexitatea folosit?
Seva consideraca ooeratiede bazdadunarea.
4. Se citegteun numdrreal xe(-10000, 10000). Sa se afigezepartea
Exempl:pentrun-1.23, se va afi9a:0.23; pentrux=-12.7, se va
fraclionarS.
specializate
afigao.?. Nuse vorfolosifunctii alelimbajului.
5. Se qtiecd ecualiax3+x-1=oare o singurdrdddcine (0.1).
realdtn intoryalul
Scrieliun program,careo afigeazd
cu I zecimaleexacte.
lvletoda OMDEETIM'ERA

6, Problemaselecflel.Se considerdun vectorcu n componentenumerenaturale


9i 1<t3r. Se cere se se determineal tlea cel mai mic element.lmaoinatio
rezolvare funcliapoz de ta sortarearapida!
careutilizeaz6
7. Se consderaun vectorcareretinen numerenaturale.Se ceresa se determine
dacS,existd un elementmajoritar(ad|ceun numarcarese gesegtein mai multde
lal2J+l elemente).
Victor Mitrana
8. Fiinddatx reat,se se catcutezeffiJ cu patruzecimateexactetNu se vorlojosi
funcliispecializate
ale limbajutui.
9, Se plea.cd la un pakat a c:rui suprafatase dividetn 9 pA4i egatepnn
.de
impi(irea fiecarei laturiin 3 pediegate.pdtratutd|n mijtocse etimin5.Cu pehaiete
r6masese procedeazdla fel. Vizualazali figuradupd 1E astfel de transformdri
(CovorulIui Sieo in sk\.

Rispunsuri
1. In(a)=x <+ a=er 1+ e"-!-0. Dacdnotdmcu f(x).e"_a, atuncitrebuie
rezolvatd ecualiaf(x)-0. Avemf(o)Eo-a=l-a<o 9i f(a)-e.-r>o. De aici,
rezultdcd f(x) are o rdddcinein inteNalul(0,a). Cum f{x) este strici
crescttoare(ca diferenidlntre funclia strict crescdtoare* 9i o constantd),
riddcina Algoritmulpe care Il fotosimse numeglein matematica
"este-unicd.
nleNalulul'.dat, din punctde vedereintormalic,corespunde
!1:.to11!!!u!jE(!ii
MCIOdEiDIVIDE ET IMPEhA.
Fie 11.0 Si 1s'., rn.(a+b)/2. DacAf(]"t)xf(n)<0, rddecina se gesegteIn
(It,'n), altfel rddecina este tn tn,tE). Conditia de terminarJ
este ca
lli-lsl< 0.0001, pentrucd trebuiesd avem3 zecimaleexacto.
:l-_
varldhta,Paecal
*i.actual <loscr.u.h>
lurctlon r.og[t ( a, 1I, 1a r aloubt ) ! *ircludle <n!!h . h>

double [ocN(dtdrble a,dloubx6 tt,


i! a!1 ths toc![.Eo aloubl rs)
( 1! (aFE l ) retua o,
{ ! . bs ( ll- ls ) < 0 .o o o t
t hn r r or d ,. (1 t+ 1 6 ) /2 i r (rab8 (1t-1s) < 0. oool )
rotun (1i + 1r) /2t
l! ( . 4, ( I i ) -a ) *
( e|. t ,( (l i + Is ) /2 ) -a ) < o if ( (:c' (xt) -a) |
(xD ( (rt+ Is) /2) -!) < o)
I loCt |! X t. (1 i + I6 ) /2 ) retum !.o!N(a,ti.,
- tro g N (a , (l i + rs) /2);
Los NrE l o s N (.. (L i + rs ) /2 , Is ) ta6 retuh r,ocN(a,
(u+ ts) /2, t6);
I
pentauclasaa Xl-a
uanua!de informatice 197

w rire ( 'a =' ): le a. un( a) ; { c ou< <'a =r ; c i n >t a ;


ditln (t re zu llEt c ou! < <n r 6 r u l t a r calcula!'
calcula t: 0, 8) : ! r 3) t <<L o g r | ( a , 0 , a ) << n a u ,
rit eln(, r6"L
zuolN(
lca c8, Dr eluBt ', cout<<"rezu1ta! DEelu.t "
<<1og (a) <<adl!,;
l

I Practic,la fiecarepas se injumbt6le9te ln care se cauti solutia9i


intervalul
rl aceastacorespunde stralegieigeneraleDNIDE ETlllrPERA,

esteprezentatmaiios:
2. Programul

!11' e ve cro r=e rlayll,. 91 o!

n, i !lnt g rt

slj@ (1i, L6 r irts6!) :tltsort

if 1i=1 6 th6 n sllm : = wt I ll

sMa:.s\lm(ri, ( 1i+ 13) div 2)


+ su a( (1 i+1 8) diw 2+ 1, la) ,

lor i:=1 lo n d o
!6aa t1n (wIil ),
w ! l.l61 n (sum (1, n ) ) ;

3. Fiecareproblemdse descompune ln alte doua 9i rezultatulse adund.Penhu


s mplitate, n=2k.in final,se oblineo{n). Puteliscrie9i functiarecursive
considerali
carecalculeadT (n), dar,pentrua ob\r4e rezultatut
corect,lualin.2k:

fo . . n=1;
r ( n ) = ] z r f 1 ] + r . r tr e r .

4. A calculalxl se reducela DrvrDE


ETlilPERA.
Parteafractionadse oblineugor,
dacdcalculdm lr-[:r].
t98 Caoitolul7. llletodaDrvroE
ETIMPEnA

5. VedeliproblemaL.

6. Funcliapoz returneazS poziliak pe care se va gdsi,dupe rulareaei, primul


elemenlal vectorului.In plus,toaleelementele de indicomai micdecatk suntmai
micisauegaledecatAtkl 9i toateelementele de indicemaimaredecatk suntmai
marisau egaledecaiatkl. Altfelspus:elemenlulrtll, carese afleduperularea
functieipe pozitiak, este al k-lea cel mai mic elementdin veclorulr. Atunci,in
cazul in care k-!, problemaeste rezolvatd.Dacd t<k, elementulciutat are
indiceleouprinsintro Ii 9i k-1 SireludmrulareafunctieiPoz inv acestelimite,iar
dacar>k, elementulceutatare indiceleintret+1 9i 1E Si reluemrulareafunctiei
Poz intre acestelimite.Datoritefaptuluica, la fiecarepas,se restrangenumerul
valodlorde cSutare,se ajungein situaliain carer-k.

Secvenlaeste:

Doz ( lt , t B , k , a ), { D or(!t,16.k,a),
I t t < k t h. D l s r.k -l , I! (l < | r) l !:k-1t
I t t > k t h. a 1 l rrk + l , tr (!)t) rt.k+ 1t

ffittln { ' Elcollul caulat r, cou!<<'ldEntul crurAr


alH ), < < rtl :,

de la problema
7. Dupdaplicareaalgoritmului anterioard,
elementul
din mijloc
trebuie
sdfiemajoritar.
8
Capitolul

Metoda BACKTMCKING

metodei
8..l.Prezentarea

.3,I.l . Candse utilizeazA ?


metodabacktracking
problemelor
in rezolvarea
se foloseqte
Metodabacktracking careindeplinesc
imullanurmdtoafele
condilii:

' solulialor poatefi pusesub formaunutvectors=*1.x1,...,x"' cu


:. r A r , x : 42, . ,,, x r I.:
. lor se considerd
iar elementele
multimile41, ar, . ., A, suntmullimifinite,
ce se afleintr-orelaliede ordinebinestabilite;
. nu se dispunede o altdmetoddde rezolvare, mairapidS

(" in conlinuare,oste prezentatun exemplude problemdcare poatefi


iX j rozotvalprinulilizaratehniciibacktracking.

GeneJareapermul{rllor. Se citesle un numer natural rl. Sd se


muliimii(1,2,..',r'.
toatepermutdrile
lenefeze Do exemplu'pentru
D-3,pemuterile ( 1.2,3) suntprezentate
multimii aleturat

tentruaceaste t1!arrA3-(1,2,3). FiepermUtarea


problemd, 213.Ea
unde
estescrisdsubformede vector, 241,lear 9i 3r|3

caresti la bazametodeibacktracking
8.L2. Principiul
Principiulcare sE la baza metodeibackirackingva fi prezentalprintr'un
exemplu,acela al generirii permuterilor. Cum se poate rezolva aceastE
oroblemd?
produsului
O prim6soluliear fi sAgenerdmtoateelementele carlezian:

{ 1 , 2 , 3 } x( 1 '2 .3}x{1 ,2131=lLL, !21 !3' 2L , 2 2 ' 2 3 ' 3 r, 3 2 , 3 3 }


x{1,2,3}- 11L!, !L2, L!3, L2L, L22t L23, t"3L' 1'32, L33' 2,.1'
2!2, 2!3, 22L, 222, 223, 23!, 232, 233, 3L1'' 3!2t 313, 321,
322, 323, 33!, 3321 333).
tolul 8. Metodabacktracki

Apoi, urmeazdsa vedemcare dintreelementeleacestuiproduscartezian


sunt pemuteri, adicd se contindnumai numeredistlncle.Asdet, 111, 112...
nu suntpermutdri,dar 123 estepermutare,9.a.m.d.Produsulcartezianare 27 de
elemente9i dintreele, doar 5 sunt permutdri.ln general,p.odusulcadezaan
are
na elemente,din 6are permutdrisunt doar nt. Vd dati seamace un asflei de
algoritmde generarea permutdrllor
esteineficient...

intrebareaestedacSproblemanu se poaterezolvaeficient?Sd obseNdm


ce nu are rostse generamun elemental produsului
cartezianpenhuca apoi,sd ne
dam seamaca nu estepermutare, deoarecenu estealcetuitdin numeredistincte.
De exemplu,daca la un pas al algoritmului
am generat22, e clar cd nu se poate
oblineo permutare, orjcarearfi numarulcareurmeazdpe pozitia3.

Princloiulmelodi

t Metodabacktrackingare la bazd un principiusimptutdacd in procesulde


generarea unuivectorsolulies=t!rx2.. . ., x", pentrucomponenlak, atunci
cand am genoratdejax1xr. ..x1, constatimcd valoareax! nu este bine
alease(pdstrand-o
nu se va ajungela o solulie),nu trecemcompononta h+1
ci reludm cSutareapentru alte valoare pentru componentak, iar daca
aceasEvaloarenu existe,reludmcEulareapenkucomponenta k-1.

Observatifaptulczrdupace am anatizatposibitetevatoripe carete poatetua


jt componenta k, avemdoudposibilitaltorl trecemla componenta k+t (tacem
pasulinalnte),ori mergemla componenta k-1 (facempasulinapol).

Treoem la exemplificarea
atgoritmuluipenku generareapermuteribr,tn
cazulTncaron-3,
r Compononta1 va memora numdrul f. intrucel existd
permutericare incep cu I, lrecem la elementul2 - tacem
pasulinalnte.
EITI
.
.
Componenta
2 va memo numdrul1. rfiT-t
Nu existd permutericare incep cu 1,1, motiv penhu care,
pentruaceeagicomponenld, vom relinevaloareaurmatoare. FFTI
adicd2. Intruc6texistSpermutericareincepcu 1,2. vom trecela olementul
3 {inainte).
. Componenta
3 va memoranumdrult EFFI
. Nu existdpermutericare sunt de forha 1,2,1,motiv penlru
careaceeaiicomponentd va relinenumdrulurmdtor,2. FFEI
. Nu existapermutdricare sunt de forma 1,2,2, moliv pentru
careaceea9icomponentd va memoranumdrulurmetol.adice FI;T.I
3. Am oblinutdejao primdsolulieqio afigdm.
Manualde informatici ntruclasaa xl-a

Penlru componenta3. nu existAo altd valoarepe care o l:T;T;l


autem utiliza.Drn acest motiv, vom trece la elemenlul2, |:I:-J-:J
iinapoi). Componenta2 are deja memoratevaloarea2. Alegemvaloarea
urmdtoare,3. lnhucat exist, permutericare lncep cu 1,3, vom trece la
elementulurmdtor,3 (inainte).

Prima valoarecare poate fi memoralSeste 1. intrucal nu r;T;T;]


existd perrnul?n de forma 1,3.1 trecem la valoarea L:I-UJ
urmdtoare2. Dar 1, 3.2 estesolulie9i o afiSem.

Algorilmutcontinudp6ndcandse ajungela componenta


de indiceo. in acel
moment,au fostdejaafigatetoatepermutdrile.

/ exetciliu. Arltali cum funclioneazeaEoritmul pand se ajunge la


de indiceo.
componenta

a metodeibacktracking
8.1.3.O modalitatede implmentare

Pentruugurareaintelegeiimetodei,mai lntai vom prezentaun subprogram


general,aplicabiloricereiprobleme.Subprogramulva apelaaltesubprograme care
au Inioldeaunaacelaqinume 9i parametri 9i care, dln punct de vederc al
metodel,realizeazdacelaqilucru.Sarcinaceluicareface programulestesd scfie
explicit,pentrt,fiecareproblemeln parte,subprogramele apelatede acesta

'/ Evident,o asilelde abordareconducola programecu multeinstructiuni.


Din
acestmotiv,dupdlnlelegereametodeibacktracking,vom renuntala aceastd
formastandardizata. Dar,principiul
fdmanenemodificat.

latd subprogramulcare implementeazemetoda. El va fi apelat prin


ba ck(L ).

VarlantaC++
Dloc6dlure bsck(kr lnt6te!) ; votdl back(Int k)
t
i r (6 o 1utte (k) ) ttD a!(),

( In tt(k)t
v h txe(succ6or(k) )
l f (w al i d(E ) ) back(k+ 1),
vhil aucc6or(k) do )
tt wBlid(k) thea back(k+1)
'
2O2 Capitolul8. t etoda backrrackinq

Se-lanalizem!Subprogramul arc parametrul


k de tip intreg.Acestparametru
are semnificalia
de indiceal componentei
vectoruluipentrucarese cauteo valoare
convenabil;.Algoritmulva porni cu componentade jndice 1. Din acosl moliv,
subprogramulse va apela cu back(1). Dupe cum observali,subprogramul
eslerecursv,

+ lnilialse testeazedacd s-a generato solulie.pentruaceasta,se apeleazE


subprogramul soLurte(k).

Penlrupermutdri,vom aveao soluliec6nds-a generato secventi alcdtuitadin a


numeredistincte.Cum subprcgramul este reculsiv,acestfapt se intampldatunci
cands-aajunspe niveluln+1.

t Dacds-a oblinuto solulie,aceastase afi9eaz6.Penkuaceastdoperaliese


va utilizasubprogramul
rtDar.

) in situatiain care nu a fosi oblinuteo solulie,se inilializeazenivelulh.


Initializarea
se facecu valoareaaflatdinainteatuturorvalorilorposibile.Se
va lolosisubprogramul tntr.

Pentrupermutdri,
initializarea
se facecu o.

t Dupainilializare,se genefeaze,pe rand,toate valorilomultimiiAr. penlr!


aceastase utilizeazdsubprogramul succeso!. Rolulsdu este de a ahibui
componenteikvaloareaurmdtoare celeidejaexistente.
t Pentru fiecare valoare generatd, se testeaze dacd aceasta
lndeplinegte
anumitecondllil de continuare.Acestlest este realizal
d0 subprogramul valtdl
t lh cazul in care condilillo 6unt lndepffnlte, se trece ia
componenta k+1, urmandca generarea valorilorpe nivelulk sa
conlinueatuncicandse revinope acestnivel;
t dacd condiliile de continuare nu sunl indeplinite,se
genereazeurmdtoareavaloarepentrucomponenta
k.
t Dupe ce au fost generatetoate valo le mullimtiAr se lrece, implicit.a
componentak-1, iaralgorilmulse inchejecandk,O.
Pentrupermutdri,pe fiecarenivet,valorileposibitesunt 4E11,2,.,.,nr.
Condiliade continuare,ln acestcaz este ca valoareaaflatdpe nivelull< sd lle
distinctein raportcu valorileaflatepe niveluflleinferioare.

de generarea permutdrilor
Programul esteprezentat
in continuafe.
vanualde informaticipentruclasaa xl-a 203

VariantaPascal :i l I rtl i :. ,.i :,j

*inclual <ioEtlea,h>
60l ! a!!Ey I1..1 01 of , *tnctude <iostteu.h>

plocdure in:Lt (k. lntsr)

l
succao! ttrt succso!(ttrl k)
funcllo!
(krinlosor) .bo o1 6e , { tr (s o l l kl < n)
{ 3 o 1tkl + + ,
l! ol llll <n lhn frun 1r I
.lao ratun 0;
sol Ikl !:soL tkl + 1, I
tn! waltdt(tnl k)
613e su .c6 .or.=f41 6 fo ! (t.1rt< = k-1r!.+ + )
1 f (sol l kl = = sor Ii .l ) 6v= 0t

{krlDt!'.r) rlFolat I
ta r .o 1 u tt(Irl k)
( r.tum k=.n+l,
)
f oE I!=1 co k-1 dlo
t! r ol lIl 1 60 l lkl t llen
wa ltd!-fa 13 o { fo r (1tr! l .1r t< .n;t+ + )
c c u t< < sol II] t
funcllon solulle ,
(krr.Dt6sr) :boole.nt
votd back(ttrt k)
so1ulr.6 r (k.n+1) ( ,.! (!o 1ul d6(k) ) ti 9& O;
-
{ i n l t (k) ,
Dfocduro !IDa', whr.1(.uccosor (k) )
I! (vr1l dl (k) ) bl ck(k+ 1),
)
tor lt.l to h do
ffitt6 (sol til ) t '
( cd l< < intn, ctn>>D ,

Drocdur6 back (k. integ6r) )

tnlt (k) ;
qbiL succEo! (k) do
4r vaLiat(k) rhn
'b.ck(k+1)
itolul 8. L4etodabacktrackinc

8.l 4. Problema
celorn dame i:

0 Enun!. Fiinddatao tablede gah cu dimensiunea Dcr, se cer toale ffi


soluliilede aranjarea n dame,astfelinc6tse nu se afle dou5damepe
aceea$linie,coloanesaudiagonald (damelesd nu se atacereciproc).
De exemplu,dace r={, o solufieeste reprezentat;in tigura9.1., a). Modu de
CH
oblinereal solulieiesteprezentat
in liguriteurmetoarc,
de ta b) la i):

g I
UU g
g g
g

g g g
g g
\llt

g \ll// lllt
E SU TU
g g
$li1

Figura8.1 Eremplupenlru.-{
vanualde informaticipentruclasaa Xl-a 205

Comentariilefedtoarela figu le anterloate


b) ObservAmcd o damdtrebuiesd fie plasatesingurdpe linie Pozilionemprima
damdpe linia1, coloana1.
c ) A douadamanu poatefi a9ezat6decatin coloana3.
d) ObseNemcd a treia darra nu poatefi plasatain linra 3 incercematunci
plasareaceleide-adouadamein coloanaa.
e) A treiadamdnu poatefi plasatedecatin coloana2.
f) in aceastd situa\iedama a patra Fu mai poate fl a$ezaE lncercandsd
avansemcu damaa treia,observemcd nu esteposibilsa o plasemniciln coloana
a'3-a,niciin coloanaa'4-a, decio vom scoatede pe table.Damaa doua nu mai
poateavansa,deci qi ea este scoasdde pe table. Avansdmcu primadameln
cobanaa-2-a.
g) A douadamenu poatefiasezatedecatin coloanaa {_a
h) Damaa treiase a9eazein primacoloanA.
l) Acumeste posibilsd plaslm a patradamein coloana3 9i astfelam obtinuto
solutiea orcblemei.

Algoritmulcontinul in acest mod pend cand trebuiescoasdde pe tablS


orimadama.

t Pentruciutarea$i reprezentarea unvectorcu n componenle'


uneisoluliifolosim
pe
numitEo1(avandin vederecd fiecareliniese gdseste
o singurddamd)Prin
sol ttl tntelegem ln carese gesegte
coloana pe
damade liniat

Aliturat,putetiobsetuamodulin careestereprezentatd 1
solutiacuajutorul sol.
vectorului

t Doud dame se gdsesc pe aceea9idiagonalddaca 9i numai dacA4ste


condilia:
indeplinitd
l601(r.) -so1(j ) l- ll-j I
in modul,dintrelinii9icoloaneesteaceeagl)
(diferenla,
Exemple:

Eo1(1) - 1 1'1
so1(3) ' 3 j=3
lsol(1) - 601(3)l = l1 - 3l :2
l i - Jl = l1 - 31 = 2

Flguta8.2.
2OO Capitolul8. Metodabacktackinq

b)
ii ;; g iilir. sol(l) = 3
soLt3) = 1
i=
j=
lsol(r) - sol(j) | - 1l = 2
l i - jl - l1 - 3l
g i".',
,',j' Figura8,3

lntrucatdouadamenu se potgesiin aceeagi coloand,rezuttdcd o solutie


estesub formdde permutare. O primaidee ne conduceIa oenereatuturor
permut]erilor
9i la exkagerea penkuproblemd
solulitlof (ca douSdamesa nu fie
plasateln aceeagidiagonale).Dacaproced;mastfel,inseamndca nu lucrdm
conformstrategieibacktracking.
Aceastapresupune ca imediatce am gdsitdou6
damecarese atacd,sd reludmcdutarea in attecondilii.Fatade programul de
generarea pefmuterilor,
pfogramulde generare problemei
a tuturorsolutiilor celor
n darneare o stngur:conditiesuplimentare, in subprogramul valtd. Maijos,
puteliobservanouaversiunea subprogramutui var.id. Dacdil utitizati
ln locul
subprogramului cu acelasjnumedin prcgramul de generare a permutdrilor,veti
oblineprogramulcare problena
rezolva celorn dame.

I VarlantdPascal
lutrction wal j.d(k!1nt6sr) ! in! w.ltd(ttrt k)
boo1e.tr, {
for (r.Dr I=1r 1<li,t++)
1! (!o1rhl..sor rlt | |
ab6 (60I Ikl -601ttl ) =. ! b s (k-I) )
fo . l!i1 to k - l alo
l! (a ol lkt r s ox t t l ) or
,
(als (so r l k l - lol lt l ) ( k - l) )
' abs
wa ud lrr!ats o

Problemaeste un exemplufolosit in mai loaie lucrdrileln care esie


prezentatd
metodabacktracking.

t^ ln ceea ce ne privegte,dincolode un exemplude backtracking, am avljl


a ocaztasa vedemcat de mult seambnarezolverite (prinaceastamelodd)a
doudproblemelnlre care.aparent,nu existan'c,o legetura.

/ exercttri
1. Desenali configuralia
tableicorespunzatoare vectorului
solF(3,1.{,2,5) si
verificalidaca
aceastareprezinta
o solutiea problemei
damelor.
Dentruclasaa Xl-a
vanualde informaticd 2o7

2. Explicati
de ce configuralia vecorului
corespunzdtoare Eol=(3,1.3,{,5) nu
esteo solutiea prcblemeidamelor.Carcestepozitiadin Eo1 la carenu s-a fecut
alegereacorectda uneivalorivalide?

de ce nu oricepermutare
3. Explicali a mullimii{1.2, ..., n} esteo soluliea
prcblemeidamelorpe o tablScu n linii9i n coloane.

folosindmetodabacktracking,
4. Determinati, o soluliecarese oblinepe o tabldcu
gaselinii9i Sasecoloane,gtiindci damaplasatepe ultimalinietrebuiesd se afle
pe a doua coloand.Consideralicd mai este util sa compbtamvectorul!o1
pornindde la pozitia1? Dacapornimde la pozilia1, ce adaptdritrebuie
fecute?

Maipulineliniiin programul
sursa
Panain prczent,am rezolvatdoudproblemeprin metodabacktracking:
generarea
permutdrilor celorn dame.In ambelecazuri,am utilizal
Fi problema
subprogramul
standard.

2 Esteintotdeaunanecesarsel folosimpe acestasau putemrelinenumai


,l"l ideea9i,dupdcaz,sdscriemmaiputin?
dupece am intelesbinemetoda,putemrenunlala subprogramul
Evident,
standard.
Penlruaceasta, standarduneledlntre
incorporemin subprogramul
subprogramolepe carele-artl ap6lat.
pentruproblema
aceastdincorporare
Vomexemplifica celorr dame,deja
rezolvate
standardizat.
t Putemoliminasubprogramul tElt. Esteloarlougorde realizataceastd
operatie. princafecomponentel
vomscrieinstrucliunea
in loculapelului k i
sealribuio.
t soLutto. ln locul apeluluivom testadacd k
Pulemeliminasubprogramul
esleegalcun+1.
t rtDa!. In locul apeluluivom scrie secvenla
Putemeliminasubprogramul
princareseafigeaze
6t.
+ Pulemeliminasubprogramul gucceeor. ln locul apeluluivom testa dace
valoareaaflatape nivelulcurent.
st tkl <n qi avemgrijesd incrementam

PutetiobseNain coniinuareprogramul
oblinut.Estecu mult mai sclrtl
Oticum,ideeade rezolvare
temaneaceeaqi.Subprogramele prezenlate
au iost
numaiincorporale,
nus-arenuntat
la ele.
2O8 Capitotut
8. Merodabackr.ackino

r Va anta Pasca
w.! so l3a Eay [ 1. *hcluale <iostred.h>
fincludte <Eth,h>
in r D , E o l I 1 0 l t

validt (kr intg!) in t v B l i d ( i n r k)


( for (irt i =r r i <k ; i ++)
il ( s o r t k l =s s o l I i l
ll
ab6 (sol tkt -dol ttl )
==a t s ( k _ i ) )
f or i: : 1 lo k -1 d o
t ! ( 3ol t k l l tl ) o !
-s o l
( . bs ( s ol l rl )
-B o l l i l ) l a b s (t-i )
woidl back(int k)
walt at trt.rs 6 { i l { k= = n+ l ) // sol uti o

( l or (tnc l = 1rl < .trri + + )


rrccodtur6 back (k, j.nt60i) ; c@ t< < sol Ii l ,

i! k-n+1 (solutto)
shi l e (E ol Ikl < n)
ll E\cc.ao,
( t lDA ! ) { 60l tkI+ + ,
t or lt r l lo n alo tf {w ul td(k) )back(k+ l )
E t ! (.o l H .l ) , ,
l

t cou!< < i l ri i , ci n> rn,


3olt k l t!0 , { l n l l }
idrtlo sollk] <n dio )
(rucc6o!)

3or t k l r.s o l tk l + 1 ,
1! v a L l (t(k )

ba c k (k + l )

b. c k { t )

Ungoriveliintelni9i o rezolvarc
ptecumurmttoaaea, carc in subprogaamul
bactr,penhuBucc6of se folosegteo instrucliune
repetitivddelip for:
{anual de informatici pentru clasaa Xl_a

VariantaPascal
Drocearure back (k r inEegr) ,

fo r i: = 1 t o n a to
E it 6 ( aol lil ) ,

!o ! i: = 1 lo n alo

to1lk l: - ir
l f walid{ k )
t heD bac k ( k + 1 )

a
l/ Exercilii

l- Testalisubprogramul genereriipermuterilor'
anteriorpentruproblema
Adaptatirezolvafeapfoblemeipermuterilor astfel lncat s, se afigezenumai
permutirilein careorcafe doudnumereconsecutive nu aunt aldturate
observalicd ordineade afigarea solutiilordepindede ordjneain care se
consideri elementelemultimilor41, A2, . Ce modificdritrcbuie aduse
procedurii recursiveback astfellncatpermutailede 4 elemenGse fie afigatein
ordinea: 4321,4312,423L,42L3,4L32,4!23, 3l2L, 34!2 ... 1-243, L23l?
Renurlalila utilizareasubprogramului valid,utilizandun vectorrolo6lt' in
carefolosl! Iil are valoarea0 dacanumdlult nu estedejafolositin solulie
Si are valoarea1 in caz contrar.Asltel,plasareavaloriit ln vectorulsolulie
(sollkli) trebuie insotitd de memorareafaptului cd I este utilizat
(folosit lll 1), la revenireadin recufsie(candse tnldturevaloareade pe
poziliacurente)fiind necesardrnemorarea faptuluicd t nu mai este utilizatin
solule (forosit Iil <o). Conditia de validarose redlce in acestcaz la:
D a c e fo l o s i t ti I = 0 a tu n cl ...

urmArilitoate modalitalilediferitede a aqezapatru obiecleidentilicateprin


numerele1, 2, 3, 4 pe un cerc,la distanleegale.Vom observacA nu toate
permutdrilede pahu obieclesunt configuraliidistincte,datoritedistribulieipe
cerc Astfelpermutdrile L234,234L,34129i 4123 reprezintd una 9i aceeaqi
Scrieli
conflguratie. un pfogram carc afigeazdnumai permutdrile distincle
conforma9ezdriipe un cerc Indicalie:se va considera Eot[1]=1 9i se vor
permutadoarcelelalteelemente.
itolul 8. Metodabacktrack

8.3.Cazulincarese cereo singurdsolulie.


problema
Exemplificare: coloririihdrtilor
Sunt problemecarese rezofuecu metodabacktracking
9i in carese cerea
singurdsolutie.
lmplementarea"ca la carte" presupune utilizarea unei variabile d
semnalizare(de exemplu,variabilasarr) caresa fie inilialo, la oblinereasolul
doriteaceastaprimindvaloarea1. Orice succesorva fi conditionatin olus de
valoareavariabileigara.
De aceasti datd,pentrusimplitate,
vom renunlala programarea
structurat:
givomopriinmodfo4atprogramul.
.:t In Pascar,vef utrttzaprocedura
h!l,t
I in C++, veli folosi funclia 6xtt, cu paramerut ExtE_guccEss
(o constantd).Pentrua o puteautiliza,trebuiesd includetifisierulantet
' ' s t it lt b, h" :

*tnclutl< stttllb. h>.

. In ambelecazuri,secvenlacare determind
oprireafo4ateeste trecuta
irnediat
dupdce primasoluliea fostafigate.

/ programul
exerct1tu.l\4odificali probtema
carerezotua celorn dam6,asde
lncetacestasd afigezeo singur5solutie.

O Prcblemacolorrrii hd4ltor. Fiinddatdo hartdcu n teri,se cereo aotultode


colorarea l'6rti,. utilizandcel muli 4 culon, asdel incat dou6 ldn cu frontier,
comundse fie coloratediferit.

f Estedemonstratfaptulcasunlsuftciente
numai{ cutoripentruca onceharta
a" sd poaEficoloraia.

Pentruexemplificare, vom considerahartadin liguraI4., undeldritesunt


numerotate
cu cifrecuprinseinlre 1 gi 5.
O solutiea acesteiproblemeesteurmdtoarea:
. lara 1 , cubarea1:
. lara 2 - culoarea2;
. lara 3 - cutoarea1;
. lara 4 - cutoarea3i
. lara 5 - cutoarea4.
Manualde lnformaticaDentruclasaa Xl a 2t l

Haftaeste furnizataprogramuluicuajutorulunei matrice(tablo!) t\,"1

tarai arelrontieracomunAcu taral


A(i.'r)= l1'
[0, alttel

I\ratriceaA este simetricd.PentrurezolvareaDroblemeise utilizeaze


veclo'ulsol, undesol[k] relineculoareaataqatdtdrii k. Evident,oricesolutie
areexactn componenre.

vaE ao lrarra y[l..9 1 ol *hcLuate <ioEtree.h>


{trc1ud6 <6tdtlib,h>
r !ur.y I1. .10, 1. . 101 ot i n t !, t, J, sol I10l , a I10l Il ol t

n,1, J r tnt s.lt int waudl(Irt k)


{ ro ! (t al t-l rt< kri + + )
tf (s ot l hl .= sor ti l & &
valld( krIal.q .r) t booloet
rttl tkl E = l ) returE 0t

lor lt.1 !o k-l alo


tl (sor Ikl !so r t il ) '
rctal back(tnt k)
sd (a IL.j,l' 1) ( lnt it
th6 v.tldlttta ls
( i o r (ID L 1.1;l < = nrl + + )
Drocdur back (k ! tr!sr) , c o ut< < aoL l l l t
:rtt (Exrn,succlgs),
l

fo r ( 1.1r1< .4r r.+ + )


fo ! Jltl lo n alo { 3 o 1 l kl .r,
s!r.t (.or IJ I ) , l l (v.1tal (k) )
b ack(k+ 1),
)
,
!o ! Itrl lo n at o

ao L lkl t rI, { cout<<"!|6aru1 dlo rrrlr"


L! va l jd (k )
then b.ck(k+1) l o E ( tnt l .1rl < .nrl + + )
fo t (Int I r1, J < ri . -r r J+ + )
( cout< < ' 61' j a1

writ ( tlll:snL il6 lariE' ), ctD > > attl tl l t


al Jl ttl .attl Il l ,
for 1t.1 to n d lo l
fo! j.=t to i-t alo
I
wltt ( ta I t, t, , , ' , j, ' 1c ' ) ,
! ad ln(!lt,jl);
atl,t1,.all,Jl
212 Caoitolul8. I\,letodabacktrackiho

? exercitti
l Soluliaafiqata estegisolutia careutilizeazd
unnumdr
minimdeculori?
2. Daceldriledincentrul figuriialaturate
suntnumerotate
cu1, 2, 3, {, iarcelede laexteriorcu5 gi 5,careeste
solutia
afrgate de programuldat?Esteaceslanumerul
minimdeculorinecesare?
Cateculorisuntsuficiente pentru colorareauneih5(i
partacularein careoricetardseinvecineaza cucel Flgu 8.5.
multdoudtAri?
4. Dali exemplude particulatate pe care poatese o aibd o hartdpentrua li
suficiente
douaculoripentrucolorafeatuturortdrilor?

8.4.Aplicaliialemetodeibacktracking
In
combinatoricd

8.4.1,O generalizare
utili
Acum,cd am lnvelatsd generdm permuldrilemullimii{1,2...n}, se pune
problemasd vedemde ce esteutilacestalgoritm.La ce folosegtefaptulcd putem
aranjanumerelo{1,2. , .n} in toatemodurileposibile?
Sd observim cA acest algodtmpoatefi folositpentrua aranjaorlcare r
elementedistincteln toalemoduriloDosiblle.

fi;|. exencte
1. Se dd o mlllime alcdtuitedin n literedistincto.Se cer toate cuvintelecarese
pot forma cu ele, astfel lnc8t fiecarecuvantsA confinan tilere distincte.De
exemplu,dacd mullimeaeste {a,b,c}, vom avea cuvinlele:arrc, acb, bac,

2 . Se dau numelea n persoane.Se ceresd se afisezeloate modurileposibilein


careacestease pot a9ezape o banca.De exemplu,dacAn-3, iar porsoanele suhl
IoaEa, co6tel 9i Mlhaela, atuncisoluliilesunt:
toana Cort1 ulhaeta;
Ioana ltlhala CoBtl,
Co6te1 loata ldlhae1at
r.ianualde informatici pentru clasaa Xl-a 2t 3

lntr-unvectorv,
In astfelde cazuri,celer elementedistinctese memoreazd
2Sacumvedetimaijosl

ro a n a l c o gtel l Mi haeh

Atunci cand s-a generat o permutare,de exemplu 213, vom afi$a


vl2lvt1lvl3l, adicdbac, ln primulcaz sau coEtel roana r'tihlela, in al
doileacaz.
Procedeulde mai sus poate fi folosit pentru oricare altd aplicatiedin
in prcbiemecum af fi: generarea
comblnatoricd, tuturcrsubmullimilor
uneimullimi,
generarea
aranjamentelor,
a combindrilor saua tuturorpd4iloruneimullimi.

,a
y'' Exerciliu.Scrietiprogra'y\ulcare
rezolvaexemplul2.

f Nlullimeapermutdrilor mullimii{1.2,...n} reprezintdtoate funcliile


j biie ciive tttL,2,...F,-+1L,2....,n). De e x e mp lu ,d a c d n = 3 ,
permutarea213 este functia f.ll,2,3ralL,2,3l definitd astfel:
f(1) = 2; f ( 2) = 1 ; f(3 )-3

us cartezian
8.4.2.Prod
O Enunt, Se dau n multimi:Ar, Ar,...4", unde &!{1,2,.'.,kr}, penlru
k=1, ?, .. ..n. Se cereprodusulcarlozian
alcelorn mullimi.

Exemplu: A"-{1,2 }, are(1,2,3}, A3.{1,2,3}.


ArxA,xA3.{ (1,1,1), (ttl-t2) lt,t,3, , (L,2,rl 1r.,2,2, ,lL'2,3,
(1.3,1), (1,3,2), (1,3,3r, ' (2,1,r1, 12,1, 2r, ' (2, r, 31, 12,2,lt, '
12, 2, 2), 12, 2, 3'), 12, 3, rL 12, 3, 2l , (2, 3, 3')',

E] Rezolvare,De la lnceputobservemc! este necesarse afigemtoate solutiile.


Sd observdmcA o solulieeste de forma cu xrAl, n2A:, ...,
x,ea^. De aici rezultdnecesitateafolosiriiunui vector601, cu n componenle,
unde6o1t1l va continenumerele naturale intre 19i k1, soll2t va contine
numerelenaturaleintre 1 gi hr, ...,or trrl va conlinenumerelenaturaleintre1 9i
*". Observ6mcd valorilecare pot fi luate601 I1l suntfnhe 1 9i k1, valorilecare
potji luale601 I2l sunlintre 1 9i k1,..,,valorilecarepotfi lualesol tnl sunlintre
1 9i k". Pentru a putea reline acestevalori, vom utiliza un vector a, cu n
componente, undeatll= k1, a12l= kr, ..., alnl= k-. Penlruexemplul dat,
v e c t o ru la (
va r eti ne 2,3,3 ).
lmportantlSd observdmcd ofice valoarerelinutide Eolltl intrs 19i kl
conditiilede continuare(estevalid6).Din acest motiv,nu mai este
indeplineqte
necesars6 utilizlmsubprogramulval.id.
214 Caoitolul8. Metodabacktrackinc

[,lai jos, puteti observaprogramulcare genercazeprodusulcarteziana]


multimilor
date:

wrr E,I:tDl.g . r ; *inctual <loat!e.h>


so r,.:.Er y 11. . 10l of i n l n, sor tl o:,a I1ol . i t
woid brck(iEl k)
( i f { k= = a+ l )
Drocdlui brck (k ! in!6!'E) ; ' ( fo! (t-1ri < .art+ + )
coul < < l ol III t
cou!<<nat1r !
lor lrtl to n dlo
Ett. ( r ol I I ] ) t
shLl o(sol tkl < .l kl )
( .ol l kl + + r b.oh(k+ 1), l
l
)

{
$ ltll..otlk t < . I k t dlo cour << nNrjsrrul dl. NlrlDlr' ,

rcl l k l . . . or lk l + 1, l oE (Iat t-l rt< .nrI+ + )


b.ck( k + 1) (.dt< < rrl r< < t< < " 1."
ctn> > .ttl ,
t

!
s!lt.('lll,unt dl. bultlllri ),

tor irrl E o n alo

Mitt('rI 'l'' )'


r.rah (r Itl"r')

,I, Obsorvatii

1. Avem k1xkrx...xk elementeale produsuluicartezian.De aici rezultacd


algoritmul
esteexponential.
2 . O altdinterpretarepenlrumetoda backlrackingt
fiinddate a muttimi:
.tr1,
A,, ...,
.[", produsul
carlozian al lor alxa:x...xr. se mainumegteGpafiulsolullllor.in
acestcontext,metodabacktracking caut5una sau toate solutiile,care sunt
elemente ale produsulLi cadezran 9i carelndeplinescanumtecondhi.Astfel,se
poatejustificafaptulcd, ln generarea produsuluicartezian,nu esle necesar
subprogramul vrltil pentrucd se genereazetoate elementeleprodusului
caftezian,fdrea verifica
anumite conditii.
Manualde anfonlatlcepentru clasaa Xl-a

DeSjalgoritmuleste exponenlial,
existdapticaliiutile,evident,atuncicand
fiecaremultimear poateluanumaiceteva valori9i unden esiesuficientde mic.

? exercilii
1. Tabelareaanumitorfunctii. Se db functia
f :A!XA2X. . . y.A"JR,

undefiecaremullimear estedatede numerele


intregidin interualulI.1, brl 9i
f = c 1 x 1 + c 2 x r+ .. . + c " x ., crR .

Se cere se se realizezeun tabel, in care pentrufiecarevaloaredin


domeniulde definiliesd se afigezevaloareafunclieicorespunzetoare
aceleivalori.
2. Scrieliprogramulcaregenereazdtoate"cuvintele"cu palruliterecare au prima
9ru.tma htere vocalelitera
a doua consoana dinmullimea
{p,R. s, T}, taratre.a
lle'd consoana dinmullimea (8, !,r,R,T,vl.
3. Scrieliprogramulcarc genereazd9i numdrecete cuvintede cinci litere ale
a fabetuluienglezse pot forma,cu conditiasd nu existedouaconsoanealdturale
9 n ci douavocalealdturate.

8.4.3.Cenerarea
tuturorsubmultimilor
uneimultimi

J Enunl. Fiinddatd muttimea


I-{1.?,....a}, se cerc sa se afiie2etoate
:Jbmultimile
ei.
:!J Eezolvare.Sd ne aminlimcA submullimibunei mulltmrA se pol reprezenla
:'r vectorulcaracter,sltc
v, undel

.....= 11, pontruie A


Vlll
^' I10, pentrui A
fe exemplu,dacd A.{1,2.3}, pentru submultrmea(1,3} vom avea
( 1.0.1). De aici,rezultdce problema se reducela generarea tuturorvalorilor
"-
.osibilepe carele poateretinevectorulcaracteristic.
Aceastainseamndcd o solulieeste de forma x1,xi,...,xo, unde
r. (0,1). 9i ln acestcaz,oricevaloare af retinecomponenta1, ea nu tfebuiesd
-Ceplineasca nicio condiliede continuare,
motivpentrucaresubprogramulwattil
_- estenecesat,

ln contrnuare,putelrobse.vaprogra.rul
caregelereazatoalevao.,e pe
le poaterelrnevectotulcaracterisiic
-re
Metodabacktrackin

*inclua!6 <ioatioa.b>
i nr n, torI10l .t,
voial back(iat h)
{ il (k==n+l)
( !o! (t-l ri < = nri + + )
c@ l < < sol Ii l t
cout<<6ndl,

'
{ sol tkl ' -1,
lrhtlo ( Bor tkl <1)
t 3o1l hl + + ,
back(k+ 1),
)
)
)

( coul < < ' nrnt cl n> > !t

? exerctltt
1. Problemanu esterezolvatdin totalitateProgramulafigeazenumaitoatevalonb
astfellncat programur
oe care le poatelua vectorulcaraclerisllcComplotati-l sit
afigezetoatesubmullimilemultimli( 1,2 . . . n' I
multimiicelor5 elevi'
2. Se citescnumelea 6 etevi Afigatitoatesubmulllmile
3, Se se afigezetoatenumerelescriseln baza10 a cerorreprezentare ln bazaI
ars n cilro,dinhe care exactk sunt egalecu l Valorilen 9i k s citescde t
tastaturd(n<12,h<r) De exemplu'penlrun'3 9ik'2, se oblin valorilel
59i 5

4. Realizati!n programcaregenereazd comblnaliide n cilre-0 9i 1 culcroprielalE'


existdcel pulino cifre de l De exemp\
ce ln orici grup d; 3 cifre consecutive
dacdn-{, se afigeaze oolo' oo11'0100,0101'0110'0111'100L
combinaliilel
1010,1011,1100,1101,1110'1111
5. Se citescdouSnumerenatu.alen 9i 3 (n<10,3<1ooo) Sa se afigezemullirnb
formatedin n numereprime cu proprietatea cd suma elementelordin fiecdt
multimeesteexactE.
bnual de informaticdDentruclasaa Xl-a 217

Observalli

Fiinddat5 o mullimecu n elemonte,avem2' submullimiale ei. lr'luTlimea


da6 9i subnullimea vide 6unt submullimiale mullimii datel De ce? Fiecarc
componentd poateretinedoui valori.Prin urrnare,
a vectoruluioaractedstic
numdrulde submultimi este

denon

De aicirezultdce aEodtmul caregenereaze


toatesubmullimile
mullimir
r,
2, ...,n esteexponential.
Uneori, probleme
velirezolva ln caresedAo mullime gisecereo submultime
a sa careindeplne$teanumite caracteristici.
in anu.nite problema
situalii, se
poaterezolvaprinutilizarea
unoralgodtmi mairapizi(polinomiali).
Gregeala
tipicdcarese faceestecd se genereazd toatesubmullimile,
dupdcarese
selecteazecea(cele)
careindeplinegte
condiliile
date.
Exemplu.Se da o multimede numerereale.Se cerese se determineo
submullimea sa careare sumamaxime.Problema se rezolvdugor:se
ca fEcendpartedin submultime
considerd numainumerele pozitive.
Altfet,
dacaamgenemtoatesubmullimile...

4.4.Cenerarea
combindrilor
Fiinddati mullimear8t1,2,.,.,n1, se cer toatesubmultimile
ei cu I)
mente.Problemaeste cunoscutisub numelede "qenerareacombindrilor
de
uatecaleD".So gtiecg numdruisolulrilor
acesteiprob'leme
este

(n- p)!p!
exemplu,dacSnE4 9iI'.3, solutiilesunturmdtoarele:
tL,2,3', ( L,2, r', (1,3,4) si {2,3, { } .

Enunt. Se citesca 9i I numerenaturale,Ilh), So ceresa se generezetoale


cu p elemente
mullimile alemultimiiA.{1,2,. . ., n}.

RezolvaJe.O solulieeste de fofmax1,*:,...,r!r, undex1, x., ..., xrc.tr.


lus. x1,xr, ...,tr, trebuiesa fie distincte.Cumla o multimeodinea elementelor
prezintdimportanld,putemgeneraelementele ei in orctinestncl crescdtoare.
,astdobservaliene ajutdfoartemultin etaborarea algoritmutui.
Penlruto1, EoI tkl >EorIk-11.
2t 8 Capitolul8. Metodabacktracking

b) Penlrufiecareke11,,2,...,91, Eoftkl<r-p+k. Sd presupunem,prin


ce 3k'
Aceastalnseamna
absud,ce aceasEultim5relalienu esterespectate.
astfelincAtsol lkl >n-p+k. Deci:

60l lk + 11 > n -D + k + L ,

ao1[ Dl > r - D + D En .

Absurd.De aici fezultd c6:

1<Eol t1l Sn-9+1,


Eol I1l <sol t2l9r-p+2,

so1 In-Ll <so1 [nl3r-p+D=r.

Relaliilede mai sus simplificemult algoritmul,pentru cd linand cont de ele, nu fial


este necesarsd se testeze nici o condiliede continuare.
| ; '' r :: vEii661ii
6i;'' i ,'
t; '
v ar r olr alr ey l 1 ..9 l o ! Itr!6 s e !; *hclud!6 <to8trM.h>
nr Dt anE 6 e | 6 rt l l t tr,D ,so1I1Ol ,
rctil brck(lnt k)
Droc6dtur back (kr iDle!'er) ;
tt (k-= D + l )
( l or (t.ttt< .trt+ + )
coul < < aol tr.l t
cout< <ndLt
)
wr lt e(s o l [I] )t
( t! (k> 1) sor tkl -3o1[k-tl ,
0186 sol [kl !0,
whtl. (sol tkl <n-D+k)
( sol ttl + r,
l! k>l lh.n ,ol lkl t.3or Ik-11 baok(k+ 1) t )
6 1 8 6 6 0 1 l k l r.0 , l
)

t ol I hl !.4 o 1 [k ]+ rt ( cotrt<<uDr,,, ci!>>at


cdt< < npE ur.ra> > r,

t, Examinandrationamenulpropusputemobservac5, ln anumitecazuri.
condlce\auna\goi\$ c\mu\\ (na\ta$\$.
a- ana\zaune\Drob\efne
I
I
pentruclasaa Xl-a
de informaticA 219
liEr:ual
I^
a{ Exercilii

| ", S" 0., dinplana r puncte.


Afigalicoordonatele
varfudlor
tuturor
I "oordonatele
@atelorcare aucavarfuripuncte
dinmullimea
considerate.
I
I :. Sedaun substanlechimice.Se Stieca in anumkecondilii.unelesubstanleintrd
I n aclii chimicecu altele.Fiinddatep perechide foma (i, J ) cu semnificalia
ce
J i-astantai intrain reacliecu substanlaj, se cerloategrupudlede <n substante
I ,*el incetoricaredouesubstanle dingrupnuintrdln reaclie.

I
I i.4.5.Generarea
aranjamenteior

I s e d a u d o u dm ultimir=t1.2....,DI 9i B= (1 , 2 , . . . , n ] . s e c e rlo a t e
I '-ncliileinjectivedefinitepe a cu valoriin a. O astfelde problemdeste una de
I lenerarea aranjamentelor de r lualecaleD ( Al ).
I
Exemplu: p=2,n-3. Avem:12, 21, 13. 31, 23. 32. Do oxemplu,
21 estefunctia
I
: :A+B daE astfel:f (1) =2: (2
f ) =1.Avemrelatiile:
I
I
I l i = : n ! : := n ( n - 1 )(. n- P+ t)
I (n-o)l
I
I
I Enun1.So citescn ir D. Se se generezetoa!6aranjamentele
de n luatecalep.
I
I Sd observSmce dacd se cunoagtefiecarsubmultimede D elementoa
I -lultimiide n elemente.atunciaranjamentele se pot obline permutandin toate
I posibileelementeleunei astfel do multirhr.Pohind de la aceastd
I -odunle suntemtentati sd generdmtoate submultimilecu D elementeal
observatie
I iultimii cu n elemente9i. din fiecareastfeldEsubmullime. sd obtinempermutdrile
ei.Exerciliul
f
T
I Pe de alE parte.se poatelucramull mai eficient.O solutieestede fofma:
I *rx:...x,, undex1,x2, ...,x!8. In plus.xr. xr, ...,xe trebure se fie distincte
I Spredeoseb,re de algoritmulde generarea combinafiloraicine rntereseaz:toate
I oermutdrileuneisolutri(acesteasunt.la ranoullor.alle soluli).Aceastainseamna
ce nu marputempunein solulieelementele in ordinecrescdloare. Sd recapitulam:
I
| - o solutieafe I' numeredinB;
I - numerele
kebuiesAfiedistincte.
|
Rezutede aicicd algoritmul esteacelaside la permueiri,diferentafiinddald
de faptulce soluliaare D numere,nu tr ca in cazulpermuterilor.
' '^ S Metodabacktracking
CaDitolul

intesr; +idclual <iostles.h>


vlr eol : array I1. '91ol
ntDr lntgi, inr n,D, Eol llol t
iDt valiil{int k)
(k: lntst) .b@1eFnt ( for (i!! i =I ; i <k ; i ++)
valid
if ( s o 1 t k l ==s o l l i l )

fo r i:-1 t o k _1 at o )
t! eol lkl =sol ltl thn
void back(int k)
va lidrE lalao ( int- i, j,

Dfocalu! bBck(k! inlelrf) t t : l o r ( j =1 ; j <z D ; j r +)


v.r i, j llnleqr, c o u c <<6 0 l I i l ;
dout<<6nallt
)
fo! ( i =1 , i <=n ; i ++ )
fo r J3= 1 c o D dlo
Eile ( dol I J l ) t t 6 0 1 t k l 't ,
if (validl(k) )
b a c k ( k +1 ) ;
)
fo! l:- 1 to D dlo )

sol lk l t
' . i. lhr
tf vlltdl(k)
blck ( k r 1)
)

back ( 1)

3 exeragr
'1.Se citescn, p 9i apoin literedistincteAfilali toatecuvintelecarese pot forma
cu 9 dintreele.

2. Se citescn 9i apornumelemci a E persoane9tiladca toate numelecare se


terminecu a reprezintanumede fat6' celelaltefiind numede baieli,sa se afi9eze
ie perechifatd-bdiatcarese pot forma Douamullimisuntdistincte
ioite multimite
dace cel butin una dintreperechidiferd De exemplu,pentrun:5' uaria' ana'
DolEa, Doru, cos!ri!, se afileaza mullimile:tMaria-Don' Ana-cosntrl'
(Iha-costnh, u!rl!-Do!u), {Ma!iB-Doru, Doina-coBmj"n}' {Dolna-Doru'
ualia-CoBtnt!), (tutA-Dolu' Doina-Cosnln), {Doina-Doru' afla-CoEmin}-
Manualde Informaticd clasaa Xl-a

3, Cein actionariai uneifirmetrebuiesd organizezeun numdrmaximde sedinte


tp mas6 rotundaia care se participeexactD dinte ei. gtjjnd ce oicarc do;e
9edrnlelrebuie-sediferefie prin aclionariiprezenli,fie prin veciniipe care ii au
ace9trata masa,stabilitinumeruldegedinlepe care le pot organiza.De exemplu
oacan-{ SrD-3. atuncisunt posibi\e5 confiquraliidileriteale celor3 actionari
a9ezatila masa rotunda:1-2-3: 1-3-2i 1-3-lti L_4_3i Z_3_t., 2_4_3
(configuraliile
2-3-1 9i 3-1-2 nu se considerd,deoarecesunt echivalente,la
masarotunda,cu configuratia 1-2-3).

8.4"6.Cenerarea
tuturorparti!iilor
mullimii{1, 2, ...,n}
Defin4la8.1. Fie mullimea AE(1.2,...,n1. Se numegtepa.tqi6a
multimiiA,un setdo k<Irmullimicareindeplinesc
conditiile
de maiiosl
.) AIU&U...vAr4;
b) Ar^aj=,, Vl*J (1,2.,.n).

Exemplu.Consider5m
multimea
r.(1,2,3), Avempartitiite:

{1,2} (3}
(1,3' (2)
(?,31 {1t
t1) {2} t3}

O Enunl. Se citegteun numarnaturat,n. Se cer toate partitijle


r . {1 , 2 , . . . , n } . multimii

El.Rezolvare.Chiardacegtimsd generbmroatesubmutlimite
uneimutlimi.tot nu ne
alutilse generSm
toatepartitiile.
1._ Pentrua puteageneratoateparttiile,trebuiesa gesjmo
metoddorincaresa
putemretineo partilie.O primdideene conduceta fotli.ea
un,rluector,'"o:.,lJtJ
dc6so1[ atuncilementult se gdsegteln mutlimeak a partiti;i.Toiusj.
crc .rk, nu
$(m mugmi suntTnpartittarespectivd.
Exjsteo partitiecarecontine. mi,iri-i
atuncicandfiecare
otemont
esteinlr-o
muttrme
9iuna r"lri"rnrilriii",
mutlimea
A.Cuattecuvinte,
num;rut ""i" ""Ai"" 'p:rii,fiJ
mutlimrtoi
ii"tr_"
fl![.r,::T" "'Ji"
avea.oordinetn generarea
sotuliitor,
etemehtete
mutlimii
A trebuiesa
l:^j,-Tl::
apaqind desubmullimi
consecutive
alepartitier.
) Dinacestmoliv,Bol[tl valuavaloriintre
t Sl
1$nax(6ol I1l, Eort2t,..., Eol fi_lt ).
222 Capitolul8. Metodabacktracklng

Prinaceaseicondiliese evitdsitualiain care,de exemplu,vectorul6ot reline


(1.3,L). Aceastaar avea semnificatia cd elementele 19i 3 se gasescln
submultimea 1a partiliei,
iar 2
elementul se g6segte in 3 a partiliei.
submullimea ln
acestcaz,lipsegte
submullimea 2a partiliea.

Se exemplificam algortmuluipentrucazulr=3:
funclionarea
- sol=(1,1,1) - A1={1,2.3);
- sol-(1,1,2) - a1=t1.2) i,,=t3);
- so1=(1.2,1) - a1={1,3} r,={2};
- sol:(1,2,2) - A1=t1l A,-t2,3);
- sol=(1,2.3) - A1=t1) A1-{2} ar=(3}.

I Se observemcA nici in cazul acesterproblemenu trebuiesa verifcem existenta


j" anumitorconditiideconlinuare.

Analizaliprogramulastfeloblinutl

v lr s o1! a !r.y IO ..1 0 l o f, i rt s 6 r, {incluala <lostroa.h>


n.i, J,ttEii: int6g6!t tn! n, so1 [l 0l ,
tr!* tlol , t, J,h!*rn,
(

for (I.2rI< .D rt+ + )


fo ! t!.2 ! o n do
tt (t!a![<.orttl )
1 f tlw1 h< 6o1l1l
tl B tFi ol (tl ,
lbD nnalll:-dol lll ; r<<endt,
t P. r llt l cout<<'PartHe
Glroln ( '), tor (l .1rt< {!* { r!rl + + )
lor i.tEl to lqla do
( !o! (J-1, J< rn, J+ + )
t! (sol tJl
lor I r .1 !o n a l o c@ t< < J< -rr)
<n i,
lf lo l Il l .I
(1 ,' !), cou! <<ondll ,
t hd ri .!.
rr.t.ln, l

'
rcl.al b{ck(tnt k)
( tat t, J, na:<,re.,
Drocodlur. brck (k,Intg.r), Ir (krra+ 1) l i D A r( ),
var 1, J, !Er.D!c,14tsr,

tor (l .1r l < -k-l r l + + )


tt (!.r@aec< Box Ill )
ur@acEsortJl t
tor (i=l,rl<-ur!rrr..+lri++)
{ sox l kl = I, !u[kl r& rl kl
f or J r-1 to k -l a l o back(k+ 1),I
if h!'@!c<sol ljl lh6n )
rb:.Drc ! ssol l jl; )
Manualde informatic:pentruclasaa Xl-a 223
'l
fo! i.!=1 to &dtrrec+l &

sol tkl I tI,

wr ile( ' r = ' ) r ! d l l E (n );


b. c k ( 1) t

f exerciliu. Putetiardta cd oricdreipartitiiii apa4tneun unic conlinutal


EoL,obtinutcain prcgram?
vectorului
Indlcalle,Observalicd intotdeaunaelementull apa(ineprimeisubmullimi a
partitiei,elementul2 poals apa4inesubmullimilor
1 sau 2 ale partiliei,...,
elementul 1, 2 sauE alepartiliei.
n poateapa4inesubmultimilor, Pornind
de aici,
construitivectorul
sol!

t^ Tinandcontde faptulce oricareiparttirir corespunde un unicconlnutal


j voctorului lol 9i oric6ruiconlinutal vectorului
Eot li corespundeo unica
partilie,am oblinut,practic,o funcliebijectivdde la mullimeapartiliilor
multimiir,la mullimea generalo
conlinuturilor de algorilmalevectoruluiBor,
Pornind de la aceastebijeclie, se genereze
ln locca algoritmul partiliile,
el
va determina conlinuturile
vectorului.o1. Apoi,pentrufiecarecontinutal
vectorului!o1, seoblineo partilie.

? programul
exerctltu,Modificati precedent
pentruca acestasd afigeze
toate
partilile
careconlinexact3 submullimi.

8.5.Altetipuride probleme
carese rezolvdprin
utilizarea
metodeibacktracking

. Ceneraliteti
8.5.1
Toaleproblomole
pe caro le-amtntalnitpene acum admitsoluliicare
lndeplinesc
ufmdtoarele
caracteristici:
t suntsubformedevectof;
solutiile
t toate solutiileunei problemeau aceea9ilunglme,unde prin lungime
Tnlelegemnumdrulde componentealevectorului
solulie.
224 Capitolul8. Metodabacktrackinq

Exemple. A=( 1,2 , . .EI. Atunci:


Fiemullimea
a) Toatepermutdrile
mullimiiA au lungimean.
cu D elementeale mullimliA (generareacomblndrilor)
b) Toatesubmultimile au
lungrmeap.
c) Toate solutiilesub formb de vectof ale problemeigenerdriituturorpartiliior
mullimiiA
au lungimea n.

ln realrtate, se potrezolva9i pfoblemecarenu


cu ajutorulmetodeibacktracking
indeplinesc de maisus.Astfel,existAprobleme
condiliile in carenu se cunoagtede la
inceputlungimeasoluliei,existdproblemecare admitmai multesoluli de lungimi
dife te, existeprobleme in caresoluliaestesubformauneimatricecu doui sautre
liniietc. Exempleleurmetoare vd vorconvinge.

partitiilor
8.5.2.Generarea unuinumernatural

D Enun!.Se citegteun numdrnaturaln. Se ceresd se tipdreascd


toatemodurie
de descompunerea lui ca sum; de numerenaturale.De exemplu, penlru n-4,
a vem t 4, 3! , 2212 L 1 " ' L 3 ' !2 !' tL 2 ' L tL t,

t O.dineanumerelordin sumaesteimpolantaAsllel.se lipare'te112 oar


; tr 2 1 1 ,1 21.
E Rezolvare.De la inceput,obserydmcd nu se cunoagtelungimeauneisolulii
Ea poate fi cuprinsdintre 1, in cazul in care numdrulin sine constituieo
descompunere a sa 9i n, alunci cend numdruleste descompusca slmd a n
numereegalocu 1,

Trecemla stabilifeaalgodtmululpe careilvom folosi.


1. Fiecarecomponentda vectoruluiso1 tfebuiesd reltndo valoafemai
maresauegaHcu 1-
2. Mai inlei se observemcd, in procesulde generarea soluliilor,trebuieca
in pehanentd sd fie respectatbrelalia
a o l tl l + 6 o x I2 I + . . . E oI l l i l sr.

3. Avemsoluliealuncicend

6 0 1 t1 l + E o 1 I2 l + ...8o1 l kl = n.

Rezultade aicicd trebuiese cunoagtem,


la fiecarepask, suma
s. E ol (11+E oI12 I+ , . . s o llk -rl .
Manualde rnfqrmatica
penrruclasaa Xt_a
225

ar fi ca ta fiecarepassd catcutdm
aceastdsume.Dar,se
-^_,- ? !ll.d.O9"ip"!ute
poate5lucra eiicient.Suma va fi relinutein permanentdintr_ovariabildglobale,

l\,,laijos,
esteprezentatd
funclionarea
algorilmului
pentrun=4:

1 0 0 0 1 I 0 0 1
I 7 0

1 2 0 0
ffii"#"
I
I
Observalimodulin carecalculjrnsumala fiecarepas.
De ceteori se hece
la componentaurm;toare(k+1), la s se adunaEot fkl, de cateori
pasulinapoi(setrecela componenla se lace
k_1), orns se scadeBo1[kl.
Programulesteprezentaiin continuafe:

var sol.arlay{1.,1001 o! :Ln!s!; #iDclud6 <i.ostre.ht


n , r, r:int s6 r, int Eo I [ 1 0 0 ] , Ert,s,
procedlure back (k:tnressr)l' void back(tn! k)
if s:n lhen beqin ( f o r ( l =1 r l <- k - l - t ++)
fo t irEl !o k _1 do d o u r <<a o l t 1 l ,
wrlr.(sor ttl ); cdt<<trdIt
l

( . or l k l - 0 ,
wh i l ( s o L t k t +s <n )
shtle sot lkt *E<r do ( s o l l k l ++r
E+E8ol tkl '
Eo ltkl:c.o1 lk l+ 1. b r c k ( k +l ) ;
a:=s+ao rlkl ; b6c k ( k + 1) ; ._rBoIIkl;
s:=5_ so ltkl
,
)
l

{ c out < < 'n r ! ; c l n >>n , .


rt.te( '|n='), !a dt n( n) t
226 CaDatolul
8. Metodabacktrackino

? exercilii
1. Cumtrebuieprocedatin cazulin carese cefe ca soluliilesd fie afigateo singu|i
date?Spreexempl!,dacSs-a afigatdescompunerea 1,1,2 sa nu se mai afiqeze
2 .L , ! S A U! , 2, ! ?

Indicalie: procedeula mai fost intalnit,de exemplula generareacombindrilo..


se vorgenerain ordinecrescdtoare.
Soluliile progmulin acestsens.
Modificati
2. Adaptalimetodade rezolvareastfelincfi se se generezenumaipartitiileformale
din numerenaturaledistincte.
3. Adaptaljmetodade rezolvareastfelinc6ise se generezenumaipartitiileformate
dincel pulin p numerenaturaledistincte(n 9iD cititede la tastaturd).
4, Adaptatimetodade rezolvareastfelincetsd se generezenumaipartitiileformate
din numerenaturaleaflatein inteNalulta,bl (r, a Sib cititede la tastaturd).
5. Rezolvaliproblemascrieriinumdruluinaturalu ca sume de numerenaturale
alesedinlr-ornullimeformatddin k valoridate (v1, v2, ..., vk). Asttel,10 se
poatoscrieca sumade numerealesedin multimea{2,3,6}in felulurm5tor:
LO=2+2+2+2+2,
LO=2+2 + 3 +130, = 2 + 2 + 5 .

8,5.3.Platauneisumecu bancnote
devaloridate

D Enunt,Se dau sumaE Sir tipurido monedoavendvaloride at,a,,...,a"lei.Se


de plati a sumei6 utilizandacestemonode.Se presupune
cer toatemodalitdlile
cd se dispunede un numdrnelimitatde exemplare din fiecaretip de monedd.
latdsoluliilepentrusun!=s, n-3 (treitipuide monede)cu valoile1, 2, 3:

1 ) 1t l 2, 1d 3 1 2 ) l d e 1 . 2 d 21 3) 2 dl ,e 1, l al e 3,
{) 3 ale 1. l tl e 2 1 5 ) 5 d l e 1 t

EI Fezolva.e.Valorilocelorn monedesuntretinutede vectorulr. Astfel,atll va

"":m
retinevaloareamonedeide tipul 1, alzl valoareamonedeido lipul 2, I.a.m.d.
Numlrulde monededin fiecaretip va fi retinutde vectorulsol. Astfel,so1t1t va
felinenumerulde monedede tipul 1, so1t2l va retine
num6rul de monedede tipul2, 9.a.m.d.
ln acestecondilii,
o
pentru
solulie exemplul
anteriorafatecaaidturat,
undesuma5
seformeazd cudoudmonede de1 9io monedade3.
a
1,, Ceobservemt
227
uanualdeinfor!g!!! ntru clasaa Xl-a

Bor carerelino Aceastasftlallecoresp-l-nde


ale vectorulul
I
1. Extsiecomponente I
h$"'J";: J:
:l': i:["i'"''!'::ii:]'xilJ:"5::
I
"r;ltj::1"""m'**
adicacu -1'
posibile,

S:"i:,JlT:l,1"0'"'"i'H::;J"
;"ffn",lJ!'
i;"ilnilllf,.lii#ffi raun
obrinuta
suma
m:]ffi ":11";::;:t",:l,iill,?,"'l,l#""""1'
;..."":,1"1
+ at2l*EoLl21 + "' + atk-1]rgo1tk-1!
E = alll*60II11
dace:
{. Avemsolutie
+ at2l'6oxt21 + " + a tnl *sor ttrl = sutu
E = st1l'60It1l

anteoare'modul
? sdarabli'prindesenec la problema
exercillrt.lncercali
a tuturor
deobtinere solullilor suna=59in'3'
pentru

in continuare, programul:
esteprezentai
., G;\
.Vcrtadtaci+, rrll
{lncludl <tostr.rs'h>
var sol, a ! array l1" 1001 trt s o l tl Oot ' aI100l '
ot ltrtsg",
n, l, s. 91lu t inlgr,
votd !6ck(Itr! k)
(ktlnl6s!) t
Drccedure back ( tt (s-.surl)
i <<4ol ,
{ co u!<<i aol uC i
lt 6..rs! tha for(lr1r l<'k-1r l++)
( 'aotrulie' ) tr (sol III )
dlleln c4t< < so1 ttl < < ' !ond' !6
lor tr.l to t<-1 dto' < < att)< < ndr,
r f t ol( t l< > o tl E n
(sol lll tn66t!' coul<<endf,
wtt61!
d ,,a Irt),
" )

whtl (sot lkl *. tkl +3<su'n4


&& k<n+r)
(
Eol lh l r!_ t,
(601lkl rallrl +6<suc)
l'lt1e
(k<n+1) s+ .E ol IkI ral kl ,
eA
'b
g-rso:. tkt *atkl ,
5o r t k l r - 601t k l+ 1'
E !=E+ s ox lk l
r at k l ; l
blck(h+1) t )
s:.s- s ol t k l * at k l )

( cout<<i3u!!=i, citr)>guna;
c 4t <<u $ E i r c l 'n >>n i
tolrrl 8. I\retodabacktrackin

for (i = Iri < .n;i + ,


ri!6 ('sllM = ' ) ; r eadln( s @) ;
!)
{ cdt< < " aI ' < < i < < " 1= " ,
rit6 {,n : - r eaalln{ n) ;
for i.=1 t o n do
l
rite ( t aI , , I / ! l= t ) ,
r ea lla(a f il) ;

P'
.4
Exerciliu.Adaptaltrezolvarea
probtemei plaliiuneisumeicu bancnoledale
cunoscand,in plus,penlrufiecarevaloareai numdrullimite
b{ de bancnotec!
v alo _ a rreesp
a ectivA
dispontbite
A stfel.pen t ru B = 1 O O . a = (2 , 5 , 5 ; ). b = (1 0 , 5 . 3 )
vaflnalar-10x5+1x50 nu corespurdecerinteideoarecenu
avemla dtspoz:tte Lo
monede de 5, cidoar6.

8 . 5. 4. Pr o b l e m laa b i r i n t u l u i

0 Enunl.Se dA un labirint subform6de martcecu m trnii$i n coloane. Fiecare


elemental matriceireprezinEo cameraa labirintu,uiinLr_Una .ljn .amare rl.
coordorate.tin sr coL, se gasesteun om Se cere ,a ga."";j r""i" ,;ir
drnlabirinlNu estepermisca un drumsa tcaca de doua""or, pr,n "
acee"9,
"".;;;.-
. ... O..pr'_..problemd carese puneesreprectzarea modutuide codlficare a
ieqirilordin fiecarecamerda labirintului.

Fie1(t,l ) un element al malricei.


Acestapoateluavaloriinlreo 9i 1s. S:
considereiegirilesprenord,est,sud vesl,luatein aceasld
Si ordine.p"nt* fi"""l.
direcliecu iesirese relineI, iaf in c;z contrar,se relineo. Un gir.
d";;i;;;i;.
sau 0 fofmeazeun numdrin baza 2, Acestnurndreste
convertitin baza 10 s
relinutln 1(i,J) De exemplu, pentruo cameracarea,e ie$irein no;;,;"=,
a v en 1001( r ) = 9 (1 0 ,.

Exemplu, Aldturat este prezentatun labtint. Acolo


unoe.nuestepermisdtrecereadinh,ocamefein alta, 15 Lat 1or 111
se
rnarcheazdcu o linie oblice.De asemenea,mahcea
felrneSivalo le corespunzbtoafe
X1l L2 11i L?.
iesirilor,ala cum sunt
eE cerutede program. 11. 5 7

EI Rezotvare

ei:rin (rinia)
l;3,'1,XT,1ii"l[J:li,"i;",,'iT,i'i?"::fli-"teresicor(corana
[1;':xiili;:t'21il'"rt:,11?:fl
""ffi"4:n:E;:T:'":
l\,4anual pentruclasaa Xl-a
de informadca 229

2 . Nu toatesoluiiileau aceeaqilungime,intrucetexistdkaseede lungimeCiferitd


Se obtineo so[]tie atuncicandcoordonatele camereiundes'a intratsuntin afara
malric;:i(nu au liniaintre 1 9in $i nu au coloanahtre 1 9in) Evident,atuncicand
s-agesito situalie,aceastase af19eaz5.
3. Spunemca o camerdeste accesibilddacdexisteintraredin cameracurentd
cbtreea. Atenliela modul(vedeliprogramul) tn caretestemdacdo cameraeste
accesibilasau nu. Esteo operaliein care se testeaze@nlinutulunui anumitbit
Acestase oblineefectuandun 9l logicintredouevabri De exemplu,dacdtestem
e$lreaspresud,aiunciefectuem 9l logicintre0o1o1r)=2(ro)9i valoarea relinutd
in matrice penlru cameracurente. DacA valoareaoblinuteeste de
diferit5 0, atunca
avemie$iredin cameracLfentd dtre sud.
4. inaintede a intraintr'o camerdaccesibila se Gsteazddacdrespectivacamera
a mai fost vlzitatasau nu. Pentruaceastautilizdmfunctiavizitat ln caz ca a
lostvizitata.se faceDasulinapoi.
programul:
Analiza!i

VarlantaC++
v ar s o1: ar . a y t1 ..1 0 0 ,1 ..2 1 of *include <iostr64.h>
i n l so1l 1o01 I2l r Ir01 I101,
'
1: af f ay I0 ..1 0 ,0 .,1 0 1 of s ,n, i , j ,Itn, col t
i n t vl zi tat(l nr k,l nr. Il a,
n, n, i, j, 1 i n , c o l r i n c 6 g o !, lnt cot )
f ur et j, on v lz i ra t { k ,ttn ,
col : iDteso! ) : l,ool6an; foi (l = 1t i < .k; i r+ )
i f (aol ti l [0]' = l tn &6
sol l tl tl : l qcor) vsl t
f or l: = 1 r o k -1 d o
if ( s ot t i, l l = ti n ) s d )
void lj.Dar(tnt k, tnt ltn,
lher wlz i ta t:F tru o , l nt cox)
{ cout < < ' sol uti o i << 6ndl r.,
l or (l = 1, i < .k-1ri + + )
L iDa! (k,1 in, c ol: t nr os s r ) ; cout< < sol ttl I0l < < " n
< < E ol Ii l t1l < < 6nau,
wllb etn {'solu t it ) ; i f (ri != = 0)
for i:=1 to k - 1 do cout<<nleEire Drin lordli
{rlt th (a o1 t i, 11, ' !, < <!atI;
3oI li121) r
il { 1tn..n+ 1)
vrlteln (tiesir Dlt r no. d ! ) cdt< < i i 6si r Dlin audn
<<6ndl1;
if lin=n+l thon
writ ln(ti 6ir e i r (cor--0)
cdt< < i i esi re Dlis v66tu
if co1 =0 Lhn <<nalt,
writln ( ! j"6sire
coub< < t,i ai l e D ri n e6!!'
tritln ('is i! 6 <<enall t
I
230 Captrolul
8. tdetodabackrrackinq

woiat b6ck(inr k, itrt ltn,


back{k, !,ln/ col. itrtesor) t iDl col)
{ t! (rt!= = o l l l rn= {+ l ll
coxrro l l corr!!+ l )
it ( lLn. o) o ! (ri n { + 1 ) or ti D ar (k,1i n.col ) t
( c ol. o) o ! (c o L = a + l )
t lr t r t iD. r ( k ,l i n ,c o l ) (
sol l kl t01cl i trt
601tkl tl ]l col t
s ollk , lI : = 1i tr,
tor (tnl tE 1;i < -{ r* + )
s ol{ k , 21: = c o r,
f,o! i:=1 !o 4 alo
{
1: if (l Il i n ,c o rl
anal s<>0) aEil no! tf (l l l i D l l col l & 8 & &
v t z it a l (k ,1 tn -1 , c o l ) I w l l Ltat(k, rtn-t,cot) )
back(k+ r, Il n-1. col ),
b. c k(k + 1 ,1 i r-1 ,c o l );
2: 1f (l Il tn .c o x l
.ndl 4<>0) sd not i t (l l Ii nl l col l e a & &
wt r t t a t(k ,tttr,c o I+ 1 ) I vtztt.!(k, l l n,cor+ l ) )
back(k+ 1,1In, col rl ) t
bac k (k + 1 ,1 tn / c o l + 1 ) t
3r t l ( x IrtE,c o l l
sd 2<>0) sal not It (l trtE l l col l & 2 & &
v lr ila t (k r l tn + l , c o l ) I vtrl ,l at (k, l l a+ t.cox) )
back(k+ l , l l D + 1, cor) t
back (k + l , l l n + 1 , c o r) t
4 r t f (Ittl n ,c o tl
aaat 1<>0) lad no! t! (Il l Ltr] tcol l & 1 & &
v t s lt a t(k ,tl n ,c o l -1 ) r vr.rtrar {h, 1l tr,coI-1) )
bach(k+ 1,l l n,co1-r),
b6o k (k + 1 ,1 r.r. c o l -1 )
6dt' {o.3.} l
)
l

lor t ! - t to n do l or (t.1rt< 4rrj .+ + )


r or lr . 1 t o n tl o l or(Jr1r l < rn, J{+ )

M lle( ' t t ' , i, tr' ,J ,' l :' ), < < l < <u l .u,
r e. dh ( r Ii , J I ) ci D > IIt] Hl;
l
cdt<<i trl 'ntri ;

" _t.." " oto.r" .,,,


b. c k ( l, 1in, col) back(1.ri n,col ) t
)
Manualde informaticApentru clasaa Xl-a 231

? Intrebare,Cum s-ar puteagesi un drumde lungimeminimede la camera


i inilialScitre iegireadin labirint?Primaideecare ne vine in minteeste sd
Jener6mtoateieqirile,ca ln program,penkua o puteadeplstape cea de lungime
minimd.Ei bine, respunsulnu este satisfdcdtor. Nu uitali,tehnicabacktracking
necesitaun timp exponential.Problema se poaterezolva cu multmaieflcientDar,
pentruasta,kebuiesd studiemteoriagrafurilor. Toatela timpullor..

f exercilii
1. Adaptatirezolvarcapentruun labirintin care flecarecdsuld relinevaloarea1
sau o (1 semnificand cdsuldplind,princarenu se poatetrece,iar 0 cdsulAlibere,
pe lnde se poatetrece).Ca 9i in problemaprezentate, deplasarease poateface
dintr-ocasutdin oricealtdcdsutealdturatd, orizontalsau vertical,cu condiliaca ea
sa existe9i sA fie libera.Validatipoziliainilialda omului(11n, col), astfelincdt
aceastasd corespund,unei cesutelibere.Estimalispaliulde memorieutilizat
in aceastavaraanta.
2. Realizatio variant5a rezolvdriide la 1, addugAndcete o linie sau coloane
suplimenlard pe fiecarcmaeine a labirintului,
astfellncatsd nu se mai testezeca
celula ln care se treoe sd existe. Plasareaintr"o celule de pe margineeste
echivalentdcu obtinereauneisolulii.

8. 5.5.Problema
bi l e i

enun1.Se de un teren sub formdde matricecu n linii 9i n coloane Fiecale


elemental matriceireprezintdun subterencu o anumitdallitudinedatdde valoarea
-l
retinutdde element(numdrnatural).lnk-un asllel de subteren,de coordonale
(Itn,cor) se gdseqteo bild.gtiindcd bilase poatedeplasaln oricepoqiunede
strictinferioardpo(iuniipe care
terenaflatdla nord,est,sud sauvest,de altitudine
se gdseite bila.Se cere se se gdseascdtoateposibilitdtileca bila s6 pdreseascd
terenul.
5 8 9 3
Exemplu.Fie terenulalaturat.Inilial,bila se afld ln subterenul
de coordonale(2,2 ). O posibilitate de ieqiredinterenestedata 9 7 3
d e d r u m ul :( 2 ,2) , ( 2,3), (3,3), (3,{). In p ro g ra m, I 5
subterenului
altitudinile vor fi retinutede mahrceat.
8 7 1

E] Analiza probtemei9i rozolvareaei, Problemaseamdndc! cea anterioard,


deci putem gandi ce dace inbcuim testul de intrareintr-o cameld cu cel de
atiludinemai micd,am rezolvat-olEste adevdfat,se obtineo rezolvafe,daI se
poateqi mai u9or.Sd analizdm:mai estenecesarse testamdacdbila nu a ajuns
pe un terenpe undea maitrecut?Nu,deoarece, la fiecarcpas,bilase deplaseazd
Prin urmare,problemaeste mai ugoard
pe un terende altitudineskict inferioard.
decdtprecedenta.
232 Capitolul8. Iletoda backtrackin

In rest,vom propuneo rezolvarein cate 601 esteo matticecu 3 coloaneSi


un numarmarede linii.Astlel,sor ( k, 1) va relinedirccliain carepteacdbita pt
11
nord,2 pentfuest, 3 pentrusud 9i 4 pentruvesl),so1(k,2) va relinelinia
subterenului,
iarsoI(k.3) va retinecoloana subterenului.

? exercil;u.Ardtali,prin reprezentare
grafic5,modutde tunclionare
a
pe bazastructuriidedateDroous6.
algoritmulu;,

VarianlaC++
v B r s ol ! ar ra y It,.1 o O ,t,.3 l #ircluit <iostles"h>
of i!egr,
t . qE ay [0 ..1 0 .0 .,1 0 ] iEr Eortl0ol t3t,ttlol a1ot,
of iDtgeE, a,n, i. j, Lin, dolt
n. n, i. j ,1 l n .c o l : l n te s o rt
Droeedluro tiDer (k!iotesr) t woid tiDar(int k)
{ c o u t <<n s o X u l i e n <<e t l t
! 6it 1n( . so l u ti e !)' f o! ( j . =1 ; t <=k - 1 . 1 ++)
lor t : = 1 to k -t i l o c o u l <<s o r t t l I 1 l <<r "
<<d o l t I l t 2 t <<e n d t ,
E r t er n( s o l It,2 l , ' t,
s o r tt,3 t ) t l
voldl back(ln! k. 1!t! Itn,
{ tt (11n.=oll rrn==n*1
bac k ( i( , llt r,c o l !l D c e g e r), co1.= 0 l l co1= .n+ 1)
il ( 1t n. 0 ) o r (1 tn -n + 1 ) o !
( c or = o ) o ! { c o 1 .n + 1 ) ( eol l kl t0l = 0r
B or tk) I1I= 11n;
5oI Ikl I2l = co1r
3oI I k , l l != 0 t rhl l e (soIl kl l ot< 4)
6ot I k , ? l ! = rtn t {
3ol t k r 3 l !Ec o 1 , sol l kl t0l + + ,
whu. s o l l k .l l < 4 alo rw l tch(sol I,!l t0l )
(
s oL t kr l l :Es o l (k , 1 t+ 1 '
c a6 6 0 rtk ,1 l o f If (t Il tn-11 l col l < t tri .nl Icol l )
1, I f l l x l n -l ,c o l t< bE ck(k+ 1, l i n-1, co1), break;
tI1 l D ,c o tl !h 6 n
back (k + 1 , ti n -1 , c o l ); i r(ttrtul l cor+ 11< t trl at tcol j )
2 ! t ! ttti r,c o t+ 1 1 < back(k+ 1, tl n, cot+ 1) r br6ak,
ttti h rc o l l rb n
back (k + 1 ,1 i n , c o r+ 1 ), 1f(rIU n+ 11 Icol l < rIri .bl tcorl )
3: if t [1 1 D + 1 ,c o l ] < back(k+ 1, ti n+ l , cot); break,
I fliD, cot] rhtr
bac k (k + 1 ,1 { n + 1 , c o r), i f(!l 1i nl Icol -r1< rtl i nt Icorl )
4! if , ttti n ,c o l -1 t < back(k+ 1, l i a,.oI-1), brak,
t tl i n , c o l l th 6 n )
bac k (k + 1 .Ii r. c o t-1 );
l
,

clte { tM!' ) r r eadln( a) ;


Elle('n t='), . eaalla{ a) ,
Manualde informaticapentru clasaa Xl-a 233

fo r (i = 1 ; i < = ryi + + )
fo r { i = 1 r i < -nt i + + )
{ c o u r<< ' t (" < < i < < " , ' < < J< < nl -r '
d i n > >t Ii I Ii I t
l
leaalln{ r t i. il ) c d r< < " Itn -,, ci E > > ti nt
c o u t< < .c o t= ,; ci n> > coL;
i !i t6 ( ' I in= ' ) r r e a t[n (Ito ) ; b a c k (1 ,l i n ,col ) t
vl i re ( ' c or E t ) r r a d 1 n (c o l ) ;
b a c k ( 1, 1in, c ol)

3 txerciliu. Modilicatiprogramulastfelincatsa se afigeze9i direcliain care


bilapdreseqte terenul.

6.5.b .i a n tu ra c aturuI

O Enunl.se considere o tabldde $ah rlr9i uncalptasat fI 16 I| 20 3J


in colluldinst6nga.
sus.Se cele sa se afigeze o posrbilitate
1 l0 )l 2 l? 12
de mulare a piese
acestei de Sah.astfel lncet sd treacao I 15 2a le 4 ? |
singureda prinflecarepdtratal tablei.Aleturat,observalio I zz s o r: ra
soluliepentrun=5. 125 ta 23 s 5 l
EI Analiza problemei9l rezolvareaei. Fiinddata o pozitiein care se gdsegte
calul,acestapoateseri ln alte 8 pozitii.Pentfua scriemai pulincod,cele 8 pozitii
suntrelinutede vectofiiconstanlix 9iy. Astfel,dac, 1la 9i coL suntcoordonatele
pozilieiundese gdseqtecalul,acestapoatefi mutatin:
( 1in r* (0 l ,c o r+ y t0 l ) .. , (l i n + x I7l ,col + vI7l )

RelineliacestprocedeulDe altlel.acestapoalefi lolosltpentru^problemele


deja prezentate.lvlatriceat reline poziliilepe unde a trecul calul. In rest s-a
Drocedatca la Droblema anterioard.

VarlantaPagcal
co n s c *, . r r ay l1. . 8 l of *lndludl <ioEttM.h>
1 n !6s er E ( - 1, 1, 2,2 . t, -L , -2 ' -1 1 , *tncludt6 <stdrtb.h>
y : B r r r y 11..8 1 of
l rt giE ( 2, 2r 1, -1 , -2 -2 ' -t' l t i cd6t i nt xIS l E (-r,1,2,2,L, -L,
'

t r ar r ay l1..1 O0 0 ,1 .,2 1 of c o n a r i D r y I8l -1" ,-2, -2,


-{2,2,L,
-1 ,1 );
t: af ay t - 1. . 2 5 ,-1 ..2 5 1 o!
i a t n ,sol l 1000l I2l , t I25l I25l t

trrocodlure bBck(k,lin, woidl back(tnl k,tn! lin,


.o I.i n t g r); tnt co1)
v6r i.1ini, coloara: Intoser; ( iat 1idt6,colosa, i,
234 Capirolul8. I\,4etoda
backtracking

{ for (i = l ri < i l .-rri + + )


cou!< < soxti l I0l < < ' n
<<sor. Iil I1l <<erratl,
cour< < 1i !< < i n< < col t
(rti,1l,.' 6xit {ExtT_snccEgE) ;
3rtt,2l ),'
'
t B oLtkl tol -l i nr
sol l kl t1)= col ,
tor (i = Ori < .7, i + + )
{ l tntrrtn+ xl tl ;
6r t k , 1l: col0ane=coI+y I il ,
E llk ' 21, i f {1i si < = E & & l i ni e> = l
&& coloqna<En &&
.oloanu>r1 &&
linie! . r tn + x Ii 1 , ttxtni ol tcol o@ 1.!0)
c olos ar rc o l + y ttl t (
t f {1 1 n 1 < .n ) h d
t tlini: tcololsl=1t
coXoea<=D)
back(k+1, lint6,coIoara) t
eit
colodlt=l)
!fl ttrtol Icol osal = ot
sal
t Illrt6, coIostr{l .o ) )
l
)
t Illnt e, c oLoqaal ! . 1, ,
ba c k ( k + r , x t nt e,
c olos a) ,
I tt lnl6, c olo. nal t ! 0,
back(1,1,1),
)

b ack(1 ,1,1 ) ,
vanualde informatic; tru clasaa xl-a

propuse
Probleme
Avem la dispozitie6 culori:alb, galben,foiu, verde,albastru$i negru Sd se
precizezeloate drapeleletricolorecare se pot proiecta,gtiind cA trebuie
respectateregulile:
. oricedrapelare culoa'eadin mijlocgalbensauverde;
. celetreiculoride pe drapelsuntdistincte.

Dintr-ungrup de n persoane,dintrecare9 femei,trebuieformateo delegalie


de k persoano,din care 1 femoi.Sd se precizezetoate delegaliilecare se
polforma.

La o mase rotundese aseazdn persoane.Fiecarepersoan5reprezinteo


firme.Se dau k perechide persoanecare apa(in unorfirmeconcurenteSe
cere sd se determinetoate modalitetibde agezarela masd a persoanelor,
astfellncatsi nu steaaldturidouepersoane
de la firmeconcurente

Se de o permutarea primelorn numerenaturale.Se cer toatepermutdrile


care
se oot obtinedin aceastaastfel incat nici o succesiunede doui numere,
existentein permutareainiliale,sd nu maiexistein noilepermutari

Se cer toatesolutiilede asezarein liniea !n caini9i n pisiciastfelincetsd nu


existeo pisic5asezateintredoicaini.

Anagrame.Se citegteun cuventcu n litere.Se cere sd se tipereascitoale


anagramelecuvantululcitil. So poate lolosi algoritmulpenlru generarea
permutdrilor?

Se dau primelen numerenalurale,Dlspunemde un algoritmde gonerarea


de r elementeluatecAtep pentruele. Se considerdun vectorcu
combindrilor
n componentegiruride caractere,unde,flecaregir reprezintdnumeleunei
persoane.Cum adaptali algoritmulde care dispuneli pentru a obline
de n persoaneluaiecAteD?
combindrile

Se citescn numerenaturaledistincte.Se cere o submullimecu p elemgnte


aslfel incet suma elementelorsale se fie maxima ln raport cu toate
submultimile numdrdeelemente.
cu acelaqi

Se se determine5 numerede ceten cifre,fiecarecifraputandfi t sau 2, aslfel


lncAl oricaredinlre acesle 5 numeresd coinciddexact in m pozilii9i sa nu
existeo pozitieln caresd apardaceeasicifreIn toatecele 5 numero.
236 8. tvtetodabacktrackinq
_Capitolul

10- Fiinddat un numdrnaturajpozitjvn, se cere sd se producela iesiretoate


descompunerile saleca sum6de numere pnne.
11."AttilaSi regele".Un cal Siun regese af,ape o tablade Sah.UnetecamoLri
sunt arse. pozitiilelortiindcunoscuteCalutnu poatecatcj pe campLriar;e,
campsd devind,,ars,,.
iar oricemigcarea caluluifaceca respectivul Sd se afle
dace existd.osuccesiunede mutSfipermise(cu restricliilede mai sus), pfln
carccalulsapoatAajungela rege9rsa revinala pozrha inruala.pozrtta
ir,tjala
precum9rpozilaregelui
a calului, suntconstoerate'nea.se.
12. Se dau n punctein planprincoordonatele lof. Se cer toattsolutiilede unirea
acestor puncte prin exact p drepte, astfel incat mullirfteapunctelorde
jntersectie
aleacestordreptesAfie inclusdin multimeacekJrn puncle.
13. Gdsilitoate
solutiile
naturale
aleecualiej
3x+y+4xz=100.
14.Se se ordoneze in toatemoduribposibile elementele
multimii{ t. 2, . . . , n}
asltelincatnumerele i. i+1. ....i+k s6 treUnuldupace'ala.tS.in aceaslA
ordine(r-1, t+k<r).
15-Se considerd o mullimede n elemente
Si un numdrnaturalk nenul.Sa se
calculezecatesubmullimicu k e ementesatisfac,pe rand,conditiiede mai ios
9i sd se afisezeacestesllbmullimi
. conlinp obiectedate;
r nu conlinniciunuldin q obiecledate;
i conlinexactun obiectdat,dar nu continun altul;
. conlinexactun obiectdin p obiecledalei
. conlincel pulinun obiectdin p obieciedate;
. conlin r obiecledin I) obiecledate,dar nu conlinalte q obiecledate_
16. Se de un numdrnaluralpar lr. Sd se determinetoate$iruritede N paranteze
carese inchidcorect.
Exemplu:pentruN=G: ( ( ( ) ) ) , ( ( ) ( ) ) , ( ) ( ) ( ) , ( ) ( ( ) ) , ( ( ) ) ( ) .
17. Se dauN punctealbegi N punctenegrein plan,de coordonate inlreai.Fiecare
punctalb se unegtecu c6teun punctnegru astfetincetdrnfiecarep;nct. fie el
alb.sau negru pleacdexact un segment56 se determi,re o astfetde
conlgu afle de segmenteastfel rlcet o.care doua segrnente5a 1u se
inlersecteze.
Se citescN perechide coordonatecorespunz-and puncteloralbe
5rN perechide cooroonatecorespunzSndpunctelornegrc.
18. Sd se generezetoatepermutdrile
de N 6u proprietatea
cA orjcarear ft z<i<N.
existd l<jsl astfelincal
l v ti l -v t: I l. r '
vanualde informaticipentruclasaa xl-a 237

Exemplu:pentruN=4,permut,rilecu proprietatea
de maisussunt:
2!3 4 , 2 3 L 4 , 3 2 L 4 , 2 3 4 !, 3 2 4 1 ,342!, 432L.

sejoaceo piesecu A acteastlelincat:


f9. O trupdcu N actoriigipropune
r oricaredoudactese aibddistributie diferatd;
. in oriceact exista,evident,cel pulinun actor;
. de la un act la altul vine un actorpe scenasau pleacdun actorde pe
scene(distribuliaa doudacteconsecutive diferaprinexactun actor).
sd se fumizezeo solulie,daceexistevrcuna.
20. Fiinddat un numdrnaturalN Siunvectorv cu N componente
intregi,se cere:
. sd se determinetoatesubqirurile de lungametN/51;
crescdtoare
c D(1)+p(2)+..,+p(k), undeI'{k) reprezinte
sd se calculeze numdrul
subgirurilor de lungimek.
crescetoare
21. Pe maluluneiape se gdsescc canibali9in misionari.Ei urmeazdsd treaca
apa 9ia! la dispozitieo barcdcu 2locuri.Se gtiece, dacdatet pe un mal,cat
9i pe celdlaltavem mai mullicanibalidecatmisionari,misionariisunt mAncali
de canibali.Se cerese se scrieun programcaresd furnizezetoatesoluliilede
trecerea apei,astfelincatsd nu fie mancatniciun misionar.
22. Se da un careu sub formi de matricecu n linii 9i n coloane,Elementele
careuluisunt litere.Se dd, de asemenea,un cuvent.Se cere s5 se gSseasce
in careuprefixulde lungimemaximAalcuvantuluirespectiv.Regulade ciutare
esteurmetoareal
a) se cautaliterade inceputa cuv6niului;
b) literaurmdtoarese cautdorintfecele { elementoinvecinatecu elementul
care continelitera de lnceput,apoi printrecele 4 elemenleinvecinaiecu
elementulcare g.a.m.d.
conlinenoualitera,
23. Se dau coordonalelea n punctedin plan.Se cere se se precizeze3 puncle
caredetermin6un hiunghide ariemaximd.Ce algoritmvomfolosi?
a) Generarea
aranjamentelor; combindrilori
b) Generarea
c) Generafeapermut5rilor; at)Generareatuturorsubmullimilor.

24. Fiind dale numelea n soldali,ce algoritmvom utilizapenku a lista toate


grupelede catek soldali?Se Ftiece intr-ogrupe,ordineaprezintdimportan!5.

a) Generarea
aranjamentelor; combindrilor;
b) Generarea
permuterilor;
c) Generarea tuturorpartiliilor.
at) Generarea
238 Capitoiul8. l etoda backtrackino

Fiind date n numerenalurale,ce algoritmvom utiljzapentru a detemina


eflb/erlo submullime
maximalede numerenaturaledistincte?
a) se genereaz:toatesubmultimile
9i se detefmineo submultimemaximale
careindeplineqte
conditiacerutdl
b) se 9enereaz6toate partiliile9i se cauta o submullimemaxjmalScare
apa4ineuneipartiliioarecarc9i careindeplinegte conditiacerutS;
c) se compardprimulnumarcu al doilea,al treilea,al a-lea,al dojleacu al
treilea,al patrulea,al!-lea, ... atuncicAndse gdsegteega,itatese elimineun
numdrdintreele.
d) niciunalgorilm
dintreceidemaisus.
Dispunemde un algoritmcare genereazdpermutdrileprin backtracking.
Primele doud permuteriafi$ate suntt 321, 312. Care este urmatoarea
permutarecareva fi afi$au?

a) 3 2 1 ; b) 123; c) 213i d) 2 3 1 .

Indicatii

6. Degi algoritrnulesle asemanetor,nu este acetagi,trebuie pusA o conditie


suplimentarS. De exemplu.in cuvAntul\nrma' nu s poateinversa! de pe pozilia
2 cu I de pe pozilia4.

7. Dacevectorulcarefelinenumelepersoanelor
estev, ln loc sd se afigezeI, se
va afigavt .

23, b)

24. a)

25. d)
Expllcafle:primeledoue vafiantprezintdsolulii exponenliate,
a treia este ln
o(r'). Dar dacd sortdmnumerele,atunclle putemafigape cele distinctedintr,o
singurdparcurgere.Sortarease poateefectualn o(nxtos(n) ), iar parcurgefea
ln o (n), Prinurmaro, esteo (nxloE(n) ).
complexitatea

26.d)
Explicatieipe fiecarenivelal stiveise cautesuccesoriiinordinean, n-1, ...,r.
Capitolul9

tn teoriagrafurilor
lntroducere
9.1.Grafurineorientate
L l .l . I nt r oduc e r e
Uneori,algoritmiitrebuiesd prelucrozedate relelltoarc la anumite
urmetoare:
inlre careexisEanumiterelalll.Seanalizimexemplele
elemente
1. Se daun orase.Uneledinlreelesuntunilepringoselodirecte(carenu mai
trecprinallora$).
dinlren persoane,
deprietenio
2 . Secunoscrelatiile
3, Sedaur Fri 9isecunoagle lnlreele.
relatiadevecindlate
iarunele
{ , Sedaun triunghiuri, dinlre
elesuntasemenea.

Pentrufiecaredintreacsslxemplese poatlmaginao reprezentale


graficd
careseexprime relatiilo
exisienie.
t Convenim cafiecareeloment sdl numimnodsauved.
Asltel,ln cazul1. nodulesleoragul,ln cazul2. noduleslepersoana, in
cazul3. nodulssletaraqlln cazul{. nodulosletrlunghiul.
Convenim caunnod
(vArf)se-lnotemcuuncerculotin caresdinsc emnumarul lul(dela 1 lan).
) Relatiaexistentelntre doud nodurio vom reprezenta graficunindlle
printr-un
segmentdedreaptl.Convnim caunastfoldesegmont sel numim
muchle9idacdea unegt t 9lJ, s-onotdmcu (L. J ).
nodurile
In cazul 1., muchia (r,j) aro

o^*..
semnificatiaca lntreora$elet 9i J existao Fosea
difectd.in cazul ,., muchia (t,l) are
semniJicaliacd persoanele t SiJ suntprietene,Tn
cazul 3 , muchia (l,l ) are semnificatia
cd lerilet Si J sunl vecine.ia. in cazul4., c6
lriunghiurile1 9i J suntasemenea.
Procedand a9a,obtinemo doscrieregrafice
precumcea dinfigura9.19i convenimca o aslfel
6 @--.-o
s-o numimgraf neotlentat.
de reprezentare Flgura9.1.
dgnl neornlal
Exomplu
240 in teoriaqrafurilor
Capitolul9. Introducere

Teoriagralurilorestefundamentat:
Desigur,aceasti abordareesle intuitiva.
maiematicaiin celece urmeazdne propunems-o prezenmsistematic.

9.1.2.Definitiagrafuluineorientat
Delinilla9.1.1. Un graf neorieniatesteo perecheordonate c=(v.E).
un0e:
t v= {w1. v,,... w"} esteo muryime
linite9i nevidi.Elemenlele
v se numescnodu (varfuri).
multimii
t E esteo mullimelinitede perechineordonatede loma (wr. vl),
unde t+j, 9i vr.vJev Elementele mu\imiiE se numescmuchii.
Semnificalia
uneimuchiieste aceeacd unegtedoudnoduri.

Ungrafpoateli desenai
agacumseobserud
in exemplul
umalor(vezifigura
9.2.),unde
c= ( v , E ) !
v = IL ,2,3,4,5,6r t
E. ( ( 1,2 ) , ( 1,3 ), (L,s ), (2,31,13,4,,
( 4 ,s) )

Notatlerin grafulc={v,E), vomnota


cu r numdrul nodurilor
9i cuInnumdrul
muchiilor. Figura9.2.
A t xompl!de grafneorintal

t, Observ4il
'/ Doudnoduridistinctepotli unitepdn cel mull o muchie.in exemplulde
mai sus, (1.2) estemuchiacare lnegte nodul1 cu nodul2. Dacl scriem
(2,1), ne referimla aceoagimuchie(perecheaesteneordonate),
/ Nu existdo muchiecare unegleun nod cu el insusi(o muchieune9te
doudnodui dislincte).

Defln4la 9.2. in graful c=(v,E), noduriledislinctevr,vlec sunt


b dacdexistamucl-ia(vt, vj)cE.
aallacente
VomspuncAmuchia(vr,vl)E esleincidenttrla nodurile v! Siwl
In exempluldat anterior,nodurile1 Si 5 suntadiacenle, dar noduriJe
2 9i 5 nu
Muchia(4, 5) esteincidente
suntadiacenle. la nodurile
4 9i 5.

' Definiliaesteresl dive, in unelelucrarivetilntalni definillirnaipulinresidctive,


de
exemplu,poateexistao muchiede la un nodla elinsusisaunu se cereca multimea
nodurilorsa fie finild.
Manualde informaticipentruclasaa xl-a 241

prin gradul unui nod w se intelege


Definilia9.3. inir-ungraf neoriental,
numerulmuchiilorincidentecu nodulv qi se noteazecu at(v) Un nod
cu gradulo se numeqtenod izolat,iar unulcu gradul1se nume9tenod
terminal.

dat,d(2 ) =2,d( 1) =3,iardt 6)=0 (5 estenodizolat).


in exemplul

O relalieutiH: lle un grafneorientaicu r noduri9in muchii Dacanotdmcu d1,


t1,....,d- gradelecelorn noduii,atunciavemrelalia:.__-
,l -
' dr + d, + d. +...d ,=, 2 m . I
I
\ Demonstratie: liecaremuchielace sd creascagradelecelordouanodurila
cr.rcateo unitate.Prinumare,se obtinerelatiaanterioard
careesteincidentd
in acestparagrat,ne vom referila
Pentrua intelegebinenotiunileprezentale
le 9 .1.1:
e x e m p ledin
- fie afirmalia: gradul nodului I este k. Penvu exemplul 1., ea are
semnilicaliacd din ora$uli pleacd(sosesc)k gosele,pehtruexemplul2., are
semnificaliacd persoanai are k prieteni,pentruexemplul3., are semnificaliac5
lara i se invecineazdcu k !dri,iar pentruexemplul4., are cd
semniflcalia penlru
triunghiuli se cunosck triunghiuri asemenea.Aicitrebuielacuti obseryatiacd ar
puteas5 existeSi alte lriunghiuriasemeneacu el, dar modulin care putemalla
aceastava Ii tralatseparat.
- lie alirmatiarnodurilei Si J sunt adiacente. Penlruexemplul1., ea are
semniiicaliaca oragelei gi J sunt unile pfinh"o gosea care nu trece prin alle
ora9e,pentru exemplul2., are semniiicatiace persoanelel9i I sunl prielene,
pentruexemplul3,, are sernnificalia t
cd ldrile 9i J sunt vecine,iar penlru
exemplul4., aresemnificaliaca triunghiuile asemonea.
t 9i J sunt

- lie atirmatia:noduli esie izolat.Penhuoxemplul1., inseamnace nq exisli nica


o goseacare leagdoragull cu alt ora9,pentruexemplul2., inseamn6ce
persoanai nu are niciun prieten,penlluexemplul3,, inseamnecd lara I' nu se
inveclneazd cu nicio tarA(estesilualepe o insuld),pentruexemplul4., inseamne
cd nu existdniclun triunghidintrecelelalten-1 lriunghiuricaresi fie asemeneacu
t r i u n ghiu lt.

a
y'/ Exerciliu

Datiun exempluinspkatdln viatareald,pentrucarese gasiligrafulasociat


au nodurilesau muchiile9i ce
Astfel,veli raspundela intrebdrile:ce semnificalie
inseamna oradulunuinod.
242 Capitolul9. Introducerein teoria qrafurilor

grafurilor
9.1.3. Memorarea
in acestparagraf,
prezeniem principalele
siructuride dateprincaregrafuribpot
fi memoratein vedereaprelucrdrii
lor.De la inceput,precizem laptulce vom alegeo
struclure
sauallain functiede':
a) algoritmul
careprelucreaze la graf;
datelereleritoare
b) memoiainternepecareprogramul
o arela dispozitie;
c) dacagrafulconline
multemuchiisaunu.
Pentrufiecareshucturade date pe care o vom folosi,vom avea cate o
procedure(funqie)care citegtedaiele respeclive. Toate acestesubprograme se
gdsesc gn/pato in unitateade programsraluli.DsE (penlru pascal) Si in
g'af,ult.cpD FentruC++).Vomli astlelscutilica, pentrufiecareprogrampo careil
realizEm,sd lim nevo4isaaddugim,iniile
de codnecesarecitiriigine pemitesa ne
concenlram exclusiVasupraalgorilmului.

7lz .^ Toatesubprogranele pe carelo utilizemcitescdaleledintr-unligirtext,in


ca'e.pe ptimalinievomscrienumaruldenoduri(n),iarpe urmAtoarele hnii,
*'-'
cdieo mr-rchie (t, J ), ca in exemplul d maijos.in careesteprezenlatun
graf
-t.' 9i liniilefi9ieruluitext
careestecilitpentruel:

Flgura9.3.
Exomplu do g|af norlnlat

Trecemla prezentarea princargputemmemoradatelereleritoare


struclurilor
ungraf.

A. Memorara\a
gratuluiprln matrlceade adlace4i

e",, - o malricepelraticd,
undeelementele
ei,ar,J au semnilicatja:

r. pentru{r.J) ts
''' |.0, pentru(i,j)e E

' l\,lodul
de alegerea slructurii
il veli inlelegepe parcurstrt
studiutui
acestuicapitot.
yanualde informatic5
pentruclasaa Xl-a 243

Pentru graful din figura 9.3, mat cea de adiacenldeste prezenlatein


@n!nuare:

011010
101000
110100
001010
10010 0
000000

! ousew4ll
graful,
dinmodulincarea iosldefinit
r, lntrucat, cEnuexistemuchiidela un
rezultd
nodlaelinsugi,
rozulte
cdelementeledepedlagonalaprlncipalirelin0l

a n =o 'Y i e Il '2 "


'n l
2. lllatricea
deadiacent5
steslmeidar:

a,,,= a,,,,Vi,j e 11,2"-,nl


,

Evident,
deoarece (l,l) coincide
muchia (J,1).
cumuchia
3, Sumaelementelor depeliniat, 1(1, ?, . .., E), arecarezultat gradulnodului
i, a( t ), pentru
cdastlelseobtinesumanodurilor J, J {1,1, . .,,n}, penhucare
exidemuchie delaI laJ, adicdsumamuchlilor incidonte la t.
de pe linia1 este3,
pentrugraluldemaisus,sumaelementelor
Dexmplu,
gradul
adice nodului
1, tt(1).

J, I ( 1, 2. . . . , r) , aroca rozultat
d pe coloana
{. Totasa,sumaelomontelor
giadulnodulul
l, d(l ).
I Ralionamntul
estoasemendtor precedenld,
cuceldelaobserualia
5. Sumatuturorolementelormatrlcel este,de fapt,eumagradelor
de adiacentd
tuturornodudlor,adicddublulnumeruluide (2ln).
muchii
6. Dacdgraiulcititareunnumdrmicdemuchii, aluncimatricea
doadiacenF
esleo
formdinelicientd
dememorare a lui,penlrucdeavarelineo multime
de0.
Subprogramelepocarolevomutilizapentru modalitate
aceaste de memorare
suntprezentale
in continuare:
244 Capltolul9. Introducercin teoria orafurllor

varianiaPascsi , i Varlania c{+

tylE @t_aat-a!!ay[1.. 50, 1.. 501


(char Nti@_ftsI2o1,
Dreahtro ctti!6N inr Al50l [50], Int& n)
( rftje_Fi5 ! llingt (
vaf A ! rirat_ait; vs trrinte!'e!)t
falreuf (l[tr@_fis.io! :iD)

{1 1 1 1 6 ( i >>i >>J )
.Aa6j.sa(frlrllle Fis), a t t l l j l =A t j t ttlrl;
R6a6t { f ) r Rai:l1D( !, D) t
rhil(not ea!(!) ) dlo l

reaaUr(!,t,J),
AIL, Jl t-1; AIJ.ll t-1,

Programul la un graf9i afigeazdmatricea


urmdlorcitegtedatelereferitoare
sa de adiacenld:

{trclud!. .rra!u!l. ct r'"


llr AI50t I50l,n,

{
CLtLrelt ( i(rcat . !*C i , A, n) ,
lor (!.nt t-lrI<'.rir1++)
( !o! (tn! J-1rJ< .nrJ+ + )
cotr!< < A II IJt < < . .,
cdt<<ndl,
)

gralululp n listedeadlacenld
B. Memorarca
Listelede adiacentd reprezintd
o analormede memorare a graturilor,
in ca
pentrufiecarenodse cunoaqte listanodurilor
adiacenle
cu el. De exemplu, pent
grafuldinfura9.4.,listele
deadiacenlasunt: -

1 -> 2.3,5
2 -> 1,3
3 -> L,2,4
lt -> 3,5
5 -> 1,4
6 ->
Vanualde informaticipentruclasaa Xl-a

In acestcaz, se utilizeaz;un veclorcu n componente, pe careil vom numi


start 9io matriceT cu 2 liniigi2m coloane. Semnilicaliile
sunt:
' srarc - pentrutiecarenod i, stalrlil specificecoloanadin r unde
incepelislanoduriloradiacenlecu l. Dacdretineo, inseamnace noduli nu
arefoduriadiacente.
. T(0, i) - reprezinte un nodal lisleinodurilor
ad;acente.
I r(l, i)- reprezintA indlcelecoloaneidin t unde se gdseite unhAlorul
element
din lisl;. Dacereline0, atunciacesiaesle ultimulelermentdin lista
succesofl
or.
12 3 4 5 5

5 7 9 1 1 L2 0

L 2 3 4 5 5 7 8 910 11 12

f (01 z I 3 1 5 I 3 3 5
r I1t 0 0 t- 0 0 2 8 0 10 5

t Exemblude utilizare

Dorimsd vedemcareestelistanodurilor adiacenle


cu nodul3. stalrl3l=9,
adicelistaincepein coloana9 a matriceiT.Primulnod adiacentcu hodul3 este{.
Urmdlorul se gdseglea indiceleL Urmdlorllnodadiacentcu nodul3 esle nodul2.
Umdlofulse gesestela indicele4. Acestaesle nodul1. El esto ultimuldin listd,
pentrua ( 1, {) (Tt1l 14t).
-0
in continuare,vom ardlamodulin carese conslrujescllstele de adlacentd.
PenlrLfiecaremuchre( l, J ) se complotoaAdouacoloanoale matriceiT, pentruce
trebuielnfegistrat
laptulcd i esleadlacenlcu J 9i J esteadlacentcu L Astfel,
vom punepe J ca primelementin lislanoduriloradlacentelui I Fi pe J ca prim
elementin listanodurilor
adiacenlecu 1.
Considerdm primulcaz, ln care vom pune pe J, ca pdm elementin lista
nodudlofadiacentecu i. Variabilak, care are inilialvaloaroaO,va relineindicele
u timeicoloanedinr completatd. in patrupagi:
C astfelde operaliese realizeazd
1. Pentrucd trebuiecompletatA o nouecoloanein T, se incremenleazd
k;
2. T(0,k) va retinej , pentru cd succesorul
luiI esteJ;
3. T(1,k) va relineScalc[t], pentruci indicele ln carese gasesle
coloanei
primulnodadiacent(pan5h aceastbno!6 inlroducere, canddevineal doileadin lista)
eslein srar! lll;
4. sralrlil va retinek, pentrucd, de acum, primulnod din lista nodurilor
adiacentecu i, esiej, carese gasegte ln coloanade indicek.
246 Tnteorlaqrafurilor
Capitolul9, Introducere

Mai jos, putetiobservasubprogramele care constfl]iesclisteledo adiacenld


(tunctiile in grafult.pa6 girespoctiv,
au fostadAugale elafuii. cDrr):

Vrriintab++
rclat citire_t4-Aatrt:Lc
I iar E = . r ! r y [ 0.. 1 . 1 ., 5 0 ] o ! i n t g r; (char lfthe_fj.BI20l,
rDnlro=arr.yl1.,50] of iat!'rt in r rt 2 l t s o t .
i trl 6tart[50], i D t& a)
Droo.dur. clrl!6 r,rLAar.tlc t
(!tui_f la ! alritrg;vai E !List.; Int i .j ,k= 0;
vEr Er.!t rrDnlr.rvEr n:iDt96r);
v ar I , l, k r Lnl.g .r, f (Nru_fts, tost ! in) t

w htl (f> > i > > i )


t k+ + t
As.lF ( l, Nire_Fl. ) r R.aE(f), Itol tkl = j t
r[1] Ikl = st* l l i l ,
vhil6(no! rct(f ) ) do sl .rl l i l rkr

! . aillt r ( t , I , J ), tr.k + 1 , tt0l l kl = t,


r lO , t l r . l, !!I1 ,k l r.s l .rl l i ), l l l l [k] = sl aE l Il l ,
st.rtItI r .k , k r.k + 1 , 6l !rrIJl .k,
r l0, lr l r . t , ,I I1 , k l r.s l a r!IJ l , )

(? Proqramul urmatorchegtodateledesprun graf9i afrgeaza,


pentruliecare
d96.' noollistanoduntoradia6ente:

ilhcludL "9Eafu!l.cDD"
va! sl.rl rrEhlE., tru.at., i . ! l 12l l 50l ,6t!rrI50l ,
r , I , ' ' E r I n! . g. r t

clrlr._r.A-a.rarl. t cIrfu_Lt-Aat.rtc
( , or at , t x t ' , ! , a ta rt,n ) t ( i oral .t* t' rr,atarE ,n),
t or lr . 1 t o n d o ror (tnl t.l rl < .nrt+ + )
(
Eltoltr ( 'Notluli rdtac. cu cou!< < nNoalurl .dLac . d r<<
Ii l ,
'wht1.
I e. - gr . r{tle<>o)
t alo

r it . ( T I 0, t ' m l ,t t)t { cour< < l tol I' eI <<" "t


! Dr t r ll, ' ! E l , @ -TItl I' D l , )

,
l
pentruclasaa Xl-a
Manualde informatictr 247

C. Memorareagrafululprln llsta muchiiloJ

Se utilizeazeun vectorcu ltl componenle, unden esie numdrulmuchiilor.


Fiecarecomponenlava relinecele doud nodurila care muchiarespectivdeste
incidenta9i, in anumile cazuri alte inloffatii referitoarela muchia respective.
Relinelicd existdalgoritmipentrugrafuricare prelucreazd datelepornindde la
aceastdreprezenlare(vedeli arbori pa4iali).Uneorj,va li necesarsd sorlSm
muchiile,fie dup6noduldo pomire,fie dupea[d informatie asociatdlor.
l\4aijos, puteli observacum se descrieun vector(v) care reline muchiile
unuiaraf:

ri jlii c*1
119it"iiiq I
ItrD tuchi=!coldt
x , y r bEet r ,
oEd, 'tt
va r vrrlra ylI..5 01 o! Nc hlot

.a
l' Exerclllu. Realizaliun subprogramcare citeglo Si memoreaz6datole
la muchiileunuigrafmemoratp.inlistamuchiilor.
refritoare

Obsotvatle
f oarlelmportant,
Uneori,nodurllor unuigraf li se asociaz6 anumiteintormatii.
Ds exemplu,
dacenodurilunuigral reprozinle ora99,pentrufiocareasflelde nodse poate
memoranumdrulobleclivelor turistico. In astfelde cazurl,pe langduna dintre
metodel de memorare prezentale maisu6,vomasociagratuluiun veotorcu n
(numdrulde nodurlalogralului) component, undefiecarocomponenld va retine
informaliile
reteritoare
la nodulrespctiv. Pentruexempluldat,fiecarecomponenid
a grafului
retinenumdrulde obictlvE t!ristice.

9.1.4.Crafcomolet
Sd considerdm mullimeaelevllorunelclase.Teoretic,
oricaredoi elevidin
clasase cunosc,Penlrua hanspune Tnlimbajspecificteorieigrafurilor
acoastd
situalie,
vomconsideracdticareelevesteunnodal grafului.
Penlrucdoricare doi
elvise cunosc,lnseamnecd oricaredoudnodurisunt unitoprintf-omuchie,
Aslfel,amoblinulungralaparte,
pecare-lvomnumigratcompl6t,
Definllla9.4. Pringral completvom intelegeun graf neorientat
in care
oricaredoudnodurisuntadiacente.Vomnotaungralcompleiprinrq, unde
n estenumerulde nodurialegrafului.
248 Capitolul9. Introducerein teoria qrafurllor

aveliungratcomplet
AEturat, cu4 noduri(R.):
4x:

Figura
9.5.
degl compll
Exemplu

Relatiiutile:
f. intr-ungrafcomplet,graduloricarui
nodeste n-1. Evident,
dinfiecarenod,
pleacb(sosesc)n-1 muchii.
avemretalia:m = lq:-lf
z. intr-ungrafcomptel. . undeInestenumarut
de
2
muchii,iarn,numdrulde
noduri.

). Demonstralie fiecaremuchie 2 noduri.


unegte Numarul muchiilor
va li egal
cunumdrul
desubmu[imi cu2 elementealemutimiicolor! noduri.
Acestnumereste a: - nrn- I) .
2
l, Aven ) z gralurineorientate
cu! noduri.

\ Demonstralle: maximdemuchiipecarele poaleavea


amvdzutcenumarul
ungrafneorientat
esle:
n (n - l)
2
unuigralcomplet.
9icorespunde Segtlec5,tiinddat! o mu4lmeA cun elements,
avem2'submultimi
disjuncto
aleacesleia(aiciesteinclusd9i submuqimeavlde
9iA).Pdnumare,
avem:
n( n - l )
a-T
L-
submulllmi
ale numdruluimaximde muchii.Ori,fiec6reisubmulllmide muchiiii
corespundeun grafneoienlat,pentruci nodurile
sunlaceleagi.

9.1.5.Grafpartial,
subgraf
Delinitia9.5.Un gral pa4ialal unuigrafneorjontat
date=(v,E) esteun
gralsl- (v,El), undeEcE.
Manualde informatici Dentruclasaa Xl-a 249

I Un grai pa4ial al unui gral dat, este el insugi sau se obline din G prin
suprimareaanumitormuchii.Priviliexemplulde maiios:

Figua 9-6.

o
c=(v,E ) Gr= (vr E 1)

e Exempledin vlatareaH
1. FiinddateD persoane, inlre uneledinlreeleexistdo relatiede prietenie.
Asociem
acesteisitualiiun gralc. Dupdun timp.unelcpersoane se cearla.in lcoriagralurilor,
aceaslainseamnecd in G se supimd anumitemuchii9i astfel,se obtineun gral
partialGl.
2. Fiinddale n orago,uneledintreele suntuniteprintr-oSoseadirecld(carenu mai
lrecepranalteorase).Asociemsitualieidatoun gralG. OatoiiSprecinilaliilor,
anumite
Soselese inundd9i nu mai pot li utilizate,
Aceaslainseamndcd ln c se supdmd
anumitemuchiigr se obtineungrarpa(ialc'.

? Intrebaie:caleg.afurl pa4laleare un gralneorientat cu E noduri?Indlcafle:


,; Catesubmullimiaremullimea muchiilor{ 1, 2. . . . . [r} ?
Oeflnllla9.{t.Un subgral al unuigraf neofieniaiG,{v"E) este un graf
G1!{v1,sr) , undevrcrr, E1cr, iar muchiiledin El sunttoalemuchiiledin
E caresuntincidentenumailanoduridinmullimeavl.

f Un subgralal un{rigrafc estc el Insugisau se obtinedi/rc prin supnmarea


a anumilornodurigia luturormuchrilorincdenlecu acestea.Priviliexenpl ,l Jo
matlos:

c= (v,E) c1= (vt, E 1)


250 Capltolul9. Introducerein teorla grafuriloJ

H ExemDledin rcalllale

Asociem
1. Se daun lime. intreuneledinaceslease slabilescrelaliide colaborare.
situalieidateun grafc. intretimp,anumileiirmese desiiinloaz Aceastalnseamnd
ce in G vom eliminaanumitenoduri9i muchiibincidenlelof, oblinandun subgrafal
tutG,e!,
2. l\4aimulte calculatoare (r) sunllegatein releacu ajutorulunorcabluri.Asociem
situatieidate un grat c. inire timp,anumitecalculatoare se delecteaz Asttel,se
obtineunsubgraf alluic,c1.

? intrebare:catesubgraluriare un gral neorientat


cu n noduri?Indicalle:care
rtl este numdrulde ale
submullimi mullimii {1,2, . . .,n}? Intrucalmullimea
nodurilor, vom
v, eslenevidS, laceabsiracliede mullimea vide.

grafurilorneorientate
9.I .6. Parcurgerea

Prin parcurgereagraturilo/ inlelegemo modalitate de vizitarea nodurilor


acesluia.Parcurgereaeficienti a graturlloreste e5ntlali in teorla grafurllor,
deodreceo mu{lme de algoritmlconaaoraliau la batl o agtlel de parcurgere.
parculgorilof
Dinacestmotiv,in acestparagrafhu vominsistape aplica\i]le 9i ne vom
mdrginlnumaila prezentaroa de parcurgere.
algoritmllor In paragratelo umdtoare,
veligesimulteexemploutilo,in careparcurgerea
grafurilorjoacdun rolfundamental

Exisli dou5 modalitdtigeneralede parcurgere9i anume:parcurgereain


ldllme(Ba)tiparcurgeJeain adenclme(DF).Acosteavorlilratateseparal

in l5time(BF- Breadth
9.1.6.1. Parcurgerea First)

t Parcurgereain llllme se faclncepAndde la un anumilnod l, pe carell


vizital.
considerem
+ cu el 'fieeleJl, j!,...J*, vizitatein
apoitoatenoduribadiacente
Vizitem
aceastaordine.
t cu Jr, apoicuJ,,..., apoicui*.
adiacente
Viltamtoatenodurile
t
t Parcurgerea conlinudin acestmodpandcendau fosi vizitateioale nodurlle
accesibile.

3 ln acest paragrafvom xemplilicaparcurgerile


doaf ln cazul grafuilor conexe,Cum
noliuneanu a fost prezentaGpan6 in aceslmomenl,precizamdoar ce vom exemplifca
parcurgereagrafuilor in care oricare dou5 noduri sunl 'logate' printr-o succesiune
d6 muchii.

*,
Manualde informaticiDentruclasaa Xl-a 251

Exemplede parcurgeriBF aleaceluiagi


grat,pornindde la noduridiferite:

grafulaldturat
Pentru avem:
Nod pornire L'. ! 3 6 2 7 5 |
Nod pornire3i 3 7 612 5 |
Nod pornire 6: 5 317 2 5 {

Figura9.8.

Parcurgerea
BFsoofectueazd prinutilizarea
structurii coadl,avandgrije
numilS
caunnodsi tievizitat
o slngurd
datd.Aluncicandunnodafostintrodus ln coadi
senarcheazA cavizilat.
Coadavafialocatdprinutilizarea
unuivclor.
Algorltmul
eateulmetorul:
Noduldepomire steintrodusln coadeli estemarcat
cavlzilal.
CetlimpcoadaestenevidE
Pentru nodulaflatlalncgputulcozii:
I strecin coadetoatenodurileadiacgntecu 61,carenu aufostvizitatesi
semarcheazA cavizitate;
I safigeazd;
r sextrage dincoadd.

Vomutiliza
urmatoarele
notalii:
pdmelcomponente
l_o - Indlcele a cozll;
!-o - Indicele
ultlmelcomponente
a cozli;
oorda - vectorulcarememoreazE coadapropriu-zls:i
B - vectorc r4lne nodu lvizltat:

fo. nodul i nu a fost vizitat


'- = i
slil
1.1,noduliafostvizitat
In continuare,vor fi prezentate
doud exemplede implementariale
parcuqsriiin ldlime(BF)aunuigraf,memorat
prinlistede adiacenle
9i
matrjce
deadiacenla:
252 Capitolul9. lntroducere
in teoriaorafuiilor

1. Programulurmitorparcurge
BEungrafmemoratprinliste de adiacentel

VariantaPascal VariantaC++
*inclual "srafuai. cDp"
va! Dr i,cr sf-c,9:lntgr; i nt n, coB dats0l , s t50l , i _c= 1,
co aa la,s : aEay [ 1. . s o] ol 3 f_c= l .TI2l t5Ol ,startt50l ,p,
void b! (i!t noau
stert:DoEirt ( coatla ti-cl
-nod;
9ioc':lure bl (@a!: int6g6r) t w hl l (i c< :E f_c)
{ p=gtalr lcoaalall cl l;
i._c : =1, st_c , E1,
coaala II cI:=nodl; ( it { 6 Ix' l 0l ID l l = = 0)

tth116 t_c<=Ef_c alo coadaIE f_cl = T I0l ID I;


6l aI0l l pl l -1;
D:=sle rltc oadaI t , c l 1; )
{hil D<>O do D = TIT] ID ]
l '
if E[E I o. D] 1= 0 t h@ c4!< <coatla Ii_cl <<6dt ;

s!_c t raf-c+1, l
coaal! I8r_cl : =E I0, Dl t l
strt0,9l I :=1,

D: E [1 rD ] t {
ctlir_lrA-astatlc ( rGfa!. !x!o,E
ritln(colaL[{_cl );
bf{ 6) t
)

Clille_r,A,Astallo (' Gre{. tx

bt ( 3) t

2 . Programul
umdtorparcurge
BF ungrafmemoratprinmatriceade adiacenti:

*lnclual "qrafuri.cAD'

iD t n , c o a d a I 5 0 l , s l 5 0 l , i _ c r I ,
af_ . =1 , A t 5 0 1 t 5 0 l , i ,
widl bf ( int noal)
{
coadlatl cl
-rcd;
bnualde informatice
oentruclasaa Xl-a 253

colda ti_cl !aod;

ubtl. (i,c<=sf_c) alo while (i<-n)


(i ! (Al c o adatl -cl I ti l -= 1
&& rItJ= = 0)
wttle 1<.n iio
c4d4[st_cl
il ( (A tcoaita [i_cl , tl s ttI= rt -it
a nil ( s I il- 0) ) -1)
)

)
a l -c:= s f _c + li, coul< <coaalaI i_cl <<e4dl,
co a d s ls f - c : . . t ,
)
l

( c l rt! !a (n o ra l .ta!{ ,A ,n) ;


!r!it61a(coaat! It_ct ) t
b f ( 1 );
l

C illa l c( t( t r at . t at ! , lr . n) ,
bf ( t )t

in addncime(DF* DepthFirst)
9.1"6.2.Parcurgerea

Pdrcurgereain adenclme sefacincepand


dela unanumitnod 1, pecareil
considordmvizilal.
Dupevizitareaunul nod, se viziteazdprlmul dintronoduriloadlacents,
inc5,apoiumetorulnodadiace pandcendau fostvizltate
nevizitate toat
noduJll
adlacenle cuel.

Parcurgerea in acestmodpendcandau foslvizitate


continud loatenoduJlle
occeslbile.
4
Exemplede parcurgeriDI| aleaceluiagi
graf,pomindde la noduridilerite:
7x:
grafulalSturat,
Pentru aveml
Nod pornie ,J ! 3 7 5 2 s 4
Nodpornire 3t 31 5 L 2 5 4
Nod pornire 6.6 3 7 7 2 5 4

Figura9.9.
254 Capitolul9. Introducereln teoria grafurllq:

#,. Exemplede implemen ale parcwgeriiDF

urmdtorparcurge
1 , Programul prinlistede adiacentAl
DFungralrnemorat

*iDcludle'graruri. cDr'
i nr s I50l ,nt
6: ar r aytl ..5 0 l o f i n te s e ., ! t2l I50l ,srai tt50l t
vold df (i4t Eoal)
E!.rt : Dornir,
{ in! D,
9rocsdur dlf ( nod r i!l.sGr) t cou!<<rrcat<<u i,

6l nodl = 1;
E ileln( nod, ' ' ), vtrrl (p)
{ t! (3Il t0I ID l l ..o)
dr(!I01 I9l ),
D = l l 1l ID l ,
l
tf r llt 0,D l l = 0 l
t h@ d t! (rIo .D l ) t
(
cilife*:,Ajat.tlc ('ora!, rxr".

dl (1)t
clrlr-r,A-aararlc (,or.t. txl! tt, l
g! lr ! , n) ,
dlr { 1) ,

Daungrafmemoral
umdtorparcurge
2 . Programul prinmatrlcea
deadlacentt:

lil[ lii:!iltil;iiiihti ii ,[ii1,[l;r,ti


*tDclud. israturl. cDtri
t nr 3150:,al 50l I50l ,n,
. ! . ! ! . y t 1 ..s o l o ! t!t.q .r,
rctdl al!_r(ln! nodl)
( Inr k,
Dloc.dlur. d!_! (nodh ht.s.r) , cout<<toit<<i ',

!o! {k-lrE<-ark++)
cll! (!Pd. | | ), t!(A l roau l kl $1 & & tl k:..0)
al!_! (k),
lor kr.l co n do )
! . 1 ( A lnod ,k l .1 ) l n d (3 tk l .0 )
lhsn il!_!(k),
{ cMraN ( i ora!. txt n, a, n ) ,
dt!_r(1),
bsi,n l
c it lloN( ! o ra t. t* t t,a ,s ),
I
Manualde lnformaticeoentru clasaa Xl-a 255

timpuluinecesar
9.1.6.3.Estimarea grafurilor
parcurgerii

Parcurgerea Er (sauDF)a graturibr,pomindde la maviceade adiacent;,se


lace ln o(n'). Practic,pornindde la un nod i, so cautSpe liniai a maticei
toatenodurileadiacente cu elgi pentrutoateceleg5sitese procedeaziin mod
analo9.
Parcurgerea Br (sauDa)a gralurilor pornindde la listoledo adiacenldso face
in o(rn). Pornindde la un nod i, se cauti toatenodurileadiacentecu el, dar
aceslease gasescdejagrupatein lisiaasociatdnoduluirespecliv9i numerul
lor corospunde numdrului de muchiiincidento acestuia.Algoritmul
va selecta,
pe rand,toalemuchiile, de underezultatulde maisus.

9.1.7.Lanluri
Reluarh delaparagraful
exemplele 9.1.1.

Pentruexemplul f. intrebaroaeste:lilnddatedou5oragea 9i b, se poats


ajungecumagina din.ln b?
Pontruxemplul 2. O percoane,.,afldo infomatieimportanla. Persoana
transmite
infomalia tulurorpriotonilor,
acegtia,larandullor,transmil
informalia
tuturor
prietenilor
lor,9.a.m,d.
Inlrebaroast:infomaliaajunge laporsoanab?
Pentruexemplul{, Fiinddatedoudtriunghiurl, r 9ib, sunteleasemenea? Si
obseruem cdnuesteobligatoriucasesli introdus delainceput faplulcetriunghiul
r
esloasmnea b. Aceastd
cutriunghlul inlormalje poateli deduse,de exemplu,prin
iaplulcea esteasemenea cu k, tr cu 1 9i r cu b.
Anallzand acegt p9grafulasocial
Tnlreberl liscdreigltualli
ln parlo,aiungemla
conclulacd in toateoazurlletrebul8d gxlete o aucoealune de nodurlde la
nodula la nodulbcu proprlotatea cl orlcarodouanodurlauntadlacente. Dacd
aceasEsuccesjune nu exisle,respunsul estonegallv, altfelr;spunsulestepozitiv.
Sau,exprimatin teoriagrafurilor, acaslainseamndcd respunsul dopindedo
unullanldolaI lab, Doacum,putomprezenla
exislnla definilia
lanlului.

tlh>. Detlnllla9.7.Penirugratulneorientat
c-(v,E), un lanf !-tvr,v,...vJ
RYd\ dnoduncuproprieiatea
esleo succesrune ceoricare
doudnoduri vecln
't-" suntadiacente, adica(v1,vz)E, (vr,v!)E. .... (b-1,vr)E. De
un lanlpoatefidefinit
altfel, muchii(vr,v,)E, (v,.v!)r,.,.,
prinsuccsiunade
( v,-r, vD) e E.

t Varfurilevl 9i vD se numescextremltllllelanlulul.
t NumerulD-1 se numegtslunglmealanlulul.Acestaestedal de num6rulde
muchiiceunescnoduilelanlului.
2s6 ca!]lgl-49,]-l99!-!!sr9i!l99rE_srdgrlie!
Definilia9.8.Se numeglelan! elementarun lantcarecontinenumainoduri
distincle.

Exemple:pentrugrafuldinfiguraaldturate:
1. [1,2,51 esleunlantelementar
cu lungme2,
intrenodurile
1qi 5.
2. 1L,3,4,L,21 este un lanl (carenu este
elementar)
de lungime4, intrenodullel St2.
Figura9.10.

I Probtema9,1, Fiinddat un gral 9i douenoduriale sale a 9i b, sd se scrieun


programcare decidedacdintre ele exisldun lant sau nu, iar in caz cd acestlant
exisla,se ceresd se aligezelantul.

lgi Rezolvare.Existdun lant de la a la b, daca9i numad:ca o parcurgere DFsau


Da,carepornegte de la nodula, va ajungesd vizitezenodulb. Rdmanede rezolvat
problema moduluiin careretinemlanfulde la a la b. Sd observ;mce fiecaremetodd
de parcurgere a grafului,pornindde la un nod j, selecteaza un allul i, dacdcele
douenodurisunl adiacenle9i dacdnodulI estevizilatpentruprimadatd. pentrua
retineselectiile
astfelofecluate,vom utilizaun veclorr, iar elemenlele acesluiaaLr
semnifacalia
urmdloarel
fj, dac6i esiedescenderlal lui j
-..,
llll= {
"- 10. dacer nua lostseleclat

Sd mai observemce un nod esteseleclato singurddata,deci,in final,T va


reline,pentrufiecarenod1, nodulJ do la carea foslselectal.Penlrunodulde la care
a porhilparcurgerea (s) vomaveaa (a) Eo,penvucd acestnod nu a iosl seleclatde
algoritm.De aici,rezunecd drumulpoateJi reconslituit, pornindde la r, astfel:se
atigeazib, apoiTlbl, apoiTfTlbl I ... pandcandse obtinevatoareao. penlruca
drumulse nu fie afigatln otdineinversdlald de modutin care a tost obtinut,
subprogramul rafac oaroilreconstituie
giilatigeazdesterecursiv.Programulde mai
jos afigeaadrumul,pornjndde la matdceadeadiacentd a grafutui:

i
* l ncl udo' grafuri .c!,D .
wlr !,al,br:Lat.gr,
6, r r . E A y t1 ..5 0 l o ! i trte q !, 6 t s0l ,A t50l I50l ,n,E Is0l , a,b,
word r6lac (tnt nod)
Dro.odura refAc (nod ! ln!gr) t t
l! nod<>o rhn (
refac (! ID odl ),
rrac (!lnotu );
E lt ( E o d ,' ' )t )
)
oentruclasaa xl-a
Manualde rnformatica 257

rrrccedure al!-r(4otl:int9t) i I votal atf--,r(inl nodl)


vBr k:incg6r; | {
begin I int k,
s lDodt : = 1; I sl nodl = l ,
fo! k.=1 t o n dlo I ro! ( k =1 r k <- D t k ++)
tf { A t Do d ,k l = 1 ) e d l (6 l k l -0 } | tf(attr< tl l l kl .= 1 & ' . E tLl .-0]
th d1 {
bqln r IkI Enodt
TIkl : =noal; I dlf. i(k),
df_r(k) j | )
nd l)

lBino
be!'in I t
citile N(!Graf.r x r ! , A, D) ; I citirIll(rora!,lxlr,a,n),
vlite(!a =t);r .dun( al) ; I c d t <<" a =" r c t n >>A ,

dlf,-r(al) r dlf-!(a),
if ( B t bl< > o ) u ! r r fa c { b ), I il (tl bl l E 0) !!ac(b)t
6nd. | )

lu
t
Observatii foarte lmporlanle

1. 56 observam cd veclorulT poatefilolositpontrua oblinelanluride la nodul! la


oricarealtnodalgfafului.
2. Dacerelacem rezolvaroa parcurgerll
prlnuiilizarea In Htlme,vomobserva cA
lanlulobjinut
arelungimea mlnimd.Prinnatura el,parcurgeleaB! solgcteazd noduile
in ordineadepdddrii" lorfaldde nodulde la carea inceputparcurgerea. Astfel,la
incepulseviziteazdprimulnod(a),apoinodurilo pentrucarlunglmea delaa
lanlului
laeleesle1,apoinodurilo pnlfucafelungimoa dela! laleesle2, I a m.d.
lantului

Programul un lantde lunglmemlnlmllntrenodurile


allgeazA
careurmeazd r 9ib:

vaitaniaPaectilr r:., cil '


'vartarita i
#tnclud!. !,sr.turL. oDD'
tnr n.coadrI50L s [50],
n, al, b, l-c, s!-a, I t lnlse!, t_c.1, s!_o-l,
B , l, c oa( la: a rra y l l ,. 5 0 1 o f aI50: l50l,l,rl50:..,b,
vold r.!!c (L!l !o{t)
{ t! (lloill-0)
rro.ddluEe r.!ac (nodlinlir), { !!ao (4lnodl ) r
cout<<m<l<<n u,
lf boal<>o thm l
l
rfac (rlrcall );
G ir ( r c d!,' ' ),
258 caglg!I9.!lr9!!!ss!!lq
E rccectur bf (rcdl!iEts!); bf(
{ coadl. tl-cl =edt

while (i_c<-Ef_c)
coadati-cl :En<tdt
w h i L ( i <d )
whil i_c<=sf_c dio { tf (atcoaatatt cl I lil!81
& & s t i l ==0 )

whit6 i<-n & coadlal6!_cl =i,


a I i l =1 ;
if (a lc oat lBli_c 1, t l= L) r til
(tl il= 0) -coaala[i_cl'
I

l
Ef_c! = 6f _c + 1,
coadlatEf_cl !=i; I
atil:=1t l
rltl : = c oaat at i_c l t
(
i: =l+1, lCraf.
Cilirelt( tstr, A,n) t

br(a);
ctttrN( r o!!!. rxt , , a, a) ,
If (:!lbl l=0) relac{b),
)

b f(11 ),
t! ttb l <>0 t lEn t 6! ac ( b) ,

refeitoarela sitlaliiloprezonlalo
Matrlcealanfurllor.Inlrobdri la 9.1.li

a) pentruexemplul1, intrebarea
sle:cumputemafla,pentrufiocareoragin parte,
ofagolein careputemajungecu maqina?
b) pentruexemplul4, intrebaroaoste:cum putemafla,pentrufiecarelriunghiin
parte,caresunttriunghiurile
asemenea
cu el?
Revenindla grafulasocialacestorsilualii,problemaconslSln a alla penvu
liecarenod I, nodurileJ, pentrucareexistdun lantde la t la j. Evidenl,rezultatelo
pot Ii relinuteinv-o matricecu n linii 9i n coloane(makicepetratce).Aceastd
matricess numegte matrlcealanlurllor,iarelementele
eiau semnificalia:

r/..t_Jl, dacaexis t ala n ld ela lla I


-" "- lo, in cazcontrar
al de informatici ntruclasaa xl-a 259

Problema9.2.Fiinddai un gral c, cumpuiemobtinematricealantudloP


EI Rlspunsulesteugordedai.Parcurgem gralulincepand
cunodul1. Pentrutoaie
rbdurileJ vizitate,
vomavear,(1,j)=1, compbtand aslfelprimaliniea matricei.
, vom parcurgedin nou,graful,pornindde la nodul2. Pentrutoatenodurilej,
vom avearr(2, j ) parcurgemgrafullncependcu nodul3....g.a.m.d.
-1, apoi
O anumilS imbune6lirea algoritmuluise oblinedacelinemcontde faptulce mat cea
esle simetrice(de ce?). Ldsamca exercitiuscriereaacestuiprogram.
FLnlurilor
htrebaro:careestecomplexitalea acestuialgoritm?

v. | . d. Lra Tco n e x

Revenind dela9.1,1. pulompunintrebdribl


laexemplele
!) pentru 1:sepoateajunge
exemplul cumaginadinoriceoragin oricare
altul?
b) pentru
exemplul
4: toatetriunghiurile
sunlasemenealntreele?

Dacdla ambelelntreberi
rdspuhsul esloafirmativ, areel penlru
co semnilicatie
graluflle
asociaie?
Aceastainseamndcepenhuodceperche de nodud,exbteun
lanlcarcle areoa xtremitell.
Sau,in limbajul teorieigrafurilor,
specitic celedouS
grafurisunt
conexe.
Deflnlfla9.9.Ungrafneorienlat
C. (v,E) esteconex,dacepentruorice
perechodnoduri x.yv, existgunlanlln careexhemitatea
iniliald
estex
finalS
$iexlremilala y.
este

QX.' Exemrle Fl gura


9.11.
1. Gralulaldturat
esleconex.Deexemplu,
inlrenoduril
19i 5 existdlantul11,2,3,{,5t, dar
9i lanlult1,3,{,51. Inlrgnodurlle 3 gi 5 existA
lanlulI3,{,5f , 9.a.m.d.
O cumam alegedoudnoduri,exisidlanlulcerutde
dfinilie.

2. GrafulaEturatnu osteconex.Deexemplu,
intre Flgura
9.12.
nodurile
1 9ia nuexisleniciunlanl.

I@
Jr Ungtalcu unsingurnodeste,prindefinilie,corex Aceastapentrucd nuexiste
douenoduridiferitspenlrucaresd se pundproblenaexistentei unuilant.
260 Capitolut9. tntroducere
in teoriaqrafurilor

E Probtema9-3.Fiinddatun gral G. (v. E), sa se scneun programcaresd decjd:


dac6grafuldalestesaunu conex.
EI Rezolvare.Tinendconi de celeinvdtaie,probtomanu estegrea.putemulitiza
una din metodelede parcurgere invdlate,DFsau DF.ldeeaesle urmetoarea: dace,
pornindde la un nod,printr-una
dinmetodelede parcurgere,
ajungemsd vizilemtoale
celelallenoduri,atuncigraluldat esteconex.CumputemEli dacd am vizilaltoale
nodurile?Simplu,dupa parcurgere, vectoruluis retin1. puteti
loatecomponentele
scie aceslprogram?

9.| . 9. Com p o n e n t ceo n e x e


Analizdm,
dinnou,exemplele
de la 9, r,1.
r ) Penlruexemplul1: so cereo rnullimede orage,astlelincatsd se poatdckculacu
maginaintreoricaredoui oragedin mullime,iar dacd un ora9nu apartineacestei
atuncinu pulemajungecu ma$inado la el la oricareora$dinmultime.
mirllimi.
b) Pentruexemplul4: se cere o mulime de lriunghiuriastfelincat oricaredoud
triunghiuri
dln aceastdmullimesunt asemenoa,iar dacd un triunghinu apa4ine
acesteimullimi,el nu esleasemeneacu niciunuldinmultime.
Obserudm cd fjecareasttelde multimeestemaximaldin raport cu relaliade
incluzlune.Dacanu arliaga,ar exislao alidmultimecarear include-o.
Fio gralul asociatunuia dintrecazurileprezentate.in termenidjn teoria
gralurilor,
problemase reducela deleminareanodurllorunelcomponenteconexe.
Deflnllla9,10.FiecE(v,E) un gral neorientatgicr-(v1,Er) un subgral
al sau. Atunci c16(v1.81) este o componentd conexd a grafulli
c- (v.E) dacdsuntindeplinite
condiliilede maiios:
a) Oricarearfix,!'vr, existdun lant dela x la y.
b) Nu existd un alt subgrafal tui c, GrE(Vr"lr) cu V1<v, care
indedinegto
condilia!),
Figura9.13.
Exemplo

1. Grafulaldturatesiealcetuitdindout componente
conoxe.Pima esle alceluitedin nodurilo1, 2, 3 9l
muchiib care le unesc pe acestoa,a doua este
lormaledinnodurilg{ 9i 5 9i muchiacafele uneste.
Io
2. Grafuldin ligura 9.14. contjne3 componente
conexe.A9a cum un gral, cu un singurnod, este
conex,tot a9a un nod izolatalcaturegte
et singuro
o
componenta conexS.

o
i,4anual pentruclasaa Xl a
de informatice 26t

I Observatii

1. Calecomponenle conexepoaleaveaun gtaf neorientaicu n nodufi?Numerul


lor esle cuprinsintre 1, pentruun gral conex9ir corespunzetor
unuigrafcu toate
nodurile:/olate.
?. In uneleprobleme,se de un graf neorienlat,ca!'enu este conex 9i se ceresi
sc adauge un numdr minim de muchii,astfelincal gralul sa devineconex. In
astlelde cazurl,se determindcomponentele conexe,fie ele c1, cr, ... cD. Fie 9
num5rullor.Vomaddugap 1 m chii,primaunegleun noddin c1 cu unuldin c2,a
douaunegleun noddln c, cu unuldinc!, ..., ullimaunesleun nod din ca-1 cu
un u l d i nc a.

0 Problema(de programare).9.4. Fiinddat un graf neoJientat,se cere sd se


alisezenodurilefiecereicomponenteconexe.

EI Rezolvare,Dup5cum ugorvd puletida seama,o parcurgere a gratului(DFsau


BF) pornrd de la un anumitnod,viziteazdloatenodurilocomponenlei conexecare
il contiae.Pentrufiecarenod vizitat,s lil retine1. Dacd,dupdo parcurgere, mai
fdmannodufinevizitale,parcurgerea se reia incepandde la primulnod nevizilat.
Evidenl,numarulcomponenlelorconexe esle egal cu num6rulde parcurgeri
necesarepentrua li vizitateloalenodurile.

VarlantaC++
*inc1udl6 iqrafurl.cDD!
wa! n, i:in t!r !; inr Bt50l,at50t t501,n,r,
d: ar!6y[1..5 0]o f iDt qr ,
votd atf_!(tnt rctl)

procalur .:if_!(!oal:intosor) ; c out < < noa l <<'n ,

f , ot ( k - lr k <4 r k ++)
writ (rcd,' '), Ir ( (Atrcall lkl E"1)&&
( s t k l'" 0 ) )
to! k:=1 to n d o df,!(k) t
if (Attu il,kl:1 ) andt ( s t k l s o)
th n d f !(k); '
{ c tri r i N ( rc,l aI.r* r" a, n),
fo f, (1 .1; i < -n, i + + )
citit N ( 'cra f .LxE',a, n) , tf (3 ttl 860)
fot i! =1 !o n a lo { cout <<ncoftE,
if 6[il =0 rh on c@e$"<<ddl,
df,r (i ) ;
uitln( 'conD conoxd' ) ' c@t<<dat1,
l
)
in teoriagrafurilo.
Capitolul9. Introduere

9.1.ld. cicluri
Revenimla exemplulcu oragelelegatepdngosele.intrebareaesteurmeloarea
exisHweun oragdin careputemfaceo excursiecu magina,se nu trecemdeca c
singurddatdpe o gosea,s6 vizildmmaimulteorago9i se ne intoarcemde undearr
plecal?
Problema se reducela a afladacagralulasociatare sau nu cel pulinun ciclu
Maiinlai,se delinimnoliunea.
Detlnitla9.t1. Un lanl L carecontinenumai muchil disllncte 9l pentru
care nodul lnltial colncidecu nodul final se numestecich.r.Dac6,cu
exceplraultimuiuinod. care coincidecu p4mul,lanlul este elemenlar
atunci ciclul este elementar(adici, cu excepliaultimuluinod, care
coincidecu primul,continenumainoduridislincte).

. Exemple:pentrugrafulneorlentat
din Figus.15.
. fiqura9.15.avem:

a. IL,2,3,r"1 esteclcluelementar.
i
b. lL,z,Ll nu esle clclu, penlrucd {1,2) Si
( 2,1) reprezintd
o aceeagimuchie,decinu conline
numaimuchiidistincle.
c. l'.,2,3,2,1"1 nuesteclclu,pentru
cd nuconlinenumaimuchii
dislincte.

I Problema9.5. Fiinddat un grat conex,c= (v, E ) , sd se scrieun programcafe


decidedacdgraiulconlinecelputinun clclu.

EI Rezolvare,incepemprina obserua cd dacegratulnu esteconex,putemrezolva


problemaverificenddacd existdun cicluintr-o componente conexea sa. Pentru
am preteratsd considerdm
simplitate, cd grafulesteconex.9i aici,problema se poate
rezolvapornindde la o parcurgere DF.Gratulconllnecel pulln un clclu dacd,in
timpul parcurgerii,algoritmulva alungein situaliade a vlzita un nod de dou{ ori
(leniativaoricumrespinsd,pentrucd algoitmultesieaz, acest lucru,vedeli rolul
vectoruluis). Vomda unexemplu, cu grafulde maijos,pe careil parcurgernDF.
Vizitemnodul1, apoiprimulnodadiacentlui,fie el nodul
2, apoiprlmJlnod adiace.tal lui 2, fie el 3, apoi6e incearai
vizilareanoduluiadiacenicu 3, 9i anume1. Daracestnoda mai
fostvizitalSitentativaesterespinsd.De ce s-a ajunsin situalia
sd se incercevizilareanodului3 de doudori? Penlfuce nodul
1, a fost vizitatca nod de pornke9i penirucd se incearcd
vizilarealuiprinlanlul[1,2,3].
Asdel,
s"aobtinut
ciclul1r,2,3,11.
al de lnformatice tru clasaa Xl-a 263

Programul umelor testeazadacdun grafconlinesau nu cicluri.Sd obserudm


ad, odalevizitatun nod,accesalprin intermediul muchiei(noil,k), se gtergedin
matricoade adiacentdmuchia(k. roit), penlruca aftfelar fi seledaia9i aceasta
muchie9is'ar ajungein situaliase lie semnalat
unclclufals.

FascatI -
; 1r."u,,] Yartanta .l. i; .: ." : i , ' Verlai*a
cl;;"' ,,i i. .
us gr.furi,rlncrE, { iDc lui! 6' t i. ! u r i . c t t , '
iat Isol ,aI5ot t5ot ,sasi!.n;
s:a r iay l1. . 50lot lnles6a;
rctdl dlf (tnt nod)
( i,nt k;
sa.it.booleet
Dlocatur alf (nodl: iDtegr); rot (h.1rk<=nrk++)
i f (Al n odl IkI = = r)
{
,i tk l Inodl .0,
for k!=1 !o n ato i f t attl " 61 61L"
t! Alrcit.kl=l lh6n Is6 !r.6itr1,
)
alkl Inodl rr0, l
t! lt k l= o r hd d f(k )
6lao 9a3l! !=!rue;
{
clt!.!N( "Clraf,.txtr.a,n),
d l ! (1 ) ,
l! (srar.l) cout<<"D4",
Cl t:L !6 !l( t O r ! ! . t at r , l, ! !), J.3 oou!<< Nu.,
a t!(1 ),
lf slstt thtl I'rlth{'D.' ) '
6I3e wll!In( 'Nl' )

$, o0"..4r"
Deglparcurgera
se facln tlmppollnomlal 9i cu loalecd programul est
sputeaproceda
simplu, lntr-unmodcumultmaiinteligent. l\4aimult,aproapo
ct nu
estecazulselacemunprogram. conx,
Grafulliind eslsuficient sdverificemrelalia
n o n -1 ,

undernestenumerul de muchii,iar n eslenumerul de noduri,Dacerehtiaeste


verificale,
lnseamnd cd grafulnu conlincicluri,allfel,dacen>n-1 inseamne cd
cel pulinun ciclu,iardacdn<n-1inseamnd
grafulcontine cd nu esteconex,9iar
cerinta.
conlrazice
Deundeaceastd
observalie?
Pentru
a o inleleg, sestudiem
lrebuie arborii...
264 Capitolul9. Introducerein teoria qrafurilo

9.1.11.Arbori
9.1,l l.l. Notiun e ad e a rb o re

S5 presupunem cEo linnddoregtese conecteze la TV, princablu,cele! case


aleunuisat.Cumvorficonectate caselela cablu?Logic,va trebuicafiecarecasdsa
lie coneclald.
Apoa,la o casdva sosicabluldinlr-unsingurlocAi,evenlual, de la ea
pomi cablulcdlre alld case. DacAanalizbmsiluatiaprezentaEprin prismateone
gralurilor,
vom aveaun gratconex(fiecarecasdirebuieconectatd), iar gratulnu
conlinecicluri.Dacdar conlineun ciclu,alunci,evident,putemrenuntala cablulcare
une9tedoui case caro apa4in cicluhlirespecliv.Asdel, oblinem un graf c!
proprietelbde maisus,numitarbore.

Delinitla9,12,Senurnegte
arboreungraf
neodentat careesteconex9i nu oontine
clcluJl.
in figura9.17. aveti un exemplude abore cu 5
nooun.

0 Problema9.6.Se citegteun graf.56 se scneun


programcareverificddacdesle albors. Figua9.17.

EI Rezolvare.Conexltateagtimsd o verilicam.Dacaihtr-oparcurgere, Dr (Br) se


viziteazd atuncigrafulesleconex.Dacdun grafareclclurl,este,din
toatenodurile,
nou,u9orde verificat,
cu aceeagi parcurgereDr(Er).Se ne amintim cd in cazulin
caregratularecicluri,
Tntimpulparcurgerii,va exislacolputino a douatontativdde
viziiare
a unuinod.Prinufmare, printr"o
simpldparcurgereD! (BF)so poatestabili
dacdgrafuleste conexsaunu.

:.1 Va antaPaecal VarlantaC+i


Stnclsdt "sa!!utl . cr'r'"
w.r n,l, slrm. htsrt { i r r{ s0l ,A r50t I50t,el astt,n,I,
s r aE ay t l ..5 0 l o ! L a t6 r6 r,
votd au(itrt noil)
sasitrbooleot (
Dtocoi\rr6 dt (nod r lnlsger ),

for(kr1rk< !nrk+ + )
tl (.trl rcdl l kl .B l )
f,or k,cl to a ilo (
1! rltloal, kl ther! tnodl .o;
-l ^l
i f kl { s l kl rr0) dl (k),
a [L, noal: r.O, 6Io6 gaalr=lt
t t s lk l .o th d d t(k ) t
el.6 sEai! !-tm6, ,
yanualde informatice
oentruclasaa Xl_a

c i t irN ( 'cra f. Lxl t,A,n) ; { c ir ir eN( ic r af .txl"A,E),


d f (1); d! ( 1) ;

f o r i: ' 1 lo n do f or ( l- 1r i< = n r i ++)


31, s. = e!jM+6[i]
'
tben riteln( tNu este conex') c@l<<'nr eBt conexn,

t hen Gite ln(tl!6 c ic lu' ) dou!<<"r\! clclu"t


el66 Eiteln (!Arbo rot )i 13e cq!<<"A!bor6",
)

cu n noduri.G estearbore dace9i


5 Teorema9.1. Fie c un gral neoriental
numaidac:aren-r.muchiiginu contlneciclud.

\ Demonstralle

=r Fiee un arbore(gralneorienlat,conexSitdfdcicluri).Trebuiesa demonstrdm


cd aren-1 muchii.Vom demonslraprinindu4ieDacan=1, numdrulmuchiilor
esle o (se verilicd,are n-l muchii).Vom presupunepropielateaadeveratd
pentruarboficu r noduri(adicdau n-1 muchii).Fieun abore cu n+l nodun
ExislScel pulinun nod terminal(nodcareare o singurdmuchieincidenta)
DacAnu ar exisiaun astfelde nod, sa considerdmun lant care pornegle
dintr-unnod oarecare.La fiecarepas,vom seleclao muchie Pand|a ume'
pentrucd multimeanoduribresle liniti 9i pentruce nu exisienod lerminal,
lantulva trecede doudo printr-un acela9inod.Astalnseamnecd arborelear
continecicluri(absLrrd, se contrazicedefinilia).EliminAmnodul leminal 9i
muchiacareii esleincidentd. Obtinemun abore cu n noduriConfoimipotezei
fdcute,aceslava avean-1 muchii.inseamnece arborelecu n+1 noduriva
avean muchii(n-1+1).

- Fiec un grafcu r-1 muchii,carenu contineciclurinemanede dovedilci G


esle conex.Vom demonstraprin reducerela absurd.Presupunemcd G
nu esteconex.Fie q, q, ..., c, componeniele conexealegraluluiFiecare
condiliile:
dintreeleindeplineqte
e) esteconexe(agaa fostaleas;);
b) nu conlinecicluri(pentrucAc nuconlinecicluri).

Rezultdca liecaredintreele esle arbore.Fie mi numerulmuchiilor9i nr


numArulnodurilorfieceruiarbore c!. Avem !u-rr-1. Dar lll+nr+. . . +tne-n-l.
Rezultd:nt-1+n2-1+,..+h,-1=n-1,deci n,+nr+. . . +no-a+p-1 Dar G are n
noduri.Bezulld:n-n+p-l, deci p=1. ln concluzie,existao singuracqnponenle
conexS, cAc eslearbore.
carenu continecicluri.Rezulta
itolul9. Introducere
in teorta

9.1,l1.2. Noliunead e a rb o re p a rt ia l
Sd presupunem cd inlf-unjude!se impunerepararealuturorgoselelorcare
unescdiversele localitdli.
Peniruaceasias-a obtinutun crodilexlerncarepermiteca
toategoselelesd fie recondilionate.
Desigur,se doregieca repararea goselelof sd se
Iacdcet mai repede,dar,in acela9itimp,irebuieca in timputreparatiitor
se se poala
chcula,astfelincatsi nu r6mandlocatiletiinaccesibilepentruhaficr;trutier.Se cere
un numarminimde goselecare sd nu inlrein repar4iiin primafaze,astfellncat
conditiade maisussa poaleli respedate.
Da considerimgrafulin care nodudlesunt localitatile, iar muchiileslnt
goselele,va trebuisd pestem un num{r minlm de muchll, astfelincatqrafulsE
.dmanaconex.Careesteacel
-umer minimoe muchiicareconservacon;xitatea,
Evident,n-1. Cumgrafulrdmaneconex,in urmaelimindrii anumiiormuchiise obtine_
a$acumrezultadinleorema9.1.(datdin pa.agrdulanlerior). un albole.
0 Problema9.7. Se dd un gral conex,
c=(v,E). Se cereun gJafpa4lalat sdu,
caree6tearbore.O astfelde structurd se
nume9tearborc pa4lal. Evident,existd
posibilitatea
ca dintr-ungraf conexse se
poataoblinemaimulliarboripa(iali.
Aldtural, puteli observa un gral
conex(stanga) giun arborepa(ialatsdu.
EI Pentrua rezolvaproblema, vomtolosi, Fl gura
9.18.
din nou, o metodede parcurgere a unui
graf,mai prcisparcurgerea
Dr,,Vom aJi9anumaimuchiileselectatede alqorilm.
adic5celocarenu doiermin6
ciclun.ProgramulurTatorcltegtedatelerefenloar;la un
grafconexgiafigeazdmuchiileunuiaborepartial.

Vhdanta
C+i , ;.
ur6a slafurL.wlnclt, Slnclua!6 rsEf,urL. cDDn
Inr 6[5ol ,A I5o1 I5oLn, ",,1
. r llE r y l 1 ..5 0 l o t l n !.s r,
rclat dU_!(tnl nod)
Droc6ilur d!_r ( trod ! ln!sr) ;
for (kFl rk< .nrk+ + )
If (athoau tkl -s1 a& 6tkl ..o)
foi k3-1 !o n dlo ( cdt<<nod<<r " <<k<<endlt,
if ( alio d ,k Itl ) s d t (Bl k l z o ) dl f_r(k),
lh.n boqln !
Etl e rn (n o d ,. l
' .k ),
i tt_ !(k ),
{ C i l i rol r{ troE af.rrti ,A ,n),
dr_! ( 1) ,
l
c llir t N( ' e ra !. rx E ' ,A ,n ) -
al!-r (1) t
Manualde informaticipentruclasaa xl-a 267

9.2.Grafuriorientate

de graforientat
9.2.1. Noliunea
Nu intotdeaunagrafurileneorientalepot exprima"relatiile exislenteintre
anumiloelemenie.Pentrua ne da seamado acestfapt,vomdacatevaexemple.
1. Considerem un grup de n persoane,undefiecarepersoanddetineun lelefon
mobilal liecdroipersoane
mobil.In agendatolefonului se gesescnumerele de telefon
ale allor k>o persoanedin grup.Sd observimcd dacepersoanai are in agenda
leletonicanumSrulde telefonal persoanei ca persoanaj sa
J, nu esie obligaloriu
aibein agenddnumdfuldetelefonalpersoaneil.
2, Un aulordo cartedoregtesd prezinteanumilenotiuni.Pentrua oblineo lucrare
valoroasd, acestadore9teca oricenotiunepe careo inlroducesa fie precodate in
lucrarede noliunilspecarele presupune dejaprezontate.
3. tjn programeste alcituit din n instrucliuni, alribuiri,apelurido subprograme,
Aici sunt excluseinstrucliunite
afigari,citiri sau insirucliunidecizionalo, repetitive.
Acestearezultdin uffia inslruotiunilor decizionalegi a ordinii de executarea
instructiunilor. Pentrua prezentaordlneain care se executdinslrucliunile, unui
programi se poaleasociao schemtrloglcd.
Elementele intre care existdanumiterelatiise numescSi de acoastddatd
nodud sau vadurl. Doud vaduri pot li unile p ntr-un arc. Arcul (t,J) este
feprezentat ca o segeatade la t la J giare semnificatia
genoraEce exisl5o relatie
de la t la J (aientie,nuSidela J la t),
Pentruexemplul1, arcul (l,J) ar
somnificalja cd t are pe agendatelelonbe
numdrul lui I. Pentru exemplul ,, arcul(t,J)
are semnificatia ci estenecesare cunoaiterea
noliunlit pentrua puteainlelegenoliunoa I,
Pentruexemplul 3, arcul(t,J) aresemniJicatia
cddup5executarea I estoposibil
instructiunii sd
soefectueze jnstructiunea
J.
ProcedAndagacumamafSiat,oblinem
un Figu.a9.19.
Exsmplud6 gralo enlal
graforiontal
agacumestecelalSturat.
Definllla9.13.Se numegtegral orlentatperecheaordonalee-(v. a),
uhde:
t v-{vl, v,, ...,vn} esteo multimeiiniti de elemenlenumitevedurl sau
noduti.
t a esle o multimede arce.Vom notaun arc prinperecheaordonati
268 Capitolul in teoridqrdfuritor
9. Invoducere

De exemplu. penirugraiuldin ligura9.19.,avemv={1,2,3,4,5.5} Si


(t--.
- .{- . A=( ( 1 , E ), ( G,1), { 5, s ), (4, s ), 1 2 , L ), 1 2 , 3 1 , .
a
,, Observalil

1. In cazulgrafurilororientate,dacAexistdarcul {w{,wj) nu inseamn;cd exista


automatEiarcul (vj,vr). Dinacestmotiv,in delinitie, s-a precizatce un arc esteo
perecheoralonatideforma(ur, vj ).
2 . Dindefinilie,rezulldca nu exisl; arcede la un nod la el insusi_Asttel,un arc a
fostdefinil(vr,wr) cu t+j.
3. SA observdmce mu4imeaarcelorA, respectefelaliaAcrxv, undevxv este
produsul
cartezian
almufimiiv cu eainsdgi.
4. Grafurileneorientate sunt cazuriparticulare

%%
de grafuri orientale,mai precis acele graluri
orientalein caropentruoricearc (wr,wl) existS
arcul (vJ.vr). Abturat, puteliobseNaun graf
neorientat(stanga)reprezenlat
ca ungraforienlat
(dreapta).
Figwa9 20.
5. Gralurlle orientale se mai numesc 9i
dlgrafuri.

Dellnllla9.14.In gratulorientat
c={v,a), vaduriledistinctevr,vjc sunt
adlacentedaceexislacelpullnunarccarele unegte,
Aslfel,avemurmdtoarelo cazuri:
a) Existdnumaiarcul (vr, vj)eA - ln aceslcaz spunemcd arcul (vr. vl)eA
osteincident
sproexleriorcu vr 9i spreinteriorcuvj.
b) Existdnumaiarcul (wl, vr)A - in acestcaz spunemcd arcul (vj, wr)ea
esteIncldenl
spreinieriorcu vi Sispreexleriorcu wl.
c) Existdarcul (vi. vj)eA Flarcul(vl.vl)eA.

Deflnltla9"15,intr-ungraforiental,
pringradulexterioral unuivarfv vom
inlelegenumirul arcelorIncldentespre exterlorcu v. Gradulexterioral
unuinod va tinotatcu d+(v).

Delinllla9.16.inlr-ungralorientat,
pringradutinteriorat unuinod v vom
b inlelegenumirularceloi incidentespre interiorcu v.
Gradul inlerioral
unuinod vatinotatcud-(v).

.N: Penlruvarfuli dintiguraaldturatS,


avem:

d" (t) =3 qi
d- ( i)
-2 .
pentruclasaa xl-a
Manualde informatictr

O relalleutH: fie ungraforientatcu n vadui 9i tn arce.Avemrelaiia:

d -( l ) + d*(2)+...+ d. (n)= d (1)+ d - ( 2 )+ . . .+ d ( n )= m .

! Demonstralie.Relaliaesteadeveratd, pentrucd fiecarearcesteincidont


spre
exteriorcuunvad giliecarearcesteincidenlspreinteriorcu unvfi.
Flevenim prezenlate
la exemplele acesluiparagraf.
la inceputul
Pentruexemplul1, dace gradulexterioral noduluiI este k, inseamndcd
persoana I arepe agendatelelonicinumerele dingrup,iardacagradul
a k persoane
inlerioral noduluii este l inseamndce numdrulpersoaneil este pe agenda
lelelonicea L persoane.
Pentruexemplul2, daca gradulexlerioral noduluii este k, ihseamndcd
notiuneat estenecesarepentruintelegerea a altork noliuni,iar dacegradulinterior
al noduluit este1, inseamnipentrua intelegenotiuneaI, esle necesarca alte 1
notiunisd fie intelese.
Pentruexemplul3, dacagradulexleioral noduluit estok, inseamndcd dupi
inslrucllunea (t esteinstruqiunodecilonal!),iar
I se pot efectuaalto lr insirucliuni
daci gradulinlerioral noduluii eslex, lnseamne cd inskucliunoa I se poatooxecuta
duodoxecuiarea uneiadincele1 insiructiuni.
n ]1]_u
2 grafuri
I I O relalleutlH:avem4 o entatecutr noduri

| | ! Oemonsrallase lace prininduqie,Dacdn.1, avem-1 graf orientat.Dace


ll n.2, celedouenoduripolsd nuflesausafieadiacenle. ln acostdinurmecaz,
ll pulem avea arcul (v1,vr) sau arcul(vr,wl) sau putem av6aambelearc6
| | t"t,.rt Si (vr,v1). in total.
avom 4 graluri valoare
orientale, gidin
carerezului
|| tomuld, dace Tnlocuim n cu 1.
Presupunem tomulaadevdraie, adicedacSsunln varfuri,
avem
II
|| 4:l.l
ll 4 '
| | grafuri Trebule
orinlate. sddemonstrdm cddac5suntn+t vArlu, a\m
II r!:!.1
| 4'
ll graluriorientaie.Adeugam veduln+1.Aced verfpoatefi adiacent cu fiecare
II dintre
celelalte
r varfuriinexacl 3 moduri (vedeli adlacenta) sau poate
sd nufie
adiacenl.
Aiunci,nunarulde graluriorientale cun+l noduri este
|| ( r l) n( , ' - l) 4 ( r +r )
| |
ll 4 ? x4n=4 2 =4 2

Delinilia9-l?. Un gral orientalostoconplet dacdoricaredoudvadurit


J) si J (t+j) sunladiacente
270 Capitolul9, Introducerein teoria orafurilor

rt:ll
O relatieufiE:avem3 'z graturi
complete.
Demonstralia
sefaceprininduqie!
Exerctiul

grafurilororientate
9.2.2.Memorarea
graturilororientalese tace la fel precummemorareagralurilor
lvlemorarea
neorientate.
Pentrutiecarestruclurdde date pe care o vom folosi,vom avea cate o
procedurA(funclie)care citogtedaiele respective.
Toate acestesubprograme se
gdsesc grupatein unitateade programslafuli.Dr (peniru Pascal)9i in
Elafuri . crE,(pentr C++).
pe carele utilizdm
Toalesubprogramelo cilescdatelodintr-uniigiortext,in care
pe primalinievomsc e numdruldenoduri(n),iar pe umStoaroleliniiceteo muchie
(1, J) ca Tnexmplulurmelor,ln careesteprezentatun gral gi liniilefigieruluitelt
careestecitilpentruel:

riEorur
*o,f5l
lr, I
113 |
l15l
123 |
13{ |
jo'l
Flgura9.22.

Trecemla prezentarea p n carepulemmmoradalelereferitoare


structurilof
la un graf.
grafululpdn matalcea
A. Memoaarea de adlacenltr

\,. - o matricepetratice,
undeelomentele
ei,ar,J au semnilicatia:

a , ={
[t, pentru
1i,1;e ,t
" (i,j)e A
10, pentru
0l r 010
9_, Penkugrafuldrn figura9.22..matrrceade adiacente
e^ esteprezenlalS
aldtural. 001 000
I 000 100
li Observalll 000 010
f. intrucet,dinmodulin carea tosldefinilgra{ul,rezuneca nu 000 000
exislearcede la un nod la el insugi,rezultdcb elemenlelede 000 000
Manualde informaticipentluclasaa Xl-a 271

pediagonalapdncipaE relinO(.r,1=0,oricare
arfi it1,2,....n]).
2, Matriceade adiacenlSnueslein modobligaloriu simetrice.
3. Sumaelemenielor de pe liniai, ! ea]-,2,...,nt are ca rezullatgradul
exterioral noduluii,d'(i ).
d. Tot a9a,sumaelementelor de pe coloanat, i e tI,2,,...n] areca rezullai
gradulInlerloralnoduluil,d- (i).
5. Surhatuturofelementelor matriceide adiacenldesle, de fapi, suma gradelor
exterjoare(sauinlerioare)adicesumaarcelor,n.
5 . DacAgrafulcililare !n numdrmicde muchii,atuncimatriceade adiacenldesteo
forna inelicientd
de memorafe a lui,pentruce eava relineo mullimede O.

pecarele utilizm sunt:


Subprogramele

VarlantaPascal VarlintaC++
Drocodlure citireo wld clrl,!6o (ch.! Nso*f i [2ol,
(rita6-F1s : 6t.ins, l n r a l 50l t501, i ur& E )
var A:Mat_ad, va! n:tnlegr) t {

fFrrea f, (N\re-t.t:Lo6 r rid),

AEalsn(f,Nun_Pl6), wh o (f> > i > > J) A l tl Il l 11,


R6 l (f ), R aau. n( f , n) ,
wht16(hor 60r (f) ) ilo ,

ro ad lD(t,t,J),

B, Memorurcagralululprln listede adlacenl{

Se facela lel ca in cazulgralurilorneorienlale,dilerentaestedatdde faDtulce


arcul(1,j) esteinregistrat o singurddati (nucain cazulgrafuilorneorientate
cand
relrneam (j,. j ) 9i (J.r)).

lvlaijos,putqiobservasubprogramele
careconstruiesc
listelede adiacentdl

VadantaC++
Droc.dlrre Citlre_1,A_a.ratico voial citl16_r,!._ArratIcO
{NuF_f ls : Errins;var r!Lisra; (cha! N\rre-fla [20],
var slart !!Ehlr6; i n t rl rl 1501,
var ntiDlfrr), i rt srart[5o], i nre 4)
var i, j. k r t nt 6s r , {
272 in teoriaqrafurilor
Capitolul9. Introducere

bgin I tstre* f (ri tuG fi s,i o6::i n)t


kr.o, I t"n;
as.lqn ( f, N ue- FiF) , Res t ( f ) , I shi16 ( f >>i >>j )
Re6dr n( f , n ) r | { k+ + r
s hile( r or e o l (f)) do I rI01 [kl .l ;
bldr T[1: Ikl = stdrrl i ],
f t aa1D( f ,t,j l r I startl i l = k,
k:=k+l; | )
r lo. k l .=J, I f.cIos ( );
T ll. k l ! = s ta rl l l l ; I l

c. Memorareagrafulul prln lista arcelor se face la fel ca in cazul grafurilor


neotieniale.

9.2.3.Crafpariial,subgraf
Definilla9.18,Un graf pa4ial al unuigraforientaldat c= (v.A) esteun
graf Gr=(v.A!), undeArgA.

Un graf pa(ial al unui grat dat, este el lnsu9i,sau se obline din c prin
suprimarea
anumilor
arce.

Flgura
9.23.
gr6tps(lal

Referitorla exomplull din 9.2.1, unele persoanel9i gterg din agendd


numereleallor persoanedin grup.Aceastainseamndcd noulgraf nu va mai avea
anumitearce,decivadoveniungrat pa4lalal graluluiinilial.

,3 ExercillulCdtegtaludpa4laleareungrafcun arce?

Oelinilia9.19. Un subgrat al unuigraf orientatG=(v,A) este un graf


c1=(v1,a1),undevlcv, Alc.A, iar arceledin A1sunttoate arceledin A
caresuntincidenlenumailavarfuridinmultimeavl.
Manualde Informatic;pntruclasaa Xl a 273

Un subgralal unuigral G estegrafll G sau se obtinedin e prin suprimarea


anumitor
varfuri9i a tuiurorarcelorincidente
cu acestea.

E,

dinparagraiul9.2.1, avem:
Relerilorla exemplele
1. Pol exislapersoanedin grupcareiSi pierdtelefonulmobil.Astfel,numerelede
telefonale respeclivelor persoaneaflatein agendaaltora,penlrumoment,nu mai
folosesc.De asemenea, ceilallidin grupnu mai pdstreazenumereled telefonale
aceslora.In gralulinilialse renunldla varlurilerespective
9i la arceleadiacentelor.
Aslfel,se obtineun subgralalgrafuluiinilial.
2. Autorolrenunlab prezentarea anumilornoliuni.Dinnou,se oblinoun subgralal
grafuluiinilial.

3 ExerciliulCdtesubgraludareungrafcun vedud?

grafurilor.
9.2.4.Parcurgerea Drumuri.
Circuite
t Parcurgereagrafurilororieniatese facola fol precumparcurgerea gralurilor
neorientate.Aceaslainseamndcd parcurgerea se poatolace in doudfeluri,in
adencime (Dn)Siin ldlime(BF).Subprogramelesunlaceleagi.
) PentrugraiulorientatG=(v,A), undrun D=tv1,vr,. . ,.vJ esteo succesiune
de vaduri(v!.v,)eA, (vi,w3)a,..., (we"1,v,)eA,Verlurile vr Si vDse
numesc extremnellle drumulul. NumdrulD-1 se numegte lunglmel
drumului.Aceslaeste dai de numdrularcelorce unescvaduriledrumului.
Deteminarea unuidrumintredouavarfurigi doterminarea
existenlei unuidrum
intredouevafuri date,evenluala unuidrumdo lungimominimd,se facela fel
ca in cazulgraturilor
neorienlate.
t Un drum D-[v1.vr, . . .,wD] esie elementardacd contine numai varluri
distincte.
t Un circuit ina-ungraf orienlateste un drumin carovarfulinjlialcoincidecu
vadulfinal9i careconlinenumaiarcedistincte. Prinli-oslmpldparcurgereDir
putemdetermina, ca giin cazulgrafurilor dacaun gralcontinesau
neorientale,
nu un circuit,
274 Capitolul9. Introducere
in teoriaorafurilor

Anumitenoliuniprezentalein cazulgrafurilorneorientate se regdsescai in


cazulgrafurilotorientate.
) Pentru graluloriental c=(v,A), un lanfD=tvr.vr,...,vrl esteo succesiune
de varluriastlelincatintreorlcafevarfuridistincledin vr.vr.t exisE fie aro!
(vr.vr,1),fiearcul(vr.l.vr).
) Un lanlr,=[vl,w2,. . .,vr] esteelementardaceconlinenumajvArluri distincte.

Beluem dinparagratul
exemplele 9.2.1.
Pentruexemoul1: persoanai are un mesajde transmispersoanei J. Dacd
existdposibililatea
ca ea se suneo persoanS
al c6reinumeril arein agendi,aceasta
o altapersoandg.a.m.dpandestesunatSpersoana j, inseamndce exislSun drum
de la i la j. De asemenea, dacdexsld posibilrtaieaca persoanai sd ajungds6
primeascd mesajupe carel-atransmis, inseamnd cd exisiduncircuitdelai la j.
e9!gq_elgopLu!2:dacdgralulare un circuitinseamndci existdcel putino
noliune care nu poale li explicatddecat prin
intermediulallora care, h rendul lor, ar lrebui
expicale exact prin noliuneacare nu poate li
explicaldferd ele. Se mai intampb 9i aga. Un
exemplude lmbaj carenu poate{i predalin mod
clasic este Java. De exemplu,cel mai simplu
programut lizeazAdin plin programarea orienlaH
pe obiecte,carese studiazddupdce am lnvdlatsd
scriemprograme simple.
Pentruexemplul 3: daca dupd execulia
i, pentruce pulinun sel de date de
inslructiunri
intrare,se ajungesA se executeinstrucliunea J,
inseamndcd exisld un lanl de la i la j. De
asemenea, dac; dupece se executbinslrucliunea
i, se ajungese se executedin nouinstrucliuneai,
atunci programulconline slructurirepetrtive,jar
grafulasocialconlinecircuite.
AFaclm am definitpenlrugrafurineorieniate
matricealanlurllor,similar,se poatelorma pentru F gura9.25.
grafuriorientalematriceadrumudlor:

n,, , IL dacaexistadrumoe la r lai


"" '
lo, in cazconlrar
Matriceadrumurllotnuesle,in cazulgeneral, simetricS.
Pentrua o determina,
pentruliecarenodi, parcurgem gralul9i all5mloatenodurle penlrucareexisledrum
de la i la j. Pentru toatenoduribalinse(maipulini), vomaveaL(i,j)-1. Astfel,
se compleleaz6 linlai.
.o
9- Exerclllu!Scrieliorograru cate.por.indde la un gfal. afrgeaz6malricea
drumurilor,
Manualde informaticipentruclasaa Xl-a 275

9.2.5.Craftareconex.Comoonente
tareconexe
ReluSmexemplirl1 din paragraful 9.2.1. Sd presupunem c4 grlpul celorn
persoane efectueazdo excursiela munte9i, dinpdcate,s-aur:tdcit.Intrebareaesie:
exi a posibililalea
ca oricaremembtual grupului,se propun5un loc de intanireqi
se-gianunleteletonicprieieniidin agendd,acegtias5-i sunepe allii 9.a.m.d.,astlel
incattoli membriigrupuluise aflede acestloc?
Judecanddup6 gfalulorientalasociat,ar trebuica de la oricaremembrual
grupului
sa existeundirm cetreoricarealt membrual grupului. Aceastainseamndc5
oicarear li riodurilei 9i J, existeun drumde la t la J Siexislaqi un dfumde j la i.
Ungrafcu aceaslaproprietate se numeSie gruftareconex.

b Deflnllla9.20,Gratulo ental c=(v,A) estetare conex dace Vx,yev,


f drumde lax la y 9i drumde la y la x.

b Dellnllla 9.21. Subgralulc1.(v1,Ar) al grafuluic-(v.A)


componenlAtar6 conexi dacd:
esle o

1, V x, y ev1,3 drumdo lax lay gidtumdelay lax.


2. Nu xistdun alt subgrafal lui G, qE(v.,Ar) cu v1c't1 care
indplinegte
condilia
1.
4x:
arepahucomponente
Grafulaldturat
tarcconexe:
- subgrafulcareconlineverfurile:
L23
, subgrafulcareconlineverf!rilei
57
- subgrafulcare
conlineverful{
- conlinev8rful6
subgrafulcare
FlguraS 26,

0 Problema9.8,Fieungraforieniatc- (v. A) , memoratprinintemediulmalficeide


adiacenld.
Se cerese se detemineverlurilo
fiecareicomponenle tareconexe.
EI Rezotvare
a) Vomnumisuccesoriaivartuluit,loale nodurile j, pentrucareexislddrumde la
i la j, la carese adaugSi. De exemplu, penhugraluldat.,succesoriivarlului1 sunt
varlurile1, 2, 3 9i {. Pentrua deleminatoli succesorii vaduluii, vom efectuao
parcurgere Dr a graluluipornindde la acestvarl.Succesorli
noduluii vorli retinuiin
tolul 9, lntroduceaein teoria

b) Fie i un varf al gralului.Vom numipredecesoriai varfuluii, toatevarlurilej.


pentrucare existedrum de la J la i, la care se adaugei. Pentrugrafulda1.
predecesodivadului l sunt 1, 2 9i 3.
c) Dacdun varfesiesimultansuccesor gi predecesor al lui i, aluncielvalace parte
dincomponenta tareconexda vaduluii. Multimeanodurilor cu aceast5propietateva
lr o coriponenldlare conexea grafului.De ce? Pentruca intredouevarfurik si 1.
existdatatdrumde lak la 1 (detak ta i 9i de ta i la 1) cai gidrumde la r lak (de a
1 la i 9i de la t la k). N4ultimea
noduribrc(raceastiiproprietate esle maximaldi.
raportcu relaliade incluziune. Dacd,prinabsurd,ar mai exislaun verf cu aceastA
proprietate,carenu apa(ineacesteimultimi, atuncrar trebuisdexistedrumde la I a
el,gide la el la i, cazin careacestaarfifostgdsilprinprocedeuldal.
d) De acum,pulen redactaalgorilmul.Variabilanrc, cu valoareaaniliab1, va retine
nuftarulcurental componenleilare conexecareurmeazd5a fte idenlilicata. Fiecare
componentd sucSipredreline,inilial,valoareao.
a veclorilor

pentrufiecarevad i
daca Euc[l] =0
totisuccesorii
lulI, inclusivI, vor relineffc;
toli predecesorii
lui i, inclusivt, vorrelinerrc;
toatecomponentele
1, pentrucare sucltl+prdlil vor retineO;
se rncremenleaz
nrc,

se afigeazd
veduriiefiecdreicomponenle
conexe.

puietiobservaevoluliavectorilor
N,laijos, suc Ai prdl:

L 2 3 4 5 67 t 2 3 4 5 67

1 1 I 1 0 0 0 1 1 I 0 0 0
1 1 7 0 0 0 I 1 I 0 o 0 0

L 2 3 4 5 67 L234567

1 I 1 2 o 0 0 1 1 1 o 0 0
1 1 1 2 2 2 0 1 L 1 0 0 0

x.2 3 4 5 57 L 2 3 4 5 67

L t 1 3 0 I 1 1 2 3
1 7 I 2 3 0 1 1 1 3 4 3
t
pentruclasaa Xl a
Manualde informatice

esleprezentalincontinuare:
Progfamul

vailanta C+r
+incluale "sraturi, crtD'
v ar a u c,pr ed. B r r ay t l. . 5 o l of i n l 3 w Is o l , 9redl l 5ol ,
DlEei Ats o l ts ol , n,trc, i , j t

rciat df_rl(tnl Dodl)


Dlocoalure aU-!1 (noal:blrto) ;
fo! (t=1;k<.nrk++)
if (A tDotu lkl!-1 &&
suc tkl =0)
for kr= 1 ro n d o i l f 1 1(k),
lf (A tnodtkl=1 ) ud ( s uc lk l= 0)
l
th6n df_ rI(k),
woial df_r2 (lnl nod)
Dtocalur df-!2 (nod:b!rte) ;
9ral lroau =nrc t
fo r (L -1 rk< = n;k+ + )
Drat Inoau : =nrc; if (alkl IDoaU==1 &&
f,or k.=1 !o n do D!dlkl s-0 )
if { atk.no dl=1) an d ( D. edlk l = 0} d l f_ r 2 (k),
urn dt_ r2{k); l

{
c t t t ro{, Gia f.txr' ,a , n) , c i ti ro o (n c r af .txtrta,n),
f or i: -1 to n a lo !o ! (t= L ri< = nrI+ + )
j .f (s u c l l l .= 0)
{ d c ti l ' rc ;
d f_ rl (i ),
8uc ltl .=nrct d f r2 (t),
fo f (l = 1rl < E n, J+ + )
df-!2 (i), It (s uc IJI l -D !.dl Jl )
fo! j:=1 ro n dr o 6uc IJI E D r.dtJl 30,
if 6u c IJ I <>DrdI j I t hd
)
6 uclil.=o ; fo r (t-r;t< rcr1+ + )
Dfd ljl:=0 , {
dout<< ncdri$ent.r <<l<<dtt1,
nrc::n !c+1 fo r (l .1 rl < -n; l + + )
tf (s u c Il l ..l )
f , or i: = 1 to n!c-l a lo c a t< < j < < ' ',
dit ln ( tcorg on erE a ' , 1) ;
)
f or j: :1 lo n d o
if suc Ijl=1
rhn rit6 (i,. .),
278 Capitolul9. Introducere
in teoriaorafurilor

Si in cazulgrafurilor se pdstreaza
orientate de graf conx 9i no(iunea
notiunea
de comoonentAconexi.

Definilia 9.22. Graful orientatcE(vra) este conex dacd Vx,lv,


3 lanlde lax lay.

Delintia 9.23. Subgrafulc,-(v,,a,) al gralului c-(v,A) este o


componentaconexi dacd:
1. V x, y v1, f lanldelax lay.
2, Nu exisleun all subgfalal luic, cr=(vr,Ar) cu vlcv, care indepli-
ne$le cond4aa1.

propuse
.Probleme
1" O cunoitinlami-azis:la minein birousuntem5 persoane. Fiecaredinirenoi
colaboreaz6cuexacl3 persoane. A zisadeverul?
2, Demonstr4i cdintr-ungrafneorienlat numarul dogradimparestepar.
nodurilor
3, Fiinddaten persoane Sin relaliidprietenie
intreledeloma: persoana I esle
pietenecu persoana J, se ceresd se stabileascecorespondentele
intreafirmatiile
dinstenga9iceledindreapta.
t. in grupulcelornpersoane. fiecare I a. GrafLrlasociatarenoduri
persoand a.ecel putinun prielen. I terminale.
2. Fiecareoersoana ostoprietenacu I b. Gralulasociatconlineun subgEl
oricarealtad n grup. I completcu x noduri.
3. Ex6tepersoarecarenu au decet I c. Gralulasoclalestecomplet.
prilen
unsingur
l a. cratutasooatnuarenoduri
4, ExrstAk percoane
dingrupastfelI izolale.
dinireeleeslepietene
incetoricaro
cutoatecelelalte
k-1.

4, S dau n drepte9i n relaliide forma:dr I ldj - dreaptat esteparaleEcu dreapta


J. Se Sliecd gralulasociatesteconex.Caredintreafimaliilede maiiosestefabe?
a) PentruoricedreaptdI, existdo dreaptdJ caroosteparalelS cu ea.
b) Toaledreotelesuntoaralele introgl.
punctelor
c) [,,lullimea de inlerseqiealeacestordrepteestenevide.
5. inire n tirmeexistdrelatiide colaborare.
O relaliede colaborar
stedateca o
perechede foma i<+j gi are semnificatia cd firma t colaboreazdcu fima l.
Stabilili
corespondenla dinslangagicoledindreapla.
inlfe aiirmaliile
Manualde informaticioentruclasaa Xl a 279

1. Oricelirmecohboreazicu toate a. ExistSun lanlde la i la j.


celelalte.
b. Grafulasociat
areun nodde
2 . Anumitetirmei9i intreruprelatia gradr-1.
decolaborare.
c. Grafulasociatse translorme
3. Anumitefkmedaulalimenlginu intr-ungrafpartialal seu.
maifunctioneazi.
d. Grafulasociaieslecomplet.
4. O firmacolaboreazd cu loate
celelalte. e. Gratulasociat se kansfome
intr-unsubgralalsdu.
5. Cu ajulorulunorfime interme-
diaredinlrecel! fhme,fhmai poate
laceafacericu firmaj.

6. La un gaandexista6 bazine.Uneledintreele suntuniteprinlr-oleavdprincare


poaiecirculaapa.Astfel,bazinull esteunitcu bazinul2, bazinul4 cu bazinul5 si
bazinul2 cu bazinul3.
6.1. 9liindcd fiecarebazinpoalefi dotatcu un robinet,se cerenumirul mlnimde
robinete careasigurdumplereatuturorbazinelor.
6.2. Careestenumdrulminim de leviprincarese polunidoudbazine,astlelincetsd
se poatdumpletoatebazinelecu un singurrobinet.Datiexemple de bazlneunitecare
asigurA cerintapfoblemei.
7. Fiinddat un grup de r persoane,in caredintresituatiiede mai jos se poale
lolosipenlrumodelare ungrafneorienlat?
!) Unelepersoane dingrupcunoscaltepersoan dingrup;
b) Unelepersoane dingrupsimpaiizeazahpefsoane dlngrup;
c) in cazulin care loaiepersoanele
lucreaz inlr-olirme, unelepersoane dingrup
suntSelipeniruallepersoanodingrup;
d) Unelopersoanedin grupsunt pdetenecu
altepersoane dingrup.

Exerciliile8 9j 9 se refereta gralutdin


Jigura
9.27.
8. Care esle matricea de adiacenld a
grafului?

l rr 1
r
rr0 r 0) r 0 ' r 10 r0l 0 r r r 0 1 0l
r0 " r 0 t 0
0 0 0 0 0 1r 0 0 0 0 0 0 nt|01r.0j
r 0 r | 0 0 0l
ir 0 0 I 0 0 0
| 0 | r 0 0 tl r 0 I 0 0 0 I
0 00010(J 0000000 ;:r :i ? i ] i ? i l i
, , " , ii
::" : l l l : "' :il
b) c)
280 ln teoriaqla:fulih(
Capitolul9. lntroducere

de mailos (A,adevdrat,iar a, fals):


9. Careestevaloareade adevAra afirmatiilor

conexe.
9,1,Graful esteabeluildin 2 componente
9.2. tL,1.4l esleun lan!.
9.3. t2,1,4,3,11 esteun ciclu.
9"4. Nodul2esteizolat.
9.5. Grafuldin probbmeare ca grafpa4ialgraful
dinfigura9.28.
9.6. Grafuldin problemdare ca subgrafgrafuldin
figura9.28.
9.7. NodulI are gradul2.
9,8. Nodul{arogradul3. E-l
9,9. Graful din problemdcontineun f,l
ciclude lungimo3. l-rl
9.10. Graful aldtufat,reprezentatcu l4l
ajutorul listolor de adlacenld, osto Flgula9.29.
subgrafal grafuluidinproblemS.
de mailosar puteali malricea
10. Caredintrematricele de
a gralului
adiacentd alaturat?

l:
t0l l0l t0l 100

:lI illi :ll'


010 010 0t0 010
I0l l0r l0l t0l
0t0 010 0l I 0t0
0t0 001 lll
[; 0l I
a, b) o) .r)
de maljos poatefi matrlcea
1t, Caredintremalricgle a unuiglal
de adlacentd
neorienlat?

0l 010 01000 IIIII 01010


l0 100 | 0 | 00 lt t lr 10100
0l 0t I 0l0l t IIIII 0l0lt
l0 t11 l0l0l llllt t0l0l
00 I t0 001l0 lllt l 001l0
a) b) c)
Manualde informaticeoentru clasaa Xl-a 281
I
12. Calemuchiiare grafulneoienlatreprezental
de malriceade r 0 0r 0 r 1l
adiacen!a
aleturatS?
lr 0 0 r rl
0 | il
13. Careestenumarulmaximde componenle conexepe carele l0
poateaveaun grafneoriental
cu 5 nodurigi{ muchii?

'14, Care dintre malricelede mai ios este malriceade


| liir;l
adiacenlda unuisubgrafalgrafuluidinfigura9.31?

l foI or oo)
f oo0 o0o0l f o r r o) f o rrrl
l0 0 o llr o 0 o llr 0 r r l
l 0 0 0 0]1 0 0 0 ollr 0 0 0 l ' r 0r r l
\0 0 0 0. J[ 0 0 0 r j \ 0 0 0 0 J u r 0J
a) b) c) d)

15,Careestenumerul minimgicarsestonumdrulmaxim de componenle conexe


pecarele poaleaveaungrafnorienlal cu I nodurigi5 muchii?
'16.Careestenumdrulde citre0 pecareil retinemahicea a unulgral
de adiacenld
neorienlat
cu tr noduri9i !l muchii?
'17.Careestenumdrul mlnimrii numdrul maximde noduriizolatopg careilpcute
aveaungratnoorientat cu 10 nodurlgi10 muchil?
18. Caroostonumdrulds grafurineorientato
cu 5 noduri?
19. Preclzatl
carodintreafirmaliile urme-
toaresuntadevdrate 9i carosuntlalse.
Toalealkmallllese relerdla graluldin
figura9.32.
19.1. "5 1 2 3 5 4 7" reprezinld o
parcurgere ?nadAnclm0 a grafulul,
1 9 . 2 ."3 2 5 1 4 6 7 " re p re zi nol d
parcurgere Tnldlimea grafului.
19.3. Exldadouenoduridingralpentrucarenu xisldun lanlcarele uneqle.
'19.4,,6 1 2 3 5 | ?" esteunlantTngrafuldal.
'19.5,"3 2 5 1 { 5 z" esteunlantTngrafuldat.
19.6. Numdrulmlnimde muchiicarotrobuieeliminatepentrua obtineun albore
pa4ialsstg2.
19.7. Numdrulrnaximde muchiicarepot li eliminatsastfelincetgrald se rdm6ne
conexeste3,
19.8. Numdrulminimde muchiicarepotli eliminatepeniruca grafulsd nu conlinS
ciclurieslo
3.
19.9. Un aboro pa(ialal grafuluidatare7 muchii.
lntroducere
in

dacdaiirmatiibde maijos suntadeverabsaufalse.


20. Frecizati
20,1. Cu ajutorulparcurgerii
in adancime daceungrafneorientat
se poatedetermina
arecel pulinun ciclu.
are ungraipa4ialcareestearbore.
20.2. Oricegrafneorienlat
dacdungralesteconex.
ln lSlimese poaledetermina
20.3, Cu ajulorulparcurgerii
cu 10 nodlri9i 9 muchiiesleun arbore.
20.4. Oricegrafneorientat
conexa
20.5. Un arborecontineexacto componentd
20.6. Un gfaf estealcdtuitdin doudcomponenteconexe.Pentruca grafulsd devina
conex,estosuficientse elimindm o anumilemuchie
20.7. Un graf esto alcdtuitdin dold componenlecongxo Fiocaredintre ele
un gralpa4ialal graluluidat.
alcdiuieqte
20.8, Un gral este abeluit din doud componenteconexe.Fiecaredintre ele
un subgralal grafuluidat.
abeiuieqte
lelimese poaledotermina,
20.9. Cu ajutorulparcurgeriiin dacdexiste,un lanlintre
doudnodurialegralului.
se poaledetemina,daci exisie,un lanl
20.10, Cu ajutorulparcurgeriiinadencime
intredouenodu ale gratuui.
20.11,Existdgrafcompletcu a>2 noduricar
nu conlincicluri.
conexe
20.12,Oricegralcompletesloalcetuitdintr"osingurecomponenta
anumitormuchiise poateoblinsun
20.19. Din oficegral complot,prin eliminarea
albore,
20.14.Oricogra{completareunsubgrafcarestearbor
momoratsubfoma matriceldoadiacenle.
21. Se dd un gralneorlnlat Sd s afigeze
toatenodur\\ecare au gradulmaxim.
caretransiome matticeade adiacer\ea unvi gtalln
22. Sa se scrie un sLrbprogram
listede adiacenle.
23. Sa se scrie scrie un slbprogramcaro transloratl' listelede adiacertdln matice
de adiacerta.
24. Se dd un gral neorientat de nodurialelui.Se ceresa se scrieun
Sio succesiune
subprogram caredecidedacesuccesiunea dateestesa! nu un lanl
25. Se da un graf neorienlalmemoratprin liste de adiacenta.S; se scrie un
subprogfamcaredecidedacdgraluldalconlinesaunucicluri
26. Se dA un graf memoal ptin natricea de adiacerfd9i un nod al sdu, v Se cere
sa se parcurgagra{ulin letime,pornindde la nodul v Algoitmulva ulilizacoada
ctealJca listi liniad simpluin6rtuftAimplementaEstatic
Manualde informaticepentru clasaa Xl a 283

27. Se dA un graf memoratsub foflna mal'cei de adiacentd.Se cere s; se


aliieze maticea drumuilor. Algoritmulva utiiizaparcurgereain adencime.
28. Fiinddatd maticea dtumurilorunuigraf,se cerc sd se scrieprogramulcare
aIiSeaza comoonentele conexe.
29. Partitiadeterminatede o relaliede echivalente
Se conslderdo mullimeA. O relatieoarecareR intre elementeleacesieimullimi,
esteo relaliede echivaleniddac; respect6urmdtoarelelrei conditiil
. oricarear fixEa, x Rx (x esteechivalenl
cu x), proprietale
numilaretlexivitate;
. oricarearfix,yea,dinxR y, rezultd
y R x, proprielate
numitesimetrie;
. o4cateatlix,y,ze mullimiia,
dinx R y 9iy R z, rezulld
x R z, proprielate
numitdlranzltivltate.
Se citeSteo multimede fumereintreo 9i 255 princitireaa a perechi(x, y)
de numerede acestlip. Printr-oastlelde perechese inlelegecd x esteechivalent
cu y. Se cere sd se determinepartilla generatAde relalia de echlvalenti
consideratdoe multime.
Exe m p l u ci: tim( 1 2 ) , ({ s), (2 3), {6 ?), (? 1).
Seo b l i n ep ar ti l i a:
t!,2,3,6,'t, {4,s} amullimii1 1 , , 2 , , . . , 7 r.
30. Se dau n punctedistincle in plan:p!(:.t,yr) cu Os.r,yr<200,pentruorice
!=L, 2, ...,n. Consrderdm cd liecarepunct6sle unitcu cel mai apropiat puncl
diferiide el (dacdexistdmai multepunctela distanldminimd,se unestecu fiecare
dintreaceslea).Numimregiuneo multimemaximaldde punctecu proprietalea ca
oricaredintreele sunl unileprinir-unlanl.Sd se doterminenumdrulde regiuni9i sd
se vizualizeze regiuntle(punctele9i legaturilodintreele).
31.Se da malriceade adiacenlda unuigrafneorienlal. Se ceresd se ali$ezetoate
ciclurilede lungimek. Un cicluse va aligao slnguradatd.
32, Se dd malriceade adlacenlda unui graf neorientat.Se cere sd se aiigeze
toateciclurilede lungime4. Se cereun algoritmeficignt.
33. intr-ungrupde n persoane, anumitepersoane, imprumuld altorpersoanediverse
sumede banilModelandproblema grafurilor
cu ajutorul orlentate,se ceresAstabilrtl
corespondenla dinlfeafimaliiledinstengagiceledindreapta.
Observatie:dacepersoana i imprumutd cu banjpersoana j, atunciexista
un arcde
lai l a j .

1, Petsoanai nu a imprumulaicu a) gradulinterioral noduui i esleO.


baniallepersoane dingrup.
b) gradulexlerior
al noduluii esteO.
2. Persoanai nu a imprumulatbani
de la altepersoane
dingrup.
284 itolul9. Introducere
in teoriaorafurilor

34. Se daun mullimidenumerenalurale: Aceslormullimili se asociazb


at, A2...4n.
un gral orienlat
astfel:
dacemutamea A{ esteinclusdin multimeaar, in grafulasociat
vomaveaarcul{\, al ) . Nu vomconsidera cazulde incluziunea uneimullimiin ea
insdgi.Stabiliti dintreoperaliile
corespondenta dinstenga9i celedin dreapta.

1. &Cf,jc,rt. a) De la a! la rL existd un lanl de


lungme!r-1.
2. r|[car.
'|Icr\r b) De la An la Ar existe un bnl de
3, A 1CA ' C. . . rt,l c A ..
lungrme2.
4. A 1= 42= . . . rs -1 = l a .
c) Gratulestelare conex.
d) De la.[! la Ak exis un drum de
lungime2.

35. Refacetioroblema anterioardin cazulin carese considerd


n
numergnalurale9i rolatiad6 divizibililate.
De asemenea,incercali
se adaugatinoisitualiilncarese cerecorespondenla.
36. Catecomponente conexeqi catecomponente lare conexe
conlinegratuldintigura9.33?
a )11; b) 13 ; c )1 0 ; il) 0 0.

Figura9.33.

37, In graluldinfigura9.34,careostlungimea
celuimai
lunglantelsmentarSi cars estelungimoaceluimai lung
drumolemntar?

a)32; b)221 cl 231 d)12.

de la 38 la 41 se reler5la grafulaldlurati
Problomele
38. Catecircuitecontine?
e) 3; b) 2; c) 1; d) 4.
39. Calecomponente
tareconexe
conline?
a ) 4; b) 3; c, 2; d) 1.

40. Care este noduicu grad interiormaxim9i care


estenodulcugradexteriorminim?
a ) 11 1 b ) 1 2i c't 2 2; d)25. Figuraq.35
Manualde informaticepentru claSaa Xl-a 285

41. Care este numerulminimde arce caretrebuiead;ugatepentruca grafulsd


devindtare conex?
a) 1; b) 2; c) 3; d) 4.
42. Se dd un graforienlat.Se ceresa se afjgeze,pentruliecarevarl in parte,gradul
interiorSigradulexterior.Problema se va rezolvain cazulin caregralulestedrt prin
matricea de adiacenld 9i in cazullncareelesledatprinlislede adiacenla.
43, Fiind date un graf orienlalSi o succesiunede varfurise se decidadacd
su@esiunea estedrum,iarin cazalirmativse va precizadacdestesau nu un drum
elementar. Problemase va rezolvain cazulin caregrafulesle dat prinmatdceade
adiacenla 9i in cazulincareel esledatprinlistede adjacenld.
44. La lel ca maisus,dar se ceresa se determine dacesuccesiunea respectivd
este
saunu lant(lantelemeniar).
45. Se dd un gral prin lista muchiilor.programulva decidedaca gralul este
neorienlat.
46. Se daulistelede adiacente aleunuigralorienlat.programul va afigamalriceade
adiacenla_
47. Se dd matflceade adiacenld a unuigraforientat.programulva alisalislelede
aotacenle a|eacestuia,
48. Se dA matricoade adiacenl5a unui grat orientat.Se cere sd se listezeloale
circuilelede lungime3.
49. Se da matriLade adiacenFa unui gral oriontat.Se cere sd se listezeloate
ciclurile
de lungime3.
5O', Algorltmul lul Lee.'So dd un labirinrsub tormaunei matricopetfatico.rJ.
L(I,J) r'1 dacdprincamerarespeciivd nu so poatetrece9i O in cazcontrar.Sd
so afi9ezedisianleleminjmede la camerade coordonate(1,c) la loatecamerele
accesibile dincamorainiliald.
51', La lol ca la problemaanierioard. Se core orumutcaro troceprinlr,unnumdr
minimde camereinlreo camerdinitiald SIunafinald.
52'. Pe o tabld de gah de dlmensiunin*!r se poatedeplasaun nebunconlorm
regulilorobi9nuileate Sahutui.in ptus,po tabld se pot afla obstacolela diferite
coordonate:nebunutnu poalo trece pesle acesteobstacole.sd se indicedace
existdvreundrumintredouepunclea(x1,y,) 9i B(x,.vr) do pe tablj gi, in caz
afhmaliv,sd se tipereasc5numdrulmlnlm de mulerinecesaro.Se cilesc:N, x1,
Y1, xr, Yr, apoiperechilo de coordonateale obstacolelor.
53', Sortare in llmlta poslbllite$lor.Se consider5cd intr-un vectorv cu n
componento se potinversanumaicontinulurileanumitorcomponente dintrecelen. O
perechede componente de indiceI gi j alocgrorconlinuturi
se potinversaesledat6
de perecheat Si j. Fiinddate tlr astlelde perechi9i Stiindce vectorulcontine
numerele1, 2, .,,, n intr-oordtneoarecate. se cereca vectorulse continanume;e,e
1, 2, ..., lr sortate.Pentrusortarese inverseazA numaicontinuturilecohDonenlelor
carese pol inversa(caresuntporechidintrecelert|).Dacdsorlareaesteposibib.se
9. lntroducerein rlaorafurilor

carese inverseazd,
vor aliqaindiciicomponentelor iardacdsorlareanu esieposibild'
se afi$eazaNu.Datelede inlrarese ln figierultextaale.ir astfel:
gSsesc
r,inia 1 n
r,idia 2 1,..., n ina-oordlneoarecare;
L l nia 3 n
n liniiconlinfiecarecateo perechedo indicii, j.
umetoarele
Exemplu:
3 Prcgrnulva
afiga:
31 2 Lz
2 23
23
L2

54'. Lucrarein echlpa.Se doregtescfiereauneiaplicaliide informarea cdldtorilor


in comuninlr-unora9.Se cunosccelen staliide aulobuzdinora9ul
privindtransportul
respectlv.De asemenoa, se gtietraseula k liniide autobuz(staliileprincareacestea
sa furnizeze
trec).Se cereca aplicatia modulincareo persoand se poatedeplasacu
autobuzul intredouaslatiidaie,in ipotezele:
a) In numdrminimde stalii.
b) Prinuulizarea minimdeliniideautobuz.
unuinumdr

! Estesarcinadvs. si organizaliintrirlle 9l ieglrilededate

Rispunsuri
1. Nu. Ar rezullaun gral cu 5 noduri.Cumliecarepersoandcolaboreazdcu exact3
persoane, inseamndcd fiecarenod are gradul3. De aici,rezultdcd sumagradlor
este15. Aceastainseamndcd 2n-15, decir nuar finumdrinlreg.
2. Dacdar fi impar,sumagradelorimparear fi un numerimpar'Cumsumagradelor
paroosie un numerpar,rezultici sumatulurofgradelorestoun num5rimpar.Ori'
acestalrebuiesd fi un numarpar,pentruce ea steegaldcu dublulnumdrului de
muchii.Absurd.
3. 1- d, ?- c , 3- a , 1 t' b .

4. c) Faplulcd grafulesteconex,inseamnecd Tntreoricaredoudnodurixisu un


Dardind| | ldr 9i dl I l& + dr I ldk rezultecd toate
lan!carele areca exlremitdli.
dreolelesuntparaleleintreele.
5 . 1- d, 2' e, 3- c , { -b ,5 -6 .
6. 6.1. Grafulcontine3 componente conexe.Pentrutiecarecomponentd conexa
eslenecesarun robinet.6,2. Penirua folosi
un singurrobinel,esle ca
nocesar graful
sd fie conex.Cumafe 3 componente conexe, sunl 2
suficienle levi.
Manualde informaticApentru clasaa Xl-a 287

7, Pentrua puteamodelaanumiterelatiicu ajulorulunuigral neorientat trebuieca


relaliaexistenleintret 9i j sd lie reciprocd,
pentrucd muchia( i , J ) presupunecd 1
esteln relaliecu j SiJ esleln relaliecu i. Daci I cunoagte pe j, nu esteobtigatoriu
ca J sa cunoascdpe i, dace t simpaiizeazd pe j, nu este obligaloriuca j se
simpalizeze pe i, dacd I esle gefullui j, j nu poatefi qeJullui i. in conctuzie,
rAspunsuleste d) penirucd relaliade prielenieeslereciproca.
8. b).
9, 9.1, ar 9.2. Fr 9,3, r, 9.4. F, 9.5, a; 9.6. a, 9.7. rr 9.8, r, 9.9. a,
9.10.a.
10. b) Dacamatriceaeste de adiacenld,atuncivi puteliorientadup6 gradete
varfurilor.Evident,gralul reprezenlatde matriceade adiacentdtrebuiese aibe
vadurilecu aceleagigrade cu varfurilegraluluireprezenlai
in desen.
'11, d) Desigur,puleli desenagraful,dar, mai u9or,eliminalivariantetein care
aveti1 pe doagonalaprincipale, sauaceleain caromatrceanu estesimehicd.
12. L Dacdmatriceaestedatacorect,nu esle nevoiesd desenaligralulpenlru
ca, apoi, se-i numaralimuchiile.Se glie ce suma gradelorluturornoduriloresle
egald cu dublul numdruluide muchii.Prin urmare,este suticienlsd insumati
elemehtolo relinutede matricosi sd impd4ilirezultatul
la 2.
13. 2.
14.r) Daci mairiceaare { liniigi 4 coloane,esteclar ce subgralular rezultaprln
oliminarea unuisingurnod 9i a muchiilor incidente lui. Daodetiminimnoduldin
centru,se obtin I noduriizolato,Oricareali nod am olimina,rdman 1 nod cu
gfadul3 Si3 noduricu gradul1.
15. 2 componenle conoxe$i 5 compononte conexe.
'16,n1-2rn. Matricoade adiacenlaare nr elemente.Am vdzut faptutcd suma
tulurorcifrelorde I (adicda gradelorverfurilor)este2In(unden estenumerutde
muohii).
17. o Si s.
1 8 .2 1 0 .
19. 19.1"A, 19.2, A, 19.3. r, 19.4. A, 19.5. r. 19.6. r, 19.7. .r.,
19.8.A. 19.9.r,
20, 20.1. r, 20,2, t, 2O,3. \, 2O.4. E, 20.5. r, 20,6. t, 2O,7, ,,
20,8. I', 20.9. A, 20.10. A, 20.'t.1,F, 20,.t2. A, 20.1a. A, 20.t4. a
(lesemunsingurnod).
29.,30. Descompunereaunuigrafln componenteconexe.
31. Backtracklng.O solutiearo lungimeak.
32. Fiei.<j<k<L, { noduricareformeazdun ciclu.Avem:
a ( i, j ) r'(i.1)-1
-1
r( k, j ) =1 r (h,1)=1
288 9. Introducere
CaDitolul in teoriaorafurilor

Astfel, in matriceade adiacenldse formeazaun drepiunghi.Trebuie


identif
icaletoatedreptunghiurile
aslfel tormaie.
33. 1-b,2-a.
34.1-t1. 2-b. 3-a. l-c.
36. b).

3 8. c) .
39, b).
40. c).
4 1. a) .

50. Se poale lucradirectpe mal cea L. ldee: penir! camerainitialdvom avea


L(r,J)=1. Apoi, pentru toale camereleaccesibileveclne cu ea vom avea
r,{i,i)-2, apoipenlrutoatecamerele accesibilecu ele vom aveaL(l,i)=3...
$.a.m.d. Pentru a oblineaceasldmarcarevom parcurge in ldlimegrafulasociat.
Putemevila memorareaacesluia.Vom iniroducein coaddcoordonatele camerei
iniliale.Vom incdrcain coaddcoordonatele tuturorcamerelorvecinepentrucare
r , ( t,J) =l.Pe n lrufiecareastfeldecamerd , p e n iru c a re , in ilia l, L { i. i)= o , v o m
L{i,i)-2. Se lrece apoi la urmblorulelementdin coaddcu cafe se procedeazd
asemdndtor. Se Stle c5, prin parcurgereain lefime,se viziteazenodurile in
ordinealungimiidrumului,de la ele la nodul initial.Deducem, astfel,cd marcarea
este corecte.Algoritmulse termindcand coadaeste vidd. In Jinal,se afiseazd
matricea t.

51.Se procedeaza ca h problema anierioard.lmedialce a fostvizitalScamerafinald,


se refacedrumulde la camerainilialdcdlreea.Asdel,se pleacdde la camerafinale,
marcatecu k. Printrevecinele
acesteicamerese cautdunacareeslc marcatdcu k-l.
Printrecamerelevecinecu ea se cauleunacareeslemarcaldcu k 2. Se oroccdeaze
in mod asemdndtor pane se ajungela camerainiliaEmarcat5cu 1. Dnrmulse
ali$eaain ordineainversdgdsiriilui,de la camerafinalbla ceainiliald.

52. Algoritmul
luiLee.

53. Asociemproblemei un grafneorienlat.


Nodurilesuntlndiciielementelor veclorului,
de la 1 la n. Cand continuturile a doue elemenlese pol inversa,nodurile
corespunzdtoare sunt unileprinlr-omuchie.Dacdnodurileir, ir, ..., ik sunt unte
printr-un
drum:atunciinterschimbdrile (i1, i,), (i,. i3), ..., (i*-r, tk),
(ir1, ir-r),..., (i,. i,) inverseazd elementelorde
conlinuturile indicei1 9iir,
bsend continuturile celoflalteelementede indici ir, ..., ik,r nemodiiicate. O
parcurgerein ldlimedelermina distanlaminimaintredoudnoduri.
AnexaI
Memento
A.l . LimbajulPascal

A.1.1.Tipuristandard
a) Tipuriintregi
iOcuplf
'
(blt ,: r
Ehortlrt lntregscurt I de la -128 la 127
intreg 16 de la -32758 la 32?5?
do la -21{7a83648la
lorglnt intreglung 21,474A3647

b''le numdr
naluralsourl I do la o la 255
cuvant do la o la 55535

TlpulcaracteJ- uncaracter Tntre


senoteazd aposttoturi,
Exemple|a, ,'A',' 1, (caracterul'1'
nutrebuie
confundalcunumrrul
1).
Tlpurlleal
'ocupi
lbtflI
virgulemobilg, 48 [-1,7x10rr, -2,9x10-.'l v
simpEprcizle [2,9x10''". 1,7x10!a]

dlngl
Urgule
moblld, [-3.4x10!r, -1,5xto{r] u
slmpEprecizie [r.5x1o'",3,4x10!6]
atoubl6 virguldmobild, 6{ [-1,7x1oro',-Exro'::d] v
dubleprcizie [5x10-3' r, 1,?x1o$' ]

virgulS
mobile, 80 [-1.lx10"'", -3.ax1o-"t'.]
formallung u [3, {xlo_'e:'z. 1,1x10"!']
virguld
mobild [-9.2x10" .9,2x1010]

- poaterelinedoardoud
D) Tlpulloglc - lroor.an valoritrueSifalE.
290 Anexal. Memento

A. l. 2. Cons t a n t e
A) Constanteinlregi. Sunt alcdtuitedinlr-o submullimea numerelorintregicare
poi 1i reprezentalein memoriacalculatorului.Se pol reprezentanumereintreg
cuprinsein iniervalul:[-2.141.483.648,
2.141.483.647).
B) Con6tantereale. Sunt alceiuiledintr-o submultimea nomerelorreale (ma
precis,a n!merelor ralionale)care pot fi reprezentatein calculator.Modulu
numerelorrealese gdseile in interualul in loculvirguleise
[3,4*10{35'z,1.1*104'g31.
punctul.
folosegte
Exemple: 2.34,-45.26,512E+23,
-45.1E-3.
Ullimeledoui numereJolosesco scriereneinialnitdin malematicd.
Ele reprezinld
numerele 512*10'?3
9i -45.1*10n.
C) ConstanteSir de catactere.DupScum reieseqi din denumire,cu ajulorullor
se reprezintdgiruride caractere. din9ir pol fispecilicateenumerandu-le
Caracterele
irlre aposlrofur..
Exem p lu :'ab c'.
D) Constanlelesimbolice.Acesteasuntconstantecafe au in ptogramun anumit
nume.Delinlreaconstanlolorsimboliceprecededefinirealipurilorutilizator9i se
realizeazd
astlel:
dona! latnt1lLcator = xp!6sL6;

lienci.rlcator . 6xDr6616t

t Expresiilecare inleryinin definkeacolstanlelorlrebue sa poataI evaluate


d' la momeniul compilariiprogramulur.
Exemplu:
con.t Nrld.*Valorl - 30,
Dtm ! NrMa:avalotl* 2-1,
M oaaj r ' l l i r e * 1 a l a !o l u l l e ' # 1 0 * 1 3 ,
P r r 3, 1 4 ,

A. l . 3. O per a t o r i
A , 1 . 3l . P r i o r i t a te
o pae r a to r ilo r
latdcele4 grupede priorilate.
Grupa1 (prioritalemaxime):
NOI, + (operalorunar),- (operatorunar).
Grupa2 (operatorii
din grupadoi se mai numesca operatorimultiplicativi):
IND, *, /, DrV, !dOD.
I\,lanualde lnformaiicApentru clasaa Xl-a 291

din aceastdgrupase numescaioperatoriadltlvl):


Grupa3 (operatorii
oR,xoR,+, -,
cu cea maimicdprioritale- cuprinde9i operatolii relalionali):
Grupa4 (operatori
< , < = r >i >E, =,<>.

A ,l ,3 .2 .OP e ra to ri
a ri tmetici

suntdedou6feluri:
aritmetici
Operatorii
. operatoriunari(+9i -);
. operatoriblnarl( +, -, r, /, Drv, ![oD).

) de adunare.
Operatorul+. Aresemnificatia Operanzii sii suntde lip introg
de tip real.Dacecel
saureal.Sepoaleca unulsafiedetipintreg9i celdlalt
putinunuldin operanzi estede lip real,alllelestede
este,realrezultatul
tipinheg.
Operatorul + apare9i ca operator apareca sumade
unar.De asemenea,
lr giruri(cazpecarenul discuidmacum).
t de scadere.
Operatorul-. Aresemniticalia Operanziisuntdetiplnlregsau
real.Dacecol putinun operand estede tip real,altfel
estreal,rezultatul
estedetipintreg.
t Operatorul*, Aresemniticatia deinmultire.
Operanzii suntdellp intregsau
ral,Dacdcel putinunuldinoperanzl esledo tip ral,rezultalul
esledo lip
real,altlelrozultalul
estedetiplnlreg.

t OpratoJul dTmp54ire,
/. Arosomniflcatla polfi dolip introgsau
Operanzil
rcaldat, lntotdeaunatezultatulestede tlprcaL
t de impd4irelntreagd.
OpsratorulDrv, Ar semnlficalla Operanzii suntln
d6 tlp lnlrog,Estegbllgaloriu
modobligatorlu ca fiecareoperandsa lle
cucelpullnunspatiudeoperdtor.
separat 6stdlip intreg.
Flzullalul
Drv iurnizeaze
Operalorul rzultatcorectnumaidaceambolevalorisunt
numsrointreglpozitive.
penlruoperalorulDrv
Rezultatul seobtineaslfel:
. ss faceimpdrtirea
Tnlreagaa cslordoudnumerecaresuntconsiderale
pozitive
(deexemPlu,13 itLv {-3);
. semnulcAlul]ise stabilelteduparegulasemnelor (+ cu + rezullat+, +
qi +
-, - cu- rezultat+ - cu rezultal-).
cu - rezultat
292 Anexal. Memento

t OperaloJulMoD.Are semnificatia de restal impd4iriipenirunumereintregi.


Operanzii suntin modobligatoriude lip intreg,iar rezultatulva li intotdeauna
de tip intreg.Operanziitrebuieseparalide operatorprincel pulinun spaliu.

fi, Ca gi in cazul operatoruluiDrv, rezultaiuleste corectnumai dacd ambii


operanzisuntpozitivi.Fiea lIoD b. Rezullatulseoblineasllel:
Drv b (R=o-ixc).

A .1.3.3. Operatorire la t io n a li

) Opehtorul < (mai mic).Fiinddati doi operanzia Si b, operatorul< aratd


dacd este adeveraHsau nu relalia a<b. Dace relalia este adevdratd
va fi TRttE,aldelrezullaiulva fi FAr,sE.
rezultatul
) Operatorul<- (maimic sau egal).Fiinddati doi operanzia Sib, operatorul
<= aratd dacd este adevaraE sau nu relatia a<.b. Dacd relatia esle
adevdratS va fi FAr"sE,
rezultalulvafi !RIrE,alltelrezultalul
+ Operatorul> (maimare).Fiinddali doi operanzia 9i b, operalorul> arald
dacd este adevaratasau nu relatia a>b. Dacd relatia este adeverau
rezullalulva lirRuE, altfelrezultatul
va fi FAr,sE.
t Operatorul>- (maimaresduogal),Fiinddalidoi operanzia 9ib, operatorul
>. aratd dacd esl adevdrat6sau nu relatiaa>=b. Daod rolatiaeste
adevera6rezultatulvafiERuE.altfelrezultatul
va liFAr,sE.
t Operalorul= (egal),Fiinddalidoioperanzia = aratddacd
9ib, operalorul
osieadovdrald saunu relatiaa.b, Dacdfelaliaesteadevdrate va
rezullatul
li rRnE,altielrezultalulva
firru/sE.

A .1.3.4.
Opera t olo
r i g ic i
) Operatolul No! (negare).Modul de acliune so poalo obsorva maiios:
NqI (TRITE)
-rAlSEi
NOI (!ALSE) ={RUE,

t OperatorulrND (9i). Regulade oblinerea rezullatuluieste loarte simpE:


rezultatulesle TRUEnumaidace ambii ooeranziau valoareaTRUE(alllel
rezultatul
esle FAr,sE).
) OperatoJuloR (sau).Regulaeste simple:dace unul dintreoperanzieste
TRI'E,rezultatulesleTRLE,altfelrezullatulesterAr,sE.
t Operaloiul xoR (sau exclusiv).9i aici, regula este loade simpldtdace
argumenlelesuntdilerilerezultatul
eslerRuE,conlrareleste FAr.sE.
pentruclasaa Xln
Manualde informatica :!5

Dacdoperanziisunt de tip intleg, se pleacade la 'eprezenlateat.|d r


numotelor,
t toli bilii 1 in o 9i invers'
OperatorulNor (negare)esteunar.Transforme
t OperatolulaND(Er) estebinar.Se face 9r logicpentrutoateperechilede
biti aflatipe aceea9ipoziliea celordoi operaiori Dacd ambii biii sunt 1'
rezultatul este1, iarin oricealt caz,rezullatulesle 0

t OpeJatoruloR (sAu)estebinar'Se facesAu logicpenlrutoaleperechilede


biii aflatipe aceeagipoziliea celordoi operatoriDacacel pulinun bit este1
rezultatul esle0
esld 1, altfel,rezultatul

) OperatorulxoR (sAu Excr,usrv) esle binar.Se tace xoR pentrutoale


p;rechilede biti allatipe aceeagipoziliea celordoi operatoriDacebilii sunt
diferitirezultatdleslo esteo.
1, altiel,rezultatul

A.l.4. Instructiuni
de
1, lnslructiuneavidi. Nu se treoenimic'dar loluli exist5 O sucoesiun
ir'indice
sepafaiori vide.
maimultorinstrucliuni
prezenla

de alrlbuhceslede forma:v!Eercarsi,undev eslenumle


2. Inslrucllunea
uneivariablle.
esteurmdioruli
deexeculare
Principiul
. seevalueazS expresia;
. variabila valoare
v iaaoeasld
tipulexpreslei
esteurmitoarga:
Regulafundamontali cu
hebuiesd cgincidd
v,
tipulvariabilei
lF. Existddouelome aleacesteiinstrucliuni:
3. lnstructlunea
Forma1.
rF expreslelogloi IEENinstruclluner
Er,sEInalrucllune2

de executareesteurmdtorul:
Principiul

. se evalueazeexpresialogicd;
. dacdaceastaia valoareatRuE, se executdinstruqiuneaplasalddupd
plasatddupdEr,sE'
tflEN, ln caz contrarse executainstrucliunea
294 Anexal, Memento

Fotma2.
rF expresieloglcerHEtrinstru4lune.
Principiul
de executareesteurmdtorul:
. se evalueazeexpresialogice;
. in silualiain careaceastaarevaloareaTRUE,se executdinstrucliunea
aflati duparsEN,in cazcontrarse trecela instrucliunea
urmetoare.

4. Instru4iunea compuse. Se ulillzeazdpenlru a putea scrie mai mulle


instrucliuni de compilatorca una singurd.Instrucli!nilese
care vor li interpretale
scriuintrebegin 9i enal.
5. InslrucliuneacAsE. Corespunde allemativemultiple.
structurii
Foma goneralda instrucliunii
cAsEesiel
CASEexpresieordinallOF
c1,[cr,..,c.1]:
inslrucliunel;
\n6trucrlunet
eldP2,'..,Q\r\.
21,[2r,...,2.p]:
in6tru4luneP
Instualiune]
IELSE
END

Aici,ct,...,s!1,...,re
reprezinia
constante
de acetaSitip
ca giexpresia
ofdinal6.
Principiul
de exocutafeesleurmdtoruli
. se evdueazaexpresiaordinald;
. acea instruqiunocare are in fald constantaob,inuldin
::-:l":!ti expresiei;
evatuarea
. ln silualiain careniciunadln instruqiunile1...t' nu estoprecedatj
d aceaconstanta, so executdinslrucliunea
plasatddupaEr,gE;
. dacdSiclauzaELSEesleabsentd,se lrecela jnslrucliunea urmatoare.
6. IngtauclluneaWBII,E.Reproduce
slructuracar tinp. . . executi.
Formagenerald este:
q[tllB expresleloglc, Do instrucfiune

Principiul
de executareesteurmatorur:
. se evalueazdexpresialogicd9i in caz ce aceastaare valoareaTRuE
se executainstrucliunea,
se evalueazddin nou expresia,dacdaceasta
are valoareaTRUE se executa din nou insirucliunea;procedeul
continudpandcAnd,la evaluarea expresiei,se oblineFAnsE.
ManualdelnFormaticA tru clasa
a xl-a

7. In6lrucliunea REPEAT.Aceasla inslrucliune repro(lr sh* El


ttNTrt 9iare formageneralt:
REPEAT
i, :
t.::

uNrL exprcslelogice
instrucliuni
Aici,i1, i,,..., i, reprezinld
de executareesteurmdtorul:
Principiul
. se executSsecvenlade instrucliunr;
. se evaluoazS expresialogicdi
. dace aceaslaia valoarearAr,sE se oxecutddin nou secvenlado
contrarse trecemaideparte.
insirucliuni,
8. Intrucllunea FOR.Atuncicendcunoaglem do cateori se execuleo secvenla
FoR Ea are doud lorme, prezentatoin
gsie bine ;d se utilizezeinslructiunea
continuare.
Forma1.
FORvariabile:= oxpreslelTO expreslerDO instrucllune
undel
- variabilapoatti de orlcetip ordinal(de exemplu'de tip trtes!'
sauboolar, darin nlciun cazde tipul!sax);
- exprealel,expresle2suntexpresiideacelagltipcu variablla.
dg executaroesieumdtorul:
Principiul
char
I
I
j

I
Paaul1. So evalueazeceledoueexprssil,
Pa8ul2.
Paaul2.1.
. Dacevaloareaobtinutdln uma evalu5riioxpresiei1 este strictmai
mare decat valoarea obtlnutd in urma evaludrii expresiei 2, I
oxecutarea
.
FoResteincheiati;
Dacdvaloareaobtinutdin uma evaludriiexpresiei1 este egalacu
I
valoareaoblinuldin urmaevaludriiexpresiei2, se airib!ie variabilei
de ciclarevaloareaobtinuldin urmaevaludriiexpresiei1' se executd
subordonate
instructiunea qi executaroa
?oRestelncheiate;
. Daci valoareaobtinutdin urmaevalueriiexpresiei1 estestrictmai
mic6 decat valoareaoblinuie in urma evaluariiexpresiei2' se
atribuievariabileide ciclare valoareaoblinuid in urma evaludrii
expresigiI si se trecela 2.2

t_.'
296 Anexal. I4emento

Pasul2.2.Se executelnstrucliunea
subordonatd.
Pasul2.3,
. Dacd valoarearelinlte de variabilade ciclareeste strictmai micd
decat valoareaoblinula in urma evaludriiexpresiei2 (evaluare
electuati la inceput)se adunt 1 variabileide ciclare9i se lrece
ta2,2.
. Dacdvaloarearelinuude variabilade ciclareesteega6 cu valoarea
obtinutdin urma evaludrijexpresiei2, executareainstructiunii
FOR
se incheie.

Foama2.
FOFvariabile:= expresierDOWNTOexpre6ie,DO instrucliune
t-
,. In acestcaz,variabilade ciclaroscadola liecarepas.

A.l.5.Cateva
functrii
utile
> Etnus:S-+t-l,11;arelormagenerald:
fu n c ti o n S i E (x r Raal ) ! R a1t

> coBtnug:ln-+[-1,11;
aretormagenefale:
f u' Itc tl o n C o E(x ! B a I)! Real r {co6l nuE (* )}

> arct ansnt:S-+(.ry'2,ry'2);


ars lormageneralal
function ArsAan{X: RaI)r R6a1r {6rctan9nr (*)}

I Aienlfe: argumentultebule exp mat ln ndlant. Celelallefuncliiuzualc


j se obtlnprinaphcarea
formulelor
krgonomlrice.

> Funclla exponenllalel:9t+9i*, unde f(x)-a" (e esie un numar iralioflal,


e-r.71) arelormagenerale:
fu E c tto n Ex p (Xr Roal ) r R a1t

> Funclialogarltmlce
t:S*-+fi,undet(x)=rn(r.)estefuncliainversa
functiei
9iaroformagenerald:
exponentiale
functLon h(tl: Real) | Reel.r

Functia
logarilmicd proprieldli:
areurmetoarele
avem: ln(A. B)- ln(A)+tn(B);In(AB)=Bln(A).
pentruA,B>O,
Manualdeinformatici ntru clasaa Xl-a

9i din a
Din laptul cd funclialogaritmiciesle inversafunclieiexponenliale
douarelaliede mai sus,deducempentrun>0, y oarecare:
x y = e ri (" Y)=
e Yrn (x ).

inseamne
Aceasta nY _ pentruca luncliaputerenu exisld
cApuiemcalcula
4) (y*Ln(x)).
in Pascal:

> Functiapitatice t:fr+S*, undel(x)="'1:


f unc t lon s q ' (x r R e a l ): R EII

undex esteo valoareintreag;sau real6.

> Funqla radicalftfrr-r$*, underl(x)=fi, arefoma generald:


f undt lon S q rt(x r R e a l ): Real,

> Funolla,,partelntreage"
f unc t lon In t(x : R e .l ) ! RaLt

partealntreagd
returneazd a lui:!.

t Atenlle:dacSx estenogaiiv, esleeronal.


rezultalul
j Exemple: ldt(-2.75) returneaze
tnt(2.?5) returneazl2.0, -2.0
> Funcllade trunchlore
functlo|r Erutlc (xr Re.l)r r.orglntt

returneazd
valoarealrunchiatd
aargumentului.
> Funclla,,partetractlonard"
lunctlon arac(*r Ral) ! Rsal,

x-rnt (x).
returnoazd
> Funcllade rotunllre
functton Round(x: Real) ! tJonsrlnt,

valoarsarotunjjlda luix.
relurneazd
> Functla ,,valoareabsolute"
functton a.bg(x) t

returneazalxl.
AnexaL I\,4emento

A.2. LimbajulC++
A.2.1.Tipuristandard
LimbajulC++,in varianlaBorlandC++,admitelipurilede maijos:
A) Tipuri intlegi
i.t:r
Numetlp

caracterferdsemn 8 de la 0 la 255

catacter 8 de la -!za la I27

inlregfdrdsemn de la o la 55535

intreg 15 de la -32768 la 3275?


intreglungfare 32 de la o la {.29a.9d?.295
semn
inlreglungcu semn 32 de la -2,1{7.483.548 la
2.747 .4a3.547

B) Tlpurl reale

l.

virguldmobild, 32
simpldprecizio I3.4 x1oi6, 3.4x1o3rl

virguld
mobila, 6a
dubldprecizie [1.7x10+ 03,1. zxl o' !03]

virgule
mobile,
dubleprecizie 80 f 3.{xlo-'er2, 1, 1 x1o*"321
lormatlung

A.2.2.Constante
1. Constanteintregl. Acestease clasificdastfel:
. zectnar.e(inbaza10).Exemplet23, 1239,55.
. ocral (in baza 8). O constantein baza 8 se decbra precedati de un
nesemnificaliv.
Exemplu:0123.Se relinenumdrulintreg 123(!).
. hxazecilnlle (in baza15).Acesteasuntprecedate de ox sau ox.
Exemplu:penlruox1A2adicd1A2r16) sau oxla2, adicd1A2(16).
N,lanual
de informaticdDentruclasaa Xl-a 299

2. Constantecaracter,Acestease hec inke doudcaractereapostrol(').

Ex e m Pl e:
'e', ' 1', '" '.
3. Secvenleescape.O secvenld escapeincepeprincaracterul '\'(backslash).
Sb considerdm o constantd caracter'a'. Codulseueste97(10)=141(s)=61(!6).
Prinlr-osecvenl5escape,constantase introduceprincodulsduintr-unad n bazele
8 sau 15. De-exemplu, constanla 'a' poatefi scrise(echivalent)
astfeli'\141'
sau '\x51'. In cazulcendse folose9te codulscfisin baza 15, acestaesle
precedaide caracterul
'x'. Uneori,penhuanumitecaractere, se pot utilizaSisemne
speciale,a9acum fezultddin exempleleurmdtoare.
.\\.,'\134','\xsc'
. b a cksla sh:
. newlt net r \l t. r \1 2 r. | \x a r'
. apostrof: ! \ ' ! r ' \47 ' , t \x27 ;
'
. oel: r \ . ' i r \ 7 t,r \x7 r '

. cr: r\rt, i \1 5 t, r \a d t,

.. Caractgre albe (whitespaceo).Au un rol specialin cadrul operaliilorde


citire/scriero.
Aosleasuntl
b la n k( ' ');
laborizontal('\t,);
n e wlin(e,\r');
labvertical('\v');
cr ( '\r ,) .

5, Constantereale
Ex e m p l6-:a5 .66 , 1,, .2, 0.3, -?.5E -12, a d ic e2, . 5 x 1 0 " 1 2 .

6" Constanle9ir de calactofe


ExemPlu: "acBta eBte un h6xt1L.

Pentrua da un nume constantelor folosimco!s!. Formageneralda unei


(construclia
astfelde declaraliieste dintreparanteze
drepteesteoplionale):
con6t [tlp] numeevaloare,

unde:
tlD - reprezintd (daceesteabsent,tipuleste in!);
tipulconstantei
nume- reprezinta numeleconstantei;
watoare - reprezintd
valoareaconstantei.
300 Anexal.lvlemenb

A,2.3.Operatori

A,2.3.1. Ptioritatea
operatorilor
0n ordinedescrescltoare)

Priviliurmetorul
tabel:
prioJitate opeJator asoclatlvllate
I OII- >::. ,r + d
2 l-+-+ +- -*(rpecdst ) sizeof ne\e delete d a s
3 .** >
4 *lEa r-r d
5 +_ s+.1
6 <<>> s+ d
7 <+ >>= r-+ d
8 : l=
9 & s-+ d
lo ^ s+d
ll I s4d
12 && s-+ d
13 ll
14 1: d + s
15 =* =l =+ =- =& =^ =l=< e > > = tt 1 s
16 , s+d

A.2.3,2.Operatoriaritmetlcl

in C++exlstSurmetorll
operatori
aritmetlcll
. - mlnus(unar,adicgactioneaza
aslpraunulsinguroperand);
. + plus(unar);
. + (blnar),
pentruadunar;
. - (blnao,penkusaidere;
. '(binar),aresemnificatla
delnmullirel
. / (binar),
pentrulmpe4irei
. c/.(blna0,rostullmpS4irii
tntregi.
Manualde informaticd
pentruclasaa Xl a

I Observafii

Operatorul"/"(impd4ife)aclioneazd
ln rnoddiferittn functiede operanzi:
a) daceambiisuntde tip tntreg,rezuttatul
estetntregSiare semnificalia
de
impe4ireintreagS.Cu loateacestea,fezultatulestecorect{dinDunctde
vederematematic)numaidacevalorilecarese impartsuntpozitive.
b) dacacel putinun operandestede unuldin tipurilereale,rezultalulesie
real(seefectuea?dimp64ireaobiSnuitd).
Operatorul'?'actioneazdn!mai asupraoperanzilof
de tip intreg.Rezultatul
oblinut este corect din punct de vedere matematicnumai dacd ambii
operanzisuntnumerenaturale.
in cazulin carese impartdoudvaloriintregi,se procedeazd
astfel:
a) se facelmpd4ireaintreagda celordoudvaloricaresuntconsiderate
ln
moout;
b) semnulcatuluise stabile$te
dupd regulasemnelor(+ cu + rezulat +.
+ cu -, rezullat-). etc.

A.2.3.3.Operatori
relationali

in c++ existdurmdtoriioperatorirelalionatil
. < (maimic);
. <- (maimicsauegal);
. > (maimare);
. >= (maimaresauegal).
Rezultatulunei operaliilogiceeste 1, in cazul in care inegalilateaeste
gi 0, in caz contrar.
respectatd

A.2.3.4. Operatori de egalitate

Acegtiasunt:
. == pentruegatitate;
. !c penkuinegalilate.
in cazul in care relalia indicatdde operatoreste respectatd,expresia
retufneazd
1, altlelretufneazdO.
302 Anexal. [,lemento

gi decrementare
de incrementare
A,2.3,5.Operatori
Acegti operatorisunt unari qi au rolul de a incremenla(aduni 1) sau
(scad1) continutuluneivariabile.
decremenla Operatoriisunt:
. ++ penlruinclementare;
. -- pentrudecremenlate.
sau postflxali (aplicalidupa
pot li profixati(aplicaliin fala operandului)
Operatorii
ooeranol.
t Daca operatoruleste prefixat,variabilaeste incrementata
(decrementatd)
inainteca valoarearetinutdde ea se intrein calcul.
t Daceoperatoruleste postfixat,variabilaeste incrementatd
(decrementatd)
duoi ce valoarearelinutdde ea intrdln calcul.

A.2.3.6.Operatorilogici
Existatreioperatori
logicii
. !- n e g a re
l o g i ce ;
. && - gilogic;
. ll - sautogic.
Operatorulnogre/oglceaclioneazd esteo valoare
astfelrdac6operandul
difedtd este0, altfelrezuliatul
de 0, rezultatul esle1.
$l iogic(binar)aclioneazd
Operatorul astfel:dacdambiioperanzi
suntdiferili
de0, rezullatuloste
1,altfolelesto
0.
Operatorulsau /oglc(binaoaclioneazd astfelrdace cel putin unul din
operanzieste
o valoarediferite
de 0, I, aitfelrezullatulesle
rezultatuleste 0.

A.2.3.7.Operatorilogicipe biti
Limbajul carepermltaccesulla bil.
c++ estedotalcu un set de operatori
Ace9tia
sunt:
. <<,>>oporatori dedeplasarol
. & 9ipebili;
. I saupebilil
. ^ sauexclusiv pebili;
. - negarepebili(operatoruna0.

fu, Acegtioperatori numaiasupraoperanzilor


aclioneazd detipintreg.
Manualde informatici pentru clasaa Xl-a 303

Operatorul "<?'este binar.El are rolulde a deplasacefe sEnga c3_t.L;1


din stengasa, cu un numdrde poz4iiegal crr !aaa
tuturorbitiloroperandului
fdmaselibere{in drcapta)vof reljnevaloa.ea0
de al doileaoperand.Poziliile
relinLrtd
Operatorul">> " estebinar.El are rolulde a deplasacdke dreaptaconlinutul
tuturorbitilor
operanduluidinstangacu unnumdrde poziliiegalcu valoarea
relinut5
de al doiba opend. Dacaoperanduldin stangaestede un tip lnkeg fdra semn,
pozitiileremaselibefe(ln stanga)vor relinevaloarea0. Dacd al doileaoperand
retinevaloarean, o astfelde deplasareesteechivalentdcu impe4ireaintreagdcu
2". in cazul in care primuloperandeste un intregcu semn,fiecarepoziliedin
snga remasdliberese completeaz6 cu valoarearelinutdde bitulde semn.
in cazuloperatorilorbinari'& ", " L", "^", rezultatulseoblineaplicendpentru
fiecareperechede bili aflali pe aceeagipoziliereguliledin tabelulurmdtor.Atunci
candcei doi operanzinu au aceeagilungime(darnumaiatunci- de exemplu,daca
ambiioperanzisuntde tip char 9i rezultatul estede tip char), se aplicaregulilede
conversieoenlruexDresii aritmetice.

oP,&oP; oP,"oll 1,oT;lQr1


0 0 0 0 0
'| 0 0 1 'I

0 I 0 1
1 1 I 0 1

"-" (negarepe bili)arerolulde a inversa


Opefalorul bililor(dacd
conlinutul
o,vaconline
unbitconline 19iinvers).

A .2 .3 .8 .Op e ra to rid e atr ibuir e

in c++ atrlbuirea
eslooporalor,in plus,ln c++ avemmaimullioperatori
de
atribuire.
Operatorul"="sefoloselteintr-oexpresiedeforma:
v.xPrsar
Aici,v esteo variabila.
de executareesteurmStofuli
Principiul
. se evalueazbexpresia;
. variabileiv i se atribuievaloareaoblinutd (dacd este cazul, se
efectueazb conversiarespectivd).
Se pot efectuagiatribuirimultiplede formai

undev, v1,...,v" suntvariabile.


304 Anexa I Memento

in acestcaz,principiuldeexecutare
esteurmdtorul:
. se evalueazdexpresia;
. valoareaoblinutdesteatribuitavariabileiw"(eventualconvertitd- dace
estecazul);
. continutulvafiabileiv" este atribuil variabilei
efectueazeconversianecesare):

w (eventual,
conlinutulvariabileiv1 esleatribuilvariabilei se efectueaze
conversianecesara).
se maipotutiliza9i operatorii:
Pentruatribuifi
,,&>,',".=,' sau "
lE".
O atribuirede lorma:v op xpresie,are acelagirezultatca
v=v op expJesle
estecd,in primulcaz,se genereazd
{diferenla un cod magindeficient).

. p e ra to rul' ,'( vir guli)


A .2 .3 .9 o

C++ permiteprogramatorilor
si scrie mai multeexpresiisepare:eprin
virgule,
camaijosl
e :rp l ,e x p r,..., :tpb,

intrucat,dupe cum fezultddin tabel,operatorulvirgulase asociazdde la


stengala droapta,expresiilese evalueazdin ordineaexpr, enDr,,,.,xDb.S-a
convenitca inlreagaexpresie(carecuprindecelen exprcsiiseparateprin virguld)
sd produceca rezultatvaloareaoblinulatn urmaevalu6ritultimeiexpresii
(evident,
tipulacesteivaloriestegitipulexpresiei).

A.2.3.1
0. Operatorul
condilional
Se folosegteln expresiide genul:
|<D1?4rrr:<D3
PrincipiLl
de exocutareesteurmdtorul:
. se evalueazderrPt;
. daca aceastaproduceo valoarediferitSde 0, se evalueazaexp, 9i
eqb esteignoraE(nu se evalueaz6);
. altfel,se evalueazdexDi 9i exp, esteignofatd.
in ansamblu,expresiaestede tipul lui e*D1sau exps 9i pfoducevaloarea
sau exp30n luncliede ceacarese evalueazd).
de informaticepentru clasaa Xl-a
I\,4anual 305

A.2.3.1'l . Operatorul sizeof

Are rolul de a returnanumerulde octeti utilizatipentrumemorareaunei


valori.OperalorulEizeof poaieli utilizatinlr-unadin celedouaformeprezentate
in conlinuare:
stzoof (o:<Dr63ie)
El z o f { ttD )

A.2.3.12.Operatorulde conversieexpliciti

Demulteori,dorimca unulsaumaimultioperanziseintrein calculconvertiti


agacumdorim(nu implicit).Penkuaceasta,inainteaoperanduluise treceintre
Daranteze
tiDulsdu.
Exempfu:fie declaratia:floar s= -1-.9i. Atunci:(tnt)x--1 (se face
dinfloat in int printrunchiere).
conversia

A.2.4.Instructiu
ni
1.In6tauclluneaexpresieestede foma:
e:lDrEl r.

La inlalnireauneiastfelde instrucliuni, expresia.


se evalueaz5 in llmbajul
C++9io atribuiro
esteo oxpresle.
"1f" sepoateutilizaln urmdtoarele
2, lnstrucliunea douafonnel
Forma1.
tf (xpre6t6) lnstruclunel .L.e lnstucfunaz

Principlul
deexecutare
esteurmetoruli
. seevalueazS expresiai
. dacdvaloareaprodusede aceastaeste diferitat
de 0, se executa
inslrucliunell
. produse
dacdvaloarea este0 seexecuta
irsttuctturen
FoJma2,
tf (snDresls) lnstrucliune
de executareesteurmitorul:
Principiul
. se evalueazS
expresaai
. dace valoareaprodusdde aceastaeste diferitede o, se executd
inskucliunea
subordonata.
306 Anexa I Mamento

3. Instrucliuneacompuse"Se utilizeaze in cazulin carc se dore$teca mai mulle


se fie tratatede compilatofca o singurdinstrucliune.
instrucliunl Estede formade
majjos,undeir, ir, ...,i" suntinskucliuni:
{ i1;

4. Instructiunea"swirch" areformagenerald:
switch (expr6sie)
{ caE expr:secventeinstruc,tiunii bteakt
case exp?:secvenle,rstrucluni2: bteakt

case exp,: secvenf5lnstrucluni n;breal<t


lderault ! s6cvenlelrstruc/uninnJ ,
]
unde:
- expfesreare semnificalia:expresiede tip lntreg;
- expr suntexpresiiconstante de tip inireg;
- o secventaoarecarede Instructiuni.
instrucf unitrcprezlnta
Principiul
de executare:
. se evalueazdexpfesiai
. dace aceastaproduceo valoareegalecu cea produsAde expl, se
execute,in ordine,lrst/.uctturr gi se trecela instrucliunea
urmdtoare,
altfelse executenumaiseovenlainstrucFruniMr.
Ato'naiivad.faulr este facukave. in absenld,in cazulln care nu existd
coincidenlide valori,se trecela instrucliunea
urmetoare.

5" lnstrucllunea"whtl"
Aceastd
instrucliune
feproduce
shuclura
delip cat tinp ... excuta.
Fofmageneraleestei
sblLe lexpresl4 instrucliune
Principiul
de executareesteurmltorull
. paaul1: se evalueazd
expresia:
. pa6ul 2r dacd valoareaprodusade aceastaeste diferitede 0, se
execut; instrucliunea apoise revinela pasul 1, alflelse
subordonatd,
trecela'nstrucliJnea
ufmdtoare.
Manualde informaticioentruclasaa xl-a 307

6. Instrucliunea"aro wrlile". Traduceln limbajstructuraExcute...cat


rbE). Formageneralda acesteiinstrucliuni
esteurmdtoarea:

instructiune
wht1(expreste);
Principiul
deexecutare
esteurmdtoflr,.
. paaull: seexecutd instrucliunea
subordonatS;
. pasul2: se evalueaz5 in cazulln carevaloarea
expresia. prcdusah
ovaluaro do se termina,altfelse trec
esle 0, execuliainstrucliunii
iapasul1.
"fo!'are formagenerald:
7. Instauctiunsa
ror (expreefqnlhrh.; expreslehn. t.) lnstrucllune
expresle!.d;
""t
Dup,cumseobservS,inkeparanteze
seg5sesctreiexpresii:
- expreelehm,nao se foloseltede reguH,pentruinitializarea variabileide
ciclare.Estede remarcat (curol special)
faptulcd in cadrulacesteiexpresii
esteposibil chiarsddeclarimvariabila (cuvaloare
deciclare initialA).
- oxpJeslsbdse folosegtepentrua testa dace se executeinstruqiunea
subordonatA - dac5expresiaproducela evaluare o valoarediferitdde 0,
instrucliuneasubordonatdfor seexecutd.
- .|.9r.r jll!ord*.{ sefolosestepentruincrmentarea variabilei
declclare.
Prlnciplul
deexecutarei
. pasul1i se evalueaz5 expreslqn{h aro(uncaz specialesteacelaln
careaceasta contine qideclaratia
variabilei
deciclare);
. pasul2r se evalueaza expneslaror.in cazulin careaceaslaproduce o
valoare dg 0, seexecute
diferitd instru4iunea subordonate!or; apoise
trecela pagul3, altfelse trecela instructiuneaurmStoare(setermind
executiainstructiunii
fo!).
. paaul3: seevalueazt expresiadeincrementare 9iserevinela paaul2.

A.2.5.Cateva
funcliiutile
Pentrua le utiliza,includelifislerulnath.h: *r.acluale <nath.h>.
t FuncliaabE are forma genefala:lnr abe(trr x)r Flolulei ste do a
inloarceh | (modululluilr).
t Funcliafabs are formageneralddou51. flbs(doubr x) r are acelagi
rolcu !5a, numaicdintoarcevaloareaunuinumdrreal(chiardoubr6).
308 Anexal. Memento

t Funclia labs are forma generald lors int labE(lonE int s)r 9i
acelagirol cu abs, numai ce inbarce valoareaunui intreg lung.
t Funclia acoE arc forma generalAi douJjLe acog ( dou.bl. x); 9i
calculeazavaloareafuncliei arcco(r): [-l,l], t0,tl.

) Funclia asin are folma general5: dlouSlo agin(doubl x), 9i


valoareafunctieiJ'\sinrr):l-l.l| -l- I.trL
calculeaza

t Funclia alan are forma generali: double atan(aouble x)r 9i


calculeaza funclieiarcrst:ri:91
valoarea '+ t-1,1).
22
t Funcliaatd2 are forma generali:double atar2 (doubl y. doubl n)
gi calculeazddrd8(z). Rezullaiulestein intervalul(-r,n). lvlotivul?

t Funclia floos are forma geneI5 aloublo tLoor(tiouble x), 9i


calculeazdvaloarearotunjitda lui x (rotunjirease lace in minus).
Exemple:floor (123.78)=123, f,Ioor (-23,3trr--24.

+ Funclia cetl are forma geneaaladou.bl c6ix (doubr.6 x) r 9i calclleazd


valoareafotunjitda luix (rotunjirease lace in plus).
Exemple: c{l( 123.78 ) 8121, cetX(-23,34)=-23.
t Funclia co6 afe forma generald doubl coB (doubl x) , 9i calculeazd
valoareafunctieicos(r):!i , l-l,ll.

* Functia Eln are forma generaledoubrG sln(dou.b1e r<), Si calculeaze


valoareafunclieisi(i) :91+ l-l,ll.

t Funclia ran are forma generad doubl tan(aoublG r), Si calculeaza


(.1
valoareafunctiei/rr.\,:9i 1l n{ :ltcZl '91.
|2)
+ Funcla xp are forma generalSdlouble esp (doubl x), 9i calculeaze
funcliae' :91-'91i.

t Funclia 1og a forrna generalddoubte los(double x); Fi calculeazS


functialn(r):9t; J9i, rrl? Wr)= logr(-y).

t Funclia l-os10 are forma generald dtoubl.e los10 (aloubls *)r 9i


catculeazdfunctia lg(-$:9li +91, xrrtu lg(-r)=tog10(-r).

t Funcla 9ow are forma generalddoulrle poxr(atouble x, alou.ble y),


gicalculeazdr).
Anexa2
Aplicatiipracticeale grafurilor
Cu sigurant;,unii dintrevoi v-ali pus o seriede intrebdrireferitoare
la
teorieigrafurilorin problemele
aplicabililatea reale:
. undepot utilizagrafurilegide ce?
. existe aplicatiidin alte domenii,Tn afari de tntormatice,ce pol li
rezolvatecu aiutorulteorjeigralurilor?
in lapt, dupe cum ve! vedeain continuare, grafurilesunt foarteutileintr"o
multitudinede aplicatiidin divei-sedomenii,iar prin utilizarealor, se poateobline
o bundoptimizare a resurselor (umanesau maleriale) saua timpului.

A.l. Retelede comunicatie

Comunicatia dispozitive
intrediversele electronicedinzilelenoastre
reprezinta
poateceamairdspendita aplicalie a teorieigraturilor.
practic5 Spreexemplu, daoe
sau la Inlernet9i dacAconsiderdm
ne relerimla retelelede calculatoare fiecare
calculator
ca frindun nod,atuncivomavea- un grafexhemde complex9i icarte
dinpunctde vedereal struclurii.
diversificat In continuare,vomprezenta o schemd
deprincipiu
caredescrie o reteadecalculatoare,legatdlalnternetl

Router

Switch I --r-- Switch


.t[ffi

/
/\\
\ \ l
sg g
-,ffib Subreteaua
l 2
Subreteaua
FlguraA.1.Exemplude elea de elculaloa l.galab Intehet
i practiceale qrafurilor

t, Observatii
de
Structuraanterioardestede tip arbore Pe fiecarenivelinsd' protocoalele
comunicatieefectueazaoperalii specificepentru asigurarealransmlslel
terminal(calculato0'
;;i.edio;ale inlre liecaredispoziliv
pe
Router-uleste un dispozilivelectroniccaredecidecalea(drumuloplim)
carevclrirrin.e irbl-ralle de la un carcJlalor o'n subteleaua l ceke un
ul decidela randul sau n
altul d,n Subreteaua2 La nlve' loca' Switch
trn"ti" a" uJr"iu UIC (MediaAccessControl, unic
identilicalor pe glob)a
ii
il"aiii pla"i o" ,"t"" c;rui destinatar este dedicatbloculde date Pentru
f,ia""f, la ieteaua Internet,Router-ulale o legeturdcu un ISP
"(lnternet
"" ServiceProvider).

Exrslao;nfeaqe teo'e legalade relelelede calculatoaredar ceeaco esle


inEaoe retrnuieste faptulca dln punctde vederetopologic o retea oe
se poale repreTenlasub lorma unuigraf comLrnicatla optima
""]"raiort"
(calea cea mai scude inre doua noduri) este realizata cu aluloll
orotocoalelorspecialzateoe routare'cum ar fi: lP \lnrcmelPtotocol'tNA'l
iNetwotkAddtessTtunslation),RlP \Roulinglnformalion Prclocotlelc

Protocoalede loutale

Un prorocolde ro-la'e are 'olJl de a obtine9i de a,lrimileinformalire


toooloqiceae'eteletcdtteRouter-epermiFndll-le acestora sa ia declzllra nLvel
roca. i ecareRouterdel ne o serieoe llsle.numile labele de routare '' caresunl
care au legeturdfizica directi
memoraieaCresete liizice$i logice)tuturornodurilor
cu pl e optme dela cunoscule9l
s drul'1un oarcurse Acesle I'sle kebule
reacLuaizatef-ecve't pentrJ a prevenianu_nitemodificdrrtopologice a'e retFlel

Bo,rler-ee LltirzeaTeprotocoalelede co'nunicatecareau la bazdalgorltmi


de ootimizarece lreD.liesa deler4llrecea rnal bLlnacale Cand ne referlmla
J*r'uic" .ri Orn avem in vedelenumerul (dinenglezd,"hops")pe
de "hopuri"
caretfebuiesd le parcurgedatelepanbla destinaliesau un alt punctintefmediar
saudJrala/vte/a de f nilerea nformaliilor'
Existddoud t puri de algoritmide routaremai importante, utilizalein funclie
de modalitalearouter-uluide a reline9i de a analizainformaliilestructuraleale
relee :
. Afgoritmi de routare globali. Fiecarerouterreline toate-informaliile
de'sprecetelatte routeri existentein rclea 9i despre lrafic Cand se
porneqteun astfel de router,el trimiteun mesai catre toate ceielalle
router_edin relea farea cunoagtein pfealabildeslinalarii(mesajde tip
broadcast).Fibcarerouteril va r6spundecu un mesajin careva ata9a
adresalP a sa, ldentiiicandu-se asliel Se iace apoi un lesl princarese
analizeazdtlmpul de r6spuns,trimilendu_se un mesaj de tip echo
l'ecou") cdtre router-ele delerminale anterior' Rdspunsulprimit Ce la
Manuqlde informatici pentru clasaa Xl-a 3t l

tiecare este rellnut penlru a Ji utilizatin continuare.Algorilmu de


determinarea drumllli miniminire orbaredoud noduriale retee (de
exemplu,se poaieutilizaDijksrra) esie apoiaplicat,considerandu-se
penhufiecarelegdturdun cosl ce deplndede timpulde rbspuns,media
traflc!lui sau ma simplu, nurndrulde nodufi intermediafe.Astfel
dispozitivuloblineo harte"a releleipe careo relineapoiin tabelulseu
de routare.ln cazuluneiretelede dimensiuni foartemari,un aigoritmde
acesttip funclioneaz6 corect,dar poateincetinitraficul,scdzandastfel
eficientarelelei.

. Afgoritmi de routare descentralizali-Routerelece au implementate


un aslfel de algo tm rclin infomaliile doat despre nodurilelegate in mad
direct (adiacente). Astfel,rouler-ulmemofeazacostul fiecereilegdturi
directe9i la o anumiteperioadede timp, face schlmbde tabelecu
celelallerouler-e,reactualizandu-9i astfelinformatiileDe exemplu,dace
avemtrei router-eleoatein serie:

dRouterl
LI
4Router2 Router3
FiguraA2. Exmplu
de Glea

in cazul in care Router 1 trebuiesd trimile date ceke Router 3,


informatiilevor trece auiomatprin Fouter 2. Cand pachelelede date
ajungla Router2, el verificdlistasa de routare$i decidecum sA trimitd
pachelelede datespredestinatie.
Problemele realepe carele intampindrelelelede calculatoare se datoreazA
numdruluimarede dispozitive(noduri)din retea.Cu cat aceastavaloareestemai
mare,cu atat numdrulde calculeefectuatela nivelde foulerestemai mare.Aslfel,
se poale implomenlavirtual o ierarhizarea relelei,lrnpd4indu-sepe regiuni.
Fiecarerouter detine informaliidoar despretoate router-eledin regiuneasa.
Legaturacu celelalleregiuniso faco prin anumilerouter-e,ca un fel de "portl"de
iegirespre exterior.Astfel,un roulerdinir-oregiLrnenu reline nici o informalie
despreun altuldintr-oaltdregiune,ci doarcaleacdtreaceafegiune.

A.2. Instrumentede managementeconomic

qi situatiileeconomice
Proiectele determinalede punereain
practicda acestora,presupunefectuareaunor activitlti interco-
nectale,carepotfi modelaleprinintermediul
gralurilor.
Managmentulinformatc al proieclelorpermitegesliunea,coordonarea,
planificarea
Si controlulresurselorastfelinc6t obiectivelepropusesd se aUngein
modoptim9i la timp.
312 Anexa2 - Aplicatii practiceale grafurilor

O iolicatiefoarteraspanditea grafu lor orientate o conslituiesimularea


proiectelorcomplexece presupirno mullitudine de activitSlidistincte,efectuatein
seriesau in paralel.Teoriagrafurilor
vinein oriceruianalast
ajutorul de proiectprin
modelareaacestoractivitdli,prinstructurarcagraficda dependenlelor dintreele 9i
prindeterminarea limpuluinecesarde realizarea proieclului.
ln evaluareaoriceruiproiectestenecesadcunoa9terea timpuluimaximde
drumulcel mai lungde la fazainifiald
execuliea intrcgiilucr6ri.Acestarcprezintd
la fazafinalda proiectuluiSieste
numitdrumcdllc.
Un gmf de activitdtieste un graf asociatunei lucr;ri complexea cerei
realizarepresupunedesfdgurarca mai multofacliuni(procese,activiteli).Un astfel
de grafpresupunedoudtipuride componente:
. arcele -- reprezinteactivitalile sau elapele elemenlarc ale lucrarii,iar
lungimeaasociatdunui arc semnificetmpul de desfesurareal activitatJi.
Exemple:proiectarea uneicomponente, unuialgoritm,etc. ln
implemenlarea
cadrulunui proiecl,
activitStile
se pot efectua:
- in seriero activilatenu poateincepep6necandaltaau a fostterminatd;
in acelaqitimp.
maimulteactivitelidesfdgurate
- i!_pA@lgl:
. nodurlle reprezinGevenimentecare pot ti interpretateca indicand
realizareaunorobiectivepartialeale lucrdrii;ele sunt un punctde verificare
al evolutiei lucrdrii. Exemple: lerminareaelapei de analizd, sosirea
malerialelor
de conslructie,lerminareaunorteste,elc.
Proiectuleste lormat dintr-oserie de activitdti($i evenimente),
efectuate
inlr-o anumitdperioadi de timp (cu un inceput9i un sfArsitdefinit).La linal,
rezuhaluleslescopulpentrucarea fostdezvollalacelproiect.
Numimdrum critlc al unuigrafde activitdli un drumde lungimemaxima
care leaga nodul initial de cel final. Drumulcriiic feunegteactivitdlia ceror
interziereduce la intafzierearealizariiintreguluiproiect, de aceea trebuie
supravegheate ce formeazadrumul
cu mare atenlie.Aclivitdlile9i evenimentele
criticpoartS
9i ele denumireade crltlce.

do gralde activiteli
FiguraA.3.Exemplu
Manualde informaticaentruclasaa Xl-a

in figuraA.3,drumulcriticesleformaldin nodurile:1, 2, 7, 5 9i 5. Timpulde


terminareal proiecluluieste de 21 de unitali(mrsurade unitatea costului).Oe
altlel,nu existain modobligatoriu un singurdrumcritic.Suntcazuriin caregralul
continemai multe drumuricritice,insd cu suma pondelilorarcelor egala In
CapitolulI a|i studiatgrafurileSi algoritmullui Roy-Ftoydt, metoddce permite
determinarea dlumului maximintr-ungraf.Aceastdtehnicdse poateimplementa
cu succespentrua detecladrumulcriticintr-ungraide activiHli
Avdnd cunoscutdrumulcdtic pentruun graf asociatunui proecl se pot
analizain detaliuanumileaspecteparliculare ale fieceruievenimentsau activitate
Do.imsd cunoaitemcum se pot deflllacelelalteactivitdli,care nu sunt critice,in
funcliede duratadrumuluicritic.Astfel,au fost introdusecatevanoliuniteoretice,
ce vorliorezentalein continuare.
Se considerAun graf de activitdli,pentru ca notarn cu vr (varfurile)
gicu AIt,Jt (arculdelavr lavj) activitdlile.
evenimentele Vomdefini:
vr ca liinddrumulcel mailungdola
tr - dataa$tephtea unuieveniment
vr la vr (ceamaimaredistantd);
ri - data llmlte a unui evenimentvr ca fiind diferenlalntre t" (data
a iuiv") gidrumulmaximde la vr lav,,
agteptata
Sd revenimla exempluldin figuraA.3. Penkueve|imentul{, vom aveadala
agteptatdegaldcu 10 (5+2+3)unitdli,iar data limiti, egaldcu 16 (21-5) uniteli.
Putem astfel considerace evenimentul4 trebuiesd fie atins dupd 10 unitet
temporale, 5a nu poatese durezecu rnaimult
iar in cazuluneiinterziei,atingerea
de s (16-10)unitdlifale de datasa agteptatide terminare.
Cele doud valori asociatevenimenluluivr determindun Inlerval de
tluctuatle,notatcu [rr, rr'], ce specificdperioadade timpin cargpoateavealoc
evenimentul vi, ferda schimbalimpultotalagociatproieclului(drumulcritic).

t ln urmaunorcalculeugoare.se poateobservaca pentrutoateevenimentele


jl ce apartin tr " t!'.
drumuluicritic,

Considerandcunoscutetoate datelea9teptate9i cele limite pentru rraf,


douenotiuniprivitoare
definimin continuare la arcel
ca liindtr-tr-d (a[t, J I ], ce
Mr,It,Jl - marginealibe,i a uneiactivitdti,
semnificeduratacu care se poateintazia lncepereaactiviteliiaft,ll, fdrd a
vt;
a evenimentului
modilicadatade agteptare
t{rlt,Jl - marglneatoialda uneiactivitdli,ca fiindtr'-t{-d(Atl.jt ),
ce semnificdduratacu care se poaielntarziaincepereaactivit5liiAIi,Jl, fdrd a
vt.
modificadatalimitda evenimentului

t Arcelece formeazddrumulcritic au acesle doud valori nule (nu le esle


jrl permisdnicio lnterziere)
3t 4 Anexa 2 - Aplica[il practiceale grafurilor

InteNalulde fluctualiepermitemanagefului de proiectsd utilizezeresurceie,


echipamentele 9i utilajeler5mase libere pentrua ajuta alte activiteli9i implicit
oentrua micso durata de efeciuarc a lnkegului (in cazulln carese poate
proiect
realizaacesllucru).
Grafudlede activitblisunt exvemde utilein evaluarcalucrerilorcomplexe'
iar reprezentarealor periniteanalistuluide proiecto viziune de ansamblu9i
totodate.o modalitateprincarepoatetestao multitudine de vadante,inaintede a
o alegepe cea consideratd optimd.De asemenea,soft-urilespecializatece oferd
metoaecomplexede analizd,utilizeazdctl succesmetode de optimizareca cea
a "DrumuluiCrltlc".

A.3 .Ch im iemol ec ul ara

Stiinta care se ocupe cu studiul moleculelorse


numeslechimle moleculare.Presupunandu-so
eleme;lele teoreticede baze, considerdm ce o
cunoscute
molecul5
reprezinlacea mai micdparticulaa uneisubstanlechimice
ce retinetoateproprietililesalechimice9i de compozilieO
Ln{lb
:"0
moleculaeste formatedin cel putindoi atomi9i esteneutra
din punctde vedereelectric.Formulachimice9i structurauneimolecule
reprezinta
factoricaro-idetermind
cei rnaiimportanti proprietalile

in chimie,gra{urilece descriulopologiamolecuhrese numesc aralurl


mofecufare.Dup- cum era de aqteptat,nodudlereprezintdatomii,iat at'ele
dinlreatomi.
semnificd /eodtur,/e

esle prezentalun exemplude grafmolecularneorientalpentruo


l\,4aijos,
; hidrocarbLrrd(lipc4):

H,rC
-t
\
cH-cH3
H" C-CH
-r I
tl
H 2 C-CH 2

F guraA.4.Exempudegralmolecular
asociat

anterior,se potasociaurmdtoarele
Penlrugrafulneorientalprezentat trei makicel
llanualdeinformaticA <lasaa xl a

0101100 o1-21,L22 o3231"22

1010000 1012233 3032455

0101000 2L01"3L4 23033{4

1010000 L210233 3230455

100001x l2320tL 143401X


2343LO2 2545LO2
0000100
0000100 23{3!20 2545120

matriceade adiacen!a matriceadrumurilor matriceadrumurilor


minime(distanla) maxime(Detour)

lucru oblqnuitin
l. Ouservamfaptul ce acest graf asoc;atconline cicluri
jo ;;Lr"trrii" moleculare Dru-murile. maximo sunl totus' delerminate cu
se evitd ciclarea prin
algoritmului
otecizarcacd ln programelespecializate
utilizareauneicondiliide stop
Duoe ce ad fost determlnaleaceste matrice mai mLlltecaracteristicl
toporo-giii i.pon"nt" ;ot fi obtnutedrrectPrezentamdoardouddintreele
maxime:
- lndicelede drum (Delou4- se oblinedin matriceadrunurilor

,=r f f ror,,,
Dofour'
al matricei
unde(A),r eslounelement
penifu
HarryWeiner
in anul1947dechimistul
- lndlceleWelner- introdus
moleculard:
a sludlastructura

w(c)=;.t>(d)/i,
- ,= t /= t

un olemenlal malriceidrumurilorminime'
unde (l),, reprezintd
nt in
Exlstamai mult de 4OOde astfelde Indlcl lopologlcl 9i su "folosili. anallza
intre molecule,
strr'lcturale exlrem de utile in
o"t"rrfr""r*
molecularS. "itif.ritatilor

Exemprulprezentalanterio'esteloartesiTplu dar 'maginatr_v6 cat de u9or


poatefi penlru un chi'nrst5d analzeze aceste date oeltru o lormula cnlrrlca
toluldirecl pe calcJlator.Teor'a grafJrilor este folostetL
iomotexd.sr.nutand
succesln chrmie9i qe'letlcaiar s:n'ilareaexperimelte 0r cu ajuloruunurru
diminueazd considerabil timp!l necesarde lucru
Anexa3
TabelacodurilorASCII
066B 088X l l 0n

002 068D 090z 2


069E 09t ltl
0480 0?0[ 092\
0491 071c ll5J
028- o502 o 1 2A
0513 olt I
0524 074J 096' ll8 r
05.r5 075K
0r00 0 1 6t, 098 b
0 033 0557 077[t t2l
034' 056E 078N 00d 122z
0 057 0790 t21
0 ' 080r 02I t24
0 5l:l 059: 0 8 1o t25
0 060< 082R t26-
0 0.r9' 061= 083S 05i t?1
08 040( 062 > 0M l' 0(' i
0 0.r ) 061? 085U
020 042. 061 @ 08I
021

CodulASCIIextins

.2lic 2:]]g
29n 500 2 21.1O
u06 9l r ' 2:r56
: lt n 52 2l( -
tl2u 5 3 () 95 2 2710
3:la 5 ,1 U 2t1j
:t1a 55a 16 91 2 i
561: 2t9
16 G 51f 78 2)0
l7 ii
t 8a
58
59n
200 E
2t t G
221
222
.24t>
I
40i
@6
a2
241 I
4 ti 626
63
'i 85
204

206
225tl
226f
246+
I
65N 86 228t
208 ! 250-
61 88r 2@ + 230u 251
476 68, L 210 2.rI r
43ii 90r 2t l
o Mamuafte
geolare MEGllS,
aprohate depr@h[@mn@
Gul@gerfl
GDS:
ealdede[ab@raf]@r, hrtltp:/Ammry,ls4mfomnaLro
. Bflhlf,oteea uuTI!]D0R
detmfonmnatEed
Dflgltald SOR[N'':
hffip//unmro.Imfohlb-ro
o [ahoratorul & T[G:
VlrtualdelmformatleA
hffipllnah.Imfoblb.ro
DIGITALE
COMPETENTE

rr 0r081tff0rrrl
$tl
TEHNOLOGIA INFONMATIEI INFON[,!ATIEI
TETINOLOGIA c!ru Gtflll8
st A c0tvluNlcATllL0B $I A COMUNICATIILOB

::qw:\. ..

jiltlililtlttiluilttililil

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