Sie sind auf Seite 1von 68

Recapitulare pentru bacalaureat

1. ALGORITMI....................................................................................................................................3
1.1. Noiunea de algoritm. Caracteristici .............................................................................................3
1.. !ate" #ariabile" e$presii" operaii%.............................................................................................3
1.3. &tructuri de ba'( )liniar(" alternati#( si repetiti#(*%..................................................................+
1.,. !escrierea algoritmilor )programe pseudocod*%........................................................................-
. .lementele de ba'( ale unui limba/ de programare )0ascal*..........................................................1
.1 1ocabularul limba/ului.............................................................................................................1
. Constante. Identi2icatori...........................................................................................................1
.3 Noiunea de tip de dat(. Operatori aritmetici" logici" relaionali .............................................13
., !e2inirea tipurilor de date .......................................................................................................13
.+ 1ariabile. !eclararea #ariabilelor ............................................................................................13
.3 !e2inirea constantelor .............................................................................................................13
.4 &tructura programelor. Comentarii ..........................................................................................1,
.- .$presii. Instruciunea de atribuire ..........................................................................................1,
.5 Citirea6scrierea datelor .............................................................................................................1,
.17 &tructuri de control )instruciunea compus(" structuri alternati#e 8i repetiti#e* ....................1,
3.&ubprograme ...................................................................................................................................1+
3.1. &ubprograme. Mecanisme de trans2er prin intermediul parametrilor......................................1+
3.. 0roceduri si 2unctii prede2inite................................................................................................14
,. Tipuri structurate de date................................................................................................................1-
,.1 Tipul tablou........................................................................................................1-
,.. Tipul sir de caractere...............................................................................................................3
,.3. Tipul 9nregistrare )articol*.......................................................................................................+
+. :isiere te$t......................................................................................................................................3
+.1. :isiere te$t. Tipuri de acces...............................................................................................3
+.. 0roceduri si 2unctii prede2inite pentru 2isiere te$t ............................................................3
&inta$a de declarare%.....................................................................................................................3
0robleme%.....................................................................................................................................4
3. Algoritmi elementari......................................................................................................................5
3.1. 0robleme care operea'( asupra ci2relor unui num(r................................................5
.......................................................................................................................................................37
3.. !i#i'ibilitate. Numere prime. Algoritmul lui .uclid..............................................................37
3.3. &irul lui :ibonacci. Calculul unor sume cu termenul general dat...........................................33
3.,. !eterminare minim6ma$im.....................................................................................................3+
3.+. Metode de ordonare )metoda bulelor" inser;iei" selectiei" num(r(rii* ...................................33
3.3. Interclasare..............................................................................................................................,7
3.4. Metode de c(utare )sec#ential(" binar(*..................................................................................,1
3.- Anali'a comple$it(ii )consider<nd criteriile de e2icien( durata de e$ecutare 8i spaiu de
memorie utili'at*............................................................................................................................,3
163-
4. &ubprograme de2inite de utili'ator.................................................................................................,3
4.1 0roceduri 8i 2uncii...................................................................................................................,3
4. 0roiectarea modular( a re'ol#(rii unei probleme.....................................................................,4
-. Recursi#itate...................................................................................................................................,-
-.1 0re'entare general(...................................................................................................................,-
-. :uncii 8i proceduri recursi#e...................................................................................................,-
5. Metoda bac=trac=ing......................................................................................................................,5
5.1. 0re'entare general( .................................................................................................................,5
5.. 0robleme de generare. Oportunitatea utili'(rii metodei bac=trac=ing ...................................+
17. Generarea elementelor combinatoriale.........................................................................................++
17.1 0ermutari" aran/amente" combinari................................................................................++
17. 0rodusul carte'ian .&ubmultimi. .........................................................................................31
11.Gra2uri ..........................................................................................................................................3
11.1Gra2uri neorientate...................................................................................................................3
11.Gra2uri orientate......................................................................................................................3,
11.3Arbori......................................................................................................................................33
63-
1. ALGORITMI
1.1. Noiunea de algoritm. Caracteristici
0rin algoritm se 9nelege o mulime ordonat( 8i 2init( de reguli ce descriu o succesiune 2init( de
operaii necesare re'ol#(rii unei probleme.0a8ii algoritmului trebuie s(>i 2ie indicai calculatorului
sub 2orma unor comen'i numite instruciuni. Mulimea tuturor instruciunilor ce descriu algoritmul
de re'ol#are a unei probleme 2ormea'( programul. 0entru a dialoga cu un calculator" este necesar(
cunoa8terea unui limba/ comun omului 8i calculatorului.
Atenie? Care sunt deosebirile dintre un calculator de bu'unar 8i unul programabil@
.$emple de algoritmi%
>calcularea ariei unui triungAi)se cunosc a"b"c*B
>calcularea 9n(limilor unui triungAi )se cunosc a"b"c*B
>calcularea mediei unui ele#B
>re'ol#area ecuaiei de gradul I etc.
Caracteristici ale algoritmilor %
>generalitatea C proprietatea de a 2i #alabil pentru o clas( ) un gen* de problemeB )e$ nu aduna 3D,
ci aDb*
>2initudinea C proprietatea de a permite obinerea soluiei problemei dup( parcurgerea unui num(r
2init de operaii )contrae$emplu% ciclu in2init e$ repeat Erite)FGH* Buntil 3C, B*.
>unicitateaC proprietatea con2orm c(reia ori de c<te ori se porne8te de la acela8i set de #alori ale
#ariabilelor de intrare se obin acelea8i soluii.
Atenie?:iecare proprietate trebuie e$empli2icat( prin c(te un e$emplu 8i un contrae$emplu.
Atenie? !ac( un algoritm are aceste 3 propriet(i nu 9nseamn( c( el este 8i corect.
1.2. Date, aria!ile, e"#resii, o#eraii$
1. Date $
> Numerice
> Al2anumerice
> Logice
2. O#eratii $
> aritmetice
> relationale )I"J"IJ"IC"JC*
363-
> logice )booleene true" 2alse*
%. &"#resii
> Aritmetice
> relationale
> logice )si" sau" not*
Tabela de adevr a operatorului si:

K L K si L
:alse :alse :alse
:alse True :alse
True :alse :alse
True True True
Obser#atie% MsiH are #aloarea true doar daca ambii operan'i sunt true si 2alsa daca unul dintre ei este 2alse.
Tabela de adevar a operatorului sau:

K L K sau L
:alse :alse :alse
:alse True True
True :alse True
True True True

Obser#atie% MsauH are #aloarea 2alse doar daca ambii operan'i sunt 2alsi si true daca unul dintre ei este true.
Tabela de adevar a operatorului not

K not K
:alse True
True :alse
Operatorul KOR )sau e$clusi#*%
K L K $or L
:alse :alse :alse
,63-
:alse True True
True :alse True
True True :alse
Aplicatii %
Legile lui De Morgan
Not)p sau N*C not p si not N
Not )p si N*C not p sau not N
1.%. 'tructuri de !a() *liniar), alternati) si re#etiti)+$
1.1. &tructuri liniare
1.1.1. Citirea datelor
Citire
&inta$a %
Citeste)#1"#"O"#n* B
Pnde #1"O #nC #ariabile
.2ect % calculatorul asteapta introducerea de la tastatura a #alorii #ariabilelor #1"O" #n si da aceasta
#aloare )in memorie* #ariabilelor preci'ate
.$emplu % Citeste)a"b* CJ Memorie Q .cran
a
b 3 3
1.1.. &crierea e$presiilor
&inta$a % &crie)e1"e"O"en*B
Pnde e1"O"enCe$presii
.2ect% &e e#aluea'a)calculea'a* #aloarea e$presiilor din lista si re'ultatul se a2isea'a pe ecran.
.$emplu % &crie)a"b*B CJ .cran % 3
+63-
scrie)R este F" a*B CJ.cran% A este
OS& importanta% in sinta$a lui FcitesteHin lista nu pot sa apara e$presii. !e ce @ O
Atenie la 2ormatul de a2i8are)a%" a%n1%n*?
1.1.3. Atribuirea
&inta$a %
1 %C e$presie
&e citeste % T # ia #aloarea e$presie U
.2ect % &e e#aluea'a e$presia # si re'ultatul ii este dat )in memorie* lui #.
.$emple%
A %CaDb
S %CbDGa
CJ Memorie%O.
1.. &tructuri alternati#e %
1..1. Instructiunea I:
daca c atunci K alt2el L
unde cCconditie )e$presie logica* " K"LC cate o singura instructiune B
.2ect > se e#aluea'a c si daca este true se e$ecuta K B daca este 2alse se e$ecuta L B
> 0robleme%
G Intr>o sala de clasa sunt mese si scaune. &e cunoaste numarul lor. Care dintre acestea sunt mai
multe @ Cunoscand si numarul ele#ilor clasei si 2aptul ca la o masa pot sta 3 persoane a2isati daca %
a* sunt destule mese B
b* sunt destule scaune.
G &e cunosc + numereI17777. A2isati numarul de ci2re al acestora.
&crie) Vntrodu primul numarH* B
Citeste)a* B
!aca aI17 atunci scrie )Fnumarul are o ci2raH*
Alt2el daca aI177 atunci scrie)Fnumarul are ci2reH*
Alt2el daca aI1777 atunci scrie)Fnumarul are 3 ci2reH*
363-
Alt2el scrie )Fnumarul are , ci2re*B
&crie) Vntrodu un numarH* B
Citeste)b* B
!aca bI17 atunci scrie )Fnumarul are o ci2raH*
Alt2el daca bI177 atunci scrie)Fnumarul are ci2reH*
Alt2el daca bI1777 atunci scrie)Fnumarul are 3 ci2reH*
Alt2el scrie )Fnumarul are , ci2re*B
&crie) Vntrodu un numarH* B
Citeste)c* B
!aca cI17 atunci scrie )Fnumarul are o ci2raH*
Alt2el daca cI177 atunci scrie)Fnumarul are ci2reH*
Alt2el daca cI1777 atunci scrie)Fnumarul are 3 ci2reH*
Alt2el scrie )Fnumarul are , ci2re*B
&crie) Vntrodu un numarH* B
Citeste)d* B
!aca dI17 atunci scrie )Fnumarul are o ci2raH*
Alt2el daca dI177 atunci scrie)Fnumarul are ci2reH*
Alt2el daca dI1777 atunci scrie)Fnumarul are 3 ci2reH*
Alt2el scrie )Fnumarul are , ci2re*B
&crie) Vntrodu un numarH* B
Citeste)e* B
!aca eI17 atunci scrie )Fnumarul are o ci2raH*
Alt2el daca eI177 atunci scrie)Fnumarul are ci2reH*
Alt2el daca eI1777 atunci scrie)Fnumarul are 3 ci2reH*
Alt2el scrie )Fnumarul are , ci2re*B
!upa re'ol#area acestei probleme se simte ne#oia unei noi instructiuni% repeta.
1... Instructiunea Case
463-
&inta$a%
CA&. e O:
L1%I1B
L%IB
L3 %I3 B
O.
Welse InD1X
end B
eC e$presie cu re'ultat de tip ordinal B
L1"L"OLnC liste de #alori posibile ale e$presiei e )contin #alori sau6si inter#alle delimitate de "* B
I" I"OC cate o singura instructiuneB
.2ect% se e#aluea'a e$presia e si se cauta lista careia ii apartine #aloarea re'ultataB se #a e$ecuta
instructiunea corespun'atoare listei. !aca nu e gasita o ast2el de lista" se e$ecuta InD1" daca aceasta
e$itsta" alt2el se trece la urmatoarea instructiune.

&tructuri repetiti#e
1.3.1. Instructiunea R.0.AT
1.3.. Instructiunea YZIL.
1.3.3. Instructiunea :OR
1.3.,. 1eri2icari.
1.,. Descrierea algoritmilor *#rograme #seudocod+$
0rogramarea structurata a inceput la inceputul anilor 47. .ste un concept cu o importanta
2undamentala in scrierea algoritmilor. In general" algoritmii se eleborea'a prin utili'area e$clusi#a a
anumitor structuri )liniar" alternati#a" repetiti#a*. 0rin structura se intelege o anumita 2orma de
imbinare a operatiilor cu care lucrea'a algoritmii.
&tructuri de ba'(%
structurile liniar(
alternati#(
repetiti#(
!escrierea algoritmilor cu a/utorul scAemelor logice 8i 9n pseudocodB
&cAema logic( este repre'entarea gra2ic( a unui algoritm.

Slocurile necesare 9ntocmirii unei scAeme logice%
-63-
Slocul terminal [ pune 9n e#iden( 9nceputul 8i s2(r8itul unei scAeme logiceB spre deosebire de
celelalte" blocul terminal &TART" respecti# &TO0 pot s( apar( numai o singur( dat( 9ntr>o scAem(
logic(.
Slocul de intrare6ie8ire > pune 9n e#iden( in2ormaiile de intrare" respecti# ie8ire" precum 8i
momentul 8i locul 9n care acestea se e$ecut(B prin intermediul acestor blocuri are loc scAimbul de
in2ormaii dintre algoritmul propriu>'is 8i e$terior.
Slocul de calcul > pune 9n e#iden( operaiile aritmetice" precum 8i trans2erul de #alori 9ntre
di2eritele #ariabile utili'ate 9n algoritm.
Slocul de deci'ie > pune 9n e#iden( punctele de rami2icare ale algoritmului )9n 2uncie de anumite
condiii*.
Slocul de procedur( )2uncie* [ permite scrierea prescurtat( a unei sec#ene care e$ecut( o anumit(
2unciuneB
Slocul conector > pune 9n e#iden( nodurile )punctele de intersecie* unui algoritm
Modul de parcurgere al algoritmului )de trecere de la un bloc la altul* este indicat prin s(gei a#<nd
un singur #<r2.
!escrierea modular>structurat( a algoritmilor %
0entru ca un algoritm s( 2ie simplu" e2icient" intuiti#" u8or de #eri2icat 8i de'#oltat sau
corectat el trebuie reali'at ca o succesiune liniar( de module 2ormate din una sau mai multe
instruciuni" cu proprietatea c( au o singur( intrare 8i o singur( ie8ire. 0entru ca un modul s( aib( o
singur( intrare 8i o singur( ie8ire dispunem de trei structuri 2undamentale
>structuri liniareB
>structuri alternati#eB
>structuri repetiti#e B
'tructurile liniare- succesiuni de o#eraii ce se e"ecut) necondiionat .n ordinea dat).
'tructurile alternatie constau dintr/un !loc de deci(ie *c+ 0i dou) !locuri *a1+ 0i *a2+ care se
e"ecut) alternati, du#) cum contractul este ade)rat) sau 1als) *DA2N3+ 0i un !loc conector.
Obser#aie% a1 sau a pot s( 2ie #ide.
'tructurile re#etitie #ermit e1ectuarea uneia sau mai multor o#eraii de un num)r de ori
#4n) o condiie este .nde#linit). 'tructurile re#etitie #oart) 0i denumirea de structuri ciclice
sau cicluri.
A#anta/% scrierea programului poate 2i 2(cut( de mai multe persoane" modi2ic(rile se 2ac u8or.
0seudocod%
&tructuri liniare% citirea" scrierea" atribuirea" instruciunea compus(" instruciunea #id(.
&tructuri alternati#e% dac( )i2*" case )case*
&tructuri repetiti#e% repet( )repeat*" c<t\timp )EAile*" pentru )2or*.
563-



a+ 'tructuri liniare%
a1* citireaB
a* scriereaB
a3* atribuireaB
a,* instruciunea compus(B
a+* instruciunea #id(.
!+ 'tructuri alternatie$
b1* dac(B
c+ 'tructuri re#etitie$
c1* repet(B
c* cat timpB
c3* pentru.
A#licaii$
Ce #or tip(ri urm(toarele sec#ene de program %
1. readln)a"b"c* B
i2 aC1 tAen i2 bC tAen i2 cC3 tAen Eriteln)F3H* else Eriteln)FH* else Eriteln)F1* else
Eriteln)F7H* daca se citesc #alorile 1 3 3@
. readln)a"b"c*B
i2 aC1 tAen else i2 bC tAen else i2 cC3 tAen else Eriteln)F7H*
dac( se citesc #alorile 1 3@
3. readln)a"b"c* B
i2 )cIa* and not)aJCb* tAen c%CaDb
else i2 not)aJCc* and )cIb* tAen a%CcDb
else i2 )aIb* and )bIc* tAen a%CbDcB
Eriteln)a"b"c*HB
daca se citesc #alorile , - 3 @
,* readln)a"b* B
1763-
i2 aJCb tAen i2 bJ7 tAen begin a%CaDB b%Cb>aB end else b%Cb>,
else i2 aD JCb tAen b%C>b else a%CaDbB
Eriteln)a"b*B
dac( se citesc #alorile 7 1 @
+* b %C>1 B
repeat readln)a* B i2 bIa tAen b%CaB until aC7B
Eriteln)b*B
dac( se #or citi #alorile% ,">377775"33777 si 7.
3* $ %C4B 2or i %C1 to + do $ %C$D1 BEriteln)$*B
4* $%C1B EAile $IC17 do $%C$D1B Eriteln)$*B
-* $%C1B 2or I%C1 to do Erite)$*B EritelnB
5* $%C1BI%CB EAile IJC7 do begin Erite)$*B I%CI>1B endB
17* $%C1B 2or I%C1 to n do $%C$GnB pt nC+B
11* $%C1B 2or I%C1 to n do $%C$G17B
1* $%C17B 2or I%C1 to n do $%C$GIB
13* $%C1B I%C7B
1,* EAile IIn do $%C$G17BI%CID1B
1+* a%C7Bb%C1B i2 aC7 tAen i2 bC7 tAen Erite)]bC7]* else c%C>a6bB
13* a%C1Bb%C7B i2 aC7 tAen i2 bC7 tAen Erite)]bC7]* else c%C>a6bB
14* a%C7Bb%C7B i2 aC7 tAen i2 bC7 tAen Erite)]bC7]* else c%C>a6bB
1-* a%C4Bb%C1,B i2 aC7 tAen i2 bC7 tAen Erite)]bC7]* else c%C>a6bB
15* p%C1Bi%C1BEAile iI4 do i%CiD1Bp%CpGiB
7* p%C1Bi%C3BEAile iJ1 do begin p%CpGiBi%Ci>1B endB
1* p%C1Bi%C1Brepeat p%CpGiBi%CiD1B until iI3B
* p%C1Bn%CB2or i%C to n do p%CpGiB
3* #ar i"n%integerB begin n%C-B 2or i%C1 to n do n%Cn>1B end.
,* #ar $"^%cAarB begin $%C]$]B^%C$BEriteln)$"^*BEriteln)]$]"]^]*B $%C^B^%C]$]B
Eriteln)$"^*B end.
1163-
+* #ar $"^%cAarB begin $%C]$]B^%C]^]BEriteln)$"^*BEriteln)]$]"]^]*B $%C^B^%C]$]B
Eriteln)$"^*B end.
3* #ar i"/"=%integerB begin 2or i%C1 to do begin EritelnB 2or /%C1 to iGi
do begin 2or =%C1 to iD/ do Erite)]G]*B EritelnB endB endB end.
4* #ar i"/"=%integerB begin 2or i%C1 to do begin EritelnB 2or /%C1 to iDi
do begin 2or =%C1 to />i do Erite)]G]*B EritelnB endB endB end.
-* 1eri2icai% #ar $%integerB begin 2or $%C1 to 17 do case $ o2
1"3"+"4"5%Eriteln)]Impar ]"$*B ","17%Eriteln)]0ar ]"$*B end end.

2. &lementele de !a() ale unui lim!a5 de #rogramare *6ascal+
2.1 7oca!ularul lim!a5ului
&etul de caractere )al2abetul* %
> litere mari 8i mici ale al2abetului latin )caractere al2abetice* %a" b" c etc.
> ci2rele sistemului de numeraie 'ecimal )caractere numerice * 7"1""3"O5
> simbolurile D">"G"6"C"I.J")"*"_" etc numite caractere speciale
&eparatori de simboluri% spaiul 8i enter.
Comentariul %` a sau )G G*" caracterul de s2<r8it de linie )eol*" caracterul b B c separ(
instruciunile 8i declaraiile. 0oate s( lipseasc( 9naintea lui end.
2.2 Constante. Identi1icatori
Identi2icatorii desemnea'( nume de programe" constante" tipuri" #ariabile" 2uncii" proceduri"
parametri. 0rintr>un identi2icator 9nelegem un nume asociat unei constante" #ariabile" proceduri sau
2uncii. Pn identi2icator poate conine numai litere" ci2re" caracterul special d\c 8i trebuie s( 9nceap(
obligatoriu cu o liter(. .$emplu% A" S" #al\medie etc.
O categorie special( de identi2icatori este repre'entat( de cu#intele cAeie al limba/ului% program"
begin" until" to" doEnto etc.
Constante 9ntregi >cele cuprinse 9n W>343-" 3434X ..$ %13">+"34-"etc.
Constante reale sunt numere reale cuprinse 9ntre 3.,G17 la puterea >,3+ 8i 1.1G17 la puterea
,53.
Constantele caracter% orice limba/ de programare conine un set de caractere propriu. &etul de
caractere 2olosit de limba/ul 0ascal se nume8te setul A&CII 8i conine litere" ci2re 8i caractere
speciale.
Constante simbolice )desemnate prin identi2icatori* %
> identi2icatori introdu8i prin de2iniii de constanteB
> identi2icatorii constantelor unui tip enumerareB
> identi2icatorii standard true 8i 2alseB
> identi2icatorii nil 8i ma$intB
163-
2.% Noiunea de ti# de dat). O#eratori aritmetici, logici, relaionali
Tipul unei date de2ine8te mulimea #alorilor pe care le poate lua #ariabila" precum 8i mulimea
de operaii care pot 2i e2ectuate cu elementele mulimii respecti#e. .$% integer" boolean" real etc.
Operatori aritmetici% D" >" G" 6" di#" mod.
Operatori logici% and" or" $or" not.
Operatori relaionali% I" J" C" IC" JC" IJ.
2., De1inirea ti#urilor de date
T^pe nume\tipCtip B
Tipurile ordinale repre'int( mulimi 2inite 8i ordonate de #alori. 0utem s( ne re2erim la numarul de
ordine al unei #alori )cu 2uncia ord*" putem speci2ica elementul succesor ) cu 2uncia succ* sau cel
predecesor )cu 2uncia pred* al unui element dat.
> Tipuri simple standard% tipuri 9ntregi" real" boolean )logic*" cAar )++ caractere*.
Tipurile 9ntregi pot 2i% integer)>334-...3434*" Eord)7...3++3+*" sAortint)>1-...14*" b^te)7...++*"
longint)/.1,4.,-3.3,-....1,4.,-3.3,4*.
>Tipuri ordinale de2inite de utili'ator% enumerat 8i subdomeniu.
Tipul enumerare de2ine8te o mulime ordonat( de #alori% se enumer( un 8ir de identi2icatori care
desemnea'( #alorile posibile. 0rimul identi2icator desemnea'( cea mai mic( #aloare" cu num(rul de
ordine 'ero.
0oate 2i de2init ast2el% T^pe nume\tipC)idebti21"identi2"O."identi2n*B
1ariabilele de tip enumerare sunt declarate 9n seciunea #ar. .le pot lua una din #alorile
enumerate 9n list(. Operaiile ce se pot 2ace sunt % atribuirea" determinarea num(rului de ordine
)ord*" determinarea succesorului sau predecesorului)deter. succ. ultimului element sau pred.
primului elem. #a genera eroare*" comparaia )I"IC"J"JC"O*
>Tipul inter#al. :iind dat un tip ordinal" din acesta se poate genera un nou tip" numit tipul
inter#al. !e2iniia lui indic( #aloarea constant( cea mai mic( 8i cea mai mare din inter#al )9n sensul
num(rului de ordine* 8i cuprinde toate #alorile dintre ele. .$emple % ..4 sau FcH..H2H.
T^pe nume\tipC#aloarea\minima..#aloarea\ma$im(
Obs % #aloarea\minim(e#aloarea ma$im(. Nu este permis( de2inirea unui inter#al al tipului real"
deoarece acesta nu este un tip ordinal.
>Tipul 2i8ier)2%te$tB*B
>Tipuri structurate% tablouri unidimensionale)#ectori> e$% #ar #%arra^W1..177XB*" tablouri
bidimensionale )matrici e$%#ar m%arra^W1..177"1..177XB*" sir de caractere )e$% #%stringB*" articol )e$%
a%record
n%integerB endB*.
2.8 7aria!ile. Declararea aria!ilelor
&pre deosebire de constante" o #ariabil( este o dat( ale c(rei #alori se pot modi2ica la 2iecare
nou( e$ecuie a programului sau cAiar 9n timpul unei e$ecuii. Orice #ariabil( are asociat un anumit
tip.
O declaraie de #ariabil( asocia'( un nume 8i un tip unei locaii de memorie. :iecare #ariabil(
ce apare 9ntr>un program 0ascal trebuie s( 2ie declarat( 9n seciunea #ar 9n 2elul urm(tor %
1ar list(\de \identi2icatori1%tip1B
O.
list(\de \identi2icatorin%tipnB
Identi2icatorii din list( sunt desp(rii prin #irgul(.
2.9 De1inirea constantelor
1363-
fntr>un program 0ascal" constantele pot 2i utili'ate direct prin #aloare sau printr>un
identi2icator. Acest identi2icator se de2ine8te 9n partea de de2inire a constantelor. Ast2el" constanta
este utili'at( 9n locul #alorii sale" prin identi2icatorul s(u.
.$emplu% const piC3.1,1+.
Odat( stabilit( #aloarea identi2icatorului de constant(" aceasta nu se mai poate modi2ica prin
instruciuni ale programului.
A#anta/e ale utili'(rii constantelor% economie de memorie" modi2icarea simpl( a programelor"
claritate sporit( a programului.
2.: 'tructura #rogramelor. Comentarii
Wprogram numeBX `numele programuluia
Wuses OBX `OCbiblioteci de programea
Wconst ma$C7BX ` ma$C7 e un e$emplua
Wt^pe nume\tipCtip BX `tip e un tip de datea
W#ar list(\de \identi2icatori1%tip1BX
WsubprogrameX
begin
programul propriu>'isB`corpul programuluia
end.

WX>poate s( lipseasc(.
2.; &"#resii. Instruciunea de atri!uire
fn timpul e$ecuiei unui program" la 9nt<lnirea unei e$presii" calculatorul e#aluea'( e$presia
respecti#(" adic( 9n acel moment #ariabilele din componenta e$presiei au ni8te #alori" calculatorul
#a 9nlocui 9n e$presie #ariabilele cu #alorile lor 8i se #a obine #aloarea e$presiei.
fn cadrul e$presiilor aritmetice" logice 8i relaionale pot 2i utili'ate 2unciile standard )2uncii
declarate 9n unitul &L&T.M* urm(toare%
> 2uncii de trans2ormare% cAr" ord" trunc" roundB
> 2uncii matematice% int" 2rac" sin" cos" arctan" pi"sNrt"ln"e$p"abs"sNrB
> proceduri 8i 2uncii re2eritoare la #alori ordinale% succ" inc" pred" dec" oddB
.$ista , grupe de prioritate%
>Grupa 1 )prioritate ma$ima* % not" D )operator unar*" > )operator unar*B
>Grupa ) se mai numesc si operatori multiplicati#i*% and" G" 6" di#" mod B
>Grupa 3)se mai numesc si operatori aditi#i*% or" $or" D" > B
>Grupa , )cea mai mica prioritate si cuprinde operatorii relationali* % I"IC"J"JC"C"IJ.
Instruciunea de atribuire se 2ace in 2elul urmator % # %Ce$presie B`# este o #ariabil(a
2.< Citirea2scrierea datelor
Citirea datelor se reali'ea'( cu a/utorul instruciunii breadc. .$emplu% read)n*B.&e pot citi date
de la tastatur( sau dintr>un 2i8ier.
&crierea datelor se reali'ea'( cu a/utorul instruciunii bEritec. .$emplu%Erite)3*B. gi datele pot
2i scrise 9ntr>un 2i8ier.
`unde n este o #ariabil(a
2.1= 'tructuri de control *instruciunea com#us), structuri alternatie 0i
re#etitie+
1,63-
Liniare%
> citirea )read" e$% read)n*B*B
> scrierea )Erite" e$% Erite)n*B*B
> atribuirea )#%Ce$presie*B
> instruciunea #id(B
> instruciunea compus()begin `read)n*B Erite)n*Baend.*B
Alternati#e%
> dac( )i2" e$% i2 nC1 tAen n%CB*B
Repetiti#e%
> repet( )repeat" e$% n%C1
repeat n%CnD1B
until nC,B *B
> c<t timp )EAile" n%C1B
EAile nI+ do n%CnD1B *B
> pentru )2or" 2or n%C1 to , do Erite)n*B*.
`unde n este o #arialil(a
%.'u!#rograme
%.1. 'u!#rograme. Mecanisme de trans1er #rin intermediul #arametrilor
Definitie:
Subprogramul repre'inta parti identi2icabile prin nume care se pot acti#a la cerere prin
intermediul acestui nume.
O parte din subprogram se contruieste ca subprogram daca un algoritm cuprinde in mai multe
locuri aceiasi sec#enta de operatii e$ecutabila pentru aceleasi date sau pentru date di2erite.
In loc ca subprogramul sa cuprinda in acelasi loc" acelasi grup de instructiuni" concepand grupul
de intructiuni ca subprogram" el #a aparea in program o singura data si se #a acti#a de mai multe
ori. 0artea respecti#a de program re'ol#a o subproblema din cele in care se descompune problema
comple$a.
In limbajul Pascal" a#em doua tipuri de subprograme % #rocedurile si 1unctiile. !eosebirea intre
ele consta in numarul de #alori calculate si returnate programului apelat. 0rocedurile calculea'a mai
multe #alori sau nici una" iar 2unctiile returnea'a o singura #aloare asociata numelui 2unctiei. Atat
procedurile cat si 2unctiile pot 2i standard)prede2inite in unitul sistem*" cat si nestandard)de2inite de
utili'ator*. 0rocedurile si 2unctiile nestandard trebuie declarate obligatoriu inainte de a 2i apelate.
O declarare de subprograme%
>un antet de supbrogram care preci'ea'a inter2ata subprogramului cu mediul
>blocul subprogramului care descrie 2unctionarea lui interna
Domeniul de vizibilitate(valabilitate) al identificatorilor:
0rin domeniul de #i'ibilitate )#alabilitate* se intelege 'ona de program in care e #alabila
declararea sau de2inirea unui identi2icator.
Toti indenti2icatorii de2initi sau declarati intr>un bloc sunt cunoscuti in blocul respecti# si se
numesc aria!ile locale.
!aca blocul cuprinde blocuri incluse in care identi2icatorii )#ariabile locale ale acestora* nu se
de2inesc sau redenumesc" atunci acestea sunt cunoscute in blocurile incluse si se numesc aria!ile
glo!ale pentru acesta.
1+63-
!aca o #ariabila declarata intr>un bloc se rede2ineste atunci in blocul in care a 2ost redeclarata
#a 2i #ariabila atribuita generata la redeclarare.
A.6rocedurile
Declararea si apelul procedurilor.Parametrii formali si parametrii efectivi
Definitie:
Procedura este un subprogram care calculea'a mai multe #alori accesibile sau nu programului
apelant sau e2ectuea'a anumite operatii 2ara sa calcule'e #reo #aloare.
1alorile calculate accesibile programului apelant re#re(inta #arametrii de iesire ai
subprogramului. Acestia pot depinde de anumite #alori pe care subprogramul le primeste din
programul apelant" #alori repre'entand #arametrii de intrare.
6arametrii 1ormali sunt #ariabile simbolice in care lucrea'a subprogramul. .le sunt declarate in
antetul subprogramului si sunt cunoscute numai in interiorul subprogramului..
6arametrii e1ectii repre'inta #ariabilele cu care subprogramele lucrea'a e2ecti# in momentul
acti#arii.
La apelarea procedurii se speci2ica parametrii e2ecti#i sau actuali prin intermediul instructiunii
procedurale

Declararea procedurii:
0ROC.!PR. nume\procedura)lista parametrii*
>parametrii preci'ati la scrierea proedurii sunt parametrii 2ormali si se separa prin dBc
>pentru 2iecare parametru se preci'ea'a numele si tipul acestuia.
pelarea procedurii:
0entru a e$ecuta o procedura aceasta trebuia apelata. La apel se da numele procedurii si #alorile
concrete ale parametrilor care se separa prin punct si #irgula.
.$ % uses crtB
procedure citire)n %integer B = %cAar* B
begin
Eriteln)FIntrodu un numar si litera atribuita lui?H*B
read)n*B read)=*B
Eriteln)F0entru litera F"="H gasim ci2ra F"n"H.H*B
endB

begin
clrscrB
citire)n" =*B
end.
Cand se apelea'a o procedura" modulul apelant a abandonat temporar" si se e$ecuta procedura.
In timpul e$ecutiei procedurii" parametrii 2ormali sunt inlocuiti in tot corpul procedurii cu
parametrii actuali )#alori concrete*. !upa e$ecutarea procedurii se re#ine in modulul apelant la linia
imediat urmatoare celei care a 2acut apelul. 0arametrii 2ormali si parametrii e2ecti#i nu e obligatoriu
sa aiba acelasi nume dar trebuie sa e$iste o concordanta de numar" tip si ordine.
>.?unctiile
Declararea si apelul functiilor:
Definitie:
Functia este un subprogram care calculea'a si returnea'a programului apelant o singula #aloare.
1363-
Aceasta #aloare este asociata numelui 2unctiei. Iar tipul poate 2i simplu" string sau reper. 1aloarea
returnata de 2unctie nu poate a#ea alt tip structurat decat string.
Declararea unei functii:
:PNCTION nume\2unctie)lista parametrii 2ormali*% identi2icator de tipB
>nume\2unctie repre'inta numele 2unctiei" al carei tip este identi2icator de tip
>identi2icator de tip C nume de tip simplu% &TRING sau R.0.RB
Slocul 2unctiei trebuie sa contina obligatoriu o instructiune de atribuire prin care identi2icatorul
2unctiei primeste #aloarea unei e$presii.
Identi2icatorul 2unctiei nu are #oie sa apara in partea dreapta a unor atribuiri decat daca 2unctia
este recursia.
pelarea functeii:
> se intrerupe calculul e$presiei in care a aparul apelul 2unctiei B
> se transmit parametrii" daca e$ista" e$act ca la proceduri B
> se e$ecuta 2unctiaB
.$ % uses crtB
#ar a%integerB
b%realB
2unction 2)#ar $%real*B
begin
i2 $I7 tAen $%C>$B
$%C$G17B
$%C$ mod 17B
endB

begin
clrscrB
a%C1B
b%C3.,+34B
a%CaD2)b*B
Eriteln)aD2)b*D2)b**B
end.
%.2. 6roceduri si 1unctii #rede1inite
Definitie:
Procedurile si functiile predefinite sunt niste blocuri de instructiuni care au 2ost scrise de catre
autori ale limba/ului.
0entru a 2olosi o ast2el de procedura trebuie sa a#em e$ecutia adica sa o apelam.
.$. proceduri% > Erite
>Eriteln
&unt 2olosite pentru a2isarea unor date pe ecran.

:unctiile prede2inite sunt similare cu procedurile" dar in plus" in ca'ul unor e$ecutari" o 2unctie
intoarce o #aloare adica noi apelam 2unctia " ea se e$ecuta si la s2arsitul e$ecutiei ne da inapoi un
re'ultat.
.$% >ASC)K* returnea'a mod lui '
>&hR)K* returnea'a K
1463-
>&hRT)$* returnea'a radical K
,. Ti#uri structurate de date
,.1 Ti#ul ta!lou
Tipul tablou este tipul compus" care consta dintr>un numar 2i$ de componente" 2iecare
componenta a#<nd acelasi tip. La de2inirea tipului tablou trebuie preci'at at<t tipul componentelor" c<t
si tipul indicelui" care stabileste numarul componentelor tabloului .
1.1.1 Ti#ul arra@
&inta$a declararii%
Nume\tipC arra^ Wl1..lX o2 tipB
L1Climita in2erioara a #alorilor indicilorB
LClimita superioara a #alorilor indicilorB
l1"l de tip ordinalB
tipCtipul elementelor tabloului )tip oarecare*B
:iecare componenta a unei #ariabile de tip tablou poate 2i speci2icata prin numele #ariabilei
urmat de indice 9ncadrat 9ntre parante'e patrate )de e$. aW,X*.
!eoarece tip poate 2i de orice tip" el poate 2i tot un tip tablou. Ast2el de#ine posibila de2inirea
tipului tablou multidimensional.
>e$emple de siruriB
>e$emple de matrici )tablouri bidimensionale*B
>e$emple de tablouri tridimensionaleB
>citirea si a2isarea sirurilor" a matricilorB
&a se determine c<te elemente prime se a2la deasupra diagonalei secundare a unei matrice cu n $
n elemente naturale.
t^pe matrice Carra^ W1..177"1..177X o2 integerB
#ar 2%te$tB
1-63-
$"i"/"n"="t%integerB
a%matriceB
begin
assign )2"]date.in]*B reset)2*B
readln)2"n*B
t%C7B
2or i%C1 to n do
2or /%C1 to n do
read)2"aWi"/X*B
2or i%C1 to n do
begin
2or /%C1 to n do
Erite)aWi"/X%3*B
Eriteln
endB

2or i%C1 to n do
2or /%C1 to n>iD1 do
begin
$%C7B
2or =%C to aWi"/X>1 do
i2 aWi"/X mod = C7 tAen
$%C$D1 B
i2 $C7 tAen t%CtD1B
endB
Eriteln)]sunt] "t" ]numere prime]*B
end.

1563-
&e citeste de la tastatura o matrice de dimensiune n $ n. &puneti daca e$ista in matrice doua linii
sau doua coloane gemene )doua linii sunt gemene daca au aceleasi elemente" e#entual in alta ordine*
.$
NC3
1 1
, + 3
1 1
Liniile 1 si 3 sunt gemene

T^pe sirCarra^ W1..177X o2 integerB
matrice Carra^ W1..177X o2 sirB
#ar 2%te$tB
$"i"/"n"="t%integerB
da%booleanB
a%matriceB
procedure geamana)i"/%integerB#ar da%boolean*B
#ar b"c%sirBcc% integerB =%integerB sant%integerB
begin
`b%CaWiXBc%CaW/XBa
2or =%C1 to n do bW=X%CaWi"=XB
2or =%C1 to n do cW=X%CaW/"=XB
repeat
sant%C7B
2or =%C1 to n>1 do i2 bW=XJbW=D1X tAen
begin
cc%CbW=XBbW=X%CbW=D1XBbW=D1X%CccB
sant%C1B
endB
763-
until santC7B
repeat
sant%C7B
2or =%C1 to n>1 do i2 cW=XJcW=D1X tAen
begin
cc%CcW=XBcW=X%CcW=D1XBcW=D1X%CccB
sant%C1B
endB
until santC7B
sant%C7B
2or =%C1 to n do i2 bW=XIJ cW=X tAen sant%C1B
i2 santC7 tAen da%Ctrue
else da%C2alseB
endB
begin
assign )2"]date.in]*B reset)2*B
readln)2"n*B
t%C7B
2or i%C1 to n do
2or /%C1 to n do
read)2"aWi"/X*B
2or i%C1 to n do
begin
2or /%C1 to n do
Erite)aWi"/X%3*B
Eriteln
endB
2or i%C1 to n do
163-
2or /%CiD1 to n do
begin
geamana)i"i"da*B
i2 da tAen begin Eriteln)]e$istsa doua gemene]"i"] cu ]"/*B/%CnBi%CnBendB
endB
i2 not da tAen Eriteln)]nu e$ista gemene]*B

end.

Alte probleme asemanatoare %
1. 1eri2icati daca o #aloare 9ntreaga K" citita de la tastatura" se gaseste printre cele n elemente 9ntregi ale
unui #ector. .lementele #ectorului se #or citi de la tastatura 9n ordine crescatoare.
. &a se a2le cate elemente ma$ime are un sir dat cu n elemente.

3. &a se determine c<te elemente prime se a2la deasupra diagonalei principale a unei matrice cu n $ n
elemente naturale.
1. &e cunoaste un numar n si n numere citite de la tastatura. Calculati ma$imul lor.

program unuB
#ar 2%te$tB
maK"n"i%integerB
a%arra^ W1..177X o2 integerB
begin
Erite )]nC]*B readln)n*B
2or i %C1 to n do
begin
Erite)]aW]"i"]XC]*B
readln)aWiX*B
endB
63-
ma$%CaW1XB
2or i%C1 to n do
i2 aWiXJma$ tAen ma$%CaWiXB
Eriteln )]ma$ este]"MAK*B
ReadlnB
end.
,.2. Ti#ul sir de caractere
[ operatori" proceduri si 2unctii prede2inite pentru% citire" a2isare" concatenare"
c(utare" e$tragere" inserare" eliminare si con#ersii )sir I>J #aloare numeric(*
declararea%
#ar #%stringB
sau
#ar #%stringWlma$XB
lma$Cnum(rul ma$im de caractere al 8irului #B
Citirea unei #ariabile de tip string se 2ace cu read)#*" a2i8area ei cu Erite)#*. Caracterele din care
este 2ormat( #ariabila pot 2i prelucrate una c<te una )#W1X" #WX"O"#WnX*. Lungimea #ariabilei
)num(rul de caractere poate 2i a2lat cu a/utorul 2unciei lengtA)#*.
O#eratori, #roceduri si 1unctii #rede1inite #entru citire, a1isare, concatenare,
cautare, e"tragere, inserare, eliminare si conersii *sirA/B aloare numerica+
6os *1unction+
Caut( 9ntr>un string un substring.
!eclararea%
2unction 0os)&ubstr% &tringB &% &tring*% S^teB
.$emplu%
Eriteln)pos)HanaH" HioanaH*B CJ 3
Eriteln)pos)HAnaH" HioanaH*B CJ 7

Delete
gterge un substring dintr>un string.
!eclararea%
procedure !elete)#ar &% &tringB Inde$% IntegerB Count%Integer*B
.$emplu%
s%C HAna MariaH*B
delete)s"3"*B
Eriteln)s*B
CJ AnMaria
Concat *1unction+
Concatenea'( mai multe stringuri.
363-
!eclararea%
2unction Concat)s1 W" s"..." snX% &tring*% &tringB
Eriteln)concat)HanaHDHmariaH** CJ a2i8ea'( anamaria
Co#@ *1unction+
Returnea'( un substring dintr>un string.
!eclararea%
2unction Cop^)&% &tringB Inde$% IntegerB Count% Integer*% &tringB
e$.
s%Ccop^)Hana mariaH"3",*B
Eriteln)s*B CJ a ma
Insert *#rocedure+
Inserea'( un substring 9ntr>un string.
!eclararea%
procedure Insert)&ource% &tringB #ar &% &tringB Inde$% Integer*B
.$emplu% s%C Hana mariaHB
insert)HcorinaH"s",*B CJanacorina maria
LengtC *1unction+
Returnea'( num(rul de caractere pe care le conine un string.
!eclararea%
2unction LengtA)&% &tring*% IntegerB

3#Case *1unction+
Trans2orm( litera mic( 9n ma/uscul(.
!eclararea%
2unction PpCase)CA% CAar*% CAarB
e$.
s%C Hana mariaHB
sW1X%Cupcase)sW1X*B
Eriteln)s*B CJ Ana maria
6ro!leme$
1. &e citeste o propo'itie. .liminati din ea literele a"b"c.
Re'ol#are%
uses crtB
#ar s%stringB
begin
clrscrB
Eriteln)]Introduceti o propo'itie ]*B
readln)s*B
EAile pos)]a]"s*IJ7 do delete)s"pos)]a]"s*"1*B
EAile pos)]b]"s*IJ7 do delete)s"pos)]b]"s*"1*B
EAile pos)]c]"s*IJ7 do delete)s"pos)]c]"s*"1*B
EritelnB
Erite)s*B
end.
,63-
.!e la tastatura se citesc un numar n si n denumiri de orase. &crieti aceste nume sub 2orma% prima
litera mare" urmatoarele mici intr>un 2isier cu numele jrase.outH.
Re'ol#are%
uses crtB
#ar a%arra^W1..177X o2 stringB
s%stringB
n"i%integerB
2%te$tB
begin
clrscrB
Erite)]nC@]*B
readln)n*B
2or i%C1 to n do begin Eriteln)]Introduceti numele unui oras ]*B
readln)aWiX*B
endB
2or i%C1 to n do begin
s%CaWiXB
sW1X%Cupcase)sW1X*B
aWiX%CsB
endB
assign)2"]orase.out]*B
reErite)2* B
2or i%C1 to n do Eriteln)2"aWiX*B
close)2*B
end.
,.%. Ti#ul .nregistrare *articol+
Tipul 9nregistrare 2i$( > desemnea'( o structur( 2ormat( dintr>un num(r de component
numite c<mpuri.
In cadrul unui articol campurile pot 2i de di2erite tipuri" spre deosebire de #ectori unde
elementele au acelasi tip.
&inta$a%
1C record
l1%tip1B
l%tipB
l3%tip3B
O
ln%tipnB
endB
l1" l" l3" O ln C liste de c<mpuriB
tip1" tip" tip3"Otip n C tipurile c<mpurilor din listele l1" l" l3" Oln B
+63-
.$emplu%
a% recordB
se$" nume" culoareocAi% cAarB
A" g" #% integerB
casatorit% SooleanB
media% realB
endB
Tipul unui c<mp este oarecare" deci poate 2i tot articol si se pot de2ini tipuri imbricate.
Pn nume de c<mp trebuie sa 2ie unic numai 9n tipul articol 9n care a 2ost de2init. Pn c<mp al unei
#ariabile de tip articol este re2erit prin numele #ariabilei 8i numele c<mpului" separate printr>un
punct.
.$emplu%
read)a.nume*B
read )a.A" a.g" a.#*B
i2 a.# JC1- tAen Erite )F !A F*
else Erite )F NP F*B
,.%.1. Instruciunea DITE

YITZ c !O $
cC #ariabila de tip record
$C o singura instructiune
> .2ect% in instructiunea $ se adauga d c. c inaintea campurilor #ariabilei c
> .ste utili'ata pentru a usura scrierea ane#oioasa a cali2icarilor.
.$emplu%
#ar a% record
nume" prenume% stringW37XB
nota% integerB
endB
O
EitA a do begin
readln ) nume *B
readln ) prenume *B
readln ) nota *B
endB
8. ?isiere te"t
+.1. :isiere te$t. Tipuri de acces
+.. 0roceduri si 2unctii prede2inite pentru 2isiere te$t
'inta"a de declarare$
#ar2%te$tB unde #ar2C#ariabila de tip 2isier
363-
assign)#ar2"nume2is*B unde nume2isC nume real al 2isieruluiB
&1ect% atasea'a #ariabilei #ar2 2isierul cu numele nume2is
reset)#ar2*B >descAide pentru citire 2isierul #ar2B
reErite)#ar2*B >descAide pentru scriere 2isierul #ar2B
read)#ar2"#1"O#n*B /citeste din 2isierul #ar2 #alorile #1"O#nB
readln)#ar2"#1"O#n*B /citeste din 2isierul #ar2 #alorile #1"O#n si trece apoi la linie nouaB
Erite)#ar2"e1"O"en*B /scrie in 2isierul #ar2 #alorile e$presiilor e1"Oen
Eriteln)#ar2"e1"O"en*B /scrie in 2isierul #ar2 #alorile e$presiilor e1"Oen si apoi trece la linie nouaB
Eriteln)#ar2*B /trece la linie noua in 2isierul #ar2B
close)#ar2*B /incAide 2isierul #ar2.
O!seratie im#ortanta% din 2isierele descAise pentru citire se poate doar citi" iar in cele
descAise pentru rescriere se poate doar scrie.
6ro!leme$

1. :ie programul%
1ar a"b"c"d%integerB2%te$tB
Segin
Assign)2"Hdate.inH*Breset)2*B
Readln)2"a"b*Bread)2"c*Bread)2"d*B
Close )2*B
Yrite)a*BEriteln)b*BEriteln)c"d*B.nd.
Ce se #a a2isa pe ecran daca%
a* 2isierul contine%
3 ,
463-
+ 3
4 -
b* 2isierul contine%

,
3 4 - 5
. :ie programul%

1ar a"b"c"d%integerB2%te$tB
Segin
Assign)2"Ha%kdate.inH*BreErite)2*B
Readln)a"b*Bread)c*Bread)d*B
Yrite)2"a*BEriteln)2"b*BEriteln)c*BEriteln)2"d*B Close )2*B.nd.
Ce #a contine 2isierul daca se dau numerele urmatoare@ Pnde #a 2i el sal#at@
a*
3 ,
+ 3
4 -
b*

,
3 4 - 5
-63-
9. Algoritmi elementari
9.1. 6ro!leme care o#erea() asu#ra ci1relor unui num)r
1. !e la tastatura se cite8te un numar natural n .A2i8ai ultima ci2r( a num(rului.
&e obser#( c(%> ucC ultima ci2r( a num(ruluiB
> n di# 17 Cnum(rul 2(r( ultima ci2r(
uses crtB
#ar n"uc%integerB
p%integerB
begin
clrscrB
read)n*B
uc%Cn mod 17B
n%Cn di# 17B
Eriteln)]ultima ci2ra este]"uc*B
end.
. &criei un program pascal care calculea'( 8i a2i8ea'( suma ci2relor pare ale unui num(r natural.
uses crtB
#ar n"uc"s%integerB
p%integerB
begin
clrscrB
read)n*B
s%C7B
repeat
uc%Cn mod 17B
i2 uc mod C7 tAen s%CsDucB
n%Cn di# 17B
until nC7B
Eriteln)]&uma ci2relor pare este]"s*B
end.
3.&criei un pascal care calculea'( cea mai mare 8i cea mai mic( ci2r( a unui num(r natural dat.
uses crtB
#ar n"ma$"uc"min%integerB
begin
clrscrB
read)n*B
ma$%C7Bmin%C17B
repeat
uc%Cn mod 17B
i2 ucJma$ tAen ma$%CucB
i2 ucImin tAen min%CucB
n%Cn di# 17B
until nC7B
Eriteln)]cea mai mare ci2ra este]"ma$*B
Eriteln)]cea mai mica ci2ra este]"min*B
563-
end.
,.&e cunosc dou( numere.A2lai suma ci2relor lor.
uses crtB
#ar a "b"uc1"uc"s"s1"s%integerB
p%integerB
begin
clrscrB
read)a*B
read)b*B
s1%C7Bs%C7B
repeat
uc1%Ca mod 17B
s1%Cs1Duc1B
a%Ca di# 17B
until aC7B
repeat
uc%Cb mod 17B
s%CsDucB
b%Cb di# 17B
until bC7B
s%Cs1DsB
Eriteln)]&uma celor doua numere este]"s*B
end.

9.2. Dii(i!ilitate. Numere #rime. Algoritmul lui &uclid
&punem c( num(rul natural a se di#ide cu d"dac( e$ist( un nr.c" ast2el 9nc<t aCd$c.
.$%37 se di#ide cu nr.+" pentru ca e$ist( un nr.3"ast2el 9nc<t 37C+$3.
!ac( d6a"atunci d se nume8te di#i'or al lui a 8i a se nume8te multiplu al lui d.
!i#i'ori proprii 8i improprii
Orice nr.este di#i'ibil prin 1 8i prin el 9nsu8i.Nr.1 8i nr. 9nsu8i se numesc di#i'ori improprii.Ceilali
di#i'ori ai nr. se numesc di#i'ori proprii.
.$%!3C`1BB3B3a
1.&criei un program pascal care calculea'( 8i a2i8ea'( produsul ci2relor di#i'ibile cu + ale unui
num(r natural.
uses crtB
#ar n"uc%integerB
p%integerB
begin
clrscrB
read)n*B
p%C1B
repeat
uc%Cn mod 17B
i2 uc mod +C7 tAen p%CpGucB
3763-
n%Cn di# 17B
until nC7B
Eriteln)]produsul ci2relor di#i'ibile cu + este]"p*B
end.
.1eri2icai dac( un num(r dat este per2ect. Pn num(r este per2ect dac( este egal cu suma
di#i'orilor s(i)e$clusi# el*.
.$% 3C1DD3B
uses crtB
#ar i"s"n%longintB
begin
clrscrB
read)n*B
`+,a
i%C1Bs%C7B
repeat
i2 n mod iC7 tAen s%CsDiB
i%CiD1B
until iCnB
i2 sCn tAen Eriteln)]NuaCmarul este per2ect]*
else Eriteln)]Numarul nu este per2ect]*B
end.
3. Calculai cel mai mare di#i'or a numere naturale citite de la tastatur(.
Metoda 1%
uses crtB
#ar a"b"i "min"$%integerB
begin
clrscrB
read)a"b*B
i2 aICb tAen min%Ca
else
min%CbB
2or i%C1 to min do
i2 )a mod iC7* and )b mod iC7* tAen $%CiB
Eriteln)]cel mai mare di#i'or comun este]"$*B
end.

Numim num)r #rim orice nr.nat.mai mare dec<t 1"care are numai di#i'ori improprii.Nr.prime
sunt%B3B+B4B11B13B14B15B3B5B31...
Obs.%&ingurul nr.prim 8i par este .
0entru a a2la daca un numar este prim sau nu" 9l descompunem 9n 2actori primi"adica 9l 9mp(rim la
toate nr.prime cu care este di#i'ibil. !ac( este di#i'ibil doar cu 1 si cu el 9nsu8i"atunci nr. este prim.
Nr. prime 9ntre ele
!ou( numere care au cel mai mare di#i'or comun 1"se numesc numere prime 9ntre ele.
Obs.%dac( a 8i b sunt prime 9ntre ele" scriem%)aBb*C1
0roprietate%!ou( numere consecuti#e sunt prime 9ntre ele.
1. &e cite8te un num(r de la tastatur(. .ste el prim@
3163-
uses crtB
#ar n"i"=%integerB
begin
clrscrB
read)n*B
=%C7B
2or i%C to n>1 do
i2 n mod iC7 tAen =%C=D1B
i2 =C7 tAen Eriteln)]Numarul este prim]*
else Eriteln)]Numarul nu este prim]*B
end.
.!escompunerea unui numar natural 9n dou( numere naturale prime distincte 9ntre ele.
uses crtB
#ar ="n"a"d"/"b"i%integerB
begin
clrscrB
read)n*B
=%C7B
2or i%C to n di# do
begin
`#eri2icam daca i este prima
a%C7B
2or /%C to i>1 do
i2 i mod / C7 tAen a%C1 B
i2 aC7 tAen
begin
b%Cn>iB
`#eri2icam daca b este prima
d%C7B
2or /%C to b>1 do
i2 b mod /C7 tAen d%C1 B
i2 dC7 tAen i2 iIJb tAen begin
Eriteln)i"] ]"b*B
=%C1B
endB
endB
endB
i2 =C7 tAen Erite)]nu e$ista solutie]*B
end.

Algoritmul lui &uclid este o metod( e2icient( de calcul al celui mai mare di#i'or
comun)CMM!C*.
CMM!C al dou( numere este cel mai mare num(r care le di#ide pe ambele. Algoritmul lui .uclid
se ba'ea'( pe principiul c( cel mai mare di#i'or comun al dou( numere nu se modi2ic( dac(
num(rul cel mai mic este sc('ut din cel mai mare. !e e$emplu" 1 este CMM!C al numerelor +
8i 17+ )+ C 1 l 1B 17+ C 1 l +*B 9ntruc<t + m 17+ C 1,4" CMM!C al lui 1,4 8i 17+ este tot
1. Cum cel mai mare dintre cele dou( numere este redus" repetarea acestui proces d( numere din ce
9n ce mai mici" p<n( c<nd unul dintre ele este 7. C<nd se 9nt<mpl( aceasta" CMM!C este cel(lalt
363-
num(r" cel nenul. In#ers<nd pa8ii algoritmului lui .uclid" CMM!C se poate e$prima sub 2orm( de
celor dou( numere iniiale" 2iecare 9nmulite cu un 9ntreg po'iti# sau negati#" de e$emplu% 1 C + l
17+ D )m* l +.
Algoritmul lui .uclid calculea'( e2icient CMM!C a dou( numere oric<t de mari sunt" deoarece
nu necesit( niciodat( mai mult dec<t de cinci ori num(rul de ci2re )9n ba'( 17* al celui mai mic
9ntreg.
.$emple%
- - % ,5C7 rest -
,5 ,5 % -C1 rest 1
- % 1C1 rest 4
1 % 4 C3 rest 7
d.cC 4)ultimul rest n 7*
a b c
33 % ,C 7 rest 33
b c
, % 33C 1 rest 3
33 % 3C 3 rest 7
d.cC 3
, , % 14C 1 rest 4
14 14 % 4C rest 3
4 % 3C rest 1
3 % 1C3 rest 7
d.cC1
1. Calculai cel mai mare di#i'or comun si cel mai mic multiplu comun a numere naturale citite de
la tastatur(.
Metoda II%
uses crtB
#ar a"b"i "min"$"c"cmmmc"cmmdc"p%integerB
begin
clrscrB
read)a"b*B
repeat
c%Ca mod bB
a%CbB
b%CcB
until cC7B
cmmdc%CaB
p%CaGbB
cmmmc%Cp di# cmmdcB
Eriteln)]cel mai mic multiplu comun este]"cmmmc*B
Eriteln)]cel mai mare di#i'or comun este]"cmmdc*B
end.
9.%. 'irul lui ?i!onacci. Calculul unor sume cu termenul general dat
Firul lui ?i!onacci este o sec#en( de numere 9n care 2iecare num(r se obine din suma
precedentelor dou( din 8ir. Ast2el" primele 17 numere ale 8irului lui :ibonacci sunt%
7" 1" 1" " 3" +" -" 13" 1" 3," ++" ...
)primele numere sunt prede2inite" iar restul se obin 9n mod recursi#" din suma precedentelor dou(%
3 C D 1" + C 3 D ...*
3363-
A2i8ai primii n termeni ai 8irului lui :ibonacci%
uses crtB
#ar a"b"c"i"n%integerB
begin clrscrB
a%C7B
b%C1B
Eriteln)]Cate elemente din sirul lui :ibonacci doriti sa 2ie a2isate@]*B
read)n*B
Erite)a"] ]"b*B
2or i%C3 to n do begin c%CaDbB
Erite)] ]"c*B
a%CbB
b%CcB
endB
end.
!ate de intrare% nC17
!ate de ie8ire% 7" 1" 1" " 3" +" -" 13" 1" 3,
0entru un num(r natural n dat s( se calcule'e e$presia%
&C 1oD ,oD 4oD OD )3n>*o
uses crtB
#ar a%arra^W1..177X o2 longintB
n"i"s%integerB
begin clrscrB
Eriteln)]Care este #aloarea lui n@]*B
3,63-
read)n*B
2or i%C1 to n do aWiX%C)3Gi>*G)3Gi>*B
s%C7B
2or i%C1 to n do s%CsDaWiXB
Eriteln)]1aloarea e$presiei s este%]"s*B
end.
!ate de intrare% nC 17
!ate de ie8ire% sC -,+
9.,. Determinare minim2ma"im
&e d( un #ector cu n elemente citite de la tastatur(. Calculai ma$imul si minimul elementelor din
#ector.(
program minma$B
#ar a%arra^W1..177X o2 integerB
n"i"min"ma$%integerB
begin
Eriteln)]Cate elemente are #ectorul@]*B
read)n*B
Eriteln)]Introduceti elementele #ectorului?]*B
2or i%C1 to n do
read)aWiX*B
min%CaW1XB
ma$%CaW1XB
2or i%C1 to n do
begin
i2 aWiXJma$ tAen ma$%CaWiXB
i2 aWiXImin tAen min%CaWiXB
3+63-
endB
Eriteln)]Ma$imul elementelor din #ector este ]"ma$"] iar minimul este ]"min"].]*B
end.
9.8. Metode de ordonare *metoda !ulelor, inserGiei, selectiei, num)r)rii+
0rin metoda !ulelor se #eri2ic( dou( c<te dou( toate elementele din #ector 8i dac( nu
sunt ordonate corespun'ator le interscAimb(m.
.$% , p 3 p 3 p 3 p
3 , , 3
+ + 3 3
3 3 , ,
3 + + +
3 3 3 3 3
4 4 4 4 4
- - - - -
0entru a ordona cresc(tor un #ector cu n elemente 2olosim programul urmator%
uses crtB
#ar a%arra^W1..177X o2 integerB
c"n"i%integerB
o=%booleanB
begin clrscrB
Erite)]Cate elemente sunt in #ector@]*B
read)n*B
Eriteln)]Introduceti elementele #ectorului]*B
2or i%C1 to n do read)aWiX*B
Eriteln)]1ectorul neordonat este%]*B
EritelnB
2or i%C1 to n do Erite)aWiX"] ]*B
repeat
3363-
o=%CtrueB
2or i%C1 to n>1 do i2 aWiXJaWiD1X tAen begin
c%CaWiXB
aWiX%CaWiD1XB
aWiD1X%CcB
o=%C2alseB
endB
until o=CtrueB
EritelnB
Eriteln)]1ectorul ordonat este%]*B
2or i%C1 to n do Erite)aWiX"] ]*B
end.
'ortarea #rin inserie seam(n( oarecum cu sortarea prin selecie. Tabloul este 9mp(rit
imaginar 9n dou( p(ri> o parte sortat( 8i o parte nesortat(. La 9nceput" partea sortat( conine primul
element al tabloului 8i partea nesortat( conine restul tabloului. La 2iecare pas" algoritmul ia primul
element din partea nesortat( 8i 9l inserea'( 9n locul potri#it al p(rii sortate. C<nd partea nesortat( nu
mai are niciun element" algoritmul se opre8te.
.$% &( ordon(m #ectorul% 4" >+" " 13" , 2olosind sortarea prin inserie.
4" >+" " 13" , nesortat
4" >+" " 13" , >+ #a 2i inserat 4 J >+ " scAimb(m
>+" 4" " 13" , #a 2i inserat 4 J " scAimb(m
>+" " 4" 13" , >+ I " ram<ne pe loc
>+" " 4" 13" , 13 #a 2i inserat" 4 I 13" 13 ram<ne pe loc
>+" " 4" 13" , , #a 2i inserat" , I 13" scAimb(m
>+" " 4" ," 13 , I 4 " scAimb(m
>+" " ," 4" 13 ordonat
0entru a ordona cresc(tor un #ector cu n elemente 2olosim programul urmator%
uses crtB
#ar a%arra^W1..177X o2 integerB
i"/"n"$"=%integerB
begin clrscrB
Eriteln)]Cate numere sunt in #ector@]* B
read)n*B
3463-
2or i%C1 to n do read)aWiX*B
/%C1B
repeat /%C/D1B
2or i%C1 to / do i2 aW/XIaWiX tAen begin
$%CaW/XB
2or =%C/ doEnto iD1 do aW=X%CaW=>1XB
aWiX%C$B
i%C/B
endB
until /CnB
Eriteln)]1ectorul ordonat este%]*B
2or i%C1 to n do Erite)aWiX*B
end.
Ordonarea #rin selecie *metoda munimului+. 1ectorul este 9mp(rit 9n dou( p(ri
imaginare> o parte sortat( 8i o parte nesortat(. La 9nceput" partea sortata este goal(" 9n timp ce partea
nesortat( conine 9ntreg tabloul. La 2iecare pas" algoritmul g(se8te elementul minim din partea
nesortat( 8i 9l adaug( la 2inalul p(rii sortate. C<nd partea nesortat( r(m<ne goal(" algoritmul se
opre8te.
.$% &( ordon(m #ectorul% +" 1" 1" >+" 13" " 1" 1, utili'<nd sortarea prin selecie.
+" 1" 1" >+" 13" " 1" 1, nesortat
+" 1" 1" >+" 13" " 1" 1, interscAimb(m + cu >+ )partea sortata este > +" partea nesortat( este 1" 1"
+" 13" " 1" 1,*
>+" 1" 1" +" 13" " 1" 1, 1 r(m<ne pe po'iie )partea sortat( este >+" 1" partea nesortat( este 1" +"
13" " 1" 1,*
>+" 1" 1" +" 13" " 1" 1, interscAimb(m cu 1 )partea sortat( este >+" 1" " partea nesortat( este +"
13" 1" 1" 1,*
>+" 1" " +" 13" 1" 1" 1, + r(m<ne pe po'iie )partea sortat( este >+" 1" " +" partea nesortat( este 13"
1" 1" 1,*
>+" 1" " +" 13" 1" 1" 1, interscAimb(m 13 cu 1 )partea sortat( >+" 1" " +" 1 "1" partea nesortat(
13" 1,*
>+" 1" " +" 1" 1" 13" 1, interscAimb(m 13 cu 1, )a/ungem la partea sortat( >+" 1" " +" 1" 1" 1,"
13 8i partea nesortat( este goal(" algoritmul se opre8te*
>+" 1" " +" 1" 1" 1," 13 sortat
uses crtB
#ar a%arra^W1..177X o2 integerB
i"n"/"c"po'"min%integerB
3-63-
begin clrscrB
Erite)]Cate elemente sunt in #ector@]*B
read)n*B
Eriteln)]Introduceti elementele]*B
2or i%C1 to n do read)aWiX*B
2or i%C1 to n do begin
min%CaWiXB
po'%CiB
2or /%Ci to n do i2 minJaW/X tAen begin
min%CaW/XB
po'%C/B
endB
i2 aWpo'XIJaWiX tAen begin
c%Cpo'B
aWpo'X%CaWiXB
aWiX%CcB
endB
endB
Eriteln)]1ectorul ordonat este%]*B
2or i%C1 to n do Erite)aWiX"] ]*B
end.
Metoda de sortare #rin num)rare const( 9n construirea unui nou #ector care are aceea8i
dimensiune ca 8i #ectorul iniial. 1om anali'a 2iecare element din primul #ector 8i 9l #om
compara cu 2iecare alt element din 8ir pentru a putea reine 9n al doilea #ector num(rul
elementelor care sunt mai mici dec<t elementul considerat" ast2el #om a2la po'iia pe care trebuie
s(>l punem pe acesta.
0rogramul 0ascal de ordonare%
uses crtB
#ar a"b"c%arra^W1..177X o2 integerB
3563-
="i"$"n%integerB
begin clrscrB
Erite)]Cate elemente sunt in #ector@]*B
read)n*B
Eriteln)]Introduceti elementele #ectorului]*B
2or i%C1 to n do read)aWiX*B
=%C7B
repeat
=%C=D1B
$%C7B
2or i%C1 to n do
i2 aW=XJaWiX tAen $%C$D1B
bW=X%C$B
until =CnB
2or i%C1 to n do bWiX%CbWiXD1B
$%C7B
repeat
$%C$D1B
2or i%C1 to n do i2 bWiXC$ tAen cW$X%CaWiXB
until $CnB
EritelnB
Eriteln)]1ectorul ordonat este%]*B
2or i%C1 to n do Erite)cWiX"] ]*B
end.
9.9. Interclasare
Interclasarea a #ectori sortati de/a crescator" intr>un al treila #ector ast2el incat acesta sa ramana
tot sortat.
#ar a"b"c%arra^W1..7X o2 integerB
,763-
i"n"/"="$"^"m%integerB
begin
Erite)]mC]*Breadln)m*B
2or i%C1 to m do
begin
Erite)]aW]"i"]XC]*B
readln)aWiX*B
endB
Erite)]nC]*Breadln)n*B
2or i%C1 to n do
begin
Erite)]bW]"i"]XC]*B
readln)bWiX*B
endB
i%C1B /%C1B =%C1B
EAile )iICm* and )/ICn* do
begin
i2 aWiXIbW/X tAen
begin
cW=X%CaWiXB
i%CiD1B
end
else
begin
cW=X%CbW/XB
/%C/D1B
endB
=%C=D1B
endB
i2 iICm tAen 2or $%Ci to m do
begin
cW=X%CaW$XB
=%C=D1B
endB
i2 /ICn tAen 2or ^%C/ to n do
begin
cW=X%CaW^XB
=%C=D1B
endB
2or i%C1 to n do Erite)cWiX"] ]*B
readlnB
end.
9.:. Metode de c)utare *secential), !inar)+
C(utarea sec#enial( are a#anta/e 8i de'a#anta/e. Pnul din a#anta/ele caut(rii sec#eniale il
repre'inta 2aptul c( #ectorul nu trebuie ordonat cresc(tor pentru a putea gasi numarul c(utat. Pn
de'a#anta/ il repre'inta num(rul de operaii mari care trebuie e22ectuate pentru c(utarea numarului
in ca'ul in care #ectorul ar a#ea dimensiuni mari iar numarul ar 2i situat la s2arsitul acestuia.

!e la tastatur( se citeste un #ector de n elemente 8i un num(r m. A2lai dac( num(rul se g(seste in
#ector si a2isai un mesa/ corespun'ator.
,163-
#ar a%arra^W1..177X o2 integerB
n"i"m%integerBo=%booleanB
begin
Eriteln)]Cate elemente are #ectorul@]*B
read)n*B
Eriteln)]Introduceti elementele #ectorului?]*B
2or i%C1 to n do
read)aWiX*B
Eriteln)]Care este numarul pe care il cautati@]*B
read)m*B
o=%C2alseB
2or i%C1 to n do
i2 aWiXCm tAen o=%CtrueB
i2 o= tAen Eriteln)]Numarul cautat de dumnea#oastra a 2ost gasit?]*
else Eriteln)]Numarul cautat de dumnea#oastra nu a 2ost gasit?]*B
end.
Cautarea binar(. 0entru a a2lat dac( un num(r se gaseste sau nu intr>un #ector 2olosind
metoda cautarii binare #ectorul trebuie ordonat crescator.
!e la tastatur( se citeste un #ector cu n elemente ordonate cresc(tor 8i un numar m. A2lai dac(
num(rul se a2la in #ector 8i a2isai un mesa/ corespun'ator.
uses crtB
#ar a%arra^W1..177X o2 integerB
n"i"m"c"p%integerBo=%booleanB
2unction po')i"/"m%integer*%integerB
#ar mi/l%integerB
begin
i2 iC/ tAen i2 aWiXCm tAen po'%Ci
else po'%C7
,63-
else begin
mi/l%C)iD/* di# B
i2 mIaWmi/lX tAen po'%Cpo')i"mi/l"m*
else i2 aWmi/lXCm tAen po'%Cmi/l
else po'%Cpo')mi/lD1"/"m*B
endB
endB
begin
clrscrB
Eriteln)]Cate elemente are #ectorul@]*B
read)n*B
Eriteln)]Introduceti elementele #ectorului?]*B
2or i%C1 to n do
read)aWiX*B
Eriteln)]Care este numarul pe care il cautati@]*B
read)m*B
p%Cpo')1"n"m*B
i2 pC7 tAen Eriteln)]Nr. cautat nu se gaseste in #ector.]*
else Eriteln)]Nr cautat se gaseste in #ector.]*B
end.
9.; Anali(a com#le"it)ii *consider4nd criteriile de e1icien) durata de e"ecutare
0i s#aiu de memorie utili(at+
:. 'u!#rograme de1inite de utili(ator
:.1 6roceduri 0i 1uncii
&crierea programului se 2ace mult mai u8or dac( 9mp(rim problema 9n subprobleme relati#
independente" pentru 2iecare din ele scriindu>se programe mult mai simple. !e alt2el" reali'area unui
program de comple$itate mare impune organi'area unor date 8i a aciunilor la care acestea trebuie
supuse sub 2orm( de subprograme.
&ubprogramele limba/ului 0ascal sunt de dou( tipuri%
,363-
#roceduri
1uncii.
!i2erena dintre ele const( 9n num(rul #alorilor calculate 8i returnate programului apelant.
At<t procedurile c<t 8i 2unciile pot 2i de dou( tipuri%
standard *#rede1inite+H
nestandard *declarate .n #rogram+.
0rocedurile 8i 2unciile nestandard trebuie obligatoriu declarate 9nainte de a 2i apelate. In ca'ul
general" un program 0ascal e 2ormat dintr>un program principal 8i dintr>un num(r oarecare de
proceduri 8i 2uncii apelabile din programul principal sau unele din altele.
Declarare 0i a#el
!eclararea unei proceduri%
#rocedure numeI*IarJ l1$ti#1IHIarJ l2$ti#2K.J+JH
l1" l"..." ln C lista parametrilor 2ormali.
Apelul unei proceduri%
nume *la1,la2,K,lan+H
la1"O"lan C lista parametrilor e2ecti#i )actuali*.
!eclararea unei 2uncii%
1unction numeI*IarJ l1$ti#1IHIarJ l2$ti#2K.J+Jti#H
l1" l"..." ln C lista parametrilor 2ormali.
Apelul unei 2uncii%
nume*la1,la2,...,lan+H
la1"O"lan C lista parametrilor e2ecti#i )actuali*.
parametrii actuali 8i cei 2ormali trebuie s( corespund( 9n num(r" tip 8i ordineB
dac( lista parametrilor 2ormali este #id(" atunci sau nu e$ist( scAimb de in2ormaii cu restul
programului" sau scAimbul se e$ecut( prin intermediul aria!ilelor glo!aleB
spre deosebire de proceduri" 2unciile returnea'( ele 9nsele un re'ultat. fn cadrul de2inirii
2unciei" numele 2unciei poate ap(rea 9n st<nga semnului egal. Pltima apariie de acest 2el
returnea'( re'ultatul 2unciei. :uncia poate 2i apelat( 9n cadrul unor e$presii )Erite"
atribuire* 9n cadrul programului apelant.
Clasi2icarea parametrilor unei proceduri%
a* !up( tipul parametrilor%
parametrii actualiB
parametrii 2ormali.
b* !up( modul de transmitere%
,,63-
parametrii transmi8i prin #aloare %
> sublista lor nu este precedat( de nici un cu#<nt cAeie )1AR*B
> ace8ti parametri pot 2i modi2icai 9n corpul procedurii dar #alorile noi nu se
transmit c(tre blocul apelant" ei sunt doar parametri de intrareB
> sunt asemanatori unor constante )9si pot modi2ica #aloarea 9n timpul e$ecuiei
procedurii" dar re#in la #aloarea anterioar( la ieirea din e$ecuia procedurii*B
parametri transmi8i prin re2erin(%
> sublista lor este precedat( de cu#<ntul cAeie 1AR" iar parametri actuali sunt
#ariabileB
> ace8ti parametri pot 2i modi2icai 9n corpul procedurii" ei sunt parametri de
ie8ire" nu sunt transmi8i prin #aloare ci se transmite adresa lor" deci 9n blocul
apelant #alorile parametrilor actuali #or 2i modi2icate.
6roceduri 0i 1uncii #rede1inite
1. :uncii de trans2ormare%
:unction trunc)$%real*%longintB > re'ultatul e int)$* daca $J7 si int)$*D1 daca $I7B
trunc)>.3*C>B
trunc).4*CDB
:unction round)$%real*%longintB
round).3*CB
round).3*C3B
2. :uncii matematice%
:unction int)$%real*%realB
:unction 2rac)$%real*%realB
:unction sin)$%real*%realB
:unction cos)$%real*%realB
:unction arctan)$%real*%realB
:unction piB
:unction sNrt)$%real*%realB
:unction ln)$%real*%realB
:unction e$p)$%real*%realB
:unction abs)$*B
:unction sNr)$*B
3. 0roceduri i 2uncii re2eritoare la #alori ordinale%
:unction succ)$*B
0rocedure inc)#ar $WBn%longintX*B incrementea'a $ de n oriB
:unction pred)$*B
0rocedure dec)#ar $WBn%longintX*B decrementea'a $ de n oriB
:unction odd)$%longint*%SooleanB returnea'a true daca $ e impar" 2alse in ca' contrarB
,. &ubprograme destinate trat(rii irurilor%
!elete
Insert
&tr
1al
Concat
Cop^
LengtA
0os
+. 0roceduri de interes general%
Random D Randomi'e D Ppcase
,+63-
7aria!ile glo!ale si aria!ile locale, domeniu de i(i!ilitate
!aribilele globale sunt #ariabilele programului principal..le sunt re'er#ate intr>o 'ona
speciala de date" numita segment de date.
!ariabilele locale sunt #ariabile declarate in interiorul subprogramelor.Aceste #ariabile sunt
memorate in segmentul de sti#a dupa #ariabilele generate de parametri..ste sarcina programatorului
sa asigure initiali'area lor cu #alorile dorite.La iesirea din subprogram continutul #ariabilelor locale
se pierde.
Pn termen des 2olosit in practica limba/elor de programare este acela de vizibilitate.A
preci'a #i'ibilitatea unei #ariabile inseamna a spune care sunt blocurile de unde se poate adresa)ca
sa>i atribuim o #aloare de e$emplu*.
!ariabilele globale sunt #i'ibile la ni#elul programului principal si la ni#elul
subprogramelor.
!ariabilele locale sunt #i'ibile doar la ni#elul subprogramului in care au 2ost declarate si la
ni#elul subprogramelor de2inite in acesta..
AtentieL .$ista situatii in care o #ariabila globala nu poate 2i adresata din cadrul
subprogramului" adica atunci cand acesta contine declaratia unei alte #ariabile" cu acelasi nume.In
acest ca'" prin nume" se adresea'a #ariabila locala.Regula este urmatoarea% in ca'ul in care doua
#ariabile au acelasi nume" dar #i'ibilitati di2erite" se adresea'a intotdeauna #ariabila cu #i'ibilitatea
mai redusa..#ident" in ca'ul e$istentei a doua #ariabile cu aceeasi #i'ibilitate si acelasi nume"
compilatorul #a da eroare de sinta$a.
,363-
:.2 6roiectarea modular) a re(ol)rii unei #ro!leme
0rocedurile 8i 2unciile nestandard trebuie obligatoriu declarate 9nainte de a 2i apelate. In ca'ul
general" un program 0ascal e 2ormat dintr>un program principal 8i dintr>un num(r oarecare de
proceduri 8i 2uncii apelabile din programul principal sau unele din altele.
!omeniul de #i'ibilitate al identi2icatorilor )elemente locale 8i globale*
!eclararea procedurilor 9n cadrul altor proceduri" 2iecare din acestea cu propriile declaraii
8i de2iniii ridic( o problem( deosebit(% domeniul de #i'ibilitate al identi2icatorilor.
0rin domeniul de #i'ibilitate )de #alabilitate* 9nelegem 'ona de program 9n care este
cunoscut( declaraia sau de2iniia unui identi2icator.
C<nd 2lu$ul de control intr( 9ntr>un bloc" toate entit(ile declarate 9n blocul respecti#
sunt alocate pe sti#a de e$ecuieB la p(r(sirea unui bloc 'ona de pe sti#( alocat( blocului
este eliberat( ast2el 9nc<t #alorile a2late acolo nu mai pot 2i re2erite.
&ubprogramele pot 2i recursi#e" adic( se pot apela ele 9nsele" 2ie direct" 2ie indirect
printr>un lan de apeluri. :iecare apelare a unui subprogram determin( alocarea de spaiu
pe sti#( pentru entit(ile sale locale care sunt ast2el distincte de entit(ile corespun'(toare
alocate 9n timpul altor apeluri ale aceleia8i proceduri. Acest spaiu este eliberat la
terminarea apel(rii respecti#e.
Conclu'ie% domeniul de #i'ibilitate al unui identi2icator este tot blocul 9n care acesta a 2ost
de2init" inclusi# blocurile subprogramelor decarate 9n bloc" cu e"ce#ia celor care
rede2inesc identi2icatorul.
!e'#oltarea ascendent( 8i de'#oltarea descendent( a programelor
In 0ascal e$ist( dou( posibilit(i de de'#oltare a programelor%
a+ ascendent)H
!+ descendent).
a*In programarea ascendent) subprogramele se declar( 9n seciunea de declaraii a programului.
Regul( general(% re2erirea identi2icatorilor numai dup( declararea lor. Slocurile sunt 9n acest ca'
independente. Apeluri posibile%
> din programul principal se poate apela orice subprogram" 9n orice ordineB
> dip subprogramul\i se pot apela subprogramele anterioare" 9n orice ordineB
b*In programarea descendent) subprogramele se declar( imbricate unul 9n cel(lalt.
Apeluri posibile%
> din programul principal se poate apela subprogramul\1B
> din subprogramul\i se poate apela subprogramul\iD1B
In practic( programarea ascendent) 8i cea descendent) sunt com!inate.
,463-
;. Recursiitate
;.1 6re(entare general)
Pn program este recursi# atunci c<nd se autoapelea'(. 0entru ca autoapelul sa nu aib( loc la
in2init un program recursi# trebuie s( conin( o condiie de oprire )de s2<r8it*.
;.2 ?uncii 0i #roceduri recursie
.$emple de 2uncii 8i proceduri recursi#e%
procedure 0) $% integer*B
begin
I2 $I J7 tAen
i2 $ mod C7 tAen begin
Erite )$* B 0 )$ di# * end
else begin
0 )$>1* B Erite )$* end
endB
procedure 2)i" =% integer* B
begin
i2 =IC, tAen begin
Erite )iG=* B
2 )i>1 " =D1*
endB
endB
2unction 2 )a" b%integer*%b^teB
begin
i2 bI1 tAen 2 % C >1B
else
i2 a mod b C7 tAen
2%C1D2)a di# b"b*B
else 2%C 7B
endB

procedure 2 )n%longint*B
begin
Erite)n mod 17*B
i2 nIJ7 tAen begin
2)n di# 177*B Erite)n mod 17*B
end
endB
,-63-
Mai /os este #eri2icarea procedurii anterioare %
<. Metoda !acMtracMing
<.1. 6re(entare general)
Metoda bac=trac=ing este o metod( de re'ol#are a problemelor prin 9ncerc(ri. &oluia
problemelor const( 9n determinarea unor #alori ce 9ndeplnesc anumite condiii.
Aceast( metod( 9ncearc( la 2iecare pas alegerea unei #alori dintre cele posibile. !ac(
#aloarea 9ncercat( 9ndepline8te condiiile problemei" atunci #om trece la pasul urm(tor. !ac(
#aloarea nu 9ndepline8te condiiile" #om r(m<ne la acela8i pas 8i #om 9ncerca altce#a 9ntr>o ordine
stabilit( la 9nceputul re'ol#(rii problemei. !ac( nu mai a#em de unde alege #alori" ne #om 9ntoarce
la pasul anterior.
!ac( 9ncerc<nd s( re'ol#(m problema ne #om 9ntoarce la pasul 7" #a 9nsemna c( am
determinat toate soluiile sau c( problema nu are re'ol#are.
!e multe ori" 9n aplicaii apar probleme 9n care se cere gqsirea unor soluii de 2orma
"#"
$
"
%
...

"
n
unde "
i
" i # $&'&n 9n care "
$
'"
n
trebuie sq 9ndeplineascq anumite condiii.
Am putea sq generqm toate combinaiile posibile de #alori 8i apoi sq le alegem doar pe cele
con#enabile. Consider<nd mulimile # (a
i&$
&a
i&%
&'&a
i&n(i)
)" aceste combinaii s>ar putea construi
ast2el% pentru 2iecare #aloare posibilq 2i$atq pentru componenta "
i
& #om alege toate #alorile posibile
pentru componenta "
i*$
8i pentru 2iecare ast2el de #aloare 2i$atq pentru "
i*$
#om alege toate #alorile
posibile pentru componenta "
i*%
" etc.
Re'ol#<nd problema 9n acest mod" deci gener9nd tote elementele produsului carte'ian 8i
#eri2ic<nd abia apoi dacq 2iecare combinaie este o soluie" e2icientq este scq'utq.
,563-
Ast2el" dacq de e$emplu ne propunem sq generqm toate cu#intele 2ormate cu litere a&b&c& a8a
9nc<t 2iecare literq sq aparq o singurq datq" combinaiile posibile sunt 9n numqr de 4" dintre care
con#in doar 3.
TeAnica Sac=trac=ing propune generarea soluiei prin completarea #ectorului " 9n ordine
"
$
"
%
...

"
n
8i are la ba'q un principiu dde bun simc% dacq se constatq cq a#<nd o combinaie parialq de
2ormq v
$
v
%
...v
+,$
)unde v
i
&'&v
+,$
sunt #alori de/a 2i$ate*" dacq alegem pentru "
+
o #aloare v
+
8i
combinaia re'ultatq nu ne permite sq a/ungem la o soluie" se renunq la aceastq #aloare 8i se
9ncearcq o alta )dintre cele netestate 9n aceastq etapq*. fntr>ade#qr" oricum am alega celelalte #alori"
dacq una nu corespunde nu putem a#ea o soluie.
0entru e$emplu ales anterior se obser#q cq dacq notqm cu#<ntul cu "
$
"
%
"
-
" combinaia aa"
-

nu ne poate conduce la o soluie )literele trebuie sq 2ie distincte* 8i deci nu are sens sq mai 9ncercqm
sq stabilim #alori pentru "
-
.
Algoritmul general al metodei Sac=trac=ing
0entru e#itarea generqrii combinaiilor necon#enabile se procedea'q ast2el%
0resupunem cq s>au gqsit #alorile v
$
v
%
'v
+,$
pentru componentele "
$
"
%
...

"
+,$
)au rqmas de
determinat #alorile pentru "
+
'"
n
*. Ne ocupqm 9n continuare de componenta "
+
. 0a8ii urmai sunt%
1* 0entru 9nceput" pentru "
+
nu s>a testat 9ncq nici o #aloare.
* &e #eri2icq dacq e$istq #alori netestate pentru "
+
.
a* fn ca' a2irmati#" se trece la pasul 3.
b* Alt2el" se re#ine la componenta anterioarq" $
=>1
B se reia pasul pentru =C=>1.
3* &e alege prima #aloare # dintre cele netestate 9ncq pentru $
=
.
,* &e #eri2icq dacq acestq combinaie parialq v
$
v
%
'v
+,$
v ne poate conduce la un re'ultat )dacq sunt
9ndeplinite anumite condiii de continuare*.
a* !acq #aloarea aleasq este bunq se trece la pasul +.
b* Alt2el" se rqm<ne pe aceea8i po'iie + 8i se reia ca'ul .
+* &e #eri2icq dacq s>a obinut o soluie .
a* fn ca' a2irmati#" se tipqre8te aceastq soluie 8i se rqm<ne la aceea8i componentq "
+
" relu<ndu>
se pasul .
b* Alt2el se reia altgoritmul pentru urmqtoarea componentq )se trece la pasul 1 pentru +#+*$*.
Altgoritmul 9ncepe prin stabilirea unei #alori pentru componenta "
$
)+#$* 8i se 9ncAeie c<nd
pentru aceasta am testat toate #alorile posibile 8i con2orm pasului b* ar trebui sq re#enim la
componenta anterioarq" care 9n aceast ca' nu e$istq.
Re'um<nd" metoda Sac=trac=ing se 2olose8te 9n re'ol#area problemelor care 9ndeplinesc condiiile%
soluia poate 2i pusq sub 2orma unui #ector &C"
$
"
%
'"
n
" unde "
i
mulimile
i
sunt 2inite 8i ordonate )pentru a lua 9n considerare toate #alorile posibile*.
fnainte de a scrie programul care ne #a obine soluiile" trebuie sq stabilim unele detalii cu
pri#ire la%
#ectorul soluie [ c<te componente are" ce menine 2iecare componentq.
mulimea de #alori posibile pentru 2iecare componentq )sunt 2oarte importante limitele
acestei mulimi*.
condiiile de continuare )condiiile ca o #aloare $W=Xsq 2ie acceptatq*.
condiia ca ansamblul de #alori generat sq 2ie soluie.
0e ba'a acestor date #om scrie apoi procedurile 8i 2unciile pe care le #om apela 9n
altgoritmul general al metodei" dat mai /os" care se poate aplica tuturor problemelor ce respectq
condiiile menionate anterior. Aceste proceduri 8i 2uncii au o semni2icaie comunq" pre'ent<nd 9nsq
particularitqi 9n 2uncie de 2iecare problemq 9n parte.
Ast2el" se #a nota cu $ #ectorul care conine soluiaB $W=X C # #a a#ea ca semni2icaie 2aptul
cq elementul al>v,lea din mulimea de #alori ppsibile
+
a 2ost selectat pentru componenta "
+
. dacq
mulimea
+
are m elemente" a
$
a
%
'a
m
"pentru u8urinq ne #om re2erii la indicii lor $&%&'&m. !eci
#alorile posibile pentru o componentq #or 2i $&%&'&m 9n aceastq ordine.
+763-
Iniial" c<nd pentru o componentq nu am testat 9ncq nimic" aceasta #a a#ea #aloarea 7 )un
indice care nu e$istq*. Aceastq operaie se #a reali'a 9n procedura INIT care #a a#ea ce parametru
po'iia +.
:uncia &PCC.&OR)=* #eri2icq dacq ultima #aloare aleasq pentru componenta "
+
nu a atins
limita ma$imq admisq )indicele de #aloare ma$imq*. fntruc<t elementele sunt testate 9n ordine" acest
lucru este ecAi#alent cu a #eri2ica dacq mai a#em #alori netestate 9ncq pentru aceastq componentq.
:uncia 1ALI!AR.)=* #eri2icq dacq #aloarea aleasq pentru $W=X 9ndepline8te condiiile de
continuare" deci dacq aceastq combinaie parialq v
$
v
%
'v
+

poate sq conducq la o soluie.
:uncia &OLPTI.)=* #eri2icq dacq s>a a/uns la o soluie 2inalq.
0rocedura TI0AR)=* tipqre8te o soluie.
.ablonul metodei bac+trac+ing:
uses crtB
t^pe sti#aCarra^W1..177X o2 integerB
#ar st%sti#aB
="n%integerB
as"e#%booleanB
procedure init)=%integerB#ar st%sti#a*B
begin
...
endB
procedure succesor)=%integerB#ar st%sti#aB#ar as%boolean*B
begin
....
endB
procedure #alidare)=%integerBst%sti#aB#ar e#%boolean*B
begin
...
endB
2unction solutie)=%integer*%booleanB
begin
...
endB
procedure tiparB
begin
...
endB
begin
...
`citirea datelora
=%C1B
init)="st*B
EAile =J7 do
begin
repeat
succesor)="st"as*B
i2 as tAen
+163-
#alidare)="st"e#*B
until )not as* or )as and e#*B
i2 as tAen
i2 solutie)=* tAen
tipar
else
begin
=%C=D1B
init)="st*B
end
else
=%C=>1B
endB
end.
<.2. 6ro!leme de generare. O#ortunitatea utili()rii metodei !acMtracMing
0roblemele care se re'ol#( prin metoda bac=trac=ing pot 2i 9mp(rite 9n mai multe grupuri de
probleme cu re'ol#(ri asem(n(toare" in 2uncie de modi2ic(rile pe care le #om 2ace 9n algoritm.
0rincipalele grupuri de probleme sunt%
a* probleme 9n care #ectorul soluie are lungime 2i$( 8i 2iecare element apare o singur( dat( 9n
soluieB
b* probleme 9n care #ectorul soluie are lungime #ariabil( 8i 2iecare element poate s( apar( de mai
multe ori 9n soluieB
c* probleme 9n plan" atunci c<nd spaiul 9n care ne deplas(m este un tablou bidimensional.
1om pre'enta 9n cele ce urmea'( c<te#a probleme care pac parte din primul grup. Cele mai
cunoscute sunt%
generarea permut(rilor" aran/amentelor" combin(rilor
generarea submulimilor unei mulimi
generarea produsului carte'ian
problema damelor pe tabla de 8aA
colorarea (rilor de pe o Aart( ast2el 9nc<t oricare dou( (ri #ecine s( aib( culori di2erite
problema labirintului
problema calului pe tabla de 8aA
problema pl(ii unei sume de bani )bancomatul*
problema gra2ului Aamiltonian )problema comis>#oia/orului*
Toate problemele din acest grup au particularitatea c( soluia se obine atunci c<nd #ectorul
soluie a/unge s( conin( un anumit num(r de elemente.
Probleme:
Consider<nd c( a#em o tabl( de 8aA cu n linii 8i n coloane" scriei programul care a2i8e'(
Modurile 9n care pot 2i a8e'ate n dame pe tabl( ast2el 9nc<t s( nu e$iste dou( dame care s( se atace
reciproc )dou( dame se atac( 9n ca'ul 9n care sunt situate pe aceea8i linie" coloan( sau diagonal(*.
uses crtB
t^pe sti#aCarra^W1..177X o2 integerB
#ar st%sti#aB
="n"l%integerB
as"e#%booleanB
procedure init)=%integerB#ar st%sti#a*B
begin
+63-
stW=X%C7B
endB
procedure succesor)=%integerB#ar st%sti#aB#ar as%boolean*B
begin
i2 stW=XIn tAen begin
as%CtrueB
stW=X%CstW=XD1B
end
else as%C2alseB
endB
procedure #alidare)=%integerBst%sti#aB#ar e#%boolean*B
#ar i%integerB
begin
e#%CtrueB
2or i%C1 to =>1 do
begin
i2 stW=XCstWiX tAen e#%C2alseB
i2 abs)=>i*Cabs)stW=X>stWiX* tAen e# %C2alseB
endB
endB
2unction solutie)=%integer*%booleanB
begin
i2 =Cn tAen solutie%Ctrue else solutie%C2alseB
endB
procedure tiparB
#ar i%integerB
begin
2or i%C1 to n do Erite)i"]>]"stWiX"] B ]*B
EritelnB
endB
begin
read)n*B
=%C1B
init)="st*B
l%C7B
EAile =J7 do
begin
repeat
succesor)="st"as*B
i2 as tAen
#alidare)="st"e#*B
until )not as* or )as and e#*B
i2 as tAen
i2 solutie)=* tAen
begin
tiparB
inc)l*B
end
else
begin
+363-
=%C=D1B
init)="st*B
end
else
=%C=>1B
endB
i2 lC7 tAen Erite)]!amele nu pot 2i aran/ate.]*
else Erite)]!amele pot 2i aran/ate in ]"l"] moduri.]*B
end.
0entru generarea numerelor cu n ci2re 2ormate cu elementele mul0entru generarea
numerelor
cu n ci2re 2ormate cu elementele muimii `7""-a se utili'ea'( un algoritm bac=trac=ingcare" pentru
nC genera'( 9n ordine numerele 7" "-"-7"-"--.
uses crtB
t^pe sti#a C arra^ W1..177X o2 integerB
#ar a" st % sti#aB
n" = % integerB
as" e# % booleanB
procedure init )= % integerB #ar st % sti#a*B
begin
stW=X%C7B
endB
procedure succesor )= % integerB #ar st % sti#aB #ar as % boolean*B
begin
i2 stW=XI3 tAen
begin
as%CtrueB
stW=X%CstW=XD1B
end
else as%C2alseB
endB
procedure #alidare )= % integerB st % sti#aB #ar e# % boolean*B
begin
e#%CtrueB
i2 )=C1* and )aWstW=XXC7* tAen e#%C2alseB
endB
2unction solutie )= % integer* % booleanB
begin
i2 =Cn tAen solutie%Ctrue
else solutie%C2alseB
endB
procedure tiparB
#ar i%integerB
begin
2or i%C1 to n do Erite )aWstWiXX*B
EritelnB
endB
+,63-
begin
=%C1B
read )n*B
aW1X%C7B
aWX%CB
aW3X%C-B
init )=" st*B
EAile =IJ7 do begin
repeat
succesor )=" st" as*B
i2 as tAen #alidare )=" st" e#*B
until )not as* or )as and e#*B
i2 as tAen i2 solutie )=* tAen tipar
else begin
=%C=D1B
init )=" st*B
end
else =%C=>1B
endB
end.
1=. Generarea elementelor com!inatoriale
1=.1 6ermutari, aran5amente, com!inari
Metoda Sac=trac=ing se aplic( problemelor 9n care soluia poate 2i repre'entat( sub 2orma
unui #ector [ $ C )$1" $" $3" O$="O $n* r &" unde & este mulimea soluiilor problemei 8i & C &1 $
& $O $ &n" 8i &i sunt mulimi 2inite a#<nd s elemente si $i r si " )s*i C 1..n.
0entru 2iecare problem( se dau relaii 9ntre componentele #ectorului $" care sunt numite
condiii interneB soluiile posibile care satis2ac condiiile interne se numesc soluii re'ultat. Metoda
de generare a tuturor soluiilor posibile si apoi de determinare a soluiilor re'ultat prin #eri2icarea
9ndeplinirii condiiilor interne necesit( 2oarte mult timp.
Metoda bac=trac=ing e#it( aceast( generare 8i este mai e2icient(. .lementele #ectorului $"
primesc pe r<nd #alori 9n ordinea cresc(toare a indicilor" $W=X #a primi o #aloare numai daca au 2ost
atribuite #alori elementelor $1.. $W=>1X. La atribuirea #alorii lui $W=X se #eri2ica 9ndeplinirea unor
condiii de continuare re2eritoare la $1O$W=>1X. !aca aceste condiii nu sunt 9ndeplinite" la pasul ="
acest lucru 9nseamn( ca orice #alori i>am atribui lui $W=D1X" $W=D1X" .. $WnX nu se #a a/unge la o
soluie re'ultat.
A0LICAtII R.uOL1AT.
.$emple%
Generarea #ermut)rilor. &e cite8te un num(r natural n. &( se genere'e toate permut(rile
mulimii `1" " 3" O"na.
++63-
Generarea permut(rilor se #a 2ace in<nd cont c( orice permutare #a 2i alc(tuit( din elemente
distincte ale mulimii A. !in acest moti#" la generarea unei permut(ri" #om urm(ri ca numerele s(
2ie distincte.
0re'ent(m algoritmul corespun'(tor ca'ului nC3%
1 3
1
1 1 1 1 1 1
1 3
3 3 3 3 1
1 1 1 1
1 3 1
1 1 1 3 3

se 9ncarc( 9n sti#( pe ni#elul 1 #aloarea 1B
9nc(rcarea #alorii 1 pe ni#elul al >lea nu este posibil(" 9ntruc<t aceast( #aloare se
g(se8te 8i pe ni#elul 1 al sti#eiB
9nc(rcarea #alorii pe ni#elul al >lea este posibil(" deoarece aceast( #aloare nu mai este
9nt<lnit(B
#aloarea 1 din ni#elul al 3>lea se reg(se8te pe ni#elul 1B
#aloarea din ni#elul al 3>lea se reg(se8te pe ni#elul al >leaB
#aloarea 3 pe ni#elul al 3>lea nu e 9nt<lnit( pe ni#elurile anterioareB 9ntruc<t ni#elul 3
este completat corect. Tip(rim% 1 3
OO
Algoritmul continu( p<n( c<nd sti#a de#ine #id(.
Metoda bac=trac=ing construie8te un #ector soluie 9n mod progresi# 9ncep<nd cu
prima component( a #ectorului 8i merg<nd spre ultima cu e#entuale re#eniri asupra
atribuirilor anterioare.
Metoda se aplica ast2el %
1* se alege prima #aloare sin &1 si I se atribuie lui $1 B
* se presupun generate elementele $1O$W=>1X" cu #alori din &1..&W=>1XB pentru generarea lui
$W=X se alege primul element din &W=X disponibil si pentru #aloarea aleasa se testea'(
9ndeplinirea condiiilor de continuare.
0ot ap(rea urm(toarele situaii %
+363-
a* $W=X 9ndepline8te condiiile de continuare. !aca s>a a/uns la soluia 2inal( )= C n*
atunci se a2i8ea'( soluia obinut(. !aca nu s>a a/uns la soluia 2inal( se trece la
generarea elementului urm(tor [ $ W=>1XB
b* $W=X nu 9ndepline8te condiiile de continuare. &e 9ncearc( urm(toarea #aloare
disponibila din &W=X. !aca nu se g(se8te nici o #aloare 9n &W=X care s( 9ndeplineasc(
condiiile de continuare" se re#ine la elementul $W=>1X 8i se reia algoritmul pentru o
nou( #aloare a acestuia. Algoritmul se 9ncAeie c<nd au 2ost luate in considerare toate
elementele lui &1.
0roblemele re'ol#ate prin aceast( metod( necesit( timp mare de e$ecuie" de aceea
este indicat sa se 2oloseasc( metoda numai daca nu a#em alt algoritm de re'ol#are.
!ac( mulimile &1"&"O&n au acela8i num(r = de elemente" timpul necesar de e$ecuie al
algoritmului este = la n. !ac( mulimile &1" &.. &n nu au acela8i num(r de elemente" atunci se
notea'( cu bmc minimul cardinalelor mulimilor &1O&n si cu bMc" ma$imul. Timpul de e$ecuie
este situat 9n inter#alul Wm la n .. M la nX. Metoda bac=trac=ing are comple$itatea e$ponenial(" in
cele mai multe ca'uri 2iind ine2icient(. .a insa nu poate 2i 9nlocuit( cu alte #ariante de re'ol#are mai
rapide 9n situaia 9n care se cere determinarea tuturor soluiilor unei probleme.
Generarea aran5amentelor. &e citesc n 8i p. &( se genere'e toate aran/amentele de n luate
c<te p.
!in anali'a problemei re'ult( urm(toarele%
sti#a are 9n(limea pB
2iecare ni#el ia #alori 9ntre 1 8i nB
elementele plasate pe di#erse ni#eluri trebuie s( 2ie distincte.
Algoritmul este asem(n(tor cu cel de la permut(ri" cu deosebirea c( aici stipa are 9n(limea
p.
Generarea com!in)rilor. &e citesc n 8i p numere naturale" np. &e cere s( se genere'e toate
submulimile cu p elemente ale mulimii `1" " 3" O" na.
0entru re'ol#area problemei trebuie inut cont de urm(toarele%
sti#a are 9n(limea pB
elementele a2late pe ni#eluri di2erite ale sti#ei trebuie s( 2ie distincteB
pentru a e#ita repetiia elementele se a8ea'( 9n ordine cresc(toare% pe ni#elul = se #a a2la o
#aloare mai mare dec<t pe ni#elul =>1 8i mai mic( sau egal( cu n>pD=.
+463-
+-63-
+563-
3763-
6&RM3TARI ARANNAM&NT& COM>INARI
#rogram #ermutariH
t^pe sti#aCarra^W1..7X o2integerB
#ar st%sti#aB
n"=%integerB
as"e#%booleanB
#rocedure init*M$integerHar st$stia+H
begin
stW=X%C7B
endB
procedure succesor )#ar as% booleanB #ar
st% sti#aB =%integer*B
begin
i2 stW=XIn tAen
begin
stW=X%CstW=XD1B
as%CtrueB
end
else as%C2alse
endB
#rocedure alid *ar e$!ooleanH
st$stiaH M$integer+H
#ar i%integerB
begin
e#%CtrueB
2or i%C1 to =>1
do i2stW=XCstWiX tAen e#%C2alse
endB
1unction solutie*M$integer+$ !ooleanH
begin
solutie%C)=Cn*
endB
#rocedure ti#arH
#ar i%integerB
begin
2or i%C1 to n do Erite )stWiX*B
EritelnB
endB
>egin
Erite )HnCH*B readln)n*B
=%C1B init )="st*B
EAile )=J7* do
begin
repeat
succesor )as" st" =*B
i2 as tAen #alid )e#"st"=*B
until )not as* or )asand e#*B
i2 as tAen
i2 solutie )=* tAen tipar
else begin
=%C=D1B
init )="st*
end
else =%C=>1
end
readlnB
&nd.
#rogram aran5amenteH
t^pe sti#aCarra^W1..7X o2integerB
#ar st%sti#aB
n"=%integerB
as"e#%booleanB
#rocedure init *M$integerHar st$stia+H
begin
stW=X%C7B
endB
procedure succesor )#ar as% booleanB #ar st% sti#aB
=%integer*B
begin
i2 stW=XIn tAen
begin
stW=X%CstW=XD1B
as%CtrueB
end
else as%C2alse
endB
#rocedure alid *ar e$!ooleanH st$stiaH M$integer+H
#ar i%integerB
begin
e#%CtrueB
2or i%C1 to =>1 do i2 stW=XCstWiXtAen e#%C2alse
endB
1unction solutie *M$integer+$ !ooleanH
begin
solutie%C)=Cp*
endB
#rocedure ti#arH
#ar i%integerB
begin
2or i%C1 to p do Erite )stWiX*B
EritelnB
endB
>egin
Erite )HnCH*B readln)n*BErite)HpCH*Breadln)p*B
=%C1B init )="st*B
EAile )=J7* do
begin
repeat
succesor )as" st" =*B
i2 as tAen #alid )e#"st"=*B
until )not as* or )as ande#*B
i2 as tAen
i2 solutie )=* tAen tipar
else begin
=%C=D1B
init )="st*
end
else =%C=>1
end
readlnB
&nd.
#rogram com!inariH
t^pe sti#aCarra^W1..7X o2integerB
#ar st%sti#aB
n"=%integerB
as"e#%booleanB
#rocedure init*M$integerHar st$stia+H
begin
stW=X%C7B
endB
procedure succesor )#ar as% booleanB #ar st% sti#aB
=%integer*B
begin
i2 stW=XIn>pD= tAen
begin
stW=X%CstW=XD1B
as%CtrueB
end
else as%C2alse
endB
#rocedure alid *ar e$!ooleanH st$stiaH
M$integer+H
#ar i%integerB
begin
e#%CtrueB
2or i%C1 to =>1 do i2stW=XCstWiX tAen e#%C2alse
i2 =J1 tAen stW=XIstW=>1XtAen e#%C2alse
endB
1unction solutie*M$integer+$ !ooleanH
begin
solutie%C)=Cp*
endB
#rocedure ti#arH
#ar i%integerB
begin
2or i%C1 to p do Erite )stWiX*B
EritelnB
endB
>egin
Erite )HnCH*B readln)n*BErite)HpCH*B readln)p*B
=%C1B init )="st*B
EAile )=J7* do
begin
repeat
succesor )as" st" =*B
i2 as tAen #alid )e#"st"=*B
until )not as* or )as ande#*B
i2 as tAen
i2 solutie )=* tAen tipar
else begin
=%C=D1B
init )="st*
end
else =%C=>1
end
readlnB
&nd.
1=.2 6rodusul carte(ian .'u!multimi.
&e dau mulimile de mai /os 8i se cere #rodusul carte(ian al lor.
A
1
C `1" " 3" O" =
1
a
A

C `1" " 3" O" =

a
OOOOOOOOO
A
n
C `1" " 3" O" =
n
a
.$emplu% A
1
C `1" a
A

C `1" " 3a
A
3
C `1" " 3a
A
1
A

A
3
C `)1" 1" 1*" )1" 1" *" )1" 1" 3*" )1" " 1*" )1" " *" )1" " 3*" )1" 3" 1*" )1" 3" *" )1"
3" 3*" )" 1" 1*" )" 1" *" )" 1" 3*" )" " 1*" )" " *" )" " 3*" )" 3" 1*" )" 3" *" )" 3" 3*a.
0entru re'ol#are" se 2olosesc sti#a &T 8i un #ector A ce reine numerele =
1
" =
"
O=
n
. Ptili'(m
metoda bac=trac=ing" u8or modi2icat( din urm(toarele moti#e%
a* Orice element a2lat la ni#elul = al sti#ei este #alid" moti# pentru care procedura #alid nu
2ace altce#a dec<t s( atribuie #ariabilei e# #aloarea TRP..
b* 5
Modul de concepere a algoritmului re'ult( din cele ce urmea'(%
1 3 1
1 1 1
1 1 1 1 1 1
3 1 3
3 3 3 3
1 1 1 1 1 1
OOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Obser#aii%
Algoritmul pre'entat aici este de tip bac=trac=ing@ fntrebarea are sens pentru c( este
absent mecanismul de 9ntoarcere. 1om admite c( 8i aceasta este bac=trac=ing" dar
bdegeneratc.
Generarea su!mulimilor unei mulimi
3163-
Generarea submulimilor unei mulimi A cu n elemente se poate 2ace cu a/utorul algoritmului de
generare a combin(rilor" apel<ndu>l repetat cu #alorile 1" " ..." n pentru a genera submulimile cu
un element" apoi cele cu dou( elemente" apoi cu 3 elemente etc.
Aceast( modalitate de re'ol#are este 8i mai complicat( 8i mai puin e2icient( dec<t urm(toarea" care
se ba'ea'( pe generarea produsului carte'ian `7"1an. Aceast( a doua metod( este e2icient( deoarece
generea'( n soluii" adic( e$act at<tea c<te submulimi are o mulime cu n elemente.
A8adar" gener(m toate combinaiile de lungime n cu #alorile 7 8i 1. 0entru 2iecare combinaie
parcurgem soluia K 8i a2i8(m elementele din mulimea A c(rora le corespund #alori 1 9n K. Ast2el"
pentru combinaia 771711 #om a2i8a elementele de pe po'iiile 3" + 8i 3 din mulimea iniial(.
Generarea #artiiilor unei mulimi
Gener(m partiiilor unei mulimi presupune 9mp(rirea mulimii 9n mulimi ne#ide 8i dis/uncte care
reunite s( dea 9ntreaga mulime. 0utem" ca 8i 9n ca'urile anterioare" s( consider(m mulimea `1""
O"na. Construim un #ector soluie 9n care pentru 2iecare element #om trece submulimea 9n care 9l
#om include. Aceast( submulime mai este numit( 8i clas(.
Algoritmul generea'( pe r<nd toate modalit(ile de a 9mp(ri elementele mulimii `1""O"na
2olosind mai 9nt<i o singur( clas(" apoi dou(" 8.a.m.d. p<n( la n clase.
11.Gra1uri
11.1Gra1uri neorientate
Gra2 neorientat" adiacenta" incidenta" grad
!e2initie%
&e numeste gra1 neorientat" o perecAe ordonata de multimi )K"P*" unde%
>K este o multime 2inita" ne#ida" de elemente numite #ar2uri sau noduriB
>P este o multime de perecAi neordonate de cate doua elemente din K" numite mucAii
sau arce.
Asadar un gra2 neorientat poate 2i repre'entat sub 2orma unei 2iguri geometrice alcatuita din
puncte )mucAii" arce* si linii drepte sau curbe care unesc aceste puncte )mucAii" arce*. Respectand o
anumita dtraditiec pe care o gasim in literatura de specialitate" #om 2olosi%
> pentru gra2uri neorientate termenii de d#ar2c si dmucAiec
> pentru gra2uri orientate termenii de dnodc si darcc
0entru o mucAie u
=C
)a"b*" #om spune ca%
> #ar2urile a si b sunt adiacente si se numesc e$tremitatile mucAiei u
=B
>
mucAia u
=
si #ar2ul a sunt incidente in gra2. La 2el" mucAia u
=
si #ar2ul bB
> mucAia )a"b* este totuna cu )b"a* )nu e$ista o orientare a mucAiei*.
!e2initie%
Gradul unui #ar2 $" notat d)$* repre'inta numarul mucAiilor care trec prin nodul $ )incidente
cu nodul $*
Pn #ar2 care are gradul 7 se numeste #ar2 i'olat
Pn #ar2 care are gradul 1 se numeste #ar2 terminal
363-
Teorema%
Intr>un gra2 GC)K"P* cu n #ar2uri si m mucAii" suma gradelor tuturor #ar2urilor este egala
cu Gnumarul mucAiilor.
m " d " d " d " d
n
n
i
i
G * ) ... * ) * ) * )
1
1
= + + + =

=
Lan
!e2initie %
&e numeste lant in gra2ul G" o succesiune de #ar2uri LC)'
1
" '

"..."'
=
*" unde '
1
" '

"..."'
=
K" cu
proprietatea ca oricare doua #ar2uri consecuti#e sunt adiacente" adica e$ista mucAiile Wu
1
" u

X" Wu

"
u
3
X"..." Wu
=>1
" u
=
X P.
1ar2urile '
i
si '
=
se numesc e$tremitatile lantului" iar numarul de mucAii care intra in
componenta lantului repre'inta lungimea lantului.
Pn lant poate 2i interpretat ca un traseu care pleaca din #ar2ul '1 si a/unge in #ar2ul '="
trecand prin mai multe #ar2uri si parcurgand mai multe mucAii.
!aca #ar2urile '
1
" '

" ..." '


=
sunt distincte doua cate doua" lantul se numeste elementar. In ca'
contrar" lantul este ne/elementar.
Ciclu
&e numeste ciclu intr>un gra2" un lant LC)'
1
" '

" ... " '


=
* cu proprietatea ca '
1
C'
=
si mucAiile
W'
1
" '

X" W'

" '
3
X" ... " W
'=>1
" '
=
X sunt distincte doua cate doua.
!aca intr>un ciclu" toate #ar2urile cu e$ceptia primului si ultimului sunt distincte doua cate
doua" atunci ciclul se numeste elementar. In ca' contrar" el este ne>elementar.
Gra1 #arial
Pn gra2 parial al gra2ului GC)K"P* este un gra2 G1C)K"1* ast2el 9nc<t 1P" adic( G1 are
aceea8i mulime de #<r2uri ca G iar mulimea de mucAii 1 este cAiar P sau o submulime a acesteia.
Cu alte cu#inte" un gra2 parial al unui gra2 se obine p(str<nd aceea8i mulime de #<r2uri 8i
elimin<nd o parte din mucAii.
'u!gra1
Pn subgra2 al unui gra2 GC)K"P* este un gra2 ZC)L"1* ast2el 9nc<t L K iar 1 conine
toate mucAiile din P care au ambele e$tremit(i 9n L. 1om spune c( subgra2ul Z este indus sau
generat de mulimea de #<r2uri L.
Gra1 cone"
Pn gra2 G se nume8te cone$ dac( pentru orice dou( #<r2uri $ 8i ^ di2erite ale sale e$ist( un
lan care le leag(.
Com#onent) cone")
&e nume8te component( cone$( a gra2ului GC)K" P* un subgra2 CC)K1" P1*" cone$" a lui G
care are proprietatea c( nu e$ist( nici un lan 9n G care s( lege un #<r2 din K1 cu un #<r2 din K>K1.
Ciclu Camiltonian
&e nume8te ciclu Aamiltonian intr>un gra2 neorientat un ciclu elementar care trece prin toate
nodurile gra2ului.
Pn gra2 neorientat este Aamiltonian dac( el conine un ciclu Aamiltonian.
3363-
Ciclu eulerian
&e nume8te ciclu eulerian un ciclu care contine toate mucAiile unui gra2 )o singur( dat(
2iecare*.
Pn gra2 neorientat este eulerian dac( el conine un ciclu eulerian.
Metode de re#re(entare a gra1urilor orientate$
1*Matricea de adiacen(
>o matrice de n linii si n coloane"unde nC nr nodurilor gra2ului
aWi"/XC1"dac( )i"/*v P
C7"in ca' contrar
Cu a/utorul acestei matrici putem e$trage in2ormaii cum ar 2i%
>gradele nodurilor B
>putem determina nodurile i'olate"terminale"adiacenteB
>putem determina nodurile de grad ma$im sau minimB
>cate mucAii are gra2ul.
.$emplu%
0entru gra2ul din 2igura matricea de adiacenta este%
7 1 1 7 7
1 7 1 7 7
1 1 7 7 7
7 7 7 7 1
7 7 7 1 7
*0rin liste de #ecini
1 3
2 1 3
% 1
, +
8 ,
11.2Gra1uri orientate
!e2initie%
Numim gra1 orientat" o perecAe ordonat( de mulimi GC)K"P*" unde%
K este o mulime 2init( 8i ne#id( numit( mulimea nodurilor )#<r2urilor*B
P este o mulime 2ormat( din perecAi ordonate de elemente ale lui K" numit( mulimea
arcelor )mucAiilor*
O!seraii$
0rin noiunea de perecAi ordonate nu trebuie s( 9nelegem c( o mucAie este mai mare dec<t
alta" ci pur 8i simplu c( 2acem deosebire 9ntre o mucAie de 2orma )$"'* 8i o alta de 2orma )^"$*. Cu
alte cu#inte mucAiile sunt di2ereniate prin ordinea de scriere a simbolurilor.
Arcul )$"^* nu este tot una cu arcul )^"$*.
3,63-
3*0rin lista mucAiilor
1
1 3
3
, +
Pn arc #a 2i de 2orma uC )$"^*" unde $ se nume8te e$tremitate iniial(" iar ^ se nume8te
e$tremitate 2inal( a arcului. Cu alte cu#inte" darcul iese din nodul $ 8i intr( 9n nodul ^c.
La 2el ca la gra2urile neorientate" #om spune c( nodurile $ 8i ^ sunt adiacente" iar arcul u 8i
nodul $ sunt incidente )la 2el arcul $ 8i nodul ^*.
Gra1ul unui 4r1. Mulimile O 0i P
Gradul e"terior al unui #<r2 $" notat dG)$*" repre'int( num(rul arcelor care ies din nodul $"
adic( num(rul arcelor de 2orma )$"'* w P.
Analog" se de2ine8te gradul interior al unui #<r2 $" notat d>)$*" ca 2iind num(rul arcelor
care intr( 9n nodul $ )de 2orma )^"$* w P*.
Drum, circuit
&e nume8te drum 9n gra2ul G" un 8ir de noduri !C`'1" '" '3" O" '=a" unde '1" '" '3" O"
'= aparin lui $" cu proprietatea c( oricare dou( noduri consecuti#e sunt adiacente" adic( e$ist(
arcele W'1" 'X" W'" '3X" O" W'=>1"'=X aparin lui P.
0ractic" un drum poate 2i pri#it ca un traseu 9n care toate arcele au aceea8i orientare" dat( de
sensul de deplasare de la '1 la '=.
!ac( nodurile '1" '" '3" O" '= sunt distincte dou( c<te dou(" drumul se nume8te elementar.
fn ca' contrar" drumul este ne>elementar.
Lungimea unui drum C num(rul de mucAii din care este 2ormat.
&e nume8te circuit 9ntr>un gra2" un lan LC`'1" '" '3" O" '=a cu proprietatea c( '1C'= 8i
arcele W'1" 'X" W'" '3X" O" W'=>1"'=X sunt distincte dou( c<te dou(.
Gra1 #arial 0i su!gra1
!e2iniie% :ie gra2ul GC)K"P*. Pn gra1 #arial al lui G" este un gra2 G
1
C)K"1*" cu 1 P.
Alt2el spus " un gra2 parial G
1
al lui G" este cAiar G" sau se obine din G p(str<nd toate #<r2urile 8i
suprim<nd ni8te mucAii.
!e2iniie% :ie gra2ul GC)K"P*. Pn su!gra1 al lui G" este un gra2 G
1
C)L"T*" unde L K 8i T
P" iar T #a conine numai mucAiile care au ambele e$tremit(i 9n L. Alt2el spus" un gra2 parial
G
1
al lui G" se obine din G elimin<nd ni8te #<r2uri 8i p(str<nd doar acele mucAii care au ambele
e$tremit(i 9n mulimea #<r2urilor r(mase.
Cone"itate in gra1uri orientate
Gra2 cone$% !e2initie%
Pn gra2 G este cone$" daca oricare ar 2i doua #ar2uri ale sale" e$ista un lant care le leaga.
Pn gra2 GC)K"P* se numeste tare cone" daca pentru oricare doua noduri distincte e$ista $"^
apartinand lui K" e$ista in G un drum de la $ la ^ si un drum de la ^ la $.
&e numeste componenta tare cone"a a unui gra2 orientat GC)K"P* un subgra2 tare cone$
G1C)K1"P1* al sau" ma$imal in raport cu acel propus.
Gra1uri Camiltoniene si euleriene
!e2initie%
&e numeste ciclu Camiltonian intr>un gra2" un ciclu elementar care contine toate #ar2urile
gra2ului.
&e numeste gra1 Camiltonian" un gra2 care contine un ciclu Aamiltonian.
!e2initie%
&e numeste lant Camiltonian" intr>un gra2" un lant elementar care contine toate #ar2urile
gra2ului.
Teorema%
3+63-
!aca intr>un gra2 GC)K"P* cu nJC3 #ar2uri" gradul 2iecarui #ar2 $ #eri2ica conditia
d)$*JCn6"atunci gra2ul este Aamiltonian.
!e2initie%
&e numeste ciclu eulerian" intr>un gra2" un ciclu care contine toate mucAiile gra2ului.
&e numeste gra1 eulerian" un gra2 care contine un ciclu eulerian.
Teorema%
Pn gra2 2ara #ar2uri i'olate este eulerian" daca si numai daca este cone$" si gradele tuturor
#ar2urilor sunt numere pare.
Metode de re#re(entare a gra1urilor ne/orientate$
Matricea de adiacen(
Are aceea8i semni2icaie ca 9n ca'ul gra2urilor neorientate" 2iecare element aWi"/X" cu i"/ v
` 1""O.."na este% 1 dac( e$is( arcul )i"/*" respecti# 7 9n ca^ contrar.
Listele #ecinilor
0entru 2iecare nod " se construiesc dou( liste ale #ecinilor s(i%
> L
D
)$* [ lista #ecinilor succesoriB conine nodurile ce sunt e$tremit(i 2inale ale arcelor care
ies din nodul ".
> L
>
)$* [ lista #ecinilor predecesoriB conine nodurile ce sunt e$tremit(i iniiale ale arcelor
care intr( 9n nodul ".
.$emplu%
fn gra2ul din 2igura 3 de mai sus" pentru nodul $C, a#em%
> arcele care ies din nodul , sunt ),"* 8i ),"3*. fn consecin(" lista #ecinilor succesori LG),*
conine nodurile 8i 3B
> 9n nodul , intr( un singur arc" 8i anume )3",*" moti# pentru care lista #ecinilor predecesori L>
),* conine doar nodul 3.
0re'ent(m 9n continuare aceste liste ale #ecinilor pentru gra2ul din 2igura 3.
Nodul $ LG)$* L>)$*
1 1ida
1ida 1"3",
3 ", ,
, "3 3
11.%Ar!ori
!e2initie% Pn gra2 cone$ si 2ara cicluri se numeste arbore.
Teorema%
:ie un gra2 GC)$" u*. urmatoarele a2irmatii sunt ecAi#alente%
3363-
> G este arbore.
> G este un gra2 cone$" minimal in raport cu aceasta proprietate )eliminand o mucAie
oarecare" se obtine un gra2 ne>cone$*.
> G este un gra2 2ara cicluri" ma$imal in raport cu aceasta proprietate )adaugand o
mucAie oarecare" se obtine un gra2 care are cel putin un ciclu*.
In ca'ul arborilor" in loc de d#ar2uric si dmucAiic" se 2olosesc cu precadere termenii
sinonimi dnoduric respecti# darcec.
R)d)cin) C Nod special care generea'( a8e'area unui arbore pe ni#eluriB Aceast( operaie
se e2ectuea'( 9n 2uncie de lungimea lanurilor prin care celelalte noduri sunt legate de r(d(cin(.
Descendent C 9ntr>un arbore cu r(d(cin( nodul ^ este descendentul nodului $ dac( este
situat pe un ni#el mai mare dec<t ni#elul lui $ 8i e$ist( un lan care le une8te 8i nu trece prin
r(d(cin(.
Descendent direct 2 1iu C 9ntr>un arbore cu r(d(cin( nodul ^ este 2iul )descendentul direct*
nodului $ dac( este situat pe ni#elul imediat urm(tor ni#elului lui $ 8i e$ist( mucAie 9ntre $ 8i ^.
Ascendent C 9ntr>un arbore cu r(d(cin( nodul $ este ascendentul nodului ^ dac( este situat
pe un ni#el mai mic dec<t ni#elul lui ^ 8i e$ist( un lan care le une8te 8i nu trece prin r(d(cin(.
Ascendent direct 2 #)rinte C 9ntr>un arbore cu r(d(cin( nodul $ este p(rintele )ascendentul
direct* nodului ^ dac( este situat pe ni#elul imediat superior )cu num(r de ordine mai mic* ni#elului
lui ^ 8i e$ist( mucAie 9ntre $ 8i ^.
?rai C 9ntr>un arbore cu r(d(cin( nodul $ este 2ratele nodului ^ dac( au acela8i p(rinte.
?run() C 9ntr>un arbore cu r(d(cin( nodul $ este 2run'( dac( nu are nici un descendent
direct
Teorema% Pn arbore cu n #ar2uri are n>1 mucAii.
0roprietatile care caracteri'ea'a un arbore%
> e$ista un nod in care nu intra nici un arc" numit radacina arborelui.
> cu e$ceptia radacinii" 2iecare nod are proprietatea ca in el intra un singur arc.
Aceasta leaga nodul respecti# de un alt nod numit predecesor sau parinte.
> dintr>un nod pot iesi unul sau mai multe arce. :iecare ast2el de arc" leaga nodul
respecti# de un alt nod numit succesor sau 2iu al nodului" iar arcele care ies din acelasi nod se
numesc 2rati.
> nodurile sunt organi'ate pe ni#ele" primul ni#el 2iind ocupat de nodurile>radacina.
Nodurile de pe ultimul ni#el se caracteri'ea'a prin 2aptul ca din ele nu mai iese nici un arc" si se
numesc noduri terminale sau 2run'e.
> nodurile pot contine o asa>numita in2ormatie utila" care poate 2i de orice tip. !e
obicei aceste in2ormatii se mai numesc si cAei ale arborelui.
Arbori binari
!e2initie% Pn arbore cu proprietatea ca 2iecare nod" cu e$ceptia 2run'elor are cel mult doi
descendenti )succesori* se numeste arbore binar.&uccesorii se #or numi" in ca'ul in care e$ista" 2iul
stang si 2iul drept.
Metode de repre'entare a arborilor %
1. Metode s#eci1ice gra1urilor%
>matricea de adiacenta
>liste de adiacente
2. Metode s#eci1ice ar!orilor$
3463-
>prin legaturi de tip TATA. Arborele se repre'inta sub 2orma unui #ector t cu n componente )n
repre'inta numarul de noduri*. !aca tWiXC= atunci nodul I este descendent al nodului =. !aca nodul I
este #ar2 atunci tWiXC7.
:ie arborele din 2igura%
Nodul 1 este radacina. Atunci #ectorul de tip tata este% tC7 1 1 1 3 3 3 , 4 4.

3-63-