Sunteți pe pagina 1din 202

Carmen Bucur Crina Salantiu

,
Doina Bucur Florentina Stanca
Adrian Pintea Dana Vaida
Iulia Bucur

CU'LEGERE DE PROBLEME
PENTRU LICEU

U.T.PRES
Motto:

"Este mai bine s fii pregtitpentru o ocazie


pe care n-o vei avea, dect s ai vreo ocazie
i s nu fii pregtit!"
Carmen Bucur Crina Salantiu
,
Doina Bucur Florentina Stanca
Adrian Pintea Dana Vaida
Iulia Bucur

c -
CULEGERE DE PROBLEME
PENTRU LICEU

Editura V.T.PRES
Cluj-Napoca,2002
Editura U.T. PRES
Str. Constantin Daicoviciu DT. 15
3400 Cluj-Napoca

Director: Prof.dr.ing. Traian One


Consilier tiinific: Prof.dr.ing. Virgil Maier
Consilier editorial: ing. Clin D. Cmpean

Recenzia: Prof.univ.dr. Florian Mircea Boian

Descrierea CIP a Bibliotecii Naionale a Romniei


INFORMATiC
Informatic : Culegere de probleme pentru liceu I Carmen
Bucur, Crina Salaniu, Doina Bucur, .a, - Cluj-Napoca : Editura
V.T. Pres, 2002
p. :cm.
Bibliogr.
ISBN 973-8335-75-2

1. Salaniu, Crina
II. Bucur, Doina

004.42(076.3)

Copyright 2002 Editura U.T.PRBS


Toate drepturile aparin editurii U.T.PRBS. .
Reproducerea integral sau parial a textului sau ilustraiilor din aceast carte este
posibil numai cu acordul prealabil scris al editurii U.T.PRBS.

Tiparul executat la Atelierul de Multiplicare al UTC-N.

ISBN 973-8335-75-2
CUPRINS

Capitolul 1
Structuri de control 1
1.1. Structura liniar 1
1.2. Structura alternativ 4
1.3. Structura repetitiv 10
Capitolul II
Tipuri de date structurate 24
11.1. Vectori 24
11.2. Matrici 32
11.3. Siruri de caractere 41
11.4. nregistrri 46
Capitolul III
Fiiere text 54
Capitolul IV
Liste alocate static 62
Capitolul V 6
Subprograme .
Capitolul VI
Tehnici de programare 72
VI.I. Backtracking 72
V1.2. Recursivitate .. 80
VI.3. Metoda Divide et Impera 83
Capitolul VII
Grafuri 85
Capitolul VIII
Alocarea dinamic a memoriei 96
VIII.1. Stiva :................................ 96
VIII.2. Coada 97
VIII.3. Liste simplu nlnuite 99
VII1.4. Liste dublu nlnuite.. 102
VII1.5. Arbori binari 104
Capitolul IX
Programare orientat pe obiecte 107

V
,INDICAII I REZOLVR1............................................................... 114
Capitolul 1 114
Structuri de control .
LI. Structura liniar 114
1.2. Structura alternativ 117
I,3. Structura repetitiv 119
Capitolul II
Tipuri de date structurate 125
11.1. Vectori 125
11.2. Matrici 127
II.3. Siruri de caractere... 132
11.4. nregistrri 135
Capitolul III
Fiiere text 141
Capitolul IV
Liste alocate static 146
Capitolul V
Subprograme 151
Capitolul VI
Tehnici de programare 154
VI.1. Backtracking 154
VL2. Recursivitate 162
VI.3. Metoda Divide et Impera 164
Capitolul VII
Grafuri 165
Capitolul VIII
Alocarea dinamic a memoriei .. 170
Capitolul IX
Programare orientat pe obiecte 183
Bibliografie 194

VI
Cu-vn znaine

Prezenta culegere de probleme este rezultatul colaborrii ntre mai


multe cadre didactice care predau disciplina Informatic. Acest fapt a
permis valorificarea experienei fiecrui autor i asigurarea unei varieti de
stiluri i de metodologii de concepere i rezolvare a problemelor de
programare.
Respectnd programa colar, coninutul a fost organizat n nou

capitole, care acoper integral materia claselor IX-XI. Majoritatea


problemelor sunt creaia original a autorilor, purtnd amprenta specificitii

fiecruia. La sfritul lucrrii se dau indicaii pentru problemele mai dificile


i rezolvarea integral n limbajele Pascal i C++ a ctorva probleme
reprezentative pentru fiecare capitol. Astfel, problemele devin mai
accesibile elevilor, stimulndu-i la efort propriu.
Culegerea propune un numr mare de probleme cu grade diferite de
dificultate. Profesorii pot selecta astfel problemele n funcie de nivelul de
pregtire al elevilor pentru activitatea n clas, la laborator sau ca teme
suplimentare.

Autorii

vn
CAPITOLULI

STRUCTURI DE CONTROL

1.1. STRUCTURA LINIAR

1. Cunoscnd cele 5 note obinute de un elev la matematic pe parcursul


unui semestru i nota de la tez, scriei un program care calculeaz
media lui.

2. Pentru dou localiti din ara noastr se cunosc coordonatele lor ntr-un
sistem xoy. S se calculeze i s se afieze distana dintre ele.

3. Trei copii au depus n acelai timp cte o sum de bani la banc. Dup
un an ei scot toi banii i cumpr mpreun un cadou. Cunoscnd
sumele depuse de cei trei copii i dobnda acordat de banc 30%,
afiai suma total din care copiii vor cumpra cadoul.

4. Prjitura preferat a lui Ionel are urmtoarele ingrediente: fin (200g),


zahr (lOOg), unt (lOOg), dou ou, o portocal, stafide (lOOg).
Cunoscnd preul acestor produse (ex. un kilogram de zahr 15000lei),
afiai costul total al prjiturii.

5. Se dau patru numere naturale a,b,c,d. S se afieze toate numerele reale


care reprezint fracii n care numrtorul i numitorul sunt unul din cele
patru numere date (alb, alc, a/d, b/a, bie, b/d, c/a, c/b, c/d, dia, d/b, d/c).

6. ntr-o clas sunt E elevi din care B% sunt biei iar restul fete. Afiai
numrul de baiei i numrul de fete din clas. (E i B se citesc de la
tastatur).

7. Se sap un an cu forma de paralelipiped dreptunghic avnd lungimea


X, limea Y iar adncimea Z (date de la tastatura). Pmntul scos din
an ii mrete volumul cu 25%.Aflai i afiai volumul anului i

1
volumul pmntului dup ce a fost scos din an. Dac l ud o ploaie
pmntul se taseaz cu 5%. Ce volum va avea pmntul scos din an
dup ce l-a udat ploaia?

8. Curtea de recreaie a unei coli are forma dreptunghiul ar cu baza de X


dam. i limea de Y m. Ea a fost pavat cu dale de form ptrat avnd
perimetrul de 2 m. tiind c 100 de dale au costat L lei, s se afle i s se
afieze valoarea dalelor folosite la pavarea acestei curi (X,Y i L se
citesc de la tastatur).

9. Pentru a confeciona un palton pentru o persoan a crei nlime este h,


este necesar o cantitate de stof care se calculeaz n funcie de aceast
nlime a persoanei. Pentru aceast persoan sunt necesari 0,8*h metri
de material pentru faa i spatele paltonului, plus nc 70 cm pentru
mneci. Scriei un program care citete nlimea unei persoane i
afieaz cantitatea de stof necesar (n metri).

10. Grdina familiei Adam este n forma unui romb cu diagonalele


cunoscute d1 i d2. Familia vrea s-i paveze curtea cu dale de form
triunghiular, regulat de latur 1. tiind c preul unei dale este piei
scriei un program care s calculeze costul dalelor pentru ntreaga curte.

11. Ionel are un acvariu de peti de form paralelipipedic. Dimensiunile


acvariului sunt cunoscute: a.b,c. Ionel vrea s schimbe apa din acvariu i
pentru aceasta dorete s aduc apa din baie cu o gleic de x litri. Cte
drumuri are de fcut Ionel pentru a umple acvariul? S-ar putea ca ultima
gleic s nu se goleasc complet. Scriei un program care s rezolve
aceast problem.

12. La balul bobocilor au participat E elevi. Numrul de fete a fost cu F mai


mare dect cel a bieilor. Calculai i afiai cte fete i ci bieti au
participat la bal.

13. Se citete de la tastatur anul naterii unui scriitor. S se scrie un


program care calculeaz i afieaz secolul n care s-a nscut.

14. Pentru plantarea unei pduri s-au adus P puiei (P este citit de la
tastatura). 1/5 au fost stejari, 3/5 din rest fagi, iar restul au fost frasini.
Scriei un program care s calculeze i s afieze numrul frasinilor.

2
15. De la o fabric de nclminte s-au trimis la un 'magazin P perechi de
pantofi brbteti i cu G mai puine perechi de ghete pentru copii,
valornd n total L lei (P, G, L date la tastatura). Cunoscnd c preul
unei perechi de pantofi este cu 1/3 mai mare dect preul unei perechi de
ghete, scriei un program care s afle costul unei perechi de pantofi i a
uneia de ghete.

16. Doi prieteni marinari se ntlnesc cu vasele lor n mijlocul Oceanului


Pacific, apoi se despart i pleac n direcii opuse (unul spre est, cellalt
spre vest). Primul navigheaz cu Pi mile pe or iar al doilea cu P2 mile
pe or. Scriei un program care s determine la ce distan se gsesc cei
doi dup trei zile.

17. De Patimama Florinei vopsete ou. La fierbere unele se sparg. Se


cunoate c n medie se sparg s % dintre ele. Florina are invitai de Pati
n prieteni, pe care vrea s-i serveasc cu cte un ou rou. Scriei un
program care s calculeze cte ou trebuie s fiarb mama Florinei
pentru ca s ajung pentru toi invitaii i s mai rmn 10 ou pentru
familie.

18. La un magazin sunt M lzi de mere. n prima zi s-au vndut cu 4 mai


mult dect n a doua zi, n a doua zi cu 3 mai puin dect n a treia zi iar
n a patra zi s-au vndut ct n a treia i n prima la un loc. tiind cte
lzi au fost iniial (M dat de la tastatur) i cte au rmas dup cele patru
zile, calculai i afiai cte mere s-au vndut n fiecare zi.

19. Fie a un numr natural format din 5 cifre. S se scrie un program care s
determine i s afieze numrul format cu prima, a treia i a cincea cifr
din a.

20. Se dau dou numere naturale a i b, formate din patru cifre. S se scrie
un program care s calculeze numrul obinut prin mprirea ntreag a
numrului format cu primele dou cifre din a la numrul format din
ultimele dou cifre din b.

21. Se citete
un numr natural de patru cifre. Afiai numerele obinute n
urmtoarele moduri:
- schimbnd prima cifr cu ultima;
- schimbnd ntre ele cifrele din mijloc.
Exemplu: pentru numrul natural 3874 se va afia 4873 i 3784.

3
1.2. STRUCTURA ALTERNATIV

Instructiunea IF

1. Scriei un program care citete de la tastatur trei valori numerice a, b,c


i apoi afieaz pe ecran cea mai mare diferen dintre oricare dou
valori date.
Exemplu: a=100; b=15; c=105.
Se va afia 90.

2. S se scrie un program care citete de la tastatur ora i afieaz dac


este antemeridian sau postmeridian.

3. S se scrie un program care citete de la tastatur o dat calendaristic


sub forma: zi, lun, an apoi afieaz sezonul pentru aceast dat:
primvara 21 martie-20 iunie
vara 21 iunie-22 septembrie
toamna 23 septembrie-Zl decembrie
iarna 22 decembrie-20 martie

4. Se d un numr de maxim trei cifre. S se afieze cifrele n ordine


cresctoare.

5. Se dau 2 numere naturale a si b (b-o-O). S se stabileasc ce fel defracie


este alb (subunitar, supraunitar sau echiunitar).

6. Fiind date 4 numere naturale a, b, c, d, s se decid dac se poate forma


o proporie cu ele.

7. La un concurs cu trei participani, organizatorul trebuie s stabileasc


ordinea intrrii n concurs. Cei trei concureni extrag dintr-o urn cte un
numr. .Ajutai-l pe organizator s aranjeze participanii n ordinea
descresctoare a numerelor extrase.

8. Fiind date patru numere naturale s se afieze cea mai mare fracie care
se poate obine avnd ca numrtor i numitor unul din cele patru
numere date.

4
9. ntr-un parc se joac 3 copii care au greutile a, b, c. S se stabileasc
dac se pot aeza pe un "cntar"(balan) cu 2 brae, astfel nct acesta
s stea n echilibru.

10. O persoan dorete s cumpere un bilet de avion Bucureti-Viena pentru


o anumit dat (zi, lun, an). Cunoscnd preul pentru diferite perioade
ale anului, afiai suma pe care trebuie s o plteasc persoana
respectiv:
1.01-30.06 => 150 EURO
1.07-31.08 => 200 EURO
1.09-15.12 => 175 EURO
16.12-31.12 => 210 EURO

11. S se scrie un program care citete de la tastatur valoarea unui unghi


msurat n grade sau radiani i afieaz cadranul cruia i aparine. La
nceput programul va citi unitatea de masur : G-grade, R-radiani, iar
apoi valoarea unghiului.

12. Florin i Mihai sunt prieteni foarte buni. Cunoscnd data naterii lui
Florin (ZI, h,aI) i data naterii lui Mihai (Z2, Iz, a2), afiai care din cei
doi biei este mai mare.

13. Se citesc de la tastatur coordonatele x i yale celor trei vrfuri ale unui
triunghi. S se scrie un program care citete aceste valori, verific dac
pot fi vrfurile unui triunghi i apoi afieaz dac triunghiul este
ascuitunghic sau obtuzunghic.

14. Dintre trei persoane care particip la o conferin trebuie selectate dou
persoane care s in o prelegere. Persoanele trebuie s fie tinere i s
aib prelegerile scurte. S se scrie un program care citete vrsta celor
trei persoane i durata prelegerii fiecruia apoi afieaz cele mai tinere
dou persoane i cele mai scurte dou prelegeri.

15. Ana are n mere pe care vrea sa le mpart n mod egal cu cei m frai ai
ei. Se citesc n i m. S se scrie un program care s afieze dac Ana
poate mpri merele n mod egal i dac da, cte mere vor reveni
fiecruia.

5
16. Ioana are n reviste. La ea vin m prietene. S se scrie un program care s
verifice dac poate s mpart revistele astfel ca fiecare fat s citeasc
cel puin o revist. Dac da scriei cte reviste rmn, presupunnd c
fiecare fat a luat o singur revist.

17. Florina vrea s-i cumpere 2 reviste, de cte n mii lei fiecare. Ea are m
mii de lei. Un kg de biscuii cost k mii lei. S se scrie un program care
verific dac Florina poate s-i cumpere i un kg de biscuii i cele
dou reviste.

18. La un curs de not s-au nscris n persoane. tiind c bazinul are 8


culoare, determinai cte grupe complete se pot forma astfel nct fiecare
persoan dintr-o grup s noate pe un culoar. n cazul n care a rmas o
grup incomplet, afiai cte persoane conine.

19. Alina are n pungulie de semine de zorele a cte 20 g, s-i fac o


gradinu de m straturi lungi de nr metri fiecare. tiind c pentru fiecare
metru semnat trebuie s grame de semine, calculai dac i ajung Alinei
seminele pentru ntreaga grdin (fiecare strat are limea de 1 m).

20. Doi copii merg cu trenul mai multe ore i au cu ei doar o carte cu n
pagini. Pentru ca s nu se plictiseasc, au hotrt s joace urmtorul joc:
unul dintre copii deschide cartea la o anumit pagin iar cellalt are la
dispozie trei ncercri pentru a ghici numrul paginii. Scriei un
program care simuleaz acest joc. Punctajul realizat este de O puncte
dac numrul nu a fost ghicit din trei ncercri, 100 de puncte dac a
ghicit din trei ncercri, 200 de puncte dac a ghicit din dou ncercri i
300 de puncte dac a ghicit din prima ncercare.

21. Un elev are de rezolvat un sistem de 2 inecuaii. La prima inecuaie a


obinut ca soluie intervalul (a, b), iar la a doua- intervalul (c, d). Afiai
soluia sistemului, tiind c se obine intersectnd cele 2 intervale
obinute.

22. Pentru a confeciona un sacou de dam este nevoie de o anumit


cantitate de material. Dac materialul are limea de 1,40 m, atunci
lungimea materialului necesar, este dat de lungimea sacoului plus 80
cm. Dac materialul are limea de 1,20 m atunci lungimea materialului
necesar este de dou ori lungimea sacoului. Scriei un program care

6
citetede la tastatur cantitatea de material, tipul acestuia (laimea de
1,20 m sau 1,40 m) precum i lungimea sacourilor care trebuie
confecionate apoi calculeaz numrul de sacouri care se pot confeciona
din acest material.

23. Marcela dispune de o sum de bani, S lei, din care dorete s cumpere
numai caiete de matematic sau numai caiete cu linii, de-limba romn.
tiind c un caiet de matematic costa M lei, iar un caiet cu linii cost L
lei, ajutai-o pe Marcela s se hotrasc ce caiete ar trebui s cumpere
astfel nct s i rmn un rest ct mai mic de bani. Rezultatul va fi
afiat sub forma:
Marcela poate cumpara X caiete de matematic i i-ar rmne Y lei.

24. Bunica face de mncare i este n criz de timp. De aceea le roag pe


nepoatele ei Anca i Claudia s o ajute s curee zarzavaturile pentru
sup. Ele au de curat elin, morcovi, ptrunjel i ceap. Cnd lucrul a
fost gata, numrul de legume curat de fiecare dintre ele era: Anca A,
bunica B, Claudia C buci. Bunica are 6 caramele pe care dorete s le
tmpart. Cea care a fost cea mai harnic primete 3 caramele, a 2-a
dintre ele primete 2 caramele, iar ceea care a curat mai ncet primete
doar o caramea. Aflai clasamentul i cte caramele a primit fiecare, n
ordine descresctoare.

25. Pentru proiectul din semestrul I, Adrian i Liviu au hotrt s realizeze


un program care s-i ajute la ora de geometrie. Acest program va calcula
ariile urmtoarelor figuri:
It dreptunghi
It romb
It paralelogram
It triunghi
It trapez
cerc
Programul va citi de la tastatur tipul figurii (D, R, P, T, Z, C) i apoi n
funcie de acesta, va citi dup caz i mrimile necesare calculrii ariei
figurii geometrice respective:
lungimea i limea
diagonalele
It baza i nlimea

7
CII baza i nlimea
baza mic, baza mare, nlimea
CII raza
Realizai acest program care s afieze valoarea ariei i a mrimilor din
care a fost calculat.

26. Un ogar urmrete o vulpe care este la x srituri naintea lui. tiind c
n timp ce vulpea face a srituri ogarul face b srituri, s se calculeze
dac ogarul va ajunge vulpea n acea zi (maxim m srituri) i n caz c
poate fi ajuns s se afieze cte srituri i trebuie ogarului.

27. Se citesc de la tastatur coeficienii unei ecuaii de gradul II: a, b, c i se


cere s se scrie un program care determin natura soluiilor ecuaiei:
El reale i distincte

egale
complexe

28. Trei copii joac un joc: spune fiecare un numr natural de maxim cinci
cifre i caut numrul norocos. Prin numr norocos nelegem "acel
numr care se mparte exact la cifra de control. Cifra de control se
obine adunnd ultimele cifre ale numerelor. Dac numrul obinut are
mai mult de o cifr se adun cifrele acestuia, pentru a se obine ca
rezultat o cifr. S se scrie un program care determin numrul norocos
sau numerele norocoase, dac exist.
Exemplu: nl=1453; n2=72114; n3=52279
Cifra control 3+4+9=16
1+6=7
Numrul norocos este n2=72114 deoarece se mparte exact la 7.

29. Se citesc coeficienii unui polinom ax 2+bx+c. S se scrie un program


care verific dac un punct (i, j) citit de la tastatur se afl deasupra sau
dedesubtul graficului funciei polinomiale.

30. Pentru a rezolva sistemul de dou ecuaii liniare:


ax+by=c
dx+ey=f
se dorete utilizarea metodei substituiei. Scriei un program care citete
coeficienii a, b, c, d, e, f valori reale, apoi rezolv sistemul i afieaz
soluiile. Coeficienii pot fi orice valori reale (inclusiv zero).

8
Instruciunea de selecie multipl

31. Numerotm zilele sptmnii: luni-I, mari-Z, ... , duminic-7. Dac se


cunoate numrul corespunztor zilei de ieri, s se afieze ce zi va fi
poimine?

32. Jucai-v cu calculatorul: introducei un numr de la 1 la 10 i


calculatorul va afia numrul scris n litere.

33. O persoan dorete s-i fac


o asigurare de via. Firma de asigurri
ncaseaz o anumit sum de bani n funcie de vrst:
3000000 pentru copii sub 18 ani
5000000 ntre 19 si 29 de ani
8000000 ntre 30 si 49 de ani
10000000 peste 50 de ani
Cunoscnd vrsta persoanei, afiai suma pe care va trebui s o plteasc.
\1"

34. La un concurs de informatic particip n concureni. Organizatorii au m


calculatoare (m>n). Calculatoarele sunt 386, 486, 586 i Pentium. tiind
numrul de calculatoare i de ce tip e fiecare, scriei un program care i
ajut pe organizatori s-i aeze pe elevi la calculatoare, astfel nct elevii
s lucreze la cele mai performante calculatoare.

35. La ora de educaie fizica un elev a srit x cm la proba de sritur n


lungime. Folosind tabelul alturat, stabilii ce not va primi elevul.

Sritura Nota
Sub2m 4
2-2,10 m 5
2,10-2,20 m 6
2,20-2,30 m 7
2,30-2,40 m 8
2,40-2,50 m 9
Peste 2,50 m 10

36. La un depozit exist 3 tipuri de monitoare avnd preurile pi, Pl, P3.
Depozitul acord o reducere de 10% pentru comenzile de cumprare
care conin minim 10 buci din fiecare tip de monitor. Afiai ct are de

9
pltito firm care face comanda pentru nrl, nr2 i nr3 monitoare din
cele 3 tipuri.

37. Stabilii i afiai


care este doza de medicamente care trebuie prescris
unui pacient n funcie de vrsta V i greutatea G n kilograme, tiind c
la copii sub 3 ani medicamentul nu este indicat, ntre 3-12 ani se indic x
mg/kg corp, iar peste 12 ani Y mg/kg corp/zi.

38. Calculai i afiai nota pe care o primete la purtare un elev care a


totalizat pe semestrul 1 x absene, tiind c nu are alte abateri, iar
numrul de absene influeneaz nota la purtare astfel: pn la 6 absene
inclusiv, nota 10, ntre 7-10 absene nota 9, ntre 11-15 absene nota 8,
ntre 16-25 absene nota 7, ntre 26-30 nota 6, ntre 30-35 absene nota
5, iar peste 36 de absene avertisment de exmatriculare i nota 4 la
purtare.

1.3. STRUCTURA REPETITIV

WHILE I REPEAT (DO-WHILE)

1. Se d un numr natural de maxim 9 cifre. S se scrie un program care s


numere de cte ori se gsete cifra 7 n scrierea lui.

2. Se citesc numere naturale pn la introducerea numrului O. S se scrie un


program care s numere cte dintre ele sunt formate din exact dou cifre
i aceste cifre sunt identice. S se afieze aceast valoare.

3. Un grup de copii numr de la 1 la 100 i aplaud ori de cte ori se


rostete un numr care conine cifra 7. Scriei un program care calculeaz
i afieaz de cte ori se aplaud.

4. Se citesc printr-un program numere de la tastatur pn la citirea valorii


O. Se cere calcularea i afiarea mediei aritmetice a ptratelor numerelor
pozitive citite.

5. Se citesc numere naturale pn la introducerea numrului 9999999. S se


scrie un program care s afieze toate numerele ptrate perfecte dintre
ele.

10
6. Marius are b bomboane i c caramele pe care dorete s le mpart cu
Simona, sora lui mai mic. El i va da surorii lui un numr de bomboane
(i acelai numr de caramele) egal cu numrul care divide att numrul
b ct i pe c. Sora lui Marius ar dori s mnnce ct mai multe dulciuri.
Scriei un program care preia de la tastatur numerele b i c i afieaz
cte bomboane (i cte caramele) primete Simona.

7. Cu ocazia zilei de 1 Iunie doamna profesoar de informatic dorete s


druiasc bomboane elevilor din clasa a IX-a (n care nva m elevi) sau
celor din clasa a X-a (n care nva n elevi). Pentru c nc nu s-a hotrt
cror elevi s le duc bomboanele calculai i afiai printr-un program
care este numrul minim de bomboane pe care trebuie s le cumpere
pentru ca s le poat mpri exact elevilor din oricare din cele dou
clase. Programul va citi de la tastatur pentru fiecare clas numrul de
elevi.

8. Se citesc de
la tastatur numere naturale pn la ntlnirea numrului
zero. S se afieze dup citirea fiecrei perechi de numere dac sunt
prime ntre ele.

9. Un bancher are un seif cu cifru. Pentru a nu uita cifrul, vrea s-I scrie pe
o foaie, dar codificat: fiecare cifr s fie nlocuit cu diferena dintre
cifra 9 i cifra respectiv. Bancherul i-a ales un cifru; ajutai-l s-I
codifice dup metoda lui tiind c cifrul ncepe cu o cifr diferit de
cifra 9 (exemplu: pentru cifml386821 codificarea va fi 613178). Scriei
un program care preia cifrul de la tastatur i afieaz cifrul codificat.

10. Aceeai problem dar bancherul dorete s codifice cifrul insernd ntre
fiecare dou cifre ale sale cifra 3. Programul va afia numrul obinut.

Il. Rezolvai problema numrul 9 i pentru cazul n care bancherul dorete


s codifice cifrul transformndu-l n baza de numeraie 7.

12. Scriei cte un program care s decodifice cifrul codificat la problemele


9, 10 i Il. Programul va prelua de la tastatur cifrul codificat i va afia
cifrul potrivit pentru a deschide seiful sau un mesaj de atenionare pentru
cazul n care codul nu a fost introdus corect.

11
13. Se d un numr natural p. S se determine dac numrul conine n
scrierea lui secvena 15, folosind un program PASCAL sau C.
Exemplu: p=141510 - conine
p=141051 - nu conine

14. Determinai printr-un program i afiai numerele naturale de 4 cifre de

forma abcd tiind c produsul dintre numerele ab i cd este 323.

15. Gsiiprintr-un program numerele naturale de forma abac care se divid


cu Il i 13 i afiai-le.

16. Scriei un program prin care s determinai i s afiai numerele de


forma abac cu a-o-b-e-c tiind c suma cifrelor este un numr de dou
cifre identice.
17. Afiai printr-un program numerele de forma 512x6 divizibile cu 12 i

numerele de forma 25x3y divizibile cu 18.

18. S se afieze
printr-un program numerele de dou cifre de forma ab ,
tiind c a i b sunt cifre consecutive.

19. S se afieze printr-un program toate numerele de dou cifre care se


divid cu suma i cu produsul cifrelor lor.
Exemplu: 24 se divide cu 6=2+4 i cu 8=2*4

20. Fie x un numr natural, determinai printr-un program factorul prim cel
mai mare din descompunerea numrului x i afiai-l. (x se citete de la
tastatur)

21. S se scrie un program care citete un numr natural n (n<=lOOO) i o


cifr x i afieaz numrul de numeret;~mnlle strict mai mici dect n
care conin cifra x de dou ori.

22. Punei calculatorul la treab: introducei un numr i calculatorul va


afia ptratul i eubul acestui numr. Continuai introducnd numere
pn cnd i vei spune c nu mai dorii s introducei alte numere.

12
23. Numerele de inventar de pe utilajele unei ntreprinderi sunt formate din
maxim 9 cifre, dintre care primele 3 (din stnga numrului) sunt
identice la toate utilajele (i formeaz numrul 123). Fiind dat un numr
de inventar, scriei un program care stabilete dac acesta aparine
ntreprinderii.

24. S se calculeze suma cifrelor unui numr natural, fr a lua n


considerare prima i ultima cifr din numr.

25. Fie x un numr natural nenuL Determinai i afiai printr-un program


numrul format din prima i ultima cifr din x.

26. ntr-o campanie de ajutorare a copiilor nevoiai, cu ocazia Crciunului


un grup de adolesceni i-au propus s fac daruri de o sum de Slei.
Pentru aceasta adun din coala lor de la toi cei care doresc s
contribuie la campania de Crciun diferite sume i se opresc din
adunarea fondurilor n momentul n care au depit suma. Scriei un
program care s determine numrul de donatori i suma donat n total.

27. Pe o scar treapta iniial are 10 cm, iar pe msur ce urcm distana
dintre trepte crete cu 1 cm. Cte trepte trebuie s urcm astfel nct s
ajungem la 1 m?

28. Se extrag dintr-o urn bile pe care sunt scrise numere naturale.
Extragerea se realizeaz pn la ntlnirea numrului O. Scriei un
program care simuleaz aceasta i afieaz numrul cifrelor On care se
termin numrul produs al numerelor citite.

29. Se extrag dintr-o urn bilete pe care sunt scrise numere naturale.
Extragerea se realizeaz pn la ntlnirea numrului O. Scriei un
program care simuleaz aceasta i afieaz cte perechi de numere citite
consecutiv au proprietatea c unul este ptratul celuilalt.

30. Se extrag dintr-o urn bilete de tombol pe care sunt scrise numere
naturale. Extragerea se realizeaz pn la ntlnirea numrului O.
Biletele cu numere care nu conin cifre pare sunt ctigtoare. Scriei un
program care simuleaz aceasta i afieaz dup fiecare extragere
numrul biletului i dac este ctigtor sau nu.

13
31. Se citete un numr natural n. Scriei un program care determin i
afieaz cel mai apropiat de n numr prim.

32. Doi juctori joac urmtorul joc: ei aleg, pe rnd, un divizor natural
pozitiv al lui n dat, cu condiia ca, de fiecare dat, numrul ales s nu
divid nici unul din divizorii alei pn atunci. tiind c juctorii
trebuie s aleag divizorii n ordine descresctoare, se cere s se scrie
un program care afieaz ce numere s-au ales n timpul jocului.

33. Se citete de la tastatur un numr natural n (n < 1.000.000). Afiai un


triunghi dreptunghic isoscel format din cifrele acestui numr: pe prima
linie scriei prima cifr, pe a doua linie numrul format din primele
dou cifre, etc., pe ultima linie scriei ntregul numr.
Exemplu: n=78325 se va afia:
7
78
783
7832
78325

34. Scrieiun program care citete un numr natural n, determin i afieaz


cel mai mic numr natural nenul care are proprietatea c suma dintre n
i acest numr este un numr cu toate cifrele diferite.

35. Cte numere de patru i de cinci cifre exist astfel nct suma ultimelor
dou cifre i a numrului format de primele dou cifre s fie egal cu
numrul format din ultimele dou cifre?
Exemplu: 27530: 3+0+27=30.

36. Paul a nvat s


lucreze pe calculator i dorete s-i verifice tema la
matematic. El are de rezolvat urmtoarea problem: "Scriei pe caiet
toate numerele prime mai mici dect un numr natural N dat." Scriei
un program care preia de la tastatur numrul N i afieaz numerele
prime mai mici dect el pentru a-l ajuta pe Paul s verifice dac a
rezolvat corect tema.

37. Aceeai problem pentru tema:"Scriei pe caiet descompunerea n


factori primi pentru mai multe numere date." Se vor prelua de la
tastatur numerele unul cte unul pn la ntlnirea numrului zero.

14
Dup fiecare numr introdus se va afia descompunerea lui n factori
primi.

38. Scriei un program care preia de la tastatur un numr B i un numr


scris n baza IOpe care l transform n baza de numeraie B apoi l
afieaz. Se va rezolva problema n dou variante: B<=lO i B=16.

39. Scrieiun program care citete de la tastatur un numr natural B i un


numr N scris n baza de numeraie B, l transform n baza de
numeraie 10 i l afieaz pe ecranul calculatorului. Dac numrul nu a
fost scris corect n baza B se va afia pe ecran un mesaj de atenionare
i se va cere un alt numar de la tastatur. Se va repeta cererea unui
numr de la tastatur pn cnd numrul a fost tastat corect i s-a afiat
rezultat~l n baza 10. Programul se va scrie n dou variante: pentru o
baz B<=lO i pentru baza 16.

40. La intrarea .nnei discoteci st un bodyguard care a primit dispoziie s


opreasc intrarea atunci cnd au intrat minim m biei si minim n fete.
Scriei un program pentru el, tiind c la intrarea unei fete se citete
caracterul 'f' iar la a unui biat caracterul 'b'.

41. Intr-o urn exist bile numerotate. S se extrag pe rnd bile pn cnd
avem cel puin a bile cu TIr. pare sau b bile cu TIr. impare. Scriei un
program care simuleaz aceasta, citind pe rnd de la tastatur numrul
fiecrei bile extrase.

42. Se citesc numere de la tastatur reprezentnd contribuia n lei pe care


i-au adus-o elevii unei clase pentru cumprarea unui cadou pentru unul
dintre colegii de clas. Citirea se oprete cnd s-a introdus valoarea ,O.
tiind c au dat banii alternativ tot cte o fat i un biat (prima a fost o
fat) scriei un program care afieaz suma contribuiilor fetelor i
media aritmetic a valorilor cu care au contribuit bieii.

43. Pentru a cumpra un apartament, o familie ia un credit de la banc pe un


anumit numr de ani. Cunoscnd suma mprumutat, numrul de ani n
care va rambursa creditul i dobnda anual impus de banc, calculai
suma pe care trebuie s o achite familia n fiecare lun. Aceast sum
va fi din ce n ce mai mic deoarece dobnda lunar se calculeaz pe

15
baza sumei ramase nerambursate la nceputul lunii (dobnda lunar
fiind 1/12 din dobnda anual).

44. Cei n elevi nscrii n clasa a IX-a trebuie mprii n clase astfel nct
s nu fie ntr-o clas mai mult de 25 de elevi, i situaia s fie
echilibrat. Scriei un program care citete de la tastatur valoarea lui n
i mediile elevilor n ordine descresctoare, calculeaz care este
numrul de clase i ci elevi vor fi n fiecare clas i afieaz mesajul
"-----------------" dup fiecare grupare de medii care formeaz o clas.

45. Se dau dou numere naturale p i q cu condiia q<p. S se scrie un


program care s verifice dac numrul q se poate obine prin eliminarea
unor cifre de la nceputul i sfritul lui p.
Exemplu: p=715324, q=32. Se poate obine q eliminnd din p o cifr
de la sfritul lui p i trei cifre de la nceputul lui p.

46. Se dau dou numere naturale p i q. S se scrie un program care s


determine i s afieze numrul ce conine cifrele numrului p urmate
de cifrele numrului q. .
Exemplu: p=753, q=12. Numrul rezultat este 75312.

47. Se cere determinarea primelor n cifre din scrierea fraciei subunitare k/m
= O.c1c2c3..., pentru k i m numere naturale date.

48. Fie n un numr natural. Scriei un program care afieaz descompunerea


lui n ca sum de puteri distincte ale lui 2.

49. La magazinul de jucrii al lui Mihai se ine evidena vnzrilor pe


calculator. Pentru fiecare client se introduce suma pltit pentru
cumprturile fcute. La nchiderea magazinului se introduce valoarea
zero. Scriei un program care s-I ajute pe Mihai s calculeze i s-i
afieze pe ecranul calculatorului la sfritul zilei:
a. numrul de clieni din acea zi;
b. al ctelea a fost clientul care a fcut cele mai costisitoare
cumprturi;
c. ct au valorat n total vnzrile magazinului n acea zi;
d. ci clieni au fcut cumprturi de cel puin X lei (X dat de la
tastatur);

16
e. ci bani s-au ncasat de la primii 5 clieni (dac n acea zi au fost
mai puin de 5 clieni la magazin se va specifica aceasta printr-un
mesaj).

50. Un cioban dorete s-i mreasc turma. La nceput el are o oaie. Dup
un an oaia face o mielu, Dup un an mielua devine mioar. Dup nc
un an mioara devine oaie. Fiecare oaie face n fiecare an cte o mielu.
tiind c ciob anul are o ras special de oi care fac doar mielue i c
dorind s-i mreasc turma el nu taie nici un animal se cere s se scrie
un program care calculeaz i afieaz numrul de oi, mioare i mielue
pe care le are ciobanul dup Nani. (N dat de la tastatur)

51. Se citesc de la tastatur numere ntregi pn la introducerea numrului O.


S se verifice printr-un program dac aceste numere au fost introduse n
ordine cresctoare, descresctoare sau este o succesiune de numere
neordonate.

51. Se citesc de la tastatur numere ntregi pn la introducerea numrului O.


S se verifice printr-un program dac numerele introduse se succed
nti cresctor i apoi descresctor (n form de deal) sau nti
descresctor i apoi cresctor (n form de vale). Proprietatea trebuie s
fie ndeplinit pe ntreaga niruire de numere.

FOR

53. Ajutai un elev s nvee tabla nmulirii, afind tabla pentru


nmulirea/pnla 10) cu orice cifr dorit de el.
Exemplu: pentru tabla nmulirii cu 7 se va afia:
Ox7=0
lx7=7

lOx 7 = 70

54. Se d un numr natural p. S se scrie un program care s verifice dac p


este o putere a lui 2 i s se dea un mesaj corespunztor.

55. Pentru un numr n dat s se genereze i s se afieze printr-un program


primele n numere prime.

17
56. Introducei de la tastatur douzeci de numere naturale. Scriei un
program care s calculeze suma i produsul numerelor divizibile cu
zece din cele douzeci de numere date.

57. Un elev de clasa 1 a nvat s scrie doar cifrele O, 1 i 2. Afiai toate


numerele de 3 cifre pe care le poate scrie acest elev.

58. Afiaiprintr-un program toate numerele pare de trei cifre, formate


numai din cifre distincte.

59. Scriei un program care afieaz numerele de trei cifre formate numai
din cifre distincte cu proprietatea c suma cifrelor numrului obinut din
suma cifrelor sale este cel mult 5.

60. S se determine printr-un program toate numerele naturale mai mici


dect un numr natural nenul dat n i care sunt relativ prime cu n i s
se afieze aceste numere.

61. Scriei un program care citete de la tastatur un numr natural n i


tiprete toi divizorii lui care sunt numere prime.

62. S se scrie un program care s citeasc de la tastatur n numere naturale


de maxim 9 cifre i apoi s afieze pentru fiecare dintre ele media
aritmetic a tuturor divizorilor primi ai lui.

63. Se citesc de la tastatur n numere naturale. Determinai suma format cu


ultima cifr din fiecare numr citit printr-un program i afiai-o.

64. La un concurs de informatic particip n concureni. Organizatorii au m


calculatoare (m i n date de la tastatur).Calculatoarele sunt de tipul
386, 486, 586 i Pentium. Scriei un program care preia de la tastatur
numrul de calculatoare i tipul fiecrui calculator i i ajut pe
organizatori s-i aeze pe elevi la calculatoare astfel nct elevii s
lucreze la cele mai performante calculatoare. Programul va afia
numrul de calculatoare folosite din fiecare tip.

65. Dup 10 ani de la terminarea liceului, n prieteni se ntlnesc i fiecare


spune ce a realizat n aceast perioad de timp: dac s-a cstorit i n
caz afirmativ ci copii are. Scriei un program care citete pe rnd

18
aceste date i apoi afieaz ci dintre prieteni sunt necstorii, ci au
un copil, doi copii sau mai muli.

66. Un copil are la dispoziie o sum S, de care vrea s-i cumpere ciocolat
i napolitane. Cunoscnd costul pentru o ciocolat i costul pentru un
pachet de napolitane, afiai toate variantele de a-i cheltui suma
integral

67. Scriei un program care citete un numr natural n i afieaz:

1
1 2
123
1 2 3 4
.......................
1 2 3 4 n

68. S se afieze pe ecran:


1
12
123

1234 ... n
unde n este un numr ntreg pozitiv citit de la tastatur.

69. S se afieze pe ecran:


1
22
333

nnnn ...n (de nori)


unde n este un numr ntreg pozitiv citit de la tastatur.

70. Scriei un program care citete de la tastatur un numr natural n i


tiprete valoarea
l/(n-l) + 2/(n-2) + 3/(n-3) +.....(n-l)1l.

19
71. S se calculeze urmtoarea expresie:
1*2*4 + 2*4*8 + 3*6*12 + ... + n* 2n * 4n
E = -------------------------------------------------------
1*3*9 + 2*6*18 + 3*9*27 + ...+ n* 3n * 9n
72. La un concurs de frumusee toate cele n concurente primesc premii de
participare din partea organizatorilor n funcie de clasamentul final.
Cea care s-a clasat ultima a primit un premiu n valoare de X mii lei.
Fiecare dintre celelalte fete a primit o valoare egal cu suma de bani
primit de concurenta de pe locul imediat urmtor plus 15% din ce a
primit aceasta. La locul 1 s-a adugat la premiu o valoare de L lei.
Scriei un program care preia de la tastatur valorile X i L apoi
calculeaz i afieaz suma de bani pe care a primit-o fiecare dintre
concurente precum i ct s-a cheltuit pentru premii la acest concurs.

73. Ionel particip n acest an la jocul-concurs de matematic "Cangurul".


Trebuie s rezolve un set de treizeci de probleme, fiecare avnd un
singur rspuns corect. Scriei un program care ajut profesorul corector
s calculeze punctajul final pentru Ionel. Problemele de la 1 la 10
valoreaz cte trei puncte fiecare, cele de la 11 la 20 cte patru puncte,
iar cele de la 21 la 30 cte cinci puncte. Se. acord treizeci puncte din
oficiu. Pentru fiecare problem se citete rspunsul: adevrat sau fals.

74. La informatic i la matematic utilizm frecvent anumite litere din


alfabet. Avnd pentru fiecare liter un punctaj, n funcie de frecvena
de utilizare, calculai punctajul total al alfabetului. Atribuim literelor
urmtoarele puncte:
. n, m, x - 10 puncte
i, j, y - 8 puncte
k, z - 7 puncte
a, b, c, d - 5 puncte
toate celelalte litere un punct.

75. S se afieze pe ecran:


2 prim
3 prim
4 2
5 prim
6 3,2

20
n .....
unde n este un numr ntreg pozitiv citit de la tastatur.

76. Se citete de la tastatur un numr ntreg. S se determine dac exist


vreun sistem de numeraie n care acest numr s fie ptrat perfect.
Exemplu: numrul l l Ll I. In baza 3, 102*102=11111

77. Guliver in tara priculicilor


Priculicii erau nite fiine rnrunele avnd mai puin de 10 degete.
nelepciunea le venea din obiceiul de a se interioriza cnd se nvrteau
n jurul propriei cozi ..
E lesne de nteles , atunci de ce n aceast tar, numerele erau
reprezentate n baza b (numrul de degete b<lO), iar operaiile folosite
erau <, >, +, -, ! definite cum urmeaz:
nrl > nr2 deplasare circular spre dreapta a cifrelor numrului
nrl cu nr2"poziii.
Exemplu: 2443 >2 = 4324
nrl < nr2 deplasare circular spre stnga a cifrelor numrului
nrl cu nr2 poziii.
Exemplu: 2443 < 1 = 4432
+ adunarea numerelor n baza b
scderea numerelor n baza b
complementarea unui numr cifr cu cifr fa de b-I
Exemplu: pentru b=5 !214 =230 (4-2=2; 4-1=3; 4-4=0)
Operatorii n ordine descresctoare a prioritilor sunt: !, apoi < si > si
apoi + si -. n cazul a doi operatori cu aceeai prioritate operaiile se
efectueaz de la stnga la dreapta.
Fiind mari iubitori de matematic, i numrul de la cas i-l scriau sub
form de expresie, ceea ce l ncurca grozav pe Guliver. V rugm s
scriei o aplicaie care s calculeze valoarea unei expresii citite din
fiierul de intrare E.txt (pe prima linie se va citi baza de numeraie iar
pe urmtoarea linie se va citi expresia).
Exemplul 1.
E.txt conine:
5
2134+1111
rezultat obinut: 3300

21
Exemplul 2
E.txt conine:
5
2134+133<1-!230
rezultat obinut: 2301

78. Se spune c fiecare persoan are numrul ei caracteristic. Acest numr


este de o cifr i se calculeaz din mai multe informaii: data naterii(
zi, lun, an) ,precum i numele persoanei. Numrul se calculeaz n
felul urmtor: se adun cifrele din data naterii pn se obine un
numr de o cifr. Se adun numerele corespunztoare literelor numelui
pn se obine un numr de o cifr. Apoi cele doua numere de o cifr
obinute se adun iari pn se obine un numr de o cifr. Acest
numr reprezint numrul personal. Numerele corespunztoare literelor
sunt:
A,J,S 1
B,K,T 2
C,L,U 3
D,M,V 4
E,N,W 5
F,O,X 6
G,P,Y 7
H,Q,Z 8
l,R 9

Exemplu: Pentru Popescu Florin, nscut n 3.10.1970; numrul personal


se obine n felul urmtor:
Numrul corespunztor datei: 3+1+1+9+7=21;
2+1=3
Numrul corespunztor numelui: 7+6+7+5+1+3+3+6+3+6+9+9+5=70;
7+0=7
Numrul personal este: 7+3=10;
1+0=1;
Numrul personal indic anumite caracteristici ale oamenilor.
Scriei un program care citete de la tastatur data naterii i numele
persoanei apoi calculeaz i afieaz numrul personal.

79. Scriei un program care preia de la tastatur un numr scris n baza 2,


adun 1 la acest numr apoi afieaz numrul obinut.

22
80. Scriei un program care citete de la tastatur un numr n scris n baza
de numeraie b<lO apoi calculeaz n baza b valoarea n+ 1 i o afieaz.
Observaie: Nu se va transforma numrul n baza 10. Calculele se
vor efectua direct n baza b.

81. Scriei un program care calculeaz n baza 2 suma a dou numere a i b


scrise n baza de numeraie 2. Programul va citi de la tastatur numerele
a i b care conin doar cifre O i 1, apoi calculeaz i afieaz suma lor n
baza 2. Suma va fi obinut sub forma unui alt numr.
Observaie: Nu se vor transforma numerele n baza 10. Calculele se
vor efectua direct n baza 2.

82. Scriei un program care calculeaz n baza 2 diferena a dou numere a


i b scrise n baza de numeraie 2. Programul va citi de la tastatur
numerele a i b care conin doar cifre O i 1, apoi calculeaz i afieaz
diferena a-b n baza 2. Diferena va fi obinut sub forma unui alt
numr. Se v:pr verifica datele de intrare ca a s fie mai mare dect b.
Observaie: Nu se vor transforma numerele n baza 10. Calculele se
vor efectua direct n baza 2.

83. Scriei un program care calculeaz n baza b suma a dou numere x i y


scrise n baza de numeraie b<10. Programul va citi de la tastatur dou
numere care conin doar cifre cuprinse ntre O i b-I, apoi calculeaz i
afieaz suma lor n baza b. Suma va fi obinut sub forma unui alt
numr.
Observaie: Nu se vor transforma numerele n baza 10. Calculele se
vor efectua direct n baza b.
84. Scriei un program care calculeaz n baza b diferena a dou numere x i y
scrise n baza de numeraie b<lO. Programul va citi de la tastatur dou
numere care conin doar cifre cuprinse ntre O i b-I, apoi calculeaz i
afieaz diferena x-y n baza b. Diferena va fi obinut sub forma unui alt
numr. Se vor verifica datele de intrare ca x s fie mai mare dect y.
Observaie: Nu se vor transforma numerele n baza 10. Calculele se
vor efectua direct n baza b.
85. Scriei un program care calculeaz i afieaz valoarea unui polinom pentru
o valoare X dat de la tastatur. Programul va citi pe rnd cte un coeficient
i gradul termenului cruia li corespunde coeficientul (ntr-o ordine oarecare)
i se va opri cnd coeficientul introdus este zero.

23
CAPITOLUL I I

TIPURI DE DATE STRUCTURATE


u.i. VECTORI

1. O fracie este definit dac se cunoate numrtorul i numitorul ei. Se


d un ir de fracii prin numrtori i numitori (un ir de numrtori i un
ir de numitori). Scriei un program care s determine i s afieze
valoarea fraciilor cu trei zecimale exacte.

2. Se citesc de la tastatur n numere naturale (n numr natural dat). Dac


exist n irul dat elemente ce se repet, s se elimine acestea astfel nct
fiecare element s apar o singur dat.

3. S se scrie un program care calculeaz produsul a n numere ntregi date


de la tastatur.

4. Juctorii unei echipe de fotbal primesc n urma disputrii unui meci prime
de joc. S se verifice dac suma primit de juctorii cu numere pare este
egal cu cea primit de cei cu numere impare. S se scrie un progam
care s afieze Da sau Nu dup cum cele dou sume sunt egale sau nu
sunt egale.
Exemplu: date de intrare: 1,3,5,7,9,12,5. Date de ieire: Nu

5. n clasa 1 doamna nvtoare propune, la ora de aritmetic celor 25 de


elevi ai si urmtorul joc: fiecare elev va desena pe o foaie de hrtie cifra
preferat, apoi cineva din clas va trebui s rspund la urmtoarele
ntrebri: Care sunt cifrele preferate de ctre elevii clasei? Care este cifra
pe care o prefer cei mai muli elevi? Care sunt cifrele care nu sunt
preferate de nici un elev? Scriei un program care s poat rspunde la
aceste ntrebri.

24
6. n curtea unei uniti militare stau aliniai n soldai n faa comandantului
lor. Acesta ordon primului soldat s fac un pas n fa, celui de-al
doilea un pas n spate, celui de-al treilea un pas n fa, etc. Soldaii
stau acum aliniai pe dou linii. Comandantul dorete s aleag pentru o
misiune special un soldat nalt i unul scund. Cunoscnd nlimile
soldailor ajutai-l pe comandant s aleag cel mai nalt soldat din prima
linie i cel mai scund din cea de-a doua linie.

7. ntr-o comun cu n case, numerotate 1,2,... ,n, se construiete o biseric.


Suma alocat de primrie este insuficient pentru a termina construcia,
astfel nct preotul este nevoit s cear ajutorul localnicilor. Acetia
hotrsc s se formeze grupe de cte dou case i fiecare grup s doneze
bisericii o sum de bani, dup posibiliti. Perechile de case trebuie
formate astfel nct suma numerelor de cas de la cele dou case care
formeaz o grup s fie constant. Cunoscnd suma de bani de care
dispune fiecare cas, scriei un program care s-i ajute pe steni s se
grupeze. Programul va afia suma donat de fiecare grup, suma maxim
donat i casele din grupa care a donat aceast sum.

8. Andrei se joac cu numerele. A ales un ir de numere pe care vrea s-I


transforme n alte dou iruri de lungime jumtate, pe care apoi s le
uneasc i astfel s poat reface irul iniial. Primul ir transformat va
avea elemente sumele valorilor din irul iniial calculate astfel: prima
plus a doua, a treia plus a patra, etc, iar al doilea ir format va avea ca
elemente diferenele valorilor din irul iniial calculate astfel prima minus
a doua, a treia minus a patra, etc. Se cere un program care construiete
aceste iruri.

9. La o banc, n persoane au carnete de depozit. La fiecare depunere suma


pe care o are crete. Dac suma depus depete 50.000.000 lei se va
forma un nou depozit pentru aceeai persoan. Scriei un program care
citete numele persoanelor cu depozite pe carnete, sumele depuse, apoi
citete toate depunerile care se realizeaz ntr-o zi. Dac o persoan nu
are un depozit, la prima depunere i se va crea unul, dac are i se va
crete, iar dac creterea depete 50.000.000 lei se creeaz un nou
depozit. La sfritul zilei programul va afia toate depozitele i
proprietarii lor.

25
10. Profesorul de informatic are la dispoziie 14 calculatoare. Cei 28 de
elevi din clas trebuie s se grupeze cte doi. Profesorul cunoate
nivelul de cunotine al elevilor (are mediile lor din semestrul trecut) i
vrea s-i grupeze astfel nct s fie un elev mai bun i unul mai slab.
Scriei un program care citete mediile din semestrul trecut ale elevilor
i afieaz cele 14 grupe.

11. La o benzinrie se vnd n produse. La sfritul anului preurile cresc.


Pentru produsele mai scumpe de 300.000 lei preul crete cu 7% iar la
produsele mai ieftine de 300.000 lei preul crete cu 10%. Scriei un
program care citete preurile vechi, calculeaz i afieaz preurile noi.

12. La ora de geografie profesoara le cere elevilor s memoreze suprafaa


fiecrei ri din Europa. Laura i face o list cu toate aceste informaii
(numele rii, suprafaa). Pentru a le reine mai uor ea ar vrea s
ordoneze aceast list n ordinea descresctoare a suprafeelor. Scriei
un program care s o ajute pe Laura s creeze lista.

13. Fiecare zi din lun este caracterizat de temperatura maxim i minim.


Scriei un program care citete temperaturile maxime i minime din
fiecare zi apoi determin ziua cu cea mai mare diferen de temperatur.

14. La nchisoarea X cei n deinui sunt identificai printr-un numr ntreg


pe care fiecare l poart pe hain. n fiecare lun civa prsesc
nchisoarea (unii eliberai i alii decedeaz), iar n acelai timp sosesc
deinui noi. Numerele celor care prsesc nchisoarea nu sunt atribuite
noilor venii, acetia primind numere noi. Cunoscndu-se numrul
deinuilor aflai la nceputul lunii n nchisoare, numrul de identificare
al fiecruia, precum i numerele celor care prsesc nchisoarea i ale
celor care sosesc, afiai deinuii existeni la sfritul lunii.

15. Ana are de reinut o mulime de numere de telefon. E foarte pasionat de


aceste numere i tie pentru fiecare cte cifre distincte are, care sunt
acestea i de cte ori apar fiecare. Scriei un program care citete un
numr de telefon (n noul format) i afieaz toate datele cerute.

16. Se consider irul de elemente v[1], v[2],...,v[n]. S se afieze elementul


care are cei mai muli divizori.

26
17. Ionel i Gige1 au fiecare n cri preferate citite. S se determine care
sunt crile pe care le-au citit cei doi biei mpreun. S se scrie un
program care citete numrul de cri citite, titlurile crilor citite de
fiecare biat, apoi afieaz crile pe care le-au citit Ionel i Gigel
mpreun.

18. La un concurs pe echipe particip n ri. Se citete ntr-un ir, pentru


fiecare ar, numrul de concureni cu care a venit. Scriei un program
care formeaz un nou ir n care pstreaz numrul de participani
pentru rile cu mai mult de trei participani apoi afieaz irul rezultat.

19. Se citesc de la tastatur numele a n elevi participani la o excursie.


a) S se verifice dac elevii au fost introdui n ordine alfabetica, iar n
caz contrar s se ordoneze acest ir de nume.
b) Considernd c un nou elev s-a nscris pentru excursie, s se citeasc
numele acestuia i s se adauge n sir astfel nct irul s rmn
ordonat alfabetic.

20. Piticii din ara lui Papur Vod s-au hotrt s-i schimbe numerele de la
cas. Au hotrt ca dup fiecare dou cifre s adauge cifra 2. S se scrie
un program care citete de la tastatur numrul de la casa unui pitic i-l
ajut s l schimbe.

21. S se scrie un program care citete de la tastatur elementele unui vector


pn ntlnete valoarea "O". Se cere ca acest program s afieze poziia
elementului egal cu cel mai mic divizor comun al tuturor numerelor din
Ir.

22. Fiind dat un vector ordonat cu n elemente numere ntregi s se gseasc,


dac exist, poziia pe care se afl elementul care poate fi scris ca sum
a tuturor poziiilor de dinaintea lui.
Exemplu: date de intrare: n=5, 1,2,5,6,7. Date de ieire:4;

23. Se citesc de la tastatur numere ntregi separate prin spatii, pn la


apsarea tastei ENTER. Considernd ca aceste numere sunt numitorii
, avnd numrtorul 1, s se calculeze suma acestor fractii.
unor fractii ,
Rezultatul va fi afiat ca raport a dou numere ntregi.

27
24. Se citesc de la tastatur n numere naturale (n<=100). Afiai media
aritmetic a celui mai mic numr format dac lum prima cifr a
primelor n div 2 elemente i a celui mai mare numr format, dac lum
ultima cifr a ultimelor n div 2 elemente ale irului.
Exemplu: date de intrare: n=7, 10,6,13,25,375,80,4.
Date de ieire: 328.

25. Se citete un vector cu n elemente numere naturale. Se precizeaz c


numrul elementelor trebuie s fie mai mare sau egal cu 3. S se
rearanjeze elementele din vector, dac este posibil, astfel nct ele s fie
numere consecutive n irul lui Fibonnacci.
Exemplu:
vectorul 5 2 1 3
se va afia 1 2 3 5

26. Se d un vector de numere ntregi de 2 cifre. S se afieze toate


combinaiile posibile de 3 elemente dac :
a) se formeaz un numr din primul element i ultima cifra a celorlalte
dou;
b) se afl cea mai mare cifr i se formeaz un al doilea numr n care
cifrele au valoarea maximului minus cifra curent;
c) al doilea numr format trebuie s fie divizibil cu cele dou elemente
ale vectorului de la care s-a luat ultima cifr.
Exemplu:
vectorul 56 81 97 33 12 44 23
elementele 97 12 23
primul numr este 9723
maximul este 9
al doilea numr 0276

27. Se citesc de la tastatur n numere naturale i o cifr c.


a) S se afieze frecvenele de apariie ale fiecrei cifre i s se
determine cifra / cifrele cu mai mic frecven de apariie n
numerele din irul dat.
b) S se elimine din ir acele elemente ce au cifra cpe poziia unitilor
i s se afieze irul rezultat.
c) S se elimine cifra c din toate numerele irului i s se afieze irul
rezultat.

28
d) n faa fiecrui element al irului format dintr-o singur cifr se va
insera un nou element de valoare c i s se afieze irul rezultat.

28. La un concurs de matematic particip n concureni. Concursul are m


etape. La fiecare etap concurenii primesc cte o not cuprins ntre O
i 10. Fiecare prob este eliminatorie. Concurenii care obin nota 0, 1
sau 2 sunt eliminai. Scriei un program care citete numele celor n
concureni, pe rnd, notele la fiecare etap, elimin concurenii care au
fost descalificai, iar la sfrit afieaz punctajele celor rmai n
concurs, precum i ctigtorul concursului.

29. Se d un ir x de numere naturale. S se formeze dou iruri y i z, y de


valori naturale iar z de valori reale, de aceeai lungime cu x i care
conin: y partea ntreag, iar z partea fracionar a mpririi elementului
din irul x la poziia lui. S se scrie un program care realizeaz aceasta,.
apoi afieaz irurile rezultate.
.,'
30. Se citete de la tastatur un numr n natural, apoi se citesc n numere
ntregi. S se afieze codificat acest ir de numere astfel: pentru bitul 1
al fiecrui numr se afieaz '.', iar pentru fiecare bit O se afieaz '_'.
ntre afirile a dou numere se las un spaiu.
Exemplu: pentru n=3 citim
123 45 9
n sistem binar acestea ar fi:
1111011 101101 1001
deci pe ecran se va afia:

31. Determinaitoate numerele naturale mai mici dect n, n mai mic dect
100, ale cror ptrate sunt palindrom ntr-o baz b de numeraie
(2~::;10).

32. La sfritul clasei a 9-a dup ce au fost calculate mediile la informatic


Mihai dorete s afle ci colegi l-au ntrecut i au media mai mare
dect el. Cunoscnd N numrul de elevi ai clasei i mediile celor n-I
colegi, precum i media lui Mihai, scriei un program care s-I ajute s
stabileasc pe ce loc este n clas la informatica.

29
33. La o staie meteo se pstreaz temperaturile minime i maxime pentru
fiecare zi dintr-o anumit perioad de n zile. S se afieze:
a) Zilele pentru care diferena dintre troax (temperatura maxim) i troin
(temperatura minim) nu a depit o anumit valoare dat, de la
tastatur.
b) Zilele pentru care troax a fost sub zero grade.
c) S se precizeze care zile au fost cele mai numeroase: cele cu
temperatura minim peste sau sub zero grade.
d) S se construiasc i afieze un alt ir care conine:
+1 pe poziiile corespunztoare zilelor n care temperatura medie a fost
pozitiv;
-1 pe poziiile corespunztoare zilelor cu temperatura medie negativ;
Opentru zilele cu temperatura medie egal cu zero grade.

34. Un numr cu foarte multe cifre scris n baza de numeraie B se


memoreaz sub forma unui ir n care pe fiecare poziie se afl cte o
cifr a numrului. Calculai suma n baza B a dou astfel de numere,
obinnd un alt ir, apoi calculai diferena lor. Afiai rezultatele.
Verificai numerele la .introducerea lor astfel nct cifrele s aparin
bazei de numeraie B.

35. S se mreasc cu l un numr scris n baza 2, pstrat ntr-un ir, pe


fiecare poziie a irului aflndu-se cte o cifr a numrului. S se
afieze irul obinut.

36. Pentru juctorii dintr-o echip de baschet se pstreaz nlimea


fiecruia ntr-un ir de numere. S se insereze n ir dup fiecare
element numrul de coechipieri mai nali dect el n dou moduri:
a) formnd un nou ir.
b) folosind doar irul iniial.
Afiai rezultatul obinut.

37. La ora de educaie fizic elevii sunt aezai pe un rnd n ordinea


nlimii de la cel mai mare la cel mai mic. Profesorul de sport dorete
s-i inverseze, astfel ca s fie aezai de la cel mai mic la cel mai mare.
Pentru aceasta, schimb locul primului cu ultimul, al celui de al doilea
cu penultimul, i aa mai departe. Scriei un program care citete de la
tastatur nlimile elevilor n ordinea descresctoare, nepermind s

30
fie introduse n alt ordine, afieaz irul, apoi inverseaz elevii i-i
afieaz n noua ordine.

38. La un atelier de confecii cele N muncitoare au o norm de realizat de X


cmi n fiecare lun (X dat de la tastatur).
S se scrie un program care:
a) Pentru luna ianuarie citete de la tastatur numrul de camai
confecionat de fiecare muncitoare, l pstreaz ntr-un ir i apoi
afieaz acest ir.
b) Construiete un alt ir care conine pentru fiecare muncitoare
numrul de cmi pe care le-a realizat n plus (peste norm, o valoare
pozitiv) sau n minus (nu a fcut norma, valoare negativ). Pentru
norma realizat exact irul va conine valoarea zero. S se tipreasc
irul obinut.
c) S se precizeze care a fost (a cta) cea mai harnic i care a fost cea
mai lene muncitoare.
d) S se numere i s se tipreasc cte muncitoare au realizat norma
exact, cte au fcut mai multe i cte mai puine cmi dect norma.
e) S se precizeze dac s-a realizat norma n ansamblu (pe total atelier).
f) tiind c manopera unei cmi se pltete cu MIei (M dat de la
tastatur) se cere s se precizeze ce salariu va primi fiecare muncitoare
pe luna ianuarie.
g) Afiai clasamentul realizrilor din atelier n ordine cresctoare i
apoi n ordine descresctoare, scriind pentru fiecare muncitoare
numrul de cmi realizate i numrul ei de ordine n irul iniial.

39. Se citete de la tastatur un ir de numere. S se afieze irul de numere


cte 7 numere pe un rnd. Se vor umple nti 7 rnduri, dup care dac
mai exist elemente se va afia mesajul:
Pagina noua ? (YIN)
n cazul n care utilizatorul apsa Y se va continua afiarea n acelai
mod, altfel algoritmul se oprete.

40. Un copil are pe calculator mai multe jocuri. Pentru fiecare se cunoate
denumirea jocului i dimensiunea n Mega octei. Deoarece nu mai are
spaiu pe disc, se hotrte s tearg cteva jocuri pentru a instala unul
nou. Se cunoate numele i dimensiunea noului joc. S se scrie un
program care s determine toate variantele de jocuri care trebuie terse
pentru ca s ncap noul joc.

31
41. N pitici aezai unul n spatele celuilalt poart cciuli roii sau albe.
Gsii cel mai lung subir de pitici alturai care au cciula de aceeai
culoare. Afiai al ctelea din cei n pitici este primul pitic din acest
subir i ci pitici formeaz sub irul.

42. Profesoara de sport a clasei a X- a i-a rugat pe elevi s se aeze ntr-un


ir, pentru a putea face prezena. Elevii s-au aezat, ntr-o ordine
oarecare. Acum profesoara vrea s vad care e cel mai lung subir de
elevi aezai n ordine cresctoare, dup nlime. Scriei un program .
care citete n (numrul elevilor) i nlimile acestora, n ordinea n
care ei s-au aezat, i afieaz sub irul cutat de doamna profesoar de
sport.

43. Se d un irde numere care se reine ntr-un vector. Se cere s se


tipreasc cel mai lung subir ale crui componente sunt numere n
progresie aritmetic.
Exemplu: date de intrare: 5,2,15,23,2,4,6,-1,33.5,81,21,-19. Date de
ieire: 2,4,6.

44. Se citete de la tastatur un ir de n cifre binare (n-multiplu de 5). Acesta


se mparte n grupe de cte cinci cifre binare, iar numrul n baza doi
din fiecare grup se transform n baza zece. Scriei un program care
construiete un nou ir cu aceste numere n baza zece obinute din
fiecare grup.

11.2. MATRICI

1. La cantina studeneasc se face meniul pentru fiecare zi la nceputul


lunii.Se pstreaz pentru fiecare zi denumirea alimentelor care se
consum i cantitatea fiecrui aliment. S se scrie un program care
realizeaz urmtoarele:
a) Determin i afieazpentru fiecare zi din lun mncarea de baz
(cu cantitatea cea mai mare),
b) Determin i afieaz alimentele care nu se consum n fiecare zi (au
cantitatea O). .

32
2. La o clasde elevi, numerotai de la 1 la n, se pstreaz pe calculator
evidena mediilor din semestrul 1 a fiecrui elev. S se scrie un program
care realizeaz urmtoarele:
a) Determin i afieaz elevii care au majoritatea mediilor peste 7.
b) Afieaz elevii n ordinea mediilor la romn (este prima materie n
catalog).

3. La o clas de elevi se pstreaz pe calculator mediile din semestrul 1 ale


fiecrui elev, la fiecare disciplin. S se scrie un program care citete de
la tastatur aceste date apoi afieaz mediile fiecrui elev, cresctor.

4. La o clas de elevi se pstreaz pe calculator mediile din semestrul 1 ale


fiecrui elev, la fiecare disciplin. S se scrie un program care citete de
la tastatur aceste date, apoi formeaz un ir cu acele medii ale elevilor
care sunt maxime (la fiecare elev se pstreaz media maxim).

5. O firm de tUrism pstreaz pentru toate staiunile de pe litoral preurile


de cazare corespunzatoare fiecrei perioade. Perioadele se numeroteaz
ncepnd cu sptmna 1V-7V, care este prima din sezon, pna la a 25-a
sptamn. S se scrie un program care realizeaz urmtoarele:
a) Determin i afieaz staiunea care are cel mai mic pre pentru
sptmna a 7-a,
b) Determin i afieaz perioada cu preul mediu cel mai ridicat.

6. La o clas de elevi se pstreaz pe calculator numele elevilor, precum i


mediile din semestrul 1 ale fiecrui elev, la fiecare disciplin. S se scrie
un program care ordoneaz elevii descresctor dupa media general apoi
i afieaz n aceast ordine.

7. La clasa a IX-a dirigintele a pstrat pe calculator pentru toi elevii


numele, prenumele i mediile la cele 15 discipline. Dintr-o greeal a
inversat mediile elevei POP RODICA cu mediile elevei POP RADA.
Scriei un program care s-I ajute pe diriginte s corecteze greeala,
inversnd mediile celor dou eleve. Informaiile au fost memorate n
calculator n ordinea alfabetic.

8. ntr-o livad mare pomii sunt plantai pe rnduri , formnd o matrice.


Pentru fiecare pom din livad se cunoate vrsta lui i specia.
Proprietarul livezii vrea s-i construiasc o cas, undeva la marginea

33
livezii, dar nu are suficient spaiu. Ar trebui s taie un pom de pe
margine i spaiul i-ar fi suficient. Pentru c nu ar renuna la nici un pom
se hotrete s taie cel mai btrn pom de pe marginea livezii. Scriei un
program care s rezolve aceast problem, afind un mesaj
corespunztor.

9. La clasa 1, la ora de educaie fizic, nvtoarea i aeaz pe elevi pe 5


rnduri i 6 coloane. Elevii sunt aezai dup nlime. ntr-una din ore
elevul POP SORIN lipsete, iar locul lui ar trebui ocupat astfel nct
locul liber s rmn n ultimul rnd. Toi elevii, de dup el ar trece
atunci pe poziia dinaintea lor. Scriei un program care citete de la
tastatur numele, nlimea celor 30 de elevi, determin aezarea
obinuit, apoi determin i afieaz noua aezare a elevilor.

10. Pe o tabl de ah (8*8=64 ptrele) sunt aezate n ture (n<64). Poziia


fiecreia este dat prin dou coordonate x, y. Turele care se gsesc pe
aceeai linie (vertical sau orizontal) dispar instantaneu. Afiai
coordonatele turelor care au rmas pe tabla de ah.

11. Aceeai problem, dar n locul turelor avem nebuni care se atac pe
diagonal.

12. Un teren muntos are forma unei matrice cu m*n zone, fiecare zon
avnd o nlime cunoscut. Un alpinist vrea s caute cea mai nalt
zon, iar dac sunt mai multe cu aceeai nlime s o aleag pe cea care
are cele opt zone nvecinate de nlimi foarte mici (suma nlimilor s
fie cea mai mic). Ajutai alpinistul s gseasc zona preferat (aceast
zon nu trebuie s fie pe margine).

13. n prima zi de coal, n curtea colii domnul director le cere tuturor


elevilor s se aeze pe clase, astfel: pe linia din faa lui clasa nti, pe a
doua linie clasa a IT-a, etc., pe ultima linie clasa a VIIT-a. Apoi le spune
elevilor s se aeze pe fiecare linie de la dreapta la stnga, nti fetele,
apoi bieii. n aceast configuraie se pot observa uor care sunt clasele
cu cele mai multe fete. Se tie c n fiecare clas sunt 25 de elevi. Se va
citi de la tastatur configuraia iniial a elevilor, se va ordona fiecare
linie fete-sbiei, apoi se vor afia clasele cu cele mai multe fete.

34
14. Se citete o matrice An*m (n:::;lO, m:::;20) cu elemente cifre de la Ola 9. S

Exemplu: 1
se afieze suma numerelor care se pot forma din cifrele fiecrei linii.
O6 8 2 4
Pt. matricea A3*5 9 7 O 5 8 se va calcula
6824+
97058
3 1 7 9 5 31795
135677
i se va afia 135677.

15. Cei n2 elevi ai unei clase sunt aezai ntr-o matrice de nxn. Se citesc n i
matricea cu numrul de ordine al elevilor n catalog. S se scrie un
program care afieaz elevii de pe diagonala principal.
16. Se citete o matrice cu nxm numere reale. S se scrie un program care
afl linia care are suma elementelor cea mai mare, o afieaz apoi
calculeaz i afieaz aceast sum.

17. Un apartament are planul codificat sub forma unei matrici nxm. Pereii
sunt codificai cu -1, uile cu O, iar camerele cu numere ncepnd de la
1. S se scrie un program care determin i afieaz camera cea mai
mare ca arie.
18. Se citete de la tastatur o zi n care ncepe luna i numrul de zile al
lunii. S se scrie un program care construiete calendarul lunii respective
i afieaz acest calendar sub o form frumoas.

19. Se citete de la tastatur o matrice nxm. S se ntoarc matricea 90 spre


dreapta.

20. Un panou cu numere este prins ntr-un cui n mijloc i se poate roti spre
dreapta. Afiai valorile din panou dupa 1, 2 sau 3 rotiri succesive spre
dreapta (se consider c dup o rotire numerele se pot vedea normal,
deci nu rsturnate). Generalizare pentru fi rotiri.

21. O carte deschis conine n centrul fiecarei pagini cte un tabel cu


numere (tabelele conin acelai nr. de linii i coloane). S se stabileasc
dac, atunci cnd se nchide cartea, numerele care se suprapun au
aceeai valoare. Se va afia "identic" dac suprapunerea e perfect,
respectiv "diferit" n caz contrar. Rezolvai problema folosind:
a) dou matrici cu aceleai dimensiuni
b) o singur matrice.

35
22. Considernd o matrice Amxn numim oglindita ei spre est matricea
Bmxn n care fiecare linie 1 este format din elementele liniei 1 din A
luate n ordine invers, de la ultimul spre primul. Analog obinem
oglindita spre sud a lui A: matricea n care fiecare coloan j este format
din elementele coloanei j din A luate n ordine invers.
Exemplu: oglindita spre est a matricii 1 2 3 este matricea 3 2 l,
456 654
789 987
iar oglindita spre sud este matricea 7 8 9
456
123
Scriei un program care s obin i s afieze matricea oglindit spre est
i matricea oglindit spre sud pentru Amxn dat.

23. Fiind dat o matrice A numim matrice completata spre est matricea ce
conine pe fiecare linie 1 elementele liniei 1 din A urmate de elementele
liniei 1 luate n ordine invers. Exemplu:
Pentru matricea 1 2 3 , matricea completat spre est este: 1 2 3 3 2 1
456 456654
789 789987
Scriei un program care citete o matrice i obine matricea completat
spre est.

24. Analog s se obin matricea completat spre sud.

25. Dndu-se o matrice, s se stabileasc dac ea reprezint o matrice


completat spre est sau spre sud.

26. Dndu-se dou matrici cu aceleai dimensiuni, s se stabileasc dac una


reprezint oglindita spre est a celeilalte.

27. La instrucia de diminea p soldai (avnd fiecare un numr de


identificare) sunt aliniai ntr-un ir. Li se ordon s se grupeze pe m
rnduri i n coloane astfel: primii il din ir n primul rnd, urmtorii n
din ir n al doilea rnd etc. (se consider p=m*n). Afiai careul
rezultat.

36
28. Comandantul soldailordin problema anterioar ordon "La loc
comanda!". Scriei un program care s simuleze aciunea
corespunztoare, adic formarea irului din careu.

29. Un test conine n ntrebri, fiecare rspuns corect valornd 1 punct.


Comisia de evaluare primete rezultatele a m candidai i dorete s
ntocmeasc un raport din care s reias:
a) care au fost ntrebrile la care nu a tiut s rspund nimeni;
b) care au fost ntrebrile la care a tiut s rspund majoritatea (peste
50% din subiecii testai);
c) cte persoane au rspuns corect la toate ntrebrile.

30. O persoan, are un bilet cu 4 linii i 5 coloane la jocul Bingo. Se anun


numerele de pe linia cstigtoare. Stabilii dac biletul a fost ctigtor
(un bilet se consider ctigtor dac el conine linia cstigtoare).
31. Se consider lJ) matrice Am;m , cu n=2*m-1. Se cere s se calculeze
sumele din zonele haurate (triunghiurile din mijloc).

32. Fiind dat o matrice cu m linii i n coloane s se elimine o linie k far a


folosi alte matrici.

33. S se scrie un program care verific dac o matrice ptratic e


triunghiularinferior (elementele de sub diagonala principal sunt egale
cu zero).
Exemplu: 1 2 3 4
0579
0064
0001

34. O grdin dreptunghiul ar de lungime m i lime n conine rondouri de


plante diferite, un rondou are lungimea m. Aranjai rondourile astfel
nct la sfrit s fie grupate ntr-un capt al grdinii acele rondouri ce
conin flori.

35. ntr-o grdin exist N pietre. Forma grdinii este un dreptunghi cu


laturile de Lg i Lt (date n metri). Se dau coordonatele pietrelor din

37
interiorul dreptunghiului, se cere s se afle dreptunghiul de arie maxim
din interiorul grdinii.

36. Considerm urmtorul joc: avem o tabl dreptunghiular de lungime n i


lime m. Tabla este mprit n ptrele, asemntor tablei de ah. n
fiecare ptrel se afl un cartona pe care este scris un numr ntreg.
Trebuie gsit suma cartonaelor ce conin numere pozitive i se gasesc
pe coloane i linii pare de pe tabla de joc.

37. Fie o tabl de ah de latur n. Pe fiecare ptrel se scrie un numr


natural. Gsii toate perechile de ptrele care sunt simetrice fa de
diagonal i conin valori ce sunt prime ntre ele.

38. Elevii dintr-o clas sunt aezati n bnci pe rnduri i coloane. Se tie
cte rnduri i cte coloane de elevi sunt n clas. Cunoscndu-se nota la
ultima lucrare la informatic pentru fiecare elev din clas n ordinea n
care sunt aezai n bnci i tiind c pentru elevii abseni nota dat de la
tastatur este O (zero) s se afieze numrul de elevi abseni la lucrare
din fiecare rnd i poziiile elevilor abseni pe coloane sub forma: "din
coloana 'i' au fost abseni elevii de pe poziiile: kl, k2, ..., kp (p -
numrul de abseni pe coloana i).

39. ntr-o livad pomii sunt aezati pe n rnduri i pe m coloane. Pentru


fiecare pom se cunoate nlimea sa. Primvara, grdinarul dorete s
curee pomii de crengile uscate. El ar vrea s treac pe la fiecare pom n
urmtoarea ordine:
a. rndul 1 de pomi de la primul la ultimul apoi n rndul al doilea de la
ultimul la primul, n al treilea rnd de la primul la ultimul . a. m. d.
pn cnd termin pomii de curat. Tiprii poziiile pomilor din livad
n ordinea n care va trece grdinarul pe la ei.
b. n spiral, rndul 1 de la primul pom la ultimul, coloana m de la primul
pom la ultimul, rndul n de la ultimul la primul, coloana 1 de la ultimul
la primul dup care s continue cu rndul 2, coloana m-I, rndul n-I,
coloana 2, etc. pn termin pomii de curat. Tiprii poziiile pomilor
din livad n ordinea n care va trece grdinarul pe la ei tiind c pe la
un pom deja curat grdinarul nu trece nc odat.

a) Afiati poziia pomului care este cel mai nalt n rndul lui iar pe
coloana lui cel mai scund.

38
b) Care este poziia i nlimea copacului cel mai scund ? Dar pentru
cel mai nalt?
c) Afiati liniile n care exist cel puin un pom cu nlimea sub
valoarea x (dat de la tastatur).
d) Afiai numrul de pomi mai nali dect o valoare dat de la
tastatur, y, din fiecare coloan.

40. Se d o matrice de n*n numere naturale (n numr natural dat),


reprezentnd codurile de culoare ale pixelilor unei imagini ce urmeaz a
se reprezenta pe ecran. Se citesc de asemenea valorile liml i lim2
reprezentnd codurile culorilor limit ale monitorului pe care dorim s
facem afiarea. Avnd n vedere faptul c monitorul nu poate reprezenta
culori cu coduri mai mici dect lim l i nici mai mari dect lim2, s se
efectueze o operaie de corecie asupra matricii date astfel nct orice
valoare mai mic dect liml s fie nlocuit cu liml i orice valoare mai
mare dect lim2 s fie nlocuit cu lim2, astfel nct fiecare valoare a
matricii s aib un corespondent real de culoare.

41. Se d o matrice de n*n numere naturale (n nr. natural dat) reprezentnd


codurile de culoare ale unei imagini. S se determine nuana
predominant din tablou i ce procent din ntreaga matrice reprezint.

42. Se d o matrice de n*n numere naturale (n nr. natural dat) reprezentnd


codurile de culoare ale unei imagini. S se determine contururile nchise
existente n aceast imagine.
43. Se d o matrice de n*n numere ntregi (n numr natural dat). S se
interschimbe elementele dintre cele dou diagonale ale matricii (zona
asemntoare cu o clepsidr), prin simetrie fa de orizontala ce trece
prin mijloc astfel nct cele mai mari elemente s se afle n partea de jos,
iar cele mai mici n partea de sus.
Ex: Se d:
77 3 28 33
I O 11
55 10
8 11
11
7 7

39
44. Se d o matrice i dou numere naturale a i b, reprezentnd limitele
unui interval. S se elimine din matrice elementele ce nu aparin
intervalului [a.b], mpreun cu linia i respectiv coloana
corespunztoare.

45. Se citete de la tastatur o matrice de numere O sau 1 (bii). Matricea va


avea dimensiuni n*m, n i m fiind dou numere naturale date. Una din
tehnicile ce au fost utilizate n transmisia datelor la distan, pentru
sigurana transmiterii corecte a datelor const n determinarea a dou
numere obinute din adunarea n baza 2 a cifrelor pe vertical i
respectiv orizontal, aceste numere fiind transmise i ele. S se
determine aceste numere pentru o matrice dat.
Se va observa c n cazul deteriorrii informaiei dintr-un bit al matricii,
prin recalcularea celor dou numere vor rezulta diferene n ambele
numere, un bit alterat modificnd att informaia pe linia pe care se afl
ct i pe coloana sa.

46. Se citesc de la tastatur n*m numere naturale ntr-o matrice cu n linii i


m coloane, reprezentnd mediile a m elevi la n materii (n i m sunt dou
numere naturale citite de la tastatur).
a) S se afieze o situaie statistic general cuprinznd:
numrul de medii sub 5
numrul de medii cuprinse ntre 5 i 5.99
numrul de medii cuprinse ntre 6 i 6.99

numrul de medii cuprinse ntre 9 i 9.99


numrul de medii de 10
b) S se afieze descrescator un clasament al materiilor dup numarul
de corigene. Nu vor fi afiate materiile la care nu exista corigeni.

47. Un matematician, iubitor de tir sportiv i-a pus problema construirii unei
inte ptrate de latur n (n numr natural citit de la tastatur), n care
punctajele s fie distribuite dup reguli matematice proprii. S-a gndit
nti s genereze irul punctajelor dup urmatoarea regul:
1 2 3 4 2 5 6 3 7 8 4 9 3 10 5 11 12 6 ...
adic fiecare numr natural neprim este urmat de cel mai mare divizor
de-al su. Apoi, pentru o bun distribuie a acestor numere ce trebuie s
creasc pe interior s-a gndit s le aeze n form de spiral ncepnd din

40
colulstnga sus, continund spre dreapta i apoi jos. S se afieze inta
obinut pentru o latur n citit de la tastatur.

II.3. IRURI DE CARACTERE

1. Se citete de la tastatur un cuvnt. S se stabileasc dac el conine


dou litere alturate identice, afi.ndu-se un mesaj corespunztor.

2. Se citete de la tastatur un ir de caractere ce reprezint un numr de


telefon. Numrul este format dintr-un prefix de 4 cifre urmat de "-" i
apoi de 6 cifre. Afiai numrul de telefon fr prefix.

3. Se citete de la tastatur un cuvnt cu litere mari sau mici. S se scrie un


program care s afieze cuvntul scris cu prima liter mare i restul mici.

4. Se citesc deIa tastatur n cuvinte. Se cere s se afieze cuvintele cu


lungime maxim.

5. S se scrie un program care s valideze citirea unui ir de caractere ce


reprezint numrul de nmatriculare al unei maini: primele dou
caractere trebuie s fie litere mari, urmtoarele dou trebuie s fie cifre,
iar ultimele trei litere mari.

6. Un lingvist face un studiu asupra unui text scris ntr-o limb strin. El
vrea s afle de cte ori apare n text fiecare liter a alfabetului. Scriei un
program care citete de la tastatur un text scris cu majuscule i afieaz
numrul de apariii pentru fiecare liter.

7. Se citesc de la tastatur n cuvinte. Se cere s se afieze numrul


cuvintelor ce conin caracterul "-" (liniua de desprire).

8. De la tastatur se citesc n litere i un cuvnt. S se scrie un program care


s afieze dac folosind literele citite se poate scrie cuvntul ( exemplu:
n=3 literele citite: ma b ; cuvntul citit: mama=>DA).

9. La bibliotec se pstreaz pentru fiecare carte titlul i autorul.


Bibliotecara vrea s aranjeze crile pe rafturi grupate pe autori. Afiai
aceste informaii n liste: prima list conine toi autorii al cror nume

41
ncepe cu litera 'A', a doua list conine autorii al cror nume ncepe cu
'B', etc.

10. Se citesc de la tastatur n cuvinte. Se cere s se afieze cuvintele


palindrom (un cuvnt se numete palindrom dac citindu-l de la sfrit
spre nceput se obine acelai cuvnt).

11. n depozitul de papetrie al unei firme se gsesc n produse. Pentru


fiecare produs se cunoate denumirea i preul. La sfritul trimestrului 1
se scumpete hrtia cu 30% i n consecin, toate produsele de hrtie.
Scriei un program care s listeze toate produsele i preurile lor, tiind
c la produsele care conin n denumire cuvntul "hrtie" preul crete cu
30%.

12. Se citetede la tastatur un text. S se afieze propoziia ce conine un


numr maxim de litere.

13. n tren un cltor l ntreab pe vecinul su cum se numete i n ce dat


s-a nscut. Acesta i ntinde o bucat de hrtie pe care este scris un ir de
litere amestecate cu cifre i i spune c dac elimin cifrele din ir
rmne numele i prenumele, iar dac elimin literele rmne data
naterii (sub forma zzllaaaa). Ajutai cltorul s afle rspunsul la
ntrebarea pe care a pus-o.

14. n magazia cantinei colare se gsesc n alimente, fiecare avnd o


anumit cantitate. Pe msur ce produsele se consum, cantitatea scade.
n momentul n care cantitatea ajunge la zero trebuie aprovizionate.
Scriei un program care listeaz produsele cu cantitatea zero i afieaz
alfabetic toate produsele i cantitile acestora.

15. Se citete un text dat ntr-o linie de la tastatur n care cuvintele sunt
separate prin unul sau mai multe spaii. Textul poate ncepe direct cu un
cuvnt sau cu unul sau mai multe spaii. Calculai i afiati numrul de
cuvinte din text.

16. Pentru jocul "Nu spune NU" realizai un program care verific dac ntr-
un text dat apare vreodat cuvntul NU.

42
17. Mama lui Ionel s-a ntors de la pia i vrea s afle ct a cheltuit. Ea i d
lui Ionel lista cumprturilor care conine produsele cumprate i
costurile lor. Ajutai-I pe Ionel s scrie un program care citete lista
cumprturilor ca ir de caractere i afieaz valoarea total a produselor
din list.

18. Ionel i
colegii lui nva la ora de geografie rile lumii. Elevii trebuie
s cunoasc pentru fiecare ar capitala ei i continentul din care face
parte. Pentru ca s nvee mai uor, Ionel vrea s alctuiasc dou liste
cu aceste date: una n care rile s apar grupate pe continente
(continentele s fie n ordine alfabetic) i alta n care rile s fie afiate
n ordinea alfabetic a capitalelor. Ajutai-l pe Ionel scriind un program
corespunztor.

19. Se citete de la tastatur un ir de caractere format din litere mici ale


alfabetului englez i un numr de maxim 12 cifre. Valoarea fiecrei cifre
din numrul' dat ne indic a cta liter din ir trebuie selectat, ncepnd
cu prima liter care urmeaz dup o liter selectat anterior (pentru
prima cifr a numrului, numrarea literelor ncepe cu prima liter din
ir). Literele astfel selectate formeaz un cuvnt. Construii i afiai
cuvntul obinut.

20. Se citete de la tastatur o linie cuprinznd cuvinte separate prin unul


sau mai multe spaii. Afiai numrul cuvintelor care sunt scrise cu
majuscule.

21. Andrei este elev n clasa 1 i a primit ca tem s scrie o compunere.


Doamna nvatoare a observat c Andrei a scris greit un cuvnt i vrea
s afle dac greeala a fost repetat. Scriei un program care citete
textul compunerii i cuvntul scris greit i afieaz de cte ori apare
cuvntul n text.

22. Se citete de la tastatur un text ce conine litere mici i spaii. Afiai


numrul cuvintelor care au literele ordonate alfabetic.

23. Laura iAna vor s-i scrie scrisorile cifrat, pentru a nu le putea citi
prinii. Astfel litera 'A' devine litera 'C', litera 'B' devine 'D', etc. Litera
'X' devine 'Z', 'Y' devine 'A', 'Z' devine 'B'. Scriei un program care

43
codific un text scris cu majuscule, folosind modul de codificare
specificat.

24. Se citesc n cuvinte. S se scrie un program care s afieze dou liste: una
care conine cuvintele n care predomin vocalele i alta care conine
cuvintele n care predomin consoanele.

25. Mesajul secret al bunicii:


Pe la nceputul secolului nostru, cnd bunica era fat, circula prin lume
moda codificrii scrisorilor de dragoste. Se folosea un cod simplu, cum
ar fi:
LA CE NI RO PU n care fiecare vocal era cuplat cu o consoan.
Att la codificare ct i la decodificare se nlocuia n tot textul vocala
prin consoana corespunztoare i invers. S se scrie un algoritm care
codific un text citit de la tastatur.

26. La nceputul anului colar doamna dirigint primete o list cu numele


elevilor (Popescu, Moldovan, Amariei). Ea vrea s insereze naintea
numelui iniiala prenumelui lor (M.Popescu, A.Moldovan, L.Amariei),
astfel nct noul identificator va conine iniiala, punct i numele, fr
spaii. S se scrie un program care s simuleze aceast operaie. Se
citesc-numele i prenumele celor n elevi din clas.

27. Se citete de la tastatur un cuvnt i apoi o fraz ce conine cuvinte


separate prin spaii. S se stabileasc dac exist n fraz dou cuvinte
care prin concatenare formeaz cuvntul citit, i n caz afirmativ s se
afieze cele dou cuvinte.

28. Un reporter are nregistrat un interviu luat unei vedete de muzic pop. l
intereseaz n mod special rspunsul la ntrebarea legat de anul n care
a scos primul album. Scriei un program care citete fraza reprezentnd
rspunsul vedetei i afiai numrul reprezentnd anul (pot exista n
fraz i alte date numerice, de ordinul milioanelor, dar numai una este
anul primei apariii discografice).

29. Se citete un text de la tastatur scris pe o linie pn la apsarea tastei


<enter>. ntre fiecare dou cuvinte pot fi unul sau mai multe spaii.
Textul poate ncepe cu un cuvnt sau cu unul sau mai multe spaii. S se
afieze textul formatat: scris cu majuscule, ntre fiecare dou cuvinte s

44
existe un singur spaiu, textul s nceap direct cu un cuvnt fr spaii
n fa.

30. Un test de informatic conine n itemi. Se cunoate punctajul fiecrui


item. Toi elevii unei clase dau acest test. Pentru fiecare elev se cunosc
itemii la care a rspuns corect. Scriei un program care citete numele
tuturor elevilor, itemii la care au rspuns corect apoi afieaz elevii n
ordinea descresctoare a punctajului realizat.

31. Se citesc de la tastatur n ordine alfabetic numele a n persoane. Se


cere s se scrie un program n care:
a) Se verific datele la introducerea lor astfel nct s nu fie permis
citirea ntr-o alt ordine dect cea alfabetic.
b) Se afieaz numele care ncep cu pop de ex. pop, popescu, popa,
popovici, etc.
c) Se creaz un ir de caractere din aceste nume prin concatenarea lor
fiecare dou nume fiind separate n ir prin cte un spaiu. Se afieaz
irul obinut.
d) Se elimin din irul de la punctul c numele care ncep cu
pop . Se afieaz irul obinut.

32. ntr-un studio de nregistrri se fac mixaje. Un copil ajunge la calculator


i din lista de melodii selectate face tot din cte 3 melodii consecutive
una. Pentru ca s tie care sunt melodiile folosite le d numele sugestive.
Prima parte a numelui melodiei este format din prima treime a numelui
primei melodii, partea din mijloc a numelui rezultat este format din
treimea din mijloc a melodiei a doua, iar ultima parte a numelui
melodiei este format din ultima treime al celui de-al treilea nume. S se
scrie un program care citete irul numelor melodiilor i determin
numele rezultate.
Obs.: pentru un ir de caractere de lungime n considerm c prima i a
doua treime conin nl3 caractere, iar ultima treime conine restul
caracterelor.
Exemplu: Ochii ti, Hero, Dimineaa, Canadia
Se va afia: Ocheata, Hineana.

33. Se citete
de la tastatur un numr natural, reprezentnd o sum de lei.
S se afieze n cuvinte suma respectiv.
Exemplu: Se d: 7 850321

45
Se afieaz: apte milioane opt sute cinci zeci de mii trei sute dou zeci
unu lei.

34. Se citete de la tastatur un ir de caractere ce reprezint o mulime de


numere scrise n baza 16, separate prin caracterul "T", S se afieze
valoarea n baza 1O a acestor numere.

35. Fie a i b dou numere reale i p natural nenul. S se afieze zecimalele


p i p+ 1 ale numrului real alb.

36. Conform tratatelor de numerologie numele dumneavoastr ntreg


influeneaz imaginea dumneavoastr public i va reprezinta n
totalitate. Numrul asociat numelui dumneavoastr se calculeaz ca
suma tuturor numerelor asociate literelor care l compun, adunate pn
cnd rezultatul final este doar o cifr. Dndu-se de la tastatur numele
ntreg al unei persoane, s se calculeze cifra asociat acestuia. Se cunosc
de asemenea valorile asociate fiecarei litere:
1 pentru A,J,S 2 pentru B,K,T 3 pentru C,L,U
4 pentru D,M,V 5 pentru E,N,W 6 pentru F,O,X
7 pentru G,P,Y 8 pentru H,Q,Z 9 pentru l,R
Exemplu: Popescu Ana
7+6+7+5+1+3+3+1+5+1=32+7=39
se transform n continuare n 3+9=12
1+2=3

H.4. NREGISTRRI

1. Un cilindru circular drept este caracterizat de raza bazei i nlime.


Scriei un program care citete aceste informaii referitoare la un cilindru
apoi calculeaz i afieaz aria lateral, aria total i volumul cilindrului,
Obs.: Datele referitoare la cilindru vor fi descrise ca articol.

2. Pentru dou persoane se cunosc urmtoarele informaii:


numele
data naterii (zi, lun, an)
S se scrie un program care citete n variabile de tip articol aceste
informaii apoi afieaz numele persoanei mai vrstnice precum i
vrsta acesteia.

46
3. Fiind date dou numere complexe a i b, fiecare scrise sub forma x+yi (x
i y sunt numere reale) se cere s se calculeze i s se afieze suma,
diferena, produsul i modulul celor dou numere complexe.

4. Pentru cei n elevi ai unei clase se cunosc urmtoarele date: numele,


prenumele, numrul de absene, media general. S se scrie un program
care citete aceste informaii, calculeaz media general a clasei i
afieaz toate informaiile n ordinea descresctoare a mediei generale.

5. La un magazin de textile produsele sunt caracterizate de urmtoarele


informaii:
1 denumirea articolului
.. preul unui metru de material
limea materialului
cantitatea de material
Scriei un ~~ogram care citete de la tastatur informaiile referitoare la
cele n produse din magazin, calculeaz i afieaz valoarea total a
materialelor existente.

6. Pentru elevii clasei a IX-a profesorul diriginte are nevoie de urmtoarele


informaii: numele, prenumele, numrul de absene, numrul de absene
nemotivate, media la purtare. Dintre aceste informaii, numele,
prenumele, numrul de absene i absenele nemotivate se preiau din
catalog (se cunosc), iar media la purtare se calculeaz n funcie de
absenele nemotivate astfel:
ntre 0-9 absene nota 10
ntre 10-20 absene nota 9
ntre 21-27 absene nota 8
ntre 28-35 absente nota 7
ntre 36-42 absene nota 6
ntre 43-50 absene nota 5
peste 50 absene nota 4
Scriei un program care calculeaz notele la purtare ale elevilor, le afieaz,
apoi afieaz o list a elevilor ordonat dup numrul total de absene.

7. n laboratorul de informatic sunt n calculatoare. Pentru fiecare se


cunoate tipul procesorului, capacitatea memoriei interne, capacitatea
hard discului, tipul monitorului i alte periferice. Scriei un program care
citete aceste informaii apoi afieaz toate echipamentele pe care poate

47
rula sistemul de operare WINDOWS 95 (adic procesor cel puin 486,
memorie cel puin 32MO, capacitatea hard discului cel puin 200MO).

8. La un festival de dans studenesc particip n trupe. Fiecare trup


prezint un program care dureaz d minute. Dansurile se identific prin
numele dansului precum i numele trupei. Scriei un program care
realizeaz programarea pentru festival a acestor trupe. Ordinea de
concurs este cea cresctoare a duratei. Pentru a putea fi urmrite de
ctre juriu mai este necesar o listare a trupelor alfabetic.

9. Pentru a scrie catalogul, dirigintele are nevoie de numele i prenumele


elevilor. Se citete n (numrul elevilor) apoi n perechi de date. S se
ordoneze aceste date alfabetic, dup nume, iar pentru elevii cu acelai
nume s se ordoneze alfabetic dup prenume.

10. N ferme au gini, rae, porci, vaci i cai. Se citete n, apoi n mulimi de
numere reprezentnd numrul ginilor, raelor, porcilor, vacilor i al
cailor. S se afieze ferma care are cele mai multe gini, rae, porci, vaci,
cai i care are cele mai multe animale.
11. N firme de construcii particip la o licitaie, pentru a face o lucrare.
Fiecare are o ofert de pre i de durat. Se citete n apoi n perechi de
numere reprezentnd preul/zi de lucru i durata (n zile). S se afieze
care e cea mai bun ofert (cea mai ieftin).

12. Se citesc lungimea i limea pentru mai multe dreptunghiuri. S se


calculeze care dreptunghi are cea mai mare diagonal i care are aria cea
mai mare.

13. Se citesc de la tastatur n*m numere reale, elemente ale unei matrici cu
il linii i m coloane, (n i m sunt dou numere naturale citite de la
tastatur). S se creeze un ir de articole ordonat cresctor coninnd
numerele distincte din matrice i frecvenele de apariie ale acestora.

14. Pentru mai multe videoclipuri se citete artistul, denumirea piesei (max.
200 caractere) i albumul de pe care aceasta face parte. Se citete de la
tastatur o pies. Dac aceasta este pe list s se afieze artistul i
albumul de pe care aceasta face parte.

48
15. La un magazin se pstreaz pentru fiecare tip de produs, dintre cele n
tipuri existente, denumirea i preul. Pentru fiecare client vnztoarea
tasteaz indicele pentru fiecare din cele k produse cumprate i
cantitatea cumprat din fiecare produs. Scriei un program care:
a) permite introducerea de la tastatur a denumirilor i preurilor celor
n tipuri de produse;
b) preia de la tastatur indicii produselor i cantitile pentru cele k
produse cumprate de un client i afieaz factura de plat sub
forma:
produs 1 cantitate1 * pre1
produs2 cantitate2 * pre2

produsk cantitatek * prek


TOTAL suma de plat

16. Se dau n puncte (A, B, C,... ) i coordonatele lor ntr-un plan xOy. S se
afieze toate triunghiurile echilaterale ce se pot forma din aceste puncte.

17. Se citesc de, la tastatur perechi de numere naturale, reprezentnd


numrtorul i numitorul unei fracii simple. Citirea se termin la
ntlnirea perechii (0,0). Afiai:
a) numrtorul i numitorul fraciei/fracii1or care are/au valoare
maxim;
b) numrtorul i numitorul fraciei obinute prin nmulirea acelor fracii
din irul dat,astfelnct valoarea fraciei produs s fie maxim.

18. Se d o sum de puteri (fiecare termen este format din baz i exponent).
Calculai i afiai valoarea acestei sume.

19. Se d un produs de puteri (fiecare factor este format din baz i


exponent). Utiliznd formula. an * affi=an+ffi , eliminai din produs acei
factori a cror baz se repet, apoi calculai i afiai valoarea
produsului.

20. Un DJ are o list cu piese muzicale, pentru fiecare fiind precizat


formaia, titlul piesei, genul i durata. DJ-ul este invitat la o petrecere i
i propune s fac o selecie de 100 de minute de muzic. Pentru
aceasta urmeaz s copieze pe un CD mai multe piese din lista pe care o

49
are, astfel nct s apar cel puin o melodie din fiecare gen i, dac e
posibil, din fiecare formaie. Afiai o variant pentru lista de piese
selectate de DJ pentru petrecere.

21. La proba de srituri a unui concurs de gimnastic artistic fiecare


concurent are dreptul la dou srituri i pentru fiecare saritur i se
acord o not. Preedintele juriului a primit lista cu notele acordate celor
n sportive participante la concurs i vrea s afle urmatoarele:
a) cine era n top dup prima sritur? .
b) dar dup a doua sritur?
c) care sunt concurentele care au avut diferena mai mare de un punct
ntre notele de la cele dou srituri?
d) care sunt numele primelor 10 clasate i notele lor finale (nota final
a unei concurente se obine ca medie a celor dou note).
Scriei un program care s soluioneze cerinele preedintelui juriului.

22. Un elev a primit o tem pentru ora de geografie: trebuie s afle


informaii despre anumite ri de pe glob, avnd la dispoziie o list cu
date referitoare la acestea. Lista cuprinde, pentru fiecare ar: denumirea,
suprafaa, capitala, populaia, limba oficial i continentul n care e
situat. Scriei un program care s rspund ntrebrilor din tema
elevului:
a) Care este ara cu cea mai mare densitate a populaiei?
b) n ce ri europene poate cltori un vorbitor de limba englez?
c) Ce limb ar trebui s cunoasc o persoan care vrea s viziteze
Guatemala?
d) Care este cea mai populat ar asiatic?
23. Un elev din clasa a IX-a vrea s i srbtoreasc ziua de natere
mpreun cu un coleg. Are o list cu numele i data naterii colegilor.
Ajutai-l s afle dac are vreun coleg nscut n aceeai zi i aceeai lun
cu el, iar dac nu, cutai o persoan din clasa care-i srbtorete ziua
de natere la diferen de maxim o sptmn fa de el.
24. La un laborator de recoltare a sngelui exist lista donatorilor i grupele
lor sangvine. Laborantul trebuie sa ntocmeasc o situaie care s
cuprind:
a) lista persoanelor care pot dona snge oricui;
b) numrul donatorilor din fiecare grup.

50
Folosind tabelul de mai jos, scriei un program care s permit
obtinerea
, situatiei cerute.
Grupa Pot dona la Pot primi de la
1 (O) toate grupele O
II(A) AsiAB A si O
III(B) B siAB B si O
IV(AB) AB toate grupele

25. La o agenie matrimonial se pstreaz informaii referitoare la


persoanele nscrise: numele, prenumele, genul, vrsta i ocupaia.
Ajutai o persoan singur s-i gseasc "jumtatea", realiznd un
program care s permit alegerea uneia din opiunile urmtoare:
Cutarea unei persoane de aceeai vrst cu solicitanta i afiarea ei
(dac se gsesc mai multe persoane, se vor afia toate);
Cutarea unei persoane de vrst ct mai apropiat;
Cutareaunei persoane cu vrsta cuprins ntr-un domeniu de valori
specificate.
26. La o librrie exist o list cu scriitori celebri. Lista cuprinde numele,
prenumele, anul naterii i anul morii scriitorilor. Scriei un program
care s realizeze urmtoarele:
a) afiarea scriitorilor al cror centenar se srbtorete n acest an;
b) ordonarea alfabetic a scriitorilor nscui n secolul al XIX-lea;
c) afiarea scriitorilor care au trit n dou secole diferite.

27. La direcia Patrimoniu exist o list cuprinznd numele mnstirilor din


Moldova i anul restaurrii acestora. Recent s-au mai finalizat lucrile
de restaurare la unele mnstiri i a sosit o nou list. Actualizai
informaiile din prima list, afind situaia complet.

28. Pentru toate crile unei biblioteci colare se pstreaz urmtoarele date:
autorul, titlul, anul apariiei, editura, numr de pagini. Scriei un
program care prelund de la tastatur aceste informaii, afieaz toate
crile pe edituri, apoi afieaz toate crile scrise de L. Blaga.

29. La nceputul anului colar, doamna nvtoare vrea s aranjeze elevii n


bnci astfel: n fiecare banc o fat cu un biat (dac numrul fetelor
este diferit de cel al bieilor atunci, nemaiavnd pereche, vor sta i dou
fete sau doi biei). n spatele unei fete va sta un biat, iar n spatele unui

51
biat va sta o fat. n clas sunt trei rnduri de bnci. Cei mai mici de
nlime vor sta n primele bnci, iar cei mai nali n ultimele bnci. Se va
citi de la tastatur numele fiecrui elev, nlimea sa i sexul. Ajutai-o pe
doamna nvtoare s aranjeze elevii n bnci.

30. Parcarea de la un supermagazin este organizat pe linii i pe coloane. n


fiecare loc din parcare poate s fie parcat o main sau s fie loc liber. Se
cunoate culoarea i marca mainii pentru fiecare dintre mainile parcate.
a) Afiati situaia din parcare sub forma unui tablou bidimensional, pe
linii i coloane, pentru fiecare element al tabloului scriind marca, iar
sub marc, culoarea mainii respective. Locurile libere se marcheaz
cu "XXX".
Exemplu: fiat dacia mercedes dacia dacia
rou alb rou rou gri

opel dacia XXX fiat ford


gri gri gri alb

opel xxx ford fiat XXX


alb alb verde

b) Determinai numrul de maini cu marca "fiat" de culoare verde din


parcare.
c) Cte maini din fiecare marc sunt parcate pe fiecare linie de
parcare?
d) Afiai linia cea mai aglomerat i linia de parcare cu cele-mai puine
maini parcate i tiprii numrul mainilor de pe fiecare dintre ele.
e) Exist vreo linie de parcare n care toate mainile au aceeai culoare?
n caz afirmativ tiprii numrul liniei, numrul de maini i culoarea
acestora.
f) Construii i apoi afiai o matrice cu dou coloane care s conin
poziia pentru fiecare din locurile libere (linia i coloana).

31. Pentru nscrierile de la nceput de an trebuie fcut un program care,


cunoscnd numele, prenumele i media de admitere a fiecruia dintre cei
n elevi, s-i mpart n cele m clase corespunztoare. mprirea se face
n ordinea descresctoare a mediilor. Primul n prima clas, al doilea n
urmtoarea i tot asa pn cnd s-a repartizat cte un elev n fiecare

52
clas, apoi se trece din nou la prima clas pentru cel de-al doilea elev,
etc. Afiaielevii ordonai pe clase.

32. Cu ocazia inceperii campionatului de fotbal, conducerea clubului


"Avntul tineresc" hotrete s cumpere echipei de fotbal un set complet
de adidai pentru antrenament. Pentru aceasta se adreseaz unei fabrici
productoare cu producie mic dar cu produse de calitate, care-i
prezint disponibilitatea de moment. Reprezentantul fabricii prezint
conducerii clubului o list cu urmtoarele informaii:
numrul de pantof - cte perechi exist n stoc - care este preul unei
perechi
Informaiile despre fotbaliti se gsesc pe o alt list sub forma
urmtoare:
nume fotbalist - numr pantof
S se distribuie cte o pereche de pantofi de sport din stocul
productorilor fiecrui fotbalist n ordinea dat i n conformitate cu
numrul pe care-I poart la pantof. S se afieze suma pltit de club i
numrul de juctori ce au rmas eventual rar nclmine (din cauza
stocului limitat).

33. n plan sunt date n dreptunghiuri cu laturile paralele cu axele. Pentru


fiecare dreptunghi se dau coordonatele x i y ale eolurilor stnga jos i
dreapta sus. Scriei un program care determin aria figurii format din
suprapunerea acestor dreptunghiuri.

53
CAPITOLUL I I I

FIIERE TEXT

1. n fiierul text NUMERE. TXT se gsesc numere naturale de maxim 9


cifre separate prin spaii. Scriei un program care s creeze fiierele
DIV2.TXT i DIV3.TXT. Aceste fiiere vor conine numerele divizibile
cu 2 respectiv 3 din fiierul iniial. Programul va afia numrul de
numere citite din fiierul de intrare.

2. Fiierul IRURI.TXT conine mai multe iruri de numere ntregi,


elementele fiecrui ir aflndu-se pe cte o linie. Nu se cunoate
numrul de iruri i nici cte elemente are fiecare ir. Afiai numrul de
ordine al fiecrei linii din fiier care conine un ir ordonat cresctor.

3. n fiierul text PROBLEME.TXT sunt scrise enunurile mai multor


probleme de informatic, fiecare problem fiind scris pe o linie.
Determinai numrul de probleme care cer prelucrarea unor fiiere.
Aceste probleme conin cuvntul "fisier" n textul lor. Scriei un
program care determin acest numr i l afieaz.

4. Exist creat pe disc fiierul CUVINTE.IN care conine un text format


din mai multe linii. Scriei un program care citete textul din fiierul dat
i scrie n fiierul MAJUSCULE.OUT toate cuvintele care ncep cu
majuscul, fiecare cuvnt va fi scris pe o linie.

5. ntr-un fiier text sunt memorate adresele de e-mail ale unor persoane,
separate prin cte un spaiu. Afiai cte adrese de e-mail sunt n fiier i
cte persoane au cont de e-mail pe "yahoo".

6. n fiierul ELEVI.DAT se gsesc scrise pe cte un rnd media general


i numele elevilor, separate prin spaiu. S se scrie un program care
afieaz elevii cu media 10 i creeaz fiierul ELEVBUN.DAT,
coninnd numele elevilor cu media peste 7.

54
7. Se dau dou fiiere cu acelai numr de linii. Primul, cu numele
PRECIP.DAT, conine cantitatea de precipitaii, iar cellalt, cu numele
LOCALIT.DAT, conine localitatea n care s-au nregistrat aceste
precipitaii. Scriei un program care s determine cantitatea de
precipitaii maxim, precum i localitatea n care s-au nregistrat aceste
precipitaii. Se mai citete denumirea unei localiti i se cere s se
afieze cantitatea de precipitaii pentru acea localitate.

8.. Exist creat pe disc fiierul DOCUMENT.TXT, al crui coninut trebuie


copiat n mai multe fiiere. Numele acestora se citete pe rnd de la
tastatur. Datele existente n aceste fiiere nu trebuie terse, coninutul
fiierului DOCUMENT.TXT trebuie adugat.

9. Un elev are pe discul calculatorului foarte puin spaiu liber. De aceea el


vrea s depisteze fiierele text identice i s aleag unul dintre ele.
Scriei un program care citete numele a dou fiiere, verific dac sunt
identice i n caz afirmativ, terge fiierul cu numele mai lung.

10. Se citete dintr-un fiier o mulime, ce conine numai caracterele de la


"a" la "m" i apoi de la tastatur un caracter. S se verifice dac acest
caracter se gsete n mullime.

11. Fiierul text ECUAII. TXT conine pe fiecare linie triplete de forma abc
numere reale. S se creeze fiierul SOLUII.TXT ce va conine pe
fiecare linie soluiile ecuaiei de gradul al II-lea cu coeficieni a.b,c, iar
dac ecuaia nu are soluii reale va scrie pe linia corespunztoare
mesajul "NU ARE SOLUIE REAL".

12. Fiierul IN.TXT conine un text format din litere mici. Scriei un
program care transform prima liter a fiecrui cuvnt n liter mare,
apoi afieaz coninutul fiierului pe ecran.

13. n fiierul ROMAN.TXT se gsete scris un roman de aventur. S se


scrie un program care determin cte aliniate are romanul i cte pagini
tiind c pe o pagin intr 40 de rnduri.

14. S se scrie un program care creaz fiierul ALEATOR. OUT, care s


conin 10000 de numere aleatoare divizibile cu 3 din intervalul
[1,20000].

55
15. Se citesc dintr-un fiier numere. S se scrie un program care s citeasc
cte 4 numere i s afieze suma lor pe ecran. La sfrit s se afieze i
suma tuturor numerelor din fiier.

16. S se calculeze i s se afieze frecvena de apariie a fiecrei cifre dintr-


un text scris pe mai multe linii ntr-un fiier. Frecvena se calculeaz ca
raport ntre numrul de apariii al cifrei i numrul total de caractere din
text.

17. ntr-un fiier text se afl termenii unui polinom, fiecare pe cte o linie
(coeficientul urmat de un spaiu i gradul termenului). Sunt pstrai doar
termenii diferii de zero. S se calculeze valoarea polinomului pentru o
valoare real x, dat de la tastatur.

18. Adelina a scris o scrisoare bunicii sale i a salvat textul ntr-un fiier de
tip text. A doua zi a mai scris o parte din scrisoare i a salvat-o ntr-un
alt fiier de tip text.
a) Scriei un program prin care s o ajutai pe Adelina s concateneze
cele dou fiiere astfel nct scrisoarea pentru bunica ei s se afle
ntr-un singur fiier.
b) Numrai de cte ori apare n scrisoarea Adelinei (din fiier)
cuvntul "bunic" (chiar dac se gsete ca parte a unui alt cuvnt, de
exemplu "bunicua" sau "bunicul") i tiprii valoarea obinut.

19. Adelina a salvat textul cu scrisoarea pentru bunica ei de dou ori, n


dou fiiere diferite pe aceeai dischet, n acelai director. A ncurcat
textele i acum nu mai tie dac cele dou fiiere sunt identice sau conin
pri diferite ale scrisorii. Scriei un program care preia de la tastatur
numele celor dou fiiere, le compar i afieaz unul dintre textele:
"fiierele sunt identice" sau "fiierele sunt diferite".

20. n fiierul POEME.TXT sunt scrise versuri. Fiecare vers este scris pe o
linie i se poate ncheia cu '.' sau ','. S se scrie un program care s
determine dac rima este mperecheat, ncruciat sau de alt fel. Rima
mperecheat este caracterizat de faptul c versul 1 rimeaz cu versul 2,
versul 3 cu versul 4 i aa mai departe. Rima este ncruciat dac versul
1 rimeaz cu versul 3, versul 2 rimeaz cu versul 4 i aa mai departe. A
rima nseamn c ultimele 3 litere din vers coincid.

56
21. Schimbarea denumirii strzilor i pieelor a fost ntotdeauna o ocupaie
favorit a autoritilor oreneti din ntreaga lume. Fiind date dou fiiere
text, unul coninnd pe fiecare linie denumirea veche i denumirea nou a
unei strzi separate prin semnul ' !', iar cellalt coninnd cartea de
telefoane a oraului, s se creeze o carte de telefoane actualizat.

22. Se consider dou fiiere ce conin litere. Se va crea un fiier pe are pe


prima linie literele comune i pe a doua linie literele distincte.

23. Un fiier text conine pe fiecare linie cte un identificator de fiier


format din nume i extensie, separate prin punct. S se afieze lista
fiierelor Pascal.

24. Doi asociai ai unei firme au numele persoanelor care urmeaz s fie
invitate la un dineu pstrate n dou fiiere text (pe fiecare linie este
trecut numele unei persoane). Alctuii lista final astfel nct o persoan
s nu fie invitat de dou ori.

25. ntr-un fiier text exist pe fiecare linie numele i media unui elev,
desprite prin spaiu. S se scrie "promovat" n dreptul elevilor cu
medii peste 5, respectiv "respins" n cazul celorlali.

26. Un copil vede pe o main sigla unei ri necunoscute. Ajutai-l s afle


din ce ar e maina, folosind un fiier text ce conine pe fiecare linie
sigla unei ri (format din una sau dou litere) i denumirea rii,
separate prin caracterul "=".

27. Codul numeric personal din buletinul de identitate este format din 13
cifre: prima reprezint codul genului (l pentru brbai i 2 pentru femei),
urmtoarele 4 codific data naterii sub forma aal1zz, iar ultimele sunt
caracteristice fiecrei persoane. tiind c n fiierul text CODURl.TXT
sunt pstrate codurile personale ale unor angajai dintr-o firm (fiecare
pe cte o linie), se cere s se stabileasc:
a) cte persoane de gen feminin i cte de gen masculin sunt angajate la
firm;
b) dac exist persoane nscute n perioada 1960-1970 care lucreaz n
firm.

57
28. Se citesc' din fiierul MATRICI.IN un ir de matrici scrise n felul
urmtor: pe prima linie sunt date numrul de linii i coloane ale primei
matrici, separate prin spaiu. Pe urmtoarele linii vor fi elementele
acesteia separate prin spaiu. Apoi urmeaz celelalte matrici dup
modelul descris la prima matrice. S se scrie un program care determin
matricea care se obine din toate matricile din fiier, nsumnd
elementele care se suprapun. Elementele se suprapun dac sunt pe
aceeai linie i aceeai coloan.

29. Fiierul MATRICI.TXT conine dou matrici i are structura urmtoare:


pe prima linie dou numere naturale n i m, reprezentnd numrul de
linii, respectiv numrul de coloane ale primei matrici; pe urmtoarele n
linii elementele acesteia; urmeaz o linie vid, apoi pe urmtoarea linie
alte dou numere naturale p i g, reprezentnd numrul de linii, respectiv
numrul de coloane al celei de-a doua matrice, iar pe urmtoarele p linii
se afl elementele acesteia. Scriei n acelai fiier elementele matricii
produs, dup ce ai lsat o linie vid i apoi pe o alt linie ai scris
mesajul: "Produsul celor dou matrici este: ". n cazul n care nu se
poate efectua produsul (numrul de coloane al primei matrici este
diferitde numrul de linii al celei de-a doua) scriei mesajul: "Nu se
poate efectua produsul celor dou matrici".

30. n fiierul MATRICI.IN se gsesc mai multe matrici scrise pe linii.


Matricile sunt separate ntre ele printr-o linie goal. S se scrie un
program care citete pe rnd aceste matrici i formeaz fiierul
MATRICI.OUT. Acest fiier conine matricile rare din fiierul
MATRICI.IN. O matrice rar este acea matrice care are-majoritatea
elementelor zero.

31. ntr-un fiier exist date despre fiecare produs dintr-un magazin. Fiecare
linie conine numele produsului i categoria din care el face parte. S se
afieze aceste produse ordonate alfabetic dup categoria din care fac
parte.

32. Un fiier conine un text scris pe mai multe linii n care cuvintele sunt
separate prin unul sau mai multe spaii. Se cere s se afieze lungimea
maxim i minim a cuvintelor care reprezint nume proprii din fiier.
Numele proprii sunt scrise cu toate caracterele majuscule.

58
33. Se citete un text scris pe mai multe linii ntr-un fiier. S se codifice
textul, iar rezultatul obinut s se scrie ntr-un alt fiier de tip text,
pstrndu-se lungimea liniilor. Codificarea se realizeaz nlocuind
fiecare liter cu litera precedent (b cu a, c cu b, ... iar a cu z) i fiecare
cifr cu cifra precedent (1 cu 0, 2 cu 1, ... ,
ramnnd neschimbate.
cu 9), celelalte caractere

34. Dintr-un fiier text se citesc de pe prima linie numrul de linii i


. numrul de coloane ale unui tablou bidimensional, ce pstreaz aezarea
mai multor flori de specii diferite ntr-un strat. De pe liniile urmtoare se
citesc elementele tabloului astfel: pe fiecare linie din fiier se afl cte o
linie din tablou, denumirile florilor fiind scrise fiecare pe cte 15
caractere. S se creeze un alt fiier text care conine indicii de linie i de
coloan ai poziiilor n care se afl n strat "lalele". Se vor scrie pe
fiecare linie cte doi indici separai prin spaiu, nti indicele de linie
apoi cel de coloan.

35. n urma unui examen de admitere a rezultat un fiier text coninnd pe


fiecare linie punctajul obinut de un candidat, un spaiu i apoi numele
i prenumele candidatului respectiv. tiind c rezultatele nu sunt
ordonate descresctor dup punctaj i cunoscnd numrul de reuii, s
se determine (fr a ordona) dac un candidat cu numele dat de la
tastatur este admis sau respins n urma examenului. n cazul n care este
admis se va afia i poziia pe care o ocup n clasament.

36. Se dau dou fiiere text. Primul conine numele i prenumele elevilor
din clasa a IX-a A i al doilea numele i prenumele elevilor din clasa a
IX-a B. Ambele fiiere sunt ordonate alfabetic. Se cere un fiier rezultat
ce va conine datele din cele dou fiiere ordonate alfabetic, fr a folosi
alte structuri de date.

37. Fie RI.TXT un fiier text ce conine pe fiecare linie numele unei ri
i populaia rii respective i CONTINENT.TXT un fiier text ce
conine pe fiecare linie un nume de continent i, separate prin spaii, pe
rndul respectiv, rile de pe respectivul continent. Se cere fiierul
TOTAL.TXT ce va conine pe fiecare linie numele continentului i
populaia total pe acel continent.

59
38. Ionel a scris ntr-un fiier text numele tuturor prietenilor si, n ordinea
gradului de prietenie, ncepnd cu cel mai bun prieten. n timp, aceast
ordine nu se mai potrivete realitii, astfel nct Ionel trebuie s
rearanjeze numele prietenilor din fiier. El atribuie un numr
corespunztor gradului de prietenie fiecrui nume din fiier (1 pentru cel
mai bun prieten). Scriei un program care s rearanjeze aceste nume n
funcie de numrul corespunztor gradului de prietenie pe care vi-I d
Ionel.

39. Se citesc dintr-un fiier text, pe fiecare linie, nume de microbi gsii n
corpul unei persoane (vor fi separai cu un spaiu). tiind c toi pacienii
sufer de aceeai boal, se ncearc gsirea unor microbi comuni, care ar
putea fi un agent al bolii respective. S se scrie un program care s
gseasc eventualii ageni ai bolii.

40. O dactilograf neglijent a btut


la main o ghicitoare, dei tia c o
anumssast i este defect. Tot ce tim este c e vorba de o vocal n
locul creia trebuia s apar o consoan. S se detecteze un cuvnt greit
(ce conine trei vocale alturate) i s se permit introducerea corect a
acestui cuvnt, de la tastatur, descoperind astfel tasta defect. S se
fac apoi corecturile n text astfel: se vor afia pe rnd toate cuvintele ce
conin litera greit, i ni se va permite s alegem dac dorim sau nu
nlocuirea acesteia cu consoana n cauz.
Precizm c scrisoarea se gsete ntr-un fiier text.
Exemplu: fiierul ghicitoare.in:
Are pleaoa verde mou'
Nasul lung hazliu i rou;
Pleaoa fluour n vano,
Nasul rou e-n pmno.
Primul cuvnt cu trei vocale gsit este: pleaoa.
Introducem cuvntul corect: pleata.
Urmeaz s parcurgem din nou fiierul i la fiecare apariie a literei o s
ntrebm dac se dorete nlocuirea ei cu t.
n final textul corect este:
Are pleata verde mou'
Nasul lung hazliu i rou;
Pleata flutur n vnt
Nasul rou e-n pmnt.

60
41. Profesoara a dat celor n elevi ai si s realizeze cte un mic fiier text care
s conin informaii despre modul de via al unor vieuitoare i le-a spus
s salveze lucrrile cu numele: parte1.txt, parte2.txt, ... , parten.txt.
Scriei o aplicaie care s concateneze aceste fiiere n fiierul
profesor. txt.

42. Se citete din fiierul elevi.in, situaia la nvtur a fiecrui elev. Pe


liniile impare se gsesc numele i prenumele elevilor. Pe cele pare se
gsesc numere separate prin spaii, astfel: primul numr reprezint clasa
(ex: 7 sau 10), apoi se regsesc mediile pe discipline. S se calculeze i
s se afieze media general a fiecrui elev; n cazul n care un elev este
corigent se va afia la cte discipline este corigent.

43. Se citesc de pe liniile unui fiier text cri de joc separate prin spaii. S
se verifice dac formeaz un set complet de cri de joc, apoi s se
distribuie cte cinci cri de joc celor patru juctori i s se afieze sub
forma: ",
3+ A'If Jf! 9+

9+
K'lf
10+
5+

44. Fiierul NUME.TXT conine numele unor ageni secrei, urmat de spaiu
i un cod de 4 caractere (litere sau cifre). Fiierul MISIUNE.TXT
conine descris misiunea pe care agenii o au de realizat (caractere
alfabetice, numerice i spaii). n acest text apar ns numele agenilor.
Se cere s se scrie un program care s creeze un fiier MISIUNEF.TXT
care s conin descrierea misiunii ns nu cu numele agenilor ci cu
codul lor.

61
CAPITOLUL IV

LISTE ALOCATE STATIC

1. ntr-un depozit lzile cu marf sunt stivuite pe vertical. Att adugarea


ct i extragerea unei lzi se face doar n vrful stivei. tiind c de la
podea pn la tavan ncap un numr de 1 lzi i c fiecare lad are o
etichet cu numrul ei, scriei un program care, pe baza unui meniu,
permite alegerea unei operaii ce se poate efectua n depozit: adugarea
unei lzi n stiv, eliminarea unei lzi, afiarea stivei de la vrf spre baz.

2. Se citete de la tastatur un ir de n cuvinte. Scriei un program care ia


cuvintele din ir n ordine invers introducerii; dac un cuvnt ncepe cu
Q.;M.ocal l pune n irul A, iar dac ncepe cu o consoan l pune n irul
B. Afiai cele dou iruri i numrul de cuvinte coninute de fiecare.

3. Ioana i face ordine n bibliotec. Ea aeaz nti toate crile ntr-un


teanc, una peste alta, apoi le ia n ordine ncepnd din vrful teancului i
le analizeaz. Aeaz manualele ntr-un raft i celelalte cri n alt raft,
aranjndu-le de la stnga spre dreapta. Scriei un program care citete de
la tastatur titlurile crtilor pe rnd (pentru manuale, titlul ncepe cu
cuvntul "manual") i le memoreaz ntr-o structur de date adecvat,
apoi afieaz crile din teancul obinut pe mas de sus n jos. Memorai
ntr-o alt structur de date manualele i afiai titlurile lor n ordinea n
care au fost aezate pe raft.

4. Pe o tij vertical sudat la baz sunt dispuse n bile numerotate, perforate


n centru. Se dorete eliminarea bilei cu numrul x, folosindu-se o alt
tij vertical pe care pot fi mutate temporar bile. Scriei un program care
citete de la tastatur numerele asociate celor n bile, depune bilele pe tij
i apoi elimin bila cu numrul x.

5. La ora de matematic a clasei 1 doamna nvtoare a aezat pe catedr


dou turnuri formate din n l , respectiv n2 cuburi. Fiecare cub are nscris

62
un numar pe el; n fiecare turn cuburile sunt aezate n ordine
descresctoare a numerelor lor ncepnd de la baz spre vrf. Ionel
trebuie s formeze un nou turn care s conin cuburile din ambele
turnuri i acestea s fie aezate n ordinea cresctoare a numerelor lor, de
la baz spre vrf. tiind c Ionel are voie s ia cte un cub doar din vrful
unui turn i s-I aeze n turnul nou, scriei un program care s-I ajute pe
Ionel s formeze turnul cerut. Programul va citi de la tastatur numerele
nscrise pe cuburile din cele dou turnuri, considerate de la baz spre
vrf.

6. ntr-un depou de vagoane operatorul CFR trebuie s formeze un tren cu m


vagoane care va pleca spre Bucureti. Iniial pe linia 1 a depoului se afl
n vagoane, numerotate descresctor ncepnd de -la captul care nu
comunic cu alt linie. Operatorul trebuie s formeze garnitura pentru
Bucureti pe linia 3, din unele vagoane de pe linia 1. Vagoane1e pot doar

1_>>----_
s ias de pe linia 1 pe linia 2 i de pe linia 2 pot s intre doar pe linia 3
(sau s staioneze pe linia 2).

3
Numrul vagoanelor care intr n componena garniturii se afl ntr-un ir
(dat de la tastatur). S se scrie un program care afieaz operaiile care
trebui fcute (IE- ieire de pe linia 1 sau IN-intrare pe linia 3), pentru ca
s se formeze garnitura spre Bucureti pe linia 3.

7. Irina face curenien buctarie. Adun toate farfuriile din dulapul de


buctrie i le pune unele peste altele, terge praful din dulap, apoi vrea
s le aranjeze pe cele trei rafturi astfel: cele cu flori pe raftul de sus, cele
albe la mijloc i cele din material plastic pe raftul de jos. Scriei un
program care s simuleze aceast activitate a Irinei.

8. n depozitul Societii de Legume Fructe se afl mai multe stive cu lzi.


n fiecare lad exist un anumit produs pentru care se cunoate cantitatea.
Una dintre stive conine lzi cu cartofi i lzi cu alte legume. Gestionarul
vrea s separe aceast stiv n dou stive: una care s conin numai
Izile cu cartofi i una care s conin lzile cu celelalte legume. Scriei
un program care s simuleze aceast aciune i care s afieze cantitatea
total de cartofi, precum i legumele existente n Izile din stiv.

63
9. La un ghieu persoanele sunt deservite n ordinea sosirii. Scriei un
program care s afieze un meniu din care utilizatorul s poat alege
opiunea dorit. Opiunile din meniu vor fi:
4/1 S- sosirea unei persoane

P- plecarea unei persoane


4/1 L- listarea persoanelor tinere ( sub 35 de ani)

A- afiarea persoanelor n vrst (peste 65 de ani)


X- ieire din program
Pentru fiecare persoan se cunoate numele i vrsta.

10. Ioana i Maria au un irag de mrgele de diferite culori. Ele vor s


elimine din colier mrgelele negre i pentru acesta au hotart s
procedeze astfel: Ioana va extrage cte o mrgea dintr-un capt al
iragului i dac nu are culoarea neagr i-o d Mariei pentru a o aduga
din nou n irag, la cellalt capt. Scriei un program care citete pe rnd
culorile mrgelelor, le memoreaz ntr-o structur de date adecvat i
apoi simulez formarea noului irag dup procedeul descris mai sus.

Il. ntr-o secie de vopsitorie exist o band rulant orizontal pe care sunt
depuse piese pentru a fi vopsite; fiecare pies este numerotat. Pe band
ncap p piese la un moment dat. Piesele intr succesiv pe band la un
capt al ei i atunci cnd banda este plin se elimin pe rnd cte o
pies (eliminarea se face la captul opus celui la care s-a fcut
introducerea). Scriei un program care simuleaz operaiile din secie:
depunerea unei piese pe band, eliminarea unei piese, afiarea pieselor
existente la un moment dat pe band.

12. Un grup de n elevi particip la un concurs de tir. Se aeaz unul dup


altul n faa intei i dup ce intete, fiecare elev primete un punctaj
apoi trece din nou la coad. Concursul se ncheie dup ce fiecare elev a
a tras de trei ori. Pornind de la lista elevilor participani la acest
concurs, scriei un program care simuleaz desfurarea concursului i
afieaz elevii clasai pe primele trei locuri.

13. Cei n elevi ai clasei se aranjeaz la ora de educaie fizic ntr-un rnd.
Apoi ei sunt mprii de ctre profesor pe dou rnduri: unul de fete i
altul de biei. Numrul de biei i de fete nu este neaprat acelai.
Pentru o parad sportiv trebuie s treac prin faa tribunei un numr de .

64
m perechi formate dintr-un biat i o fat. Prima fat din rnd formeaz
pereche cu primul biat, apoi dup parad se aeaz la sfritul
rndului. S se scrie un program folosind structuri statice de date care
s afieze cele m perechi ale paradei astfel:
perechea 1: nume_fata, nume_biat
perechea2: nume_fata, nume_biat

perechea m: nume_fata, nume_biat

14. La serbarea de sfrit de an colar clasa a IV-a prezint un dans popular.


Copiii intr ntr-un ir i danseaz n faa scenei, apoi din acel ir se
formeaz un cerc. Din cercul format se alctuiesc dou cercuri
concentrice. n cercul din interior intr tot al treilea elev, ceilali rmn
n cercul exterior. Cercul interior se nvrte n sens orar, iar cercul
exterior n sens antiorar. Scriei un program care s formeze cele trei
aranjri pentru dans, fiecare aranjare pstrndu-se ntr-o list alocat
static. ,,'

65
CAPITOLUL V

SUBPROGRAME

1. S se scrie un subprogram care s afieze textul "La muli ani!" i apoi s


se apeleze dintr-un program.

2. Fiind dat o matrice A, de dimensiune n*m, m>n, cu toate elementele


nule, scriei un subprogram care scrie n matrice numerele naturale n
ordine cresctoare (ncepnd cu numrul 1), n zig-zag, pornind de la
elementul [n, 1], pn la un element de pe ultima coloan.
Exemplu: A[4*12] O O O 4 O O O O O 10 O O
003050009011 O
O 2 O O O 6 O 8 O O O 12
100000700 O O O

3. Mihai i datoreaz lui Florin o sum S i a reuit s strng suficieni bani


ca s-i plteasc datoria. Are bancnote de valori v l ,v2 , ... ,vn i vrea
s-i plteasc. lui Florin suma S n ct mai puine bancnote (dispune de
cantiti suficiente din fiecare bancnot i are bancnote de 1 pentru a
putea plti exact suma datorat). Ajutai-l pe Mihai s-i plteasc
datoria.
Exemplu: S=239 Bancnotele au valorile 10, 1, 50, 5
Florin va primi 1*5 + 4*50 + 4* l + 3*10 = 239

4. Scriei o funcie care primete ca parametru preul unei mrfuri, s-i


adauge TVA de 19% , s afieze noul pre i s-I returneze.

5. Operaia matematic de ridicare la putere se simuleaz n limbajul


PASCAL prin intermediul unor expresii complicate. Scriei un
subprogram care primete ca parametru pe x real i y ntreg i calculeaz
pe x".

66
6. La un club de dansuri de societate s-au nscris n fete i m biei.
Antrenorul ncearc s formeze perechi n care fata i biatul sunt de
aceeai vrst. Cnd nu mai poate forma astfel de perechi alege fiecrei
fete un biat cu cel mult doi ani mai mare. Cei rmai fr pereche
trebuie s atepte nscrierea altor persoane pentru a-i gsi un partener.
Cunoscnd numele i vrsta fiecrei fete i a fiecrui biat, scriei un
subprogram care formeaz perechile i returneaz numrul de perechi
formate.

7. S se scrie un subprogram care ordoneaz cresctor un ir de numere.

8.N cuburi de dimensiuni diferite sunt aezate n linie pe mas. Acestea


trebuie aranjate sub forma literei V, adic eubul cu latura cea mai mic n
mijloc, cele dou cu laturile cele mai mari pe margine, iar restul, de o
parte i de alta a cubului mic n ordine cresctoare spre cuburile mari.
Cunoscnd numrul de cuburi i latura fiecruia, scriei un subprogram
care aranjeaz cuburile sub forma literei V.

9. Scrieiun subprogram care primete ca parametru numele unui fiier text,


calculeaz i returneaz numrul de vocale care apar n fiier.

10. La clasa a V-a se studiaz fraciile. Adunarea fraciilor este o problem


grea pentru Mihai. El ar avea nevoie de ajutor. Scriei un subprogram
care primete ca parametri numrtorii i numitorii a dou fracii, apoi
calculeaz i returneaz numrtorul i numitorul sumei celor dou
fracii. Observaie: se va simplifica fracia rezultat.

11. Un numr este simetric dac citit de la stnga la dreapta sau de la


dreapta la stnga reprezint aceeai valoare. Scriei un subprogram care
primete ca parametru un numr natural de cel mult 9 cifre i returneaz
textul "SIMETRIC" sau "NESIMETRIC".

12. De multe ori n probleme ne intereseaz diferena a dou date


calendaristice. Scriei un subprogram care primete ca parametru dou
date calendaristice de forma: zi, lun, an i calculeaz diferena celor
dou date. Subprogramul va returna: numrul de zile, numrul de ani
precum i un indicator cu valoarea 1 sau -1 dup cum prima dat este mai
mare respectiv mai mic dect a doua.

67
13. La un concurs de gimnastic arbitreaz n arbitri. Concurenii primesc
note de la O la 10. Scriei un subprogram care calculez media unui
concurent, tiind c media cea mai mic i cea mai mare se elimin i
se iau n calcul doar restul mediilor.

14. Mihai i Rare se joac "Jocul inteligent". Acest joc const n


urmtoarele: se d un text pe mai multe rnduri. Numrul caracteristic
al acestui text este dat de numrul de cuvinte de patru litere distincte din
text. Ctigtorul "Jocului inteligent" este cel care are "Numrul
caracteristic" mai mare. Scriei un subprogram care citete un text dintr-
un fiier, afieaz cuvintele distincte de 4 litere apoi returneaz numrul
caracteristic. Folosind acest subprogram s se scrie un program care
simuleaz acest joc. Cele dou fiiere (al lui Mihai i al lui Rare) au
acelai numr de linii.

15. S se scrie un subprogram care s ordoneze "cresctor-descresctor" un ir


de numere ntregi. Elementele pare s fie n ordine cresctoare, iar cele
impare n ordine descresctoare. Poziiile care au avut valori pare rmn cu
valori pare, iar poziiile cu valori impare rmn cu valori impare.
Exemplu: a=(7,10,3,4,5,7,8,-2,0,-4).
irul rezultat este: a=(7,-4,7,-2,5,3,0,4,8,10)

16. Se dautLcrmizi prin dimensiunile lor (lungime, lime i nlime),


fiecare fiind identificat printr-un numr care este nscris pe ea.
Meterul care lucreaz cu aceste crmizi vrea s elimine din lucrare
cea mai mic i cea mai mare crmid ca volum, apoi s calclll~ecare
este Rea mai mare suprafa pe care o poate acoperi cu ~~zile
rmase. Crmizile se pot pune n orice poziie. Scriei un program care
afieaz cele dou crmizi eliminate i suprafaa calculat de meter.

17. La clasa a 9-a dirigintele pstreaz pentru fiecare elev urmtoarele


informaii: numele, prenumele, mediile la cele 15 materii, numrul de
absene motivate i numrul de absene nemotivate. Scriei un
subprogram care s returneze informaiile despre elevul cu cele mai
multe absene nemotivate i un alt subprogram care s afieze elevii
ordonai descresctor dup media general.

68
18. Scriei un subprogram care s calculeze i s returneze numrul de
cuvinte, de fraze i de aliniate dintr-un text scris n fiierul
TEXTUL.DAT.

19. Andrei vrea s calculeze greutatea unei remorci cu lemne. El cunoate


volumul lemnelor i densitatea lor. Scriei o funcie care s-I ajute pe
Andrei s calculeze aceast greutate.

20. Mihai nva la coal s calculeze cel mai mare divizor comun a dou
numere folosind descompunerile numerelor n factori. El are de rezolvat
mai multe exerciii i ar vrea s verifice dac a lucrat bine. Scriei un
subprogram care s-I ajute pe Mihai la tem.

21. Sse scrie un subprogram care s verifice dac o valoare x aparine sau
nu unui ir de numere ntregi.

22. S se scrie' o funcie care s calculze i s returneze media pe un


semestru a unui elev. Numrul de materii i irul de medii se dau ca
parametru.

23. S se scrie o funcie care calculeaz valoarea polinomului P(x) n


punctul xo.. Coeficienii polinomului se transmit prin intermediul irului
30, a1,a2, ..., an

24. S se scrie o funcie care s transforme un numr n (n<l00) scris cu


cifre arabe n cifre romane. Funcia trebuie s afieze numrul rezultat.

25. Sse scrie un subprogram care s afieze toate numerele divizibile cu n


(n<lO) din intervalul [x,y]. x i y se transmit ca parametri.

26. La ora de educaie fizic sunt aliniate dou rnduri de biei i dou de
fete. Fiecare persoan are un nr de ordine. Rndurile nu au acelai
numr de persoane. Profesorul le cere rndurilor de fete s se includ n
cele de biei, ncepnd de la o poziie specificat de el. Afiai
configuraia final a celor dou rnduri formate. Folosii pentru aceasta
un subprogram de inserare a unui subir ntr-un ir, ncepnd de la o
poziie dat.

69
27. La o curs de maraton exist o list a concurentilor; fiecare concurent are
nscris pe tricou numrul de concurs corespunztor poziiei din list. n
timpul cursei se anun abandonurile, prin numerele concurenilor. Se cere
s se elimine din list persoanele care au abandonat i apoi s se afieze
lista concurenilor care au ajuns la finish.

28. Dirigintele unei clase are lista elevilor ordonat descresctor dup medii i
vrea s afle dac exist cel puin 3 elevi n clas cu aceeai medie. Realizai
cererea lui, folosind un subprogram care s verifice dac ntr-un vector x
de dimensiune n exist cel puin 3 elemente alturate egale i n caz
afirmativ s returneze valoarea lor comun.

29. ntr-o intreprindere exist 4 secii. Se cunoate numrul de angajai din


fiecare secie i salarul fiecrui angajat. Se cere s se afieze salarul mediu
pentru fiecare secie, folosind pentru acesta un subprogram care s
returneze salarul mediu al unei secii.

30. Scrieiun subprogram care primete ca parametri dou matrici cu aceleai


dimensiuni i verific dac cea de-a doua este oglindita spre est a primeia.
Considernd o matrice A[m*n] numim oglindita ei spre est matricea
B[m*n] n care fiecare linie i este format din elementele liniei i din A
luate n ordine invers, de la ultimul spre primul.

31. Scrieiun subprogram care returneaz numrul de ortograme (cuvinte care


folosesc liniua de desprire) dintr-un text de maxim 255 de caractere.

32. Sse scrie o funcie care s verifice dac un vector x de dimensiune n este
simetric fa de mijloc.

33. n 3 iruri sunt pstrate date din biografiile a 3 scriitori (anul naterii, anul
nceperii studiilor etc). Afiai care din acestea nu sunt ordonate
cronologic, folosind un subprogram.

34. La secia de poliie au sosit 3 liste cu numerele de nmatriculare ale


mainilor amendate de Poliie n ultimele 3 zile. Afiai n care din cele 3
zile a fost amendat proprietarul mainii cu nr x (exist posibilitatea s fi
fost amendat n mai multe zilei). Folosii un program de cutare a unei
valori date ntr-un vector.

70
35. Scriei
un subprogram care verific dac un numr natural conine acelai
numr de cifre pare i impare.

36. O banc a hotrt s


schimbe vechile numere de cont astfel nct noile
numere s conin obligatoriu un cod, indiferent pe ce poziie. Avnd la
dispoziie lista conturilor, stabilii care din acestea necesit modificri.
Pentru aceasta scriei un subprogram care primete ca parametri contul
vechi, codul i verific dac n cont apare codul.

37. Scrieiun subprogram care verific dac un numr natural x este format din
cifre distincte.

38. Fie x un numr natural. Se cere un subprogram care verific dac numrul x
conine cel puin un O.

39. Fie trei puncte n plan, date prin coordonatele x i y. Scriei un subprogram
care verific dac pot forma un triunghi i n caz afirmativ s-i calculeze
aria i perimetrul.

40. Fie un ir de n numere ntregi citite de la tastatur. Scriei un subprogram


care transmite irul de numere n ordine invers.

41. Fie un ir
de n numere ntregi citite de la tastatur. Sortai cresctor irul
dup numrul de divizori ai fiecrui element al irului folosind
subprograme.

42. Alctuiti un subprogram care determin punctul de extrem al funciei de


gr. II f(x)=ax 2 +bx+c, a,b,c numere reale, a nenul.

43. Alctuii un subprogram care primete ca parametru un numr natural de


maxim 9 cifre i afieaz o piramid format din cifrele acestui numr: pe
prima linie cifra sau cifrele din mijloc, pe a doua linie cele trei sau patru
cifre din mijloc, etc.

44. S se scrie un subprogram de afiare a unei matrici n forma clasic. Dac


numrul de linii ale matricii depete numrul de linii ecran, continuarea
afirii se va face numai dup apsarea tastei Y n urma afirii mesajului:
Continuare ? (YIN)

71
CAPITOLUL VI

TEHNICI DE PROGRAMARE
VI.I. BACKTRACKlNG

1. La o cofetrie se comercializeaz n sortimente de prjituri. S se


determine toate variantele de a face pachete cu cte p prjituri diferite.
Scriei un program care afieaz aceste variante precum i numrul lor.

2. Se d un ir de n numere naturale. S se genereze toate modurile de


aranjare a acestor numere astfel nct n nici o aranjare s nu existe pe
poziii consecutive numere prime. Scriei un program care citete acest
ir i afieaz pe cte un rnd fiecare variant.

3. N pictori doresc s-i expun lucrrile ntr-o galerie de art. Angajaii


galeriei au ordin s aranjeze toate tablourile pe un perete, n linie dreapt,
dar s nu fie dou tablouri ale aceluiai pictor aezate alturi. Cunoscnd
numrul de tablouri i codul nscris pe fiecare tablou, scriei un program
care afieaz toate posibilitile de aezare a tablourilor. n cazul n care
nu este posibil o astfel de aranjare, programul va. afia un mesaj
corespunztor.

4. La o florrie sunt S specii de flori. Se dorete s se realizeze buchete


diferite cu cte F flori fiecare. Scriei un program care citete de la
tastatur denumirile florilor i afieaz componena buchetelor.

5. Un gospodar vrea s planteze pomi fructiferi (mr, pr i nuc) pe o


distan de 60 de metri n spatele casei. El vrea s planteze ct mai muli
pomi, dar trebuie s respecte urmtoarele condiii:
- distana dintre doi pomi fructiferi trebuie s fie de cel puin 4 metri;
- nu pot fi plantai doi meri, doi peri sau doi nuci unul lng altul;
- un nuc trebuie s fie la o distan de cel puin 12 metri de alt nuc;
- trebuie s se planteze meri mai muli dect peri i peri mai muli dect
nucI.
Scriei un program care afieaz toate variantele posibile.

72
6. Se d o mulime cu n elemente, i un numr ntreg pozitiv M. S se
determine toate submulimile pentru care suma elementelor este M.
Exemplu: N=9 {1,2,3,4,5,6,7,8,9}
M=6 =>2+4,1+5,1+2+3

7. S se scrie un program care s genereze toate irurile de lungime n


formate numai din literele A, B, C, iruri care s nu aib litere
consecutive identice.

8. La ntlnire a Tineretului Cretin din Europa se alctuiesc grupuri de


discuii pentru fiecare din cele apte zile ct dureaz ntlnirea. Grupurile
trebuie s fie formate cu tineri din ri diferite. Intr-una dintre zile
grupurile 'se formeaz pe zodii. S se determine o mprire pe grupuri
pentru aceast zi, tiind c n fiecare grup trebuie s fie cel mult 15
persoane, cel puin 3 persoane, toi trebuie s fie aceeai zodie i cel mult
jumtate din tinerii unui grup pot aparine aceleai ri. S se scrie un
program care citete numrul rilor participante, numrul tinerilor
participani, zodia fiecruia i determin dac este posibil, o mprire n
grupuri pentru ziua respectiv.

9. Se citete un numr natural n. S se determine numrul natural cel mai


apropiat de n care conine acele~i cifre ca i acesta.

10. Afiai ce ncercri trebuie s fac o persoan pentru a obine cifrul su


de la seif de 6 cifre; a uitat cifrul i i amintete doar c n cifru apare i
ziua lui de natere, adic 13, dar aceasta nu figureaz nici la nceputul i
nici la sfritul cifrului.

11. Fiind dat o mulime de n cuburi, fiecare cub fiind caracterizat de


lungimea laturii i culoarea sa, s se scrie un program care s genereze
toate turnurile care se pot forma cu p cuburi astfel nct dou cuburi
vecine s nu aib aceeai culoare.
Exemplu: 3 cuburi: Cubull:2 3,CubuI2:8 5,CubuI3:6 4.
Rezult: Cubul 2 -8-5,Cubul 3 -6-4,Cubul 1 -2-3.

12. Fiind dat un alfabet care conine v vocale i c consoane (v9, c:S20)
generai toate cuvintele de cel mult 15 litere care nu conin mai mult de
trei vocale sau trei consoane alturate. Scriei un program care s
rezolve aceast problem.

73
13. Scrieiun program care s determine cte numere strict mai mici ca
1.000.000.000 exist, cu proprietatea c au toate cifrele distincte i
suma cifrelor lor este un numr tot cu cifre distincte.

14. Scriei
un program care s afieze toate numerele de trei cifre, formate
numai din cifre distincte i care sunt divizibile cu 4.

15. Un traseu turistic cuprinde n orae. Fiecare ora are stabilit un tarif de
cazare. S se scrie un program care s stabileasc toate voiajele prin p
orae care s nu depeasc un cost total disponibil.

16. Elevii clasei a 5-a joac un joc. Profesorul spune un numr natural.
Elevii pe rnd trebuie s spun un numr mai mare cel puin cu 2 dect
al celui dinainte i care are suma cifrelor divizibil cu 7. S se scrie un
program care simuleaz acest joc i afieaz valorile spuse de cei n
copii ai clasei. Se citete de la tastatur numrul spus de profesor.

17. Scriei un program care citete un ir de n litere mici distincte i


genereaz toate cuvintele care au urmtoarele proprieti: conin exact p
litere din cele n, iar literele din care sunt formate apar n ordine
lexicografic.

18. Un test alctuit din n ntrebri a fost notat n modul urmtor: pentru
fiecare rspuns corect s-au punctat c puncte, iar pentru fiecare rspuns
fals s-au sczut din punctaj d puncte. S se determine numrul de
rspunsuri corecte i numrul de rspunsuri false pentru a o1Dip nota f i
(m citit de la tastatur).

19. La o demonstraie a sportivilor particip un numr de 3*n sportrvi.


Fiecare sportiv are un costum colorat: rou, galben, albastru, iar trei
sportivi au costumul alb. Sportivii vor fi mprii n trei cercuri
policrome. n fiecare cerc trebuie s fie sportivi de toate cele patru
culori i fiecare doi vecini de pe cerc trebuie s fie de culori diferite.
Scriei un program care citete de la tastatur numrul n de sportivi,
culoarea costumului fiecruia i afieaz o dispunere a sportivilor n
cercuri.

20. Un grup de copii are}a dispoziie n cartonae cu n cuvinte distincte


pentru jocul "fazan". In acest joc un copil trebuie s spun un cuvnt

74
care s aib primele dou litere identice cu ultimele dou ale cuvntului
spus de predecesorul lui. Fiind dat cuvntul de nceput pentru joc,
afiai varianta cu cele mai multe cuvinte care se poate obine cu
ajutorul cartonaelor date.

21. Se d un ir
de n numere ntregi (n este numr ntreg citit de la
tastatur). S se genereze un subir de lungime maxim de elemente din
irul dat, astfel nct s alterneze elemente pozitive i negative i suma
acestora s fie minim.

22. Un grdinar vrea s planteze flori. El are la dispozitie n feluri de flori i


m straturi. n fiecare strat i ncap cte mi flori. S se afieze o
modalitate n care grdinarul poate aeza florile n straturi, tiind c n
fiecare strat trebuie s existe v feluri de flori. Din orice fel de floare
grdinarul are suficiente semine. Scriei un program care s genereze i
s afieze aceast modalitate.
r,'

23. Florin are n cartonae (n:SlO). Pe fiecare este scris o cifr de la 1 la 9.


Utiliznd dou cartonae cu + i - vrea s obin rezultatul 2. Ajutai-l
s intercaleze cartonaele + i - tiind c are suficiente cartonae cu
fiecare operator.

24. ntr-o grup de grdini sunt C copii. Doamna educatoare dorete s-i
mpart n E echipe (cel puin 1 copil ntr-o echip) pentru un joc.
Scriei un program care citete valorile C i E , verific s fie C mai
mare dect E i afieaz toate variantele de mprire a copiilor n
echipe. Se vor afia pentru fiecare soluie echipele i componena
fiecreia pe cte un rnd.

25. Ionel dorete s trimitcelor P prieteni ai lui (numerotai de la 1 la P)


felicitri cu ocazia srbtorilor de iarn. Deoarece este n criza de
inspiraie el s-a gndit s formuleze doar cteva variante de texte i s
scrie acelai text la persoane diferite. Unii dintre prietenii lui se cunosc
ntre ei i acelora nu dorete s le scrie felicitri cu acelai coninut.
Scriei un program care citete dintr-un fiier text numrul de prieteni ai
lui Ionel i perechi de numere (x y separate prin spaiu) cu semnificaia
c persoanele x i y se cunosc. Programul va afia o varianta de
mprire a prietenilor lui Ionel pe grupe (din aceeai grup vor face
parte prietenii crora le poate scrie acelai text) astfel nct s fie

75
necesar un numr ct mai mic de variante de "urri pentru srbtorile de
iarna".

26. Problema cstoriei


n satul Margaretei Lenor exista acelai numr de biei de nsurat i
fete de mritat. n lips de ocupaie aceasta i-a propus s ncerce s-i
cstoreasc pe toi. Acest lucru nu este prea uor de realizat, innd
cont de obiceiurile locului care nu admit cstorii ntre rude apropiate:
frai, surori, surori vitrege sau verioare.
Fiind date perechile de rude n fiierul rude.in, s se determine toate
modalitile n care s-ar putea cstori toi aceti tineri, fr a nclca
obiceiurile strbune.
Fiierul rude.in va conine pe fiecare linie perechi de numere a dou
persoane rude apropiate. Pentru simplificare putem considera bieii ca
avnd numere ntre 1 i n, iar fetele ntre n+ 1 i 2*n.

27. Se d o bucat de panglic de lungime X. Stabilii toate modurile


posibile de tiere a panglicii n buci de lungimi date astfel nct din
fiecare bucat s existe cel puin o panglic,

28. O persoan a uitat numrul de telefon al unui prieten. tie doar c


numrul are 6 cifre, ncepe cu cifra 1 i conine 3 zerouri dintre care
dou sunt alturate. Afiai toate variantele pe care trebuie s le ncerce
pentru a vorbi cu prietenul su.

29. Ionel este n clasa nti i are urmtorul material pentru tema de cas: pe
un cartona are scris un cuvnt, iar pe alte n c.artonae grupuri de litere
(pe fiecare cartona o liter sau un gmp de litere). El trebuie s
determine cel mai mic numr de cartonae din care se poate forma
cuvntul dat. Ajutai-l pe Ionel s rezolve corect tema.

30. La o mas rotund sunt n persoane de diverse naionaliti, pentru


fiecare persoan precizndu-se dou limbi strine cunoscute de ea. Se
cere s ajutai organizatorii mesei rotunde s aranjeze persoanele astfel
nct fiecare s poat conversa att cu cea din stnga ct i cu cea din
dreapta.

31. O florrie are de executat n buchete diferite pentru care are la dispoziie
crini albi, trandafiri albi, margarete, cale i crizanteme albe. n fiecare

76
buchet trebuie s fie cte m flori. S se scrie un program care s afieze
o variant cu n buchete. Nu trebuie s existe dou buchete identice.

32. Proprietarul unei maini din judeul Cluj vrea s-i aleag numrul de
nmatriculare al mainii. Nu-l intereseaz ce cifre va conine numrul,
dar vrea ca acesta s includ iniiala numelui i a prenumelui su.
Afiai toate variantele din care poate s-i aleag numrul de
nmatriculare.

33. O echip de pompieri dispune de o main i n tipuri de furtun, fiecare


tip avnd o lungime dat. Aceast echip trebuie s sting un incendiu,
aflat ntr-o zon inaccesibil mainii. Maina se poate apropia pn la x
metri de incendiu. Scriei un program care s determine modurile de
legare a segmentelor de furtun astfel nct s ajung pn la incendiu.

34. S se scrie un program care s genereze toate numerele ntregi de tip


longint (Pascal) sau long (C++) a cror reprezentare n baza 2 conine n
bii cu valoarea 1.

35. Elevii unei clase particip la un concurs pe echipe. Din cei 30 de elevi
trebuie formate trei echipe cu cte cinci concureni. Determinai toate
variantele de formare a echipelor, innd cont de restricia c n fiecare
echip trebuie s fie doar concureni cu nume diferite. Scriei un
program care citete numele, prenumele elevilor i determin toate
variantele de concurs.

36. Clasa a X-a organizeaz o excursie la munte. n camping sunt csue cu


cte dou locuri. Se cunosc preferinele fiecrei persoane. S se
determine o repartizare, dac este posibil, astfel nct n fiecare csu
s fie dou persoane care se prefer reciproc. S se scrie un program
care citete de la tastatur numrul de persoane, precum i lista de
preferine a fiecruia i determin o soluie.

37. N copii doresc s plece n excursie, dar autocarul nu are dect 44 de


locuri. S se genereze toate modalitile de a aeza 44 de copii n
autocar astfel nct numrul de fete s fie egal cu numrul de biei i
copiii ce sunt aezai alturi s se agreeze reciproc. Datele de intrare se
citesc din fiierul Elevi.in astfel:
- pe prima linie se afl numrul de copii;

77
- pe urmtoarele N linii se afl numele copiilor. Vom considera pentru
simplificare c toi copiii al cror nume se termina n a sunt de sex
feminin, iar ceilali de sex masculin;
-. pe urmtoarele linii se gsesc perechi de numere separate prin spaiu,
ce corespund numerelor de ordine a doi elevi, cu semnificaia c primul
elev l agreeaz pe cel de-al doilea.
Soluia va fi afiat conform aranjrii scaunelor din orice autocar.

38. Pentru serbarea de Crciun corul colii susine un concert de colinzi.


Cori tii trebuie repartizai pe patru rnduri aproximativ egale (ultimul
rnd poate fi mai scurt i aezat pe centru). Coritii din spate trebuie s
fie mai nali dect cei din fa iar cei din mijloc mai mici dect cei de
pe margine. Scriei un program care citete numrul de cori ti ,
nlimea fiecruia i determin o aranjare a corului.

39. O bibliotecar dorete s repartizeze cele m volume pe care le are n


bibliotec pe cel mult 10 rafturi. Rafturile se completeaz ncepnd cu
raftul 1 apoi raftul 2 i aa mai departe. Scriei un program care s
determine o astfel de repartizare, dac exist, tiind c pe un raft ncap
cel mult p volume, i crile aceluiai autor trebuie s fie depuse pe
acelai raft. Pentru fiecare carte se cunoate autorul i titluL

40. N gzue se plimbau ntr-o grdin plin de flori nmiresmate. Fiecare


locuia pe una din aceste flori. Pentru fiecare gza se citesc:
- numele;
- numele florii pe care locuiete;
- culoarea florii;
- vrsta gzei (n zile);
a) S se selecteze un grup de ct mai multe gze cu vrsta ntre nl i n2
zile, astfel nct totalul vrstelor gzelor din grup s nu depeasc T zile.
b) S se determine dac exist un traseu pe la toate aceste gze astfel
nct trecnd n vizita de la o gz la alta s schimbm ori specia florii
ori culoarea acesteia rar a le schimba pe amndou odat.
Exemplu:

li~elula} flutura} mmru

cnn --~..... frezie - - - - -..


~ frezie
alb mov alb

78
41. Se citesc de la tastatur nlimile a n*m soldai (n i m sunt numere
naturale date). S se aranjeze aceti soldai n toate modurile posibile
ntr-o formaie de n rnduri i m coloane astfel nct orice soldat s aib
att n fa ct i n stnga lui numai soldai mai scunzi dect el.

42.. n fiierul litere.in este scris folosind litere o adunare codificat.


nlocuind ntr-un anume mod fiecare liter cu aceeai cifr i literele
diferite cu cifre diferite se ajunge la o adunare "cifric" corect din
punct de vedere aritmetic. Sunt exact zece litere diferite
corespunztoare celor zece cifre. Gsii cifra corespunztoare fiecrei
litere. Datele de intrare se citesc din fiierul litere.in, n care pe ultima
linie se afl suma liniilor anterioare.
Exemplu: litere.in Se va afia: S TOI C E N ALU
1839240567
STOICENI
SINAIA
.,' LUNA
STATIUNI

43. O matrice nxn reprezint planul unui apartament. Pereii sunt codificai
prin -1, uile prin O iar ncperile prin numere ncepnd de la 1. Se
citete aceast matrice i se cere s se scrie un program care afl i
afieaz cel mai scurt drum din ncpere a x n ncperea y (x i y sunt
numerele cu care sunt codificate ncperile).

44. Un soldat vrea s ajung din punctul de coordonate (xl,yl) al hrii n


punctul de coordonate (x2,y2) astfel nct s fie vzut de ct mai puini
oameni. Teritoriul e codificat sub forma unei matrici nxn care conine
pe poziia i,j numrul persoanelor care vd soldatul dac trece prin acea
poziie. Realizai un program care determin i afieaz drumul
soldatului.

45. La 10 clase trebuie repartizai 3 profesori de informatic. Se cunosc


numrul de ore de informatic ale fiecrei clase, precum i faptul c
fiecare profesor trebuie s aib cel puin 18 ore i cel mult 27 ore. S se
determine o repartizare a profesorilor, dac aceasta este posibil. Scriei
un program care citete numrul de ore al fiecrei clase, i afieaz
repartizarea cerut.

79
46. La clasa a X-a se realizeaz proiecte colective de sfrit de semestru. Cei
n elevi trebuie mprii n grupuri de lucru. Fiecare grup trebuie s aib
ntre 2-5 membri i trebuie s fie echilibrat din punct de vedere al
notelor. Se cunoate media la informatic a fiecrui elev. Grupul este
echilibrat dac media grupului nu difer cu mai mult de un punct de
media clasei. Scriei un program care s determine o singur mprire
n grupe a clasei, dac aceasta exist.

47. La o florrie se comercializeaz n sortimente de flori. Elevii unei clase


vor s ofere celor m profesoare, buchete diferite de cte trei fire. ntr-un
buchet florile pot fi de acelai fel sau pot fi diferite. Scriei un program
care afieaz toate variantele posibile i costul total al fiecrei variante
afiate. Se cunoate pentru fiecare sortiment preul unui fir.

48. Pe un antier
arheologic s-a descoperit un mozaic format din mxn dale
ptratede diferite culori. Restauratorii vor s ia o prob pentru a studia
compoziia culorilor (dar astfel nct s nu sparg mozaicul dect ntr-
un singur loc). Ajutai-l s descopere un dreptunghi format din ct mai
puine dale, dar care s conin cel puin o dal din fiecare culoare.

49. Se consider o tabl de Scrabble cu m*n ptrate. Pe fiecare ptrat se


poate aeza o liter astfel nct s se formeze cuvinte pe orizontal sau
pe vertical. Se cere s se caute pe tabl un cuvnt dat i s se precizeze
dac este aezat pe orizontal sau pe vertical.

VI.2. RECURSIV/TATE

1. Scriei un program recursiv pentru calcularea sumei elementelor de pe o


linie a unei matrici.

2. Scriei un program recursiv pentru calculul numrului de ani biseci din


intervalul [al,a2], unde al i a2 sunt numere naturale cu proprietatea al<a2.

3. Scriei un program recursiv pentru determinarea cifrei maxime dintr-un


numr de cel mult 9 cifre.

80
4. Scriei un program recursiv pentru a verifica dac un numr dat a, de
maxim 9 cifre, este simetric (adic citit de la dreapta la stnga reprezint
aceeai valoare).

5. Scriei un program recursiv care s determine media maxim i media


minim a unei clase cu n elevi.

6. Scriei un program care citete de la tastatura un numr natural i


apeleazsubprogramele recursive care:
a) numr cte cifre 3 conine numrul;
b) determin valoarea cifrei maxime din numr;
c) determin rangul cifrei cu valoarea maxim din numr (cifra unitilor
are rangul zero);
d) calculeaz suma cifrelor numrului;
e) calculeaz suma tuturor divizorilor numrului;
f) numr divizorii numrului;
g) numr cifrele pare coninute de numr;
Problema se va rezolva n urmtoarele dou variante:
1) Subprogramul va returna rezultatul prin intermediul unui parametru;
2) Rezultatul va fi asociat numelui subprogramului.
Comparai cele doua variante.

7. Scrieiun program care rezolv urmtoarea problem prin dou variante:


a) Folosind un subprogram recursiv;
b) Folosind dou subprograme care se apeleaz reciproc.
Un cioban are o oaie. Dup un an oaia face o mielu. Dup un an de
via mielua devine mioar. Dup un an mioara devine oaie. n fiecare
an fiecare oaie face cte o mielu, Presupunnd ca nici un animal din
turm nu moare i c toate oile fac doar mielue i niciodat berbecui s
se calculeze cte oi, cte mioare i cte mielue are ciobanul n turm
dup Nani. N se citete de la tastatura.

8. Scriei U11 subprogram recursiv care tiprete:


1
2 2
333

n 11 11 n

81
9. Fie X un ir de cuvinte separate prin unul sau mai multe spaii. Scriei
un algoritm recursiv care elimin spaiile inutile din X.

10. Scriei un program care prin intermediul unei funcii recursive


calculeaz valoarea unui polinom de gradul n, pentru o valoare X dat
de la tastatur. Funcia recursiv va citi la fiecare apel cte un coeficient
i gradul termenului cu acel coeficient, apoi va returna valoarea
polinomului n punctul X.

11. Scriei
un program recursiv pentru a verifica dac elevii unei clase au
prenumele diferite. Programul va citi numrul de elevi, numele,
prenumele lor i va afia mesajul "DIFERITE" sau "NUME
MULTIPLE".

12. Un tabel conine cuvinte. Scriei un program recursiv pentru a


determina cuvntul de lungime maxim.

13. Se consider harta unui teren de fotbal memorat sub forma unei matrice
ce conine valori 1 i O. O reprezint zon fr denivelri i 1 cu
denivelri. Care este numrul zonelor distincte cu denivelri? Scriei
pentru aceast problem un subprogram recursiv.

14. Pe un fir de telegraf se odihnesc N rndunele numerotate de la 1la N. La


un zgomot rndunelele i iau zborul. Unele zboar spre est altele spre
vest, sud sau nord. Scriei un program care citete de la tastatura pentru
fiecare rndunica direcia n care a zburat i afieaz/prin intermediul
unui subprogram recursiv, numerele corespunztoare rndune1elor care
au zburat spre nord.

15. Scriei un program recursiv care s gseasc cel mai apropiat numr de
un ptrat perfect, dintr-un ir de n numere naturale. .
Exemplu: Din irul 11,23,37,29,47 cel mai apropiat este 37.

16. Se citesc din fiierul MATRICI.IN un ir de matrici scrise n felul urmtor:


pe prima linie sunt date numrul de linii i coloane ale primei matrice
separate prin spaiu. Pe urmtoarele linii vor fi liniile matricei cu
elementele separate prin spaiu. Apoi urmeaz urmtoarele matrici dup
modelul descris la prima matrice. S se scrie un program care determin
matricea care se obine din toate matricile din fiier nsumnd elementele

82
care se suprapun. Elementele se suprapun dac sunt pe aceeai linie i
aceeai coloan.

17. O foaie de hrtie de form dreptunghiular se ndoaie pe lungime.


Dreptunghiul obinut se ndoaie la rndul su tot pe lungime, .a.m.d.
Scriei un subprogram recursiv care afieaz aria dreptunghiului obinut
prin n ndoiri succesive ale unui dreptunghi de lungime a i lime b.

18. Fiind dat un ir de caractere S, un subir al su s l i un alt ir s2, s se


scrie o funcie recursiv care returneaz irul obinut prin nlocuirea n
irul S a tuturor apariiilor lui s l cu s2 astfel nct irul returnat de funcie
s nu conin subirul s L

19. Se dau n numere naturale (O<n<15). Latura unui triunghi echilateral se


poate mpri la oricare din cele n numere astfel nct printr-o mpturire
s se obin triunghiuri echilaterale egale. S se afieze n ordine
cresctoare "'numrul de triunghiuri ce se pot obine prin mpturiri
succesive, folosind numai numerele date. Se vor afia numere mai mici
dect cel mai mare numr de tip integer (Pascal) respectiv int (C++).
Datele de intrare se citesc din fiierul Triunghi.in cu structura urmtoare:
- pe prima linie n;
- pe urmtoarea linie cele n numere naturale separate prin spaiu.
Ieirea se va face n fiierul Triunghi.out.

Exemplu:
Triunghi.in Triunghi.out
2 4 9 16 36 64 81 144 256 324 576 729 etc.
23

VI.3. METODA "DIVIDE ET IMPERA"

1. Scriei un program care citete de la tastatur notele de concurs ale celor n


participani la un festival muzical i afieaz laureatul. Programul va citi
numrul de participani, numele participanilor, nota fiecruia, i afieaz
numele laureatului.

2. Pentru elevii unei clase se cunosc mediile trimestriale ale fiecruia la


fiecare materie. S se scrie un program care citete numrul de elevi,

83
numrul de materii, mediile fiecrui elev i afieaz elevul i disciplina
cu media maxim.

3. Folosind tehnica Divide et impera scriei un program care determin


numrul de persoane cu nlimea mai mare dect 1,95 m dintr-un ora.
Prin program se citete numrul de locuitori ai oraului, precum i
nlimea fiecrui locuitor.

4. Andrei are n grdin m meri. Fiecare mr i are ni fructe. S se scrie un


program care s afle mrul cu cele mai multe fructe prin metoda divide et
impera.

5. Profesoara de sport a clasei a X-a vrea s tie dac sunt n clas 2 elevi cu
aceeai nlime ..Realizai un program care rezolv aceast problem prin
metoda divide et impera. Pe ecran se va afia DA respectiv NU, n
funcie de situaie. Se citete n (numrul elevilor din clas) i n nlimi
(date n centimetri).

6. Ioana are m cri. Ea vrea s ordoneze aceste cri dup numele autorilor.
Realizai un program care face aceast ordonare prin metoda divide et
impera.

7. N copii culeg mere dintr-o livada. Fiecare, cnd se plictisete, merge i


aeaz merele ntr-o cutie apoi pleac la joac. Scriei un program care
citete de la tastatur numrul de mere culese de ctre fiecare dintre cei n
copii, n ordinea n care ei au plecat la joac. Scriei cte un subprogram,
folosind tehnica "divide et impera", pentru rezolvarea fiecreia din
urmtoarele cerine i apelai toate aceste subprograme n programul
principal:
a) numrai i afiai ci copii dintre cei N au cules un numr de mere
mai mare dect un numr dat de la tastatur.
b) calculai i afiai numrul total de mere culese de cei N copii.
c) calculai i afiai al ctelea a plecat la joac copilul care a cules cel
mai puine mere? Dar cel mai multe?
d) care a fost cel mai mic numr de mere culese de ctre vreun copil? Dar
cel mai mare?
e) exist vreun copil care a cules exact M mere? (M dat de la tastatur)
Afiai al ctelea a plecat elIa joac.

84
CAPITOLUL VII

GRAFURI

1. Fie n centre comerciale unite prin drumuri de acces. Determinai centrul


comercial care are legturi directe cu ct mai multe centre.

2. Codificm cele n ncperi ale unei peteri cu 1,2,...,n. Din fiierul


pestera.in se citesc de pe fiecare linie perechi de numere ntregi (i,j) cu
semnificaia "ncperea i este legata direct de ncperea j". Scriei un
program care s rspund la urmtoarele ntrebri:
a) Care sunt ncperile cu cele mai multe coridoare de legtur?
b) Care sunt ncperile n care petera se nfund? Exist ncperi ce
sunt izolate?
c) Exist un grup de ncperi care s aib toate acces direct la toate
celelalte din grup?

3. ntr-un ora exist n coli unite printr-o reea stradal cu sens unic.
Determinai o coal la care se poate ajunge pornind de la oricare alt
coal. Se d numrul de coli i perechi de numere (i, j) reprezentnd
legtura stradal ntre coala i i coala j.

4. Pe teritoriul Australiei sunt dispuse n centre de televiziune (n, numr


natural citit de la tastatur). tiind c dou centre apropiate geografic nu
pot folosi acelai canal de transmisie deoarece acestea vor interfera i
imaginea nu va putea fi corect recepionat, se cere s se scrie un
program care s determine numrul minim de canale pe care pot emite
cele n staii.

5. ntr-un grup de n persoane aflate la un festival exist relaii de


cunotin. Relaia (i,j) are semnificaia c persoana i cunoate persoana
j. Scriei un program care citete numele persoanelor, relaiile de
cunotin i afieaz VIP-urile. VIP la acest festival nseamn persoan
cunoscut de cele mai multe persoane.

85
6. La un campionat de volei fiecare echip urmeaz s joace cu toate
celelalte echipe. Pentru a ine evidena meciurilor jucate pe msura ce se
desfoar, s-a folosit o matrice de inciden n care liniile reprezint
echipele participante la turneu i fiecare coloan se adaug la fiecare nou
meci jucat.
S se afieze meciurile ce nu au avut nc loc;
S se afiseze numele echipelor ce au jucat deja toate meciurile
posibile.
Datele de intrare vor fi citite din fiierul text ECHIPE.IN astfel:
-pe prima linie se afl numrul de echipe participante (n);
-pe urmatoarele n linii se gsesc denumirile echipelor (cte una pe un
rnd);
-pe urmtoarele n linii se afl matricea de inciden corespunztoare
meciurilor susinute pn n prezent.
Obs. : Graful corespunztor meciurilor ce nu au avut nc loc reprezint
graful complementar celui dat (muchiile a dou grafuri complementare
formeaz mpreun graful complet cu aceleai vrfuri).

7. La un concurs de badmington particip n concureni. Fiecare concurent i


a jucat un numr de m[i] de meciuri din care a ctigat c[i] meciuri. S
se scrie un program care s determine meciurile care mai trebuie jucate
astfel nct fiecare participant s joace cu fiecare din ceilali i apoi s
afieze clasamentul parial (dup numrul de victorii).

8. Profesoara de limba romn recomand elevilor clasei a XI-a m cri pe


care acetia trebuie s le citeasc pn la sfritul semestrului. O parte
din elevi nu vor reui s citeasc toate crile, din diferite motive.
Din fiierul carti.in citesc:
de pe prima linie numrul de cri;
de pe a doua linie, numrul de elevi;
de pe urmtoarele linii, triplete de numere cu urmtoarea
semnificaie:
6) Cod carte;
Elevul care a citit cartea i o d mai departe;
Elevul care primete cartea i o citete.
Scriei un program care s rspund la urmtoarele ntrebri:
a) Exist elevi care au citit toate crile? n caz afirmativ afiai care
sunt acetia.

86
b) Exist elevi care nu au citit nici o carte? n caz afirmativ afiai lista
lor.
c) Care este cartea (crile) citit de cei mai muli elevi?
Exemplu:
Date.in
3 {3 carti}
5 {5 copii}
124 {cartea 1 de la copilul 2 la copilul 4 }
214 {cartea 2 de la copilul 1 la copilul 4 }
354 {cartea 3 de la copilul 5 la copilul 4 }
245 {cartea 2 de la copilul 4 la copilul 5}
251 {cartea 2 de la copilul 5 la copilul l}
Soluii: '
a) Da, exist: 4
b) Da, exist: 3
c) Carte citit de 3 elevi: 2
>-}':.

9. Elevii unei clase au de scris o compunere la limba francez. Deoarece


doresc s se inspire unii de la alii, ei i mprumut unii altora caietele
n care i-au scris temele. Se cunosc perechile de elevi (numerotai de la
1 la n dup catalog) care i-au mprumutat caietele. Primul din pereche
este cel care a dat caietul cu tema, iar al doilea cel care l-a primit. Se
consider c dac X a mprumutat caietul colegului Y, iar Y a
mprumutat colegului lui Z, tema lui Z este inspirat att din tema lui X
ct i din a lui Y. Scriei un program care s afieze:
a) La ci colegi a mprumutat caietul fiecare elev i de la ci colegi a
mprumutat caietul cu tema.
b) Care a fost irul cel mai lung de elevi a cror tem a fost inspirat de
ctre tema elevului X? (alg. lui Lee)
c) Cror colegi le-a mprumutat elevul X caietul su?
d) Numrul elevului care a dat caietul celor mai muli colegi.
e) Numrul elevului care a luat cele mai multe caiete pentru a se
inspira.
f) Tema crui elev a inspirat cele mai multe alte teme?
g) Exist elevi n clas care nu au dat i nu au primit nici un caiet
pentru tema la limba francez? Daca da, care au fost aceia?
h) Se citete de la tastatur o list de elevi (sub form de numere de
ordine). Precizai dac este adevrat sau nu faptul c fiecare elev din
list a mprumutat caietul la cel care urmeaz imediat dup el n list.

87
10. ntre N localiti numerotate de la 1 la N sunt instalate legturi
telefonice. Se cunosc perechile de localiti ntre care exist legtur
prin fir direct. Scriei un program care citete de la tastatur aceste
legturi apoi realizeaz urmatoarele:
a) Calculeaz i afieaz cu cte localiti se poate comunica direct din
localitatea x, dat de la tastatur
b) Afieaz localitile legate prin fir direct de o singur localitate
c) Stabilete i afieaz dac ntre oricare dou localiti se poate
realiza o legtur telefonic (direct sau prin intermediul altor
localiti).
d) Afieaz localitile grupate n modul urmtor: din aceeai grup fac
parte localitile care au proprietatea c ntre oricare dou se poate
efectua o convorbire direct sau indirect i nu exist nici o legatur
ntre vreo localitate din acea grup i oricare alta care nu aparine
grupei.
e) Verific dac ntre localitile x i y date de la tastatur se pot realiza
convorbiri folosind trasee diferite. Se va afia pe ecran : "ntre x i y se
pot efectua convorbiri pe trasee diferite" sau "exist o singur variant
de traseu ntre x i y" sau "ntre x i y nu se pot efectua convorbiri
telefonice".

11. Un eschimos locuiete la iglu-ul cu numrul x. El are o hart pe care


sunt marcate iglu-urile din zon (numerotate de 1 la n) i distanele
dintre acestea. tiind c din cauza frigului eschimosul nu poate s
parcurg o distan mai mare de 100 km fr oprire la un iglu, afiai
toate variantele de a ajunge la prietenul lui care locuiete la iglu-ul cu
numrul y.

12. Se tie c elevii comunic n timpul unei lucrri de verificare a


cunotinelor. Ei se neleg "din priviri" ns nu pot "vorbi"cu toi
colegii, numai cu unii. S se scrie un program care citete numrul de
elevi (n), apoi, pn la ntlnire a caracterului Ctrl/Z, citete perechi de
elevi care pot comunica i verific dac exist o legtur ntre toi elevii
din clas, deci dac o informaie poate ajunge la fiecare. Dac da,
programul va afia i drumul acestei informaii.

13. ntr-o tabr elevii au n puncte de plecare (de ex.: corturile, cantina,
stejarul cel btrn etc). Iniial deplasarea ntre oricare dou puncte se
face ntr-un timp t, ns organizatorii au amplasat m obstacole pe

88
traseele dintre aceste puncte. Cu fiecare obstacol care trebuie depit
elevii pierd 30 de secunde; pe un traseu pot fi mai multe obstacole.
Acum elevii trebuie s ajung din punctul x n y, dar vor s mearg pe
drumul cel mai scurt. Scriei un program care citete n, m, x, y apoi m
perechi de puncte ntre care sunt obstacole i afieaz drumul cel mai
rapid ntre x i y.

14. Fie o reea de drumuri ntre n orae. Un turist are la dispoziie o sum de
bani pentru a vizita ct mai multe orae. Cunoscndu-se legturile
dintre orae i costul deplasrii ntre orae determinai numrul maxim
de orae ce pot fi vizitate i stabilii traseul turistului,

15. AgeniaNaional de distribuie a gazelor naturale ROMGAZ primete o


investiie de x miliarde lei pentru a realiza legarea la reeaua national
de gaz a tuturor caselor din satul Fget. Pentru aceasta se face un studiu
n urma cruia rezult urmtoarele informatii salvate ntr-un fiier text:
fr ~ ,

Pe prima linie, numrul de case ce trebuie legate (n)


Pe urmtoarele linii se afl costurile instalrii conductelor de gaz de
la o cas la alta, astfel:
Numar_casa _i numar _casa -J costul instalrii conductei ntre casa i i j
S se scrie un program care s determine:
a) dac fizic este posibil ca toate casele s fie legate la reea;
b) dac suma existent pentru investiie este suficient pentru a
alimenta tot satul i n caz afirmativ s se afieze o soluie de cost
minim.

16. Pentru cele n orae mari (cu peste 50000 locuitori) ale unei ri se
cunosc drumurile de legtur dintre ele. Se consider c orice drum de
legtur permite circulaia n ambele sensuri. S se scrie un program
care s mpart aceste orae n grupe pe "grade de izolare". O grup cu
acelai grad de izolare este format din oraele care au acelai numr de
artere care intr n ora.

17. Dup cum se obinuiete n Estul Chinei, ranii construiesc diguri de


jur mprejurul plantaiilor de orez, urmnd ca la timpul potrivit s le
sparg pentru ca apa s inunde plantaiile. O plantaie parcelat poate
arta astfel :

89
Dac fiecrei parcele i asociem vrful unui .graf, iar dou parcele
alturate vor fi reprezentate ca avnd o muchie comuna, graful ce
rezult arat astfel:

Fiind date costurile de spargere (i apoi refacere) ale tuturor digurilor


existente, se cere s se determine o soluie de spargere de cost minim
astfel nct toate parcelele s poat fi irigate.

18. O firm are un numr de posturi vacante de diferite tipuri i exist de


asemenea un grup de solicitani pentru ocuparea lor. Fiecare persoan
este calificat pentru anumite posturi. S se determine dac exist

90
persoane calificate pentru a ocupa oricare din posturile scoase la
concurs. Nu se va considera o soluie ca aceeai persoan s ctige
dou posturi.

19. O mare agenie n prag de faliment ncearc s produc o schimbare n


conducere, n sperana reabilitrii situaiei financiare. Una dintre
initiaivele puse n practic este gsirea upui consiliu managerial format
din oameni foarte unii i plini de idei. In urma unui sondaj de opinie
referitor la ncrederea pe care o au fiecare dintre ei n toi ceilali, s-a
construit un graf ale crui muchii semnific puternice relaii de
colaborare. S se scrie un algoritm care determina cel mai mare grup cu
proprietatea c exist relaii puternice ntre toi membrii lui. Se vor afia
i potenialii conductori, ca fiind persoanele cele mai agreate din acest
grup.
Observaie: Un subgraf parial complet al unui graf se numeste clica.

20. Lanul slbiciunilor


Mamiica este disperat: "puiorul" este "corijent" la chimie. Dar cu
toate acestea este optimist fiindc cunoate toate "obligaiunile" din
oraul su. tie de pild c Popeasca i e datoare lui Mii, Mii i e
datoare lui Mimi... i aa mai departe i va gsi ea o cale s-I oblige pe
stimabilul profesor s-I treac pe puiorul ei.
Citind din fiierul slablciuni.ln perechi de nume cu semnificaia c
persoana cu primul nume i este datoare celeilalte, se cere s se
determine:
a. Toate lanurile slbiciunilor din ora;
b. Cea mai scurt soluie pentru puior, tiind c acesta se numete
Protopopescu, iar numele profesorului se citete de la tastatur.

21. Muzeul de art dorete s achiziioneze o cldire n scopul deschiderii


unei expoziii. n acest scop se efectueaz un studiu al cilor de acces
din interiorul cldirii. n urma studiului se deseneaz graful
corespunztor, n care vrfurile reprezint locuri unde ar putea fi expuse
obiecte, iar arcele reprezint posibile direcii de deplasare. S se
determine dac n aceste condiii publicul ar putea vizita expoziia
circulnd exact o dat pe lng fiecare obiect. n cazul n care acest lucru
este posibil, s se afieze un astfel de circuit.

91
22. La disciplina informatic se realizeaz proiecte de grup n fiecare
semestru. Elevii trebuie s se grupeze pentru a realiza aceste proiecte
dup preferine. Fiecare elev are voie s aib dou preferine. S se scrie
un program care mparte elevii n grupe, n vederea realizrii proiectelor.
n fiecare grup, fiecare elev trebuie s prefere pe cineva din grupa sa.
Grupele trebuie s fie formate din cel puin doi elevi i cel mult jumtate
din numrul elevilor clasei. n situatia
, n care nu exist solutie, se va
afia un mesaj corespunztor.

23. O agenie de turism ofer spre vizitare mai multe obiective turistice. Un
turist poate alege dintre aceste obiective pe cele pe care vrea s le
viziteze. Pentru fiecare obiectiv se cunosc coordonatele sale (latitudine
i longitudine). Transportul se face cu avionul. S se scrie un program
care s afieze traseul cel mai scurt pentru vizitarea obiectivelor dorite
de acel turist.

24. La o discotec organizat la coal particip n biei i m fete. Fiecare


are anumite preferine de a invita sau de a fi. invitat la dans. S se
determine numrul minim de. dansuri necesare astfel nct fiecare s
danseze cel puin o dat cu cei cu care dorete. S se scrie un program
care s rezolve aceast problem, afindu-se i perechile la fiecare
dans.

25. ntr-o familie mai deesebit, din arborele genealogie se observ c


fiecare membru al familiei a avut cel mult doi copii. Dac o persoan a
avut exact doi copii atunci acetia au fost biat i fat.
a) Gsii o structur de date potrivit pentru pstrarea ~~;llculator a
numelor persoanelor din arborele genealogie i scriei un program care
preia datele de la tastatur. Se va ine seama de sexul fiecrei persoane
prin poziia pe care o ocup n arbore.
b) Afiai toi membrii arborelui genealogie, n ordinea generaiilor (pe
nivele).
c) Afiai numele prinilor urmat fiecare de numele copiilor lui scrise
ntre paranteze, separate prin virgul. Se va scrie nti numele baiatului
i apoi numele fetei (R(S,D)).
d) Cte generaii cuprinde linia cea mai lung de descendeni? Afiai
valoarea obinut.

92
26. Un chinolog ntocmeste pedigree-ul cinelui su. Pentru aceasta
construiete un arbore binar care cuprinde strmoii cinelui al crui
nume figureaz n rdcina arborelui. Nodul care se afl n stnga unui
nod oarecare conine numele "tatlui", iar nodul din dreapta pe cel al
"mamei". Strmoii se citesc corespunztor parcurgerii n preordine a
arborelui. Fiind dat numele unui patruped se cere s se afieze numele
prinilor i al "bunicilor", dac acetia figureaz n arbore.

27. Bieii dintr-o coal corespondeaz cu fetele dintr-o alt coal. Copiii
sunt numerotai de la 1 la N ntr-o ordine oarecare. Se cunosc perechi de
numere (x,y) cu semnificaia: x corespondeaz cu y (relaie reciproc).
tiind c nici un biat nu corespondeaz cu un alt biat din coala lui i
nici o fat nu corespondeaz cu vreo alt fat din coala ei, scriei un
program care preia datele de la tastatur (perechile de numere) i
afieaz, dac este posibil, grupa fetelor i grupa bieilor. Se precizeaz
c elevul cu numrul 1 este biat. n cazul n care problema nu are
soluie, s se afieze: "nu se pot stabili grupele exact".

28. ntr-o clas sunt n elevi. Dirigintele vrea s construiasc un arbore de


informare n clas astfel nct fiecare elev s obin informaia n timp
ct mai scurt. Dirigintele anun doi elevi, iar fiecare din cei doi elevi
anun cte trei elevi, care la rndul lor anun cte trei elevi, i aa mai
departe. Fiecare elev primete informaia de la o singur persoan. S se
scrie un program care construiete un astfel de arbore de informare.

29. ntr-un grup de n persoane, codificate 1,2,...,n se precizeaz pentru


fiecare persoan, lista de prieteni. Datele se citesc din fiierul
persoane.in cu structura urmtoare:
pe prima linie se d numrul de persoane (n)
1 pe urmtoarele n linii codul fiecrei persoane din grup i codurile
prietenilor si, separate prin spaii.
Relaia de prietenie nu este neaprat reciproc. O persoan din grup
recepioneaz un zvon pe care l transmite prietenilor si. Acetia
transmit fiecare mai departe prietenilor care nu au recepionat nc
zvonul, .a.m.d. S se afieze toate posibilitile de transmitere a
zvonului, ncepnd cu persoana care l-a recepionat i sfrind cu o
persoan care nu mai are cui s transmit zvonul, deoarece prietenii si
l-au recepionat deja.
Persoana care recepioneaz zvonul se citete de la tastatur.

93
Ex. fiierul persoane. in Se va afia:
6
135 43
2154 465213
34 46513
463
5216
645
Persoana care recepioneaz zvonul: 4

30. n urma campionatului intercolar de fotbal elevii au redactat un


material informativ pe care l-au salvat pe serverul liceului. Ionic, aflat
temporar n Italia, a accesat serverul pentru a afla informaii despre
aceast competiie. Din pcate, calculatorul fiind virusat s-au pierdut o
seam de informaii. Iat ce a mai rmas:
pe primele linii, denumirile colilor participante (cte una pe un
rnd) ;
It pe urmtoarele linii se gsesc cifre de O i 1 separate prin cte un
spaiu, reprezentnd o matrice cu attea linii i coloane cte coli
participante, un 1 avnd semnificaia c coala din acea linie a jucat n
campionat cu coala din coloana corespunztoare.
tiind c regula intern a acestui campionat face ca n fiecare etap,
echipele ce pierd meciul s fie scoase din competiie, s se scrie o
aplicaie care s determine :
care au fost echipele finaliste ;
care au fost echipele descalificate la o etap dat (citit de la
tastatur). La citirea numrului etapei se va realiza o validare a datelor,
n sensul c nu va fi permis introducerea unui numr mai mare dect
numrul maxim de etape.

Exemplu.:
Particip la campionat 8 coli: A, B, C, D, E, F,G, H.
Fiierul de intrare este:
8
A
B
C
D
E

94
F
G
H
01011000
10000000
00010000
10100000
10000101
00001000
00000001
00001010

95
CAPITOLUL VIII

ALOCAREA DINAMIC A MEMORIEI


VIII.1. STIVA

1. Profesorul de informatic adun caietele cu tema de cas a elevilor


formnd cu ele un teanc. n pauz vrea s verifice dac Rzvan a predat
caietul cu tema. Pentru c are la dispoziie doar dou ore pentru. a le
corecta, ia acas doar jumtate din caiete. Scriei un program care s
simuleze aceste aciuni ale profesorului. Programul va afia mesajul
"Rzvan a predat caietul" sau mesajul "Rzvan nu a predat caietul" apoi
va afia "Lista caietelor pentru astzi" precum i "Lista caietelor pentru
mine".

2. S se calculeze suma i produsul a dou polinoame date sub forma a


dou liste simplu nlnuite. Fiecare element al listei va reprezenta un
termen i va pstra gradul si coeficientul termenului respectiv. Fiecare
polinom rezultat se va pstra n cte o list simplu nlnuit.
Obs.: Nu se vor pstra n nici una dintre liste termenii care au
coeficientul egal cu zero.

3. n depozitul de legume fructe al societtii Legume-Fructe SA se afl mai


multe stive de lzi cu legume. n fiecar'e lad exist un anumit produs i
fiecare lad are o cantitate dat de legume. Una dintre stive conine
cartofi i alte legume. Gestionarul vrea s separe aceast stiv n dou
stive: una care s conin numai lzile cu cartofi i una care s conin
celelalte legume. Scriei un program care s simuleze aceast aciune i
care s afieze cantitatea total de cartofi precum i legumele existente n
stiv.

4. Maria o ajut pe mama sa la buctrie dup plecarea musafirilor. Toate


farfuriile de desert i de felul doi, murdare, sunt puse unele peste altele
lng chiuvet pentru a fi splate. Maria ncepe s spele aceste farfurii,
dar mama i atrage atenia c farfuriile de desert curate le va pune una .

96
peste alta ntr-o parte i la fel cele de felul doi n alt parte. Scriei un
program care pe baza unui subprogram, pornind de la stiva farfuriilor
murdare, simuleaz splarea acestora i creeaz alte dou stive, una a
farfuriilor de desert i alta a farfuriilor de felul doi.

5. Se introduce un cuvnt de la tastatur. Creai o stiv cu vocalele distincte


din cuvnt i o alt stiv care cuprinde consoanele distincte. Afiai care
din cele dou stive conine mai multe elemente.

6. Creai o list cu toate mainile dintr-un parc auto. Pentru fiecare main
se cunoate numrul de nmatriculare, marca i culoarea. Afiai:
a) numrul de maini din fiecare marc existente n parc;
b) culoarea care predomin n acest parc auto.

7. Depozitul de carte al unei biblioteci se ntinde pe patru etaje ale aceleai


cldiri. La primul etaj se gsesc crile care au cota de la 00001 la 09999,
la cel de-al doilea etaj crile care au cota de la 10000 la 19999, la al
treilea etaj cri care au cote cuprinse ntre 20000 i 29999, iar la ultimul
etaj cotele sunt de la 30000 la 39999. Crile sunt distribuite cititorilor n
trei sli de lectur: sala A, B i C, fiind transportate cu un lift care are o
capacitate de 100 de cri. Liftul este astfel construit nct toate cele 100
de cri se aeaz una peste alta ntr-o singur coloan. Periodic, crile
returnate de cititori sunt trimise din cele trei sli de lectur napoi la
depozit. Scriei un program care, pornind de la listele crilor returnate
din fiecare sal de lectur, s simuleze aezarea crilor n lift i
repartizarea acestora pe etaje. Aranjarea n lift se va face astfel nct
atunci cnd liftul ajunge la fiecare etaj, n vrful coloanei s fie aezate
crile care aparin nivelului respectiv. Afiai de cte ori a fost solicitat
liftul pentru transportul crilor.

VIII.2. COADA

8. La intrarea intr-o sal de spectacole sunt 2 rnduri de persoane pstrate n


dou liste simplu nlnuite de tip coad. Pentru c exist doar un singur
angajat care verific biletele, pe poart poate s intre la un moment dat o
singur persoan. tiind c angajatul este corect i permite s intre
alternativ cte o persoan din fiecare rnd, se cere s se afieze ordinea
de intrare a persoanelor n sala de spectacol (fiecare persoan este
identificat prin numrul biletului su).

97
9. La un service auto exist n rampe de reparare a mainilor. Pe fiecare
ramp se poate repara la un moment dat o singur main. Un client care
vine la service este repartizat la o ramp liber (dac exist) sau este
rugat s atepte la rnd. Cnd o ramp se elibereaz, mecanicul auto
anun aceasta i prima main din rnd (dac exist) este repartizat la
acea ramp. Scriei un program care s repartizeze mainile la rampe, s
gestioneze rndul i rampele. Programul va afia un meniu de forma:
E- eliberare ramp,
C-prezentare client la service,
L- listarea mainilor de la rnd,
R-listarea rampelor,
X-ieire din program.
Fiecare main este identificat prin numrul de nmatriculare i fiecare
ramp prin numrul ei.

10. La un cabinet stomatologic cu un singur medic, pacienii sunt consultai


n ordinea sosirii. Excepiile sunt cazurile de urgen care intr la
consultaie imediat ce se elibereaz scaunul. Scriei un program care
lucreaz pe baza unui meniu pentru planificarea consultaiilor. Pacienii
se identific prin nume.
Meniul va avea urmtoarele opiuni:
P-sosire pacient,
U-sosire urgen,
E- eliberare scaun,
L-listarea pacienilor de la rnd,
T-terminarea programului

11. O list conine coordonatele a n puncte din plan. ,S se determine


triplete1e de puncte consecutive n list care sunt coliniare i s se
afieze.

12. Pe aeroportul Ben Habib bagajele sunt aduse de la aeronav ntr-o sal
de preluat bagaje. n aceast sal se afl o band rulant care are dou
capete: unul este n exteriorul slii, unde bagajele sunt depuse unul cte
unul, iar cellalt capt se afl n interior, de unde fiecare cltor i
poate ridica bagajul atunci cnd acesta a ajuns la acest capt. Pe band
intr cel mult 20 de bagaje. Cunoscnd numrul cltorilor care coboar
dintr-un avion (fiecare are un singur bagaj pe care este scris numele i
prenumele), scriei un program care simuleaz intrarea bagajelor pe

98
banda rulant ipreluarea lor de ctre cltori pe baza unui meniu cu
opiunile l-intrare bagaj, P-preluare bagaj, S-sfrit program.

13. ntr-un ora mic din sudul rii exist o staie Peco cu o singur pomp
la care se servete benzin i motorin. De obicei, la ora deschiderii
sunt maini care ateapt s fie servite. Staia are un regim special
deoarece este deschis o jumtate de or pe zi. n fiecare minut se
servete o main sau alta intr n staie i i ateapt rndul.
Cunoscnd mainile (numrul de nmatriculare, ce tip de combustibil
doresc i n ce cantitate) care se afl n staie la ora deschiderii, scriei
un subprogram care pe baza unui meniu simuleaz intrarea mainilor i
servirea lor ntr-o singur zi. Pot exista momente n care nu sunt maini
n staie i atunci afiai "Pauz". La sfritul programului afiai
cantitile de benzin i de motorin vndute.

VIH.3. LISTE SIMPLU NLNTUITE


,

14. Creai o list liniar simplu nlnuit cu elevii clasei a XI-a, pentru
fiecare elev cunoscndu-se numele i media la informatic. La
introducerea fiecrui elev verificai dac acesta nu a mai fost introdus n
list. Afiai apoi cel mai bun informatician (informaticieni) al (ai)
clasei.

15. ntr-o list liniar simplu nlnuit sunt reinute rezultatele sportivilor
unui club de atletism: numele i valoarea sriturii n lungime. Un
sportiv vrea s afle ce loc ar ocupa dac s-ar alctui un clasament n
ordinea descresctoare a sriturilor. Scriei un program care preia de la
tastatur numele acestuia i rspunde cererii sportivului.

16. Se citesc n numere reale ntr-o structur de tip list, reprezentnd


altitudinea unor puncte de pe hart. Inserai ntre fiecare dou elemente
consecutive din lista iniial media aritmetic a celor dou valori i
afiai noua list.

17. O firm a fcut numeroase mprumuturi la o banc. Valorile acestora,


precum i dobnzile aferente sunt reinute ntr-o list liniar simplu
nlnuit. Firma dispune de o sum S cu care dorete s i achite
datoriile la banc. Scriei un program care s elimine din list acele

99
mprumuturi care pot fi restituite avnd la dispoziie suma S (restituirea
va ncepe cu primul mprumut din list i se vor lua n considerare
dobnzile).

18. La o grdini d-na educatoare aeaz copiii pe dou rnduri: pe unul


fetele, iar pe cellalt bieii. Apoi ia pe rnd cte un biat i l aeaz
ntre dou fete. Se oprete dac nu mai sunt biei sau dac nu mai sunt
dou fete alturate. Scriei un subprogram care, pornind de la cele dou
liste, a fetelor i a bieilor, modific lista fetelor astfel nct aceasta s
fie format din cte un biat i o fat. Afiai dac au rmas biei pe
dinafar sau dac mai sunt fete alturate.

19. Elevii claselor a XI-a A si a XI-a B trebuie s susin un test la limba


strin studiat: cei din XI A la limba englez, iar cei din XI B la limba
francez. Profesorii hotrsc s aranjeze elevii astfel nct ntr-o banc
s stea un cunosctor de limba englez i unul de francez. Numele
elevilor din cele dou clase sunt memorate n dou liste simplu
nlnuite ordonate alfabetic. S se insereze n lista elevilor din XI A
cte un elev din XI B, astfel nct s nu existe alturi doi elevi care
susin testul la aceeai limb strin. S se afieze lista obinut dup
inserare..

20. Un bancomat poate primi toate tipurile de bancnote (valuta naional).


S se scrie o aplicaie pe baza de meniu care gestioneaz banii dintr-un
astfel de bancomat pe parcursul unei zile. Se va folosi pentru aceasta o
list liniar alocat dinamic, n fiecare nod al listei pstrndu-se
valoarea bancnotei i numrul de buci existente n bancomat. Meniul
va conine urmatoarele opiuni:
I- introducere de bani n bancomat, din fiierul Bani.in n care pe
fiecare rnd se afl valoarea unei bancnote
Exemplu: Bani.in
500000
10000
10000
100000
10000
500000
E- extragere de bani, conform cererii din fiierul Bani.out, unde pe
fiecare linie avem un numr de bancnote, spaiu, valoarea bancnotei, .

100
ceea ce nseamn c se dorete extragerea de bancnote cu acea valoare
n numrul specificat.
Exemplu: Bani.out
7500000
8610000
3 100000
A- afiarea disponibilului la un moment dat
Iniializarea bancomatului cu bani se va face printr-o operaie de
introducere de bani dintr-un fiier de tipul Bani.out.

21. La o florrie sunt pregtite buchete de flori pentru diferite ocazii. Se citesc
de la tastatur numrul de flori din fiecare buchet pn la ntlnirea
numrului zero i se pstreaz ntr-o list alocat dinamic. Se cere:
a) S se afieze numerele de flori din buchete n ordinea citirii.
b) S se afieze i apoi s se elimine din list toate buchetele cu un
numr par de flori dup care s se afieze numrul de flori din fiecare
dintre buchetele rmase.
c) S se numere i s se afieze numrul de buchete care conin numere
prime de flori.
d) S se gseasc i s se afieze poziia pe care se gsete buchetul cu
cele mai multe flori. Dac sunt mai multe cu acelai numr maxim se
vor afia toate acele poziii.
e) Afiai buchetele n ordinea descresctoare a numrului de flori
coninute.

22. La examenul de bacalaureat se prezint n candidai. Fiecare candidat se


identific prin nume. La nceput candidaii sunt n ordine alfabetic. Pe
parcursul desfurrii examenului, unii dintre candidai sunt eliminai.
Cei care au obinut note sub 5 sunt scoi din lista de examen, dar sunt
trecui n alt list, a celor respini. Dup terminarea probelor sunt
exclui din lista iniial i cei care nu au media cel puin 6. Scriei un
program care creeaz lista de nscriere (fiecare candidat particip la 6
probe) apoi adaug notele la fiecare prob i i exclude pe cei respini,
iar la sfrit listeaz candidaii reuii ordonai dup medii, precum i pe
cei respini.

23. La un concurs de frumusee concurentele se prezint prin urmtoarele


date: numele, vrsta, nlimea, greutatea. Toate aceste informaii se
pstreaz ntr-o list liniar. Juriul vrea s aleag dou premiante (una

101
dintre cele mai nalte i una dintre cele mai scunde). Pentru aceasta se
creeaz dou liste: una cu concurentele cele mai nalte (jumtate) i una
cu concurentele mai scunde (jumtate). Scriei un program care creeaz
cele trei liste apoi le afieaz nsoite de un titlu potrivit.

24. Un grup de n turiti se afl n Tunisia i doresc s fac o excursie prin


deert, Ei au la dispoziie m cmile (nl2<m<n), fiecare putnd
transporta unul sau doi turiti. Caravana pornete la drum, dup ce
turitii au urcat pe cmile. La prima oaz cmilele pe care se afl doi
turiti ies din caravan i rmn s se odihneasc. Alte cmile se aeaz
la sfritul caravanei, astfel nct fiecare turist rmas pe dinafar poate
urca pe cte o cmil. Acum cei n turiti aflai pe n cmile i pot
continua drumul prin deert. Scriei cte o procedur pentru fiecare din
urmtoarele cerine:
a) Creai o list liniar simplu nlnuit corespunztoare caravanei care
se formeaz la nceputul excursiei prin deert. Fiecare element al listei
va cuprinde un numr de identificare a cmilei i numele celor dou
persoane, respectiv al unei singure persoane (n acest caz, cmpul
rezervat celei de-a doua persoane rmne liber), care se afl pe cmil.
b) tergei din list elementele corespunztoare cmilelor cu cte doi
turiti. Dup fiecare tergere adugai dou elemente la sfritul listei.
Cele dou elemente corespund celor doi turiti care au cobort de pe o
cmil i care urc pe cte o alta.

VUI.4. LISTE DUBLU NLNTUITE


,

25_Flaviu este n clasa a IX-a i nu pre cUllqate care este poziia lui n
clas. Pentru fiecare elev din clas se cunoate numele i media lui
general. Folosind o list ordonat, s se scrie un program care afieaz
cei trei elevi din faa lui Flaviu, cei trei de dup el, precum i poziia pe
care se gsete el n clas.

26. Se citesc n numere reale ntr-o structur de tip list, reprezentnd


altitudinea unor puncte de pe hart. Inserai ntre fiecare dou valori
consecutive din lista iniial media aritmetic a celor dou valori i
afiai noua list.

27. Dirigintele unei clase are un tabel cu elevii si ordonai dup medii.
Dorete s aranjeze elevii n bnci astfel nct primul din clas s stea

102
n banc cu ultimul, al doilea cu penultimul etc. tiind c tabelul este
memorat ntr-o list liniar dublu nlnuit, afiai perechile obinute n
urma aranjrii elevilor n bnci.

28. Fie a i b dou numere naturale cu multe cifre. S se afieze cele dou
numere apoi s se calculeze i s se afieze suma lor folosind structuri
de date alocate dinamic.

29. Fie a i b dou numere naturale cu multe cifre. S se afieze cele dou
numere apoi s se calculeze i afieze diferena lor folosind structuri de
date alocate dinamic.

30. Se memoreaz cifrele unui numr scris n baza 2 ntr-o list alocat
dinamic, o celul conine cifra i numrul de repetri consecutive ale
acesteia. Creai i apoi afisai o list ce va conine cifrele numrului n
baza 16 (exemplu: 11100101 1,3---0,2---1,1---0,1---1,1 va afia E5).

31. Elevii clasei a XI-a hotrsc s formeze ct mai multe perechi de Ziua
ndrgostiilor. Pentru aceasta nu vor ine cont de simpatiile existente,
ci vor forma perechile n modul urmtor: toi elevii clasei se vor aeza
pe o singur linie. Prima fat din partea stng i primul biat din partea
dreapt formeaz prima pereche. Urmtorul biat din partea stng i
urmtoarea fat din partea dreapt formeaz a doua pereche. Pentru cea
de-a treia se ia urmtoarea fat din partea stng i urmtorul biat din
partea dreapt. Perechile se formeaz, parcurgnd irul dinspre margini
spre centru, pn cnd cele dou parcurgeri se ntlnesc. Se reia
formarea perechilor ncepnd de data aceasta cu primul biat din partea
stng i prima fat din partea dreapt. Se continu n acest mod pn
cnd nu se mai poate forma nici o pereche. Cunoscnd numrul
elevilor, prenumele i sexul fiecruia, creai o list cu toi elevii clasei,
apoi formai perechile dup procedeul descris mai sus.

32. Elevii dintr-o clas de informatic lucreaz la laborator pe grupe. La


sfritul semestrului 1 lista cu numele i mediile din fiecare grup n
ordine cresctoare a mediilor este pstrat n cte o list alocat
dinamic. Se cere:
a) Verificai datele de intrare n timpul introducerii lor de la tastatur i
nu permitei adugarea n list a mediilor mai mici dect 1 sau mai mari

103
2

dect 10, nici introducerea mediilor ntr-o alt ordine dect cea
cresctoare.
b) Creai o singur list obinut direct ordonat cresctor care s
conin situaia ntregii clase i afiai-o.
c) Tiprii numele elevilor mpreun cu media pentru aceia care au
media minim 7.
d) Presupunnd c un nou elev dintr-o clas paralel vine n clas
adaugai-l n list astfel nct lista s ramn ordonat. Se precizeaz de
la tastatur numele i media noului venit. Afiai lista.
e) Presupunnd c un elev pleac din clas eliminai-l din list i apoi
afiai lista. Se va preciza de la tastatur numele elevului care pleac.
Obs.: Nu se cunoate numrul de elevi din fiecare list. Citirea datelor
se oprete cnd se introduce semnul * pentru numele unui elev.

33. La comisia de bacalaureat nr. 10 sunt repartizate dou coli. Fiecare


coal are memorai candidaii n cte o list liniar simplu nlnuit,
ordonat alfabetic. La repartizarea pe sli candidaii sunt distribuii n
ordine alfabetic, indiferent de coala de la care provin. Scriei un
program care citete listele celor dou coli apoi creeaz lista de
bacalaureat i afieaz repartiia n slile de examen. Se tie c ntr-o
sal sunt cel mult 20 de candidai.

34. Un DJ primeste o list cu formaiile aprute recent i vrea s le includ


n vechea lui list ordonat alfabetic astfel nct .lista s rmn
ordonat. Scriei un prograrri care simuleaz aceast operaie, folosind
dou structuri de date alocate dinamic: una coninnd formaiile vechi
(ordonat alfabetic) i una coninnd noile formaii.

35. Se memoreaz ntr-o list circular cifrele unui numr naturalScriei un


program care afieaz valoarea maxim care se poate forma prin
permutri circulare ale cifrelor din numr.

VIU.5. ARBORI BINARI

36. Elevii unei clase stau n banc cte doi sau cte unul singur. Cnd este
nevoie s se fac un anun urgent la sfrit de sptmn sau n vacan ei
au stabilit un sistem prin care un elev va anuna pe alii doi care sunt
colegi de banc, sau pe unul singur dac el nu are coleg de banc (exist

104
i elevi care nu vor da telefoane mai departe). tiind c doamna dirigint
face primul anun (anun doi elevi care sunt colegi de banc) i apoi
fiecare elev i anun ali doi colegi de clas i aa mai departe, se cere
s se scrie un program care realizeaz urmtoarele:
a. citete de la tastatur numele primului i al celui de-al doilea coleg
pe care-I anun fiecare elev al clasei i pstreaz datele ntr-un arbore
binar alocat dinamic (Semnul * pentru elev inexistent);
b. afieaz numele elevilor care nu mai au de anunat pe nimeni;
c. afieaz lista cu colegii de banc (perechi).
d. afieaz numele elevilor pe care-i anun doamna dirigint;
e. calculeaz din ci elevi este format lista cu cele mai multe
telefoane date ncepnd cu doamna dirigint pn la un elev care nu mai
anun pe .nimeni i afieaz rezultatul;
f. numr i afieaz din ci elevi este format clasa;
g. afieaz numele tuturor elevilor din clas;
h. afieaz numele elevilor de pe un nivel dat, la care a ajuns anunul
dup ce a treeut pe la k persoane (k dat de la tastatur);
i. numr ci elevi din clas au acelai nume cu un nume dat de la
tastatur;
j. afieaz numele elevului la care anunul a ajuns pe cel mai lung
drum.
Obs.: Fiecare subpunct se va rezolva prin intermediul cte unui
subprogram.

37. La o cas de schimb valutar se cunoate pentru fiecare client numele i


suma n lei care i-a fost schimbat. Folosind pentru reprezentarea datelor
un arbore binar de cutare alocat dinamic, se cere:
a. S se scrie un subprogram care adaug un nou client n arbore
(iniial vid) astfel nct toi clienii care au schimbat sume mai mici dect
el s fie n arbore aezai n stnga lui, iar cei care au schimbat mai mult
s fie n dreapta lui n arbore.
b. S se scrie un program care folosind subprogramul de la punctul a.
creaz arborele ce conine situaia la sfritul zilei. Nu se cunoate
numrul de clieni care au schimbat bani, citirea datelor se va opri cnd
numele introdus de la tastatur are valoarea '*'.
c. S se caute n structura creat numele clientului care a schimbat L lei
(L dat de la tastatur). Se va afia numele lui sau mesajul: "nici un client
nu a schimbat L lei".

105
d. S se construiasc o list simplu nlnuit care s conin numele i
suma schimbat pentru fiecare client n parte n ordinea cresctoare a
sumelor i s se afieze.

106
CAPITOLUL IX

PROGRAMARE ORIENTAT PE OBIECTE

1. Definii o clas cu numele elevi care permite prelucrarea la sfrit de


semestru a datelor referitoare la un elev. Aceast clas cuprinde:
EI numele, prenumele, de tip ir de caractere;
numrul n de obiecte de studiu, mediile la cele n obiecte, absene,
absene motivate, de tip numeric;
constructor care permite iniializarea datelor membru;
funcie care calculeaz media general;
funcie ,sare propune media la purtare n funcie de numrul de
absene nemotivate.
Scriei un program care folosete un obiect cu numele elev, de tipul
elevi, prelucreaz informaiile referitoare la un elev i afieaz numele,
prenumele elevului, mediile, media general, media propus la purtare.

2. Folosind obiectul elev, care a fost descris la problema anterioar, s se


defineasc un nou obiect clasa, care are ca date membru numrul de
elevi din clas, precum i informaiile referitoare la aceti elevi.
Metodele vor fi urmtoarele:
subprogram pentru determinarea premianilor 1, II, III;
EI funcie pentru calculul mediei clasei;
subprogram pentru afiarea elevilo n ordinea descresctoare a
mediilor generale.

3. Construii un obiect triunghi care are ca date membru coordonatele


vrfurilor unui triunghi (xl,yl,x2,y2,x3,y3) i urmtoarele metode:
EI constructor pentru citirea coordonatelor,
subprogram pentru calculul lungimii laturilor,
subprogram pentru calculul ariei triunghiului,
subprogram pentru reprezentarea grafic a triunghiului.

107
4. Definii o clas ir pentru prelucrarea irurilor de numere reale. Datele
membru vor fi: lungimea i elementele irului.
Metodele vor fi urmtoarele:
constructor pentru citirea datelor,
" funcie pentru verificarea monotoniei irului (ir cresctor,
descresctor, neordonat),
subprogram pentru ordonarea cresctoare sau descresctoare a
irului,
funcii
pentru determinarea maximului i minimului din ir,
" funcie pentru verificarea simetriei irului.
Folosii aceast clas ntr-un program care s citeasc un ir apoi s
afieze caracteristicile lui. Programul va afia, de asemenea, irul,
valoarea maxim i minim.

5. Definii o clas matrice pentru prelucrarea matricilor. Datele membru


vor fi:
6) numrulde linii i de coloane,
" elementele matricei.
Metodele vor fi urmtoarele:
constructor pentru citirea datelor,
subprogram pentru ordonarea liniilor matricei,
subprogram pentru determinarea maximului de pe o anumit linie
dat ca parametru,
subprogram pentru determinarea maximului de pe o anumit coloan
dat ca parametru,
subprogram pentru afiarea matricei,
.. subprogram pentru cutarea unui element n matrice.
Folosii aceast clas ntr-un program care s citeasc de la tastatur
o matrice, s determine i s afieze elementele maxime de pe
fiecare linie, s determine i s afieze elementele maxime de pe
fiecare coloan, s determine i s afieze dac o valoare citit de la
tastatur se gsete n matrice i poziia ei, apoi s se ordoneze liniile
din matrice dup care s se afieze matricea.

6. Definii o clas pentru prelucrarea unui numr natural. Aceast clas va


avea ca date membru numrul natural de maxim 9 cifre iar metodele vor
fi urmtoarele:
constructor pentru citire,

108
It funcie pentruverificarea proprietii de a fi numr prim,
tll funcie
pentru calculul sumei cifrelor numrului,
4) funcie pentru inserarea unei cifre dat pe o poziie precizat. Cifra i
poziia vor fi date ca parametri,
li funcie pentru eliminarea din scrierea numrului a unei cifre date ca
parametru,
1& funcie pentru inversarea numrului.
Folosind aceast clas, scriei un program care s citeasc un numr i s
prelucreze numrul folosind metodele descrise.

7. Definii o clas pentru prelucrarea numerelor naturale mari. Datele


membru vor fi numrul de cifre, precum i irul de cifre din scrierea lui.
Metodele vor fi urmtoarele:
1& constructor pentru citire,
subprogram pentru calculul sumei a dou numere,
1& subprogram pentru calculul sumei cifrelor numrului.
Scriei un program care citete de la tastatur dou numere mari, le
afieaz, calculeaz suma cifrelor celor dou numere, apoi calculeaz i
afieaz suma celor dou numere.

8. Definii o clas complex pentru prelucrarea numerelor complexe. Datele


membru sunt partea real i partea imaginar. Metodele vor fi:
1& c-onstructor de citire,
1& funcie pentru calculul modulului numrului complex,
It subprogram pentru calculul conjugatului unui numr complex,
subprogram pentru calculul sumei a dou numere complexe.
Scriei un program care citete dou numere complexe, le afieaz,
afieaz conjugatele lor, calculeaz suma lor i o afieaz.

9. Definii o clas candidat ce pstreaz datele personale ale unui candidat


la examenul de bacalaureat, precum i notele la cele 6 probe. Proba 1 i
3 sunt probe de limba romn. Folosind aceast definiie, definii o clas
bac care va avea ca metode urmtoarele:
ElI subprogram pentru calculul mediei fiecrui candidat,
1& subprogram pentru numrarea candidailor promovai,
ElI subprogram pentru numrarea candidailor cu medii ntre 9 i 10,
ElI subprogram pentru listarea alfabetic a elevilor nepromovai,

109
1

$ subprogram pentru listarea elevilor promovai n ordinea


descresctoare a mediilor.
Scriei un program corespunztor care primete de la tastatur numrul
de candidai la examenul de bacalaureat, datele lor personale, notele
obinute la fiecare prob, apoi afieaz urmtoarele situaii:
Numrul candidailor promovai cu medii ntre 9 i 10,
$ Numrul candidailor promovai,
Lista candidailorpromovai,
.. Lista candidailor nepromovai.

10. Scriei un program care prelucreaz funcia liniar f(x)=a*x+b.


Programul va determina i va afia punctele de intersecie cu axele,
valoarea funciei ntr-un punct dat i va trasa graficul funciei. Utilizai
pentru a rezolva problema un obiect potrivit.

11. Definii un obiect care conine un membru de tip ntreg i o metod prin
care se afieaz descompunerea sa n factori primi.

12. Definii un obiect cmmdc care s conin dou date de tip ntreg i o
.metod pentru calculul celui mai mare divizor comun a dou numere
ntregi.

13. Scriei un program care folosete un obiect cu numele CLASAXI.


Acesta va conine mediile generale ale elevilor din clasa a XI-a i o
metod care s permit eliminarea mediilor sub 5.

14. Definii un obiect care conine un membru numr natural i o metod


prin care numrul se descompune n sum de numere prime.

15. Definii o clas pentru un graf neorientat. Aceast clas va avea ca date
membru matricea de adiacen corespunztoare grafului, iar metodele
vor fi urmtoarele:
1& constructor pentru citire,
subprogram pentru stabilirea conexitii (n caz negativ afieaz
componentele conexe),
subprogram care stabilete dac graful este hamiltonian (n caz
afirmativ afieaz ciclurile hamiltoniene),
1& subprogram care stabilete dac graful este eulerian.

110
Folosind aceast clas, scriei un program care prelucreaz un graf
folosind metodele descrise.

16. Definiti o clas cuburi care s conin urmtoarele date membru:


lungimea laturii cubului, culoarea, materialul din care e construit i
umplerea (O dac un cub e gol, 1 dac e plin). S se declare un obiect
cub ce aparine clasei cuburi, pentru care s se calculeze volumul i s
se afieze caracteristicile lui.

17. Folosind clasa cuburi definit la problema anterioar, s se scrie o


metod care s compare dou cuburi ntre ele, stabilind dac primul se
poate aeza peste al doilea (criteriul de aezare este ca primul s aib
volumul mai mic i s fie gol). S se declare dou obiecte ce aparin
clasei cuburi i s se compare ntre ele (care dintre ele se poate aeza
peste cellalt).

18. La un coneurs de atletism concurenii pot alege s participe la dou din


cele 5 probe. Definii o clas concurenti care conine numrul de
concurs, numele, prenumele, proba1, proba2, notal , nota2, rezultat. Se
cere:
a) s se citeasc irul concureni lor, folosind un constructor de citire;
b) s se calculeze media fiecrui concurent, completnd rezultatul cu
"admis" pentru cei cu media peste 5, respectiv "respins" pentru
ceilali; se va folosi o metod potrivit;
c) s se afieze primii 10 ctigtori.

19. Agenia aviatic " Fly Away" srbatorete 5 ani de la nfiinare. Cu


aceast ocazie face reducere de 10% la biletele de avion pentru luna
septembrie. S se declare clasa bilete care s conin urmtoarele date:
destinaia, escala, data plecarii, data rezervrii, posesor, valabilitate i
cost. S se foloseasc dou obiecte ce aparin clasei bilete i s se
verifice dac posesorii lor beneficiaz de reducere. Se va afia preul
pentru fiecare bilet.

20. S se defineasc clasa matrice rara ce conine numrul de elemente


nenule i coordonatele acestora. tiind c relaiile de prietenie dintre elevii
unei coli se reprezint cu ajutorul acestei clase, s se scrie un program
care s afieze numele elevului cu cei mai muli prieteni. Se cunoate c
indicele de linie este asociat poziiei din irul ce conine numele elevilor.

111
21. La un Internet-Cafe se rein informaii despre utilizatorii serviciilor
furnizate. S se defineasc o clas utilizatori care s conin
urmtoarele date membru: numrul staiei, ora conectrii i ora
deconectrii. S se scrie o metod ce calculeaz suma de plat, tiind c
o or de navigare pe Internet cost x lei.

22. Utiliznd clasa de la problema anterioar, s se scrie un program care s


defineasc trei obiecte ce aparin clasei i s se apeleze pentru fiecare
metoda definit.

23. S se defineasc clasa sir avnd ca date membru lungimea irului i


elementele lui. S se defineasc o metoda care s realizeze interclasarea
a dou iruri ordonate i o alta care s realizeze concatenarea a doua
iruri.

24. Definii dou obiecte ce aparin clasei sir i apelai cele dou metode
definite anterior.

25. Definii o clas pentru prelucrarea fiierelor text. Ca date membru vom
avea numele fiierului de pe suport, iar ca metode urmtoarele:
a. constructor pentru citirea numelui fiierului,
b. subprogram pentru determinarea lungimii fiierului (a numrului de
caractere),
c. subprogram pentru compararea a dou fiiere.

26. Folosind definiia


din problema anterioar definii o nou clas care s
moteneasc proprietile celei dinainte i n plus s conin o metod de
concatenare a dou fiiere.

27. Definiio clas pentru prelucrarea listelor simplu nlnuite alocate dinamic.
Aceast clas s conin metode pentru: crearea unei liste vide, adugarea
unui element la nceputul listei, adugarea unui element la sfrit, cutarea
unui element dat ca parametru i metode de parcurgere i afiare a listei.

28. Folosind clasa definit la problema anterioar definii o nou clas


pentru prelucrarea stivelor. Aceast clas va conine n plus metode de
eliminare a unui element.

112
29. Definiio clas pentru prelucrarea unui graf orientat. Datele membru vor
fi numrul de vrfuri i matricea de adiacen, iar ca metode
urmtoarele: constructor de citire, subprogram pentru determinarea
numrului de arce a grafului, subprogram pentru verificarea conexitii,
subprogram pentru determinarea gradelor interioare i exterioare ale
unui vrf dat.

30. Folosind clasa de la problema anterioar, definii o clas pentru graful


tumeu. Aceast clas conine pe lng metodele de mai sus o metod
care s verifice dac graful este tumeu (adic ntre oricare dou vrfuri
exist un arc i numai unul) i o metod pentru afiarea ctigtorului
sau ctigtorilor.

31. Definii o clas grafice care s realizeze trasarea graficului unei funcii
trigonometrice. Funcia va avea ca dat membru un ir de caractere ce
conine numele funciei: sin, cos, tg, ctg i o metod un subprogram
pentru trasarea graficului acestei funcii.

113
INDICAII I REZOLVRI

CAPITOLUL 1
STRUCTURI DE CONTROL

1.1. STRUCTURA LINIAR


1. Media se calculeaz folosind urmtoarea formul:
M=(3*media de la oral + teza)/4
2. Varianta Pascal
program localitati;
var xl,x2,yl,y2,d:real;
begin
write('introduceti coordonatele x si yale primei localitati');
readln(xl ,yl);
write('introduceti coordonatele x si yale celei de a doua localitate');
readln(x2,y2);
d:=sqrt(sqr(xl-x2)+sqr(y l-y2));
writeln('distanta dintre localitati este:' ,d:10:2);
readln;
end.

Varianta C++
#include <iostream.h>
#include -cmath.h
#include -cconio.h
void maini)
(
double xl,x2,yl,y2,d;
cout"Introduceti coordonatele x si y ale primei localitati:";
cinx1yl;
cout"Introduceti coordonatele x si y ale celei de a doua localitati:";
cinx2y2;
d=sqrt((xl-x2)*(xl-x2)+(yl-y2)*(yl-y2));
cout"Distanta dintre localitati este:"dendl;
getcht);
}
3. Fie a.b,c sumele depuse de cei trei copii. Valoarea cadoului va fi: (a+b+c)*1.3
6. Numarul de biei=E*B-100
numrul de fete=E*(lOO-B)/lOO

114
7. Varianta Pascal
program pamant;
var x,y,z,vl,v2,v3:real;
begin
write('introduceti dimensiunile x y zale santului') ;
readln(x,y,z);
vl:=x*y*z;
writeln('volumul santului este:',vl: 10:2);
v2:=vl *1.25;
writeln( 'volumul pamantului este:' ,v2:10:2);
v3:=v2-v2*5/100;
writeln('volumul pamantului dupa ploaie este:',v3:10:2);
readln
end.

Varianta C++
#include <iostream.h>
#include <conio.h>
void rnaint)
{ ,,'
double x,y,z,v1,v2,v3;
cout"Introduceti dimensiunile x y zale santului:";
cinxyz;
vl=x*y*z;
cout"Volumul santului este:"v1endl;
v2=v1*1.25;
cout"Volumul pamantului este:"v2endl;
v3=v2-v2*5/100;
cout"Volumul pamantului dupa ploaie este:"v3endl;
getch);
}

8. Costul unei dale este L/100, suprafaa curii este Y*XllO. S-a inut cont de faptul
c baza este dat n dam i limea n m.
latura dalei este 0.5
suprafaa unei dale este 0.25 m2
numrul dalelor este dat de suprafaa curii mprit la suprafaa unei dale.
9. Cantitatea de stofa este 0.8*h+0.7
10. Se calculeaz aria grdinii cu formula d1*d2/2 . Se calculeaz aria unei dale, apoi se
determin numrul de dale mprind aria grdinii la aria unei dale. Costul total se obine
nmulind numrul de dale cu costul unei dale.
11. V=a*b*c. Numrul de drumuri este n funcie de valoarea V/x. Aceast valoare trebuie
rotunjit.
12. Numrul de fete este (E+F)12 iar numarul de biei este (E-F)I2.
13. Secolul este [an/100)+1.
14. Numarul de frasini este P-P/5-P*3/5.
15. Se rezolv folosind un sistem de dou ecuaii cu dou necunoscute.

115
16. Distana este pl *72+p2*72 mile.
17. Numrul de ou este 100*(n+l0)/(I00-s).
18. Fie R numrul de lzi rmase, x numrul de lzi din prima zi, y numrul de lzi din a
doua zi, z numrul de lzi din a treia zi iar u numrul de lzi din a patra zi. Avem
urmtoarele relaii: x=y+4; y=z-3 ; u=z+x ; x+y+z+u=M-R. Se rezolv sistemul i se
obine cte o relaie pentru x, y, z,u.
19. Se separ cifrele la fel ca la problema 21 apoi se formeaz numrul nmulind cifrele
corespunztoare respectiv cu 100, 10, 1.
20. Se separ numrul format din primele dou cifre din a : nl=[a/lOO]. Se separ numrul
obinut din ultimele dou cifre din b: n2=rest[b/lOO] . Apoi se face ctul nlln2.
21. Varianta Pascal
program numar;
var a.b.c.word;
c l,c2,c3,c4,r:byte;
begin
write('introduceti un numar de patru cifre');
readln(a);
el :=a mod 10;
c2:=a div 1000;
r:=adiv 10;
r:=rmod 10;
b.eec l *1000+r*1O+c2;
writeln('numarul obtinut schimband prima cifra cu ultima este:',b);
c4:=a div 1000;
c2:=(a div 10) mod 10;
c3:=(a div 100) mod 10;
c:=c4 *1000+c2* 100+c3*1O+c1;
writeln( 'numarul obtinut schimband cifrele din mijloc este:' ,c);
readln;
end.

Varianta C++
#include <iostream.h>
#include -cconio.h
void main()
{
unsigned a.b,c;
int c1,c2,c3,c4;
cout"Introduceti un numar de patru cifre:";
cina;
c1=a%lO;
c2=a/1000;
r=a/1O;
r%=lO;
bec l *1000+r*1O+c2;
cout"Numarul obtinut schimband prima cifra cu ultima este:"bendl;
c1=a%1O;

116
c4=al1000;
c2=(al1O)% 10;
c3=( al 100)%10;
c=c4*1000+c2*100+c3*10+cl;
cout"Numarul obtinut schimband cifrele din mijloc intre ele este:"c;
coutendl;
getchf);

1.2. STRUCTURA ALTERNATIV


19. Analiza problemei:

20 9 20 9 20 9
TOTAL == n:l: 20g
seminte

n pungulite

GRADINUTA cu mstretun

1 NECESft.R = m :1: (nr *s


seminte
2

pentru1m ne trebuie grame

117
Varianta Pascal:
Program Gradinuta;
Var n.m.nr,s, Total,Necesar:integer;
Begin
Write('Introduceti numarul de seminte dintr-o punguta:'); readln(n);
Write('Introduceti numarul de metri ai unui strat: '); readln(nr);
Write('Introduceti numarul de straturi:'); readln(m);
Write('Introduceti numarul de seminte necesare pentru lm2 : , ) ; readln(s);
{calculam totalul de seminte}
Total:=n*20;
{calculam necesarul de seminte}
Necesar:=m*nr*s;
{afisare rezultat}
if Totab-eNecesar then writeln('Alinei ii ajung semintele')
else
begin
dif:=(Necesar-Total) div s + (Necesar-Total) mod s;
writeln('Alina nu are destule seminte, trebuie sa mai cumpere
',dif, 'pungulite');
end;
end.

Varianta C++
#include<stdio.h>
int n.m.nr,s, Total,Necesar;
main()
{
printf("\n Introduceti numarul de seminte dintr-o punguta : ");
scanf("%d",&n);
printf("\n Introduceti numarul de metri ai unui strat: ");
scanf("%d",&nr);
printf("\n Introduceti numarul de straturi:");
scanf("%d",&m);
printf("\n Introduceti numarul de seminte necesare pentru lm2:" ) ;
scanf("%d",&s);
//calculam totalul de seminte//
Total=n*20;
//calculam necesarul de seminte//
Necesar=m*nr*s;
//afisare rezultat//
if (Total>=Necesar) printf("\n Alinei ii ajung semintele");
else {
dif=(Necesar-Total) / s + (Necesar-Total) % s;
printf("Alina nu are destule seminte, trebuie sa mai cumpere %d
, pungulite", dif);
}

118
28. Varianta Pascal
Program NumaruLNorocos;
Var a.b.c.rez: longint;
cif:byte;
Begin
Write( 'Primul jucator sa-si introduca numarul: '); readln(a);
Write('Al doilea jucator sa-si introduca numarul:'); readln(b);
Write('Al treilea jucator sa-si introduca numarul:'); readln(c);
{calculam cifra de control, din insumarea ultimelor cifre ale lui a, b, si c}
cif:=a mod 10 +b mod 10 +c mod 10;
if cif>9 then cif:=cif div 10 +cif mod 10;
{vom afisa numerele norocoase }
if a mod cif=O then writeln(a, 'este numar norocos');
ifb mod cif=O then writeln(b, 'este numar norocos');
if c mod cif=O then writeln(c, 'este numar norocos');
readln;
end;

Varianta C++
#include<stdio.h>"
long a.b.c.rez;
int cif;
main()
{
printf("Primul jucator sa-si introduca numarul:");
scanf("%d",&a);
printf("\n Al doilea jucator sa-si introduca numarul:");
scanf("%d",&b);
printf("\n Al treilea jucator sa-si introduca numarul:");
scanf("%d",&c);
Iicalculam cifra de control, din insumarea ultimelor cifre ale lui a, b, si cii
cif=a % 10 +b % 10 +c % 10;
if (cif>9) cif=cif /10 +cif % 10;
/Ivom afisa numerele norocoase//
if (a % cif==O) printf("\n este numar norocos %d",a);
if (b % cif==O) printf("\n este numar norocos %d",b);
if (c % cif==O) printf("\n este numar norocos %d",c);
}

1.3. STRUCTURA REPETITIVA


6. Se calculeaz cmmdc(b,c).
7. Se calculeaz cmmmc(m,n).
13. Se verific tot cte dou cifre:
-pentru Pascal se verific ((p mod 10 =5) and (pdivlO) mod 10=1)
-pentru C++ se verific ((p% 10==5)&&((pll 0)% 10==1))

119
Se elimin ultima cifr din p i se repet pn cnd p devine <10.
17. Se iau toate valorile posibile (de la O la 9) pentru x, se verific primul numr format i
pentru fiecare o astfel de valoare se iau toate variantele posibile pentru y (de la Ola 9).
23. Se mparte numrul la 10 pn cnd nr<lOOO i se verific dac nr= 123.
26. Se citesc ntr-o structur repetitiv numere i se calculeaz suma i numrul lor.
Condiia de repetare este: S < suma numerelor citite pn n acel moment.
27. Similar cu 26.
32. Se va forma nti numrul care conine cifrele n ordine invers.
35. Se vor folosi direct cifrele care intr n calcule i nu descompunerea numrului n pri
componente.
39. program baze;
var n,aux,nr,p_bazei:longint;
b,cifra: byte;
corect:boolean;
begin
repeat
write('dati numarul de transformat: ');
readln(n);
repeat
write('dati baza de numeratie in care este scris: ');
readln(b);
until (b>=2) and (b<=1O);
p_bazei:=l;
nr:=O;
corect:=true;
aux.en;
while aux>O do
begin
cifra:=aux mod 10;
if cifra>=b then
begin
corect:=false;
writeln('cifra ',cifra,' nu apartine bazei ',b);
aux:=O;
end;
aux.eaux div 10;
nr.enr-scifra*p_bazei;
p_bazei:=p_bazei*b;
end;
until corect;
writeln('numarul',n,' scris in baza ',b,' = ',nr,' in baza 10');
readln;
end.

120
BAZA 16
program baze;
var nr,p_bazei:longint;
n,aux:string[ 10];
i, valcif.x.integer;
cifra:char;
corect: boolean;
begin
repeat
writer'dati numarul in baza 16 de transformat: ');
readln(n);
p_bazei:=l;
nr:=O;
corect:=true;
aux.en;
for i:=length(n) downto 1 do
begin
cifra:=aux[i] ;
case cifra of
'0'..'9': begin
valecifra, valcif,x);
nr:=nr+valcif*p_bazei;
end;
'A'.. 'F': nr:=nr+(ord(cifra)-ordC'A')+10)*p_bazei;
'a'..'f: nr:=nr+(ord( cifraj-ordr'a') lO)*p_bazei;
else
begin
corect:=false;
writeln('cifra ',cifra,' nu apartine bazei 16');
i:=l;
end;
end;
p_bazei:=p_bazei*16;
end;
until corect;
writeln('numarul ',n,' scris in baza 16 = ',nr,' in baza 1'0');
readln;
end.

Varianta C++
BAZA <10
#include<iostream.h>
#include<conio.h>
void maini)
{long int n,aux,nr,p_bazei;
int b,cifra,corect;

121
do
{
cout"\ndati numarul de transformat: ";
cinn;
do
{cout"\ndati baza de numeratie in care este scris: ";
cinb;}
while((b<2)II(b> 10));
pbazeie l ,
nr=O;
corect=l;
auxen;
while (auxe-O)
{
cifra=aux%10;
if (cifra>=b){
corecten,
cout"cifra"cifra" nu apartine bazei "b;
auxeO;
}
aux=auxl10;
nr=nr+cifra*p_bazei;
p_bazei=p_bazei*b;
}}
while (lcorect):
cout"numarul "n" scris in baza "b" = "nr" in baza 10";
getchi);
}
BAZA 16
#inc1ude<iostream.h>
#include<stdlib.h>
#include<string.h>
#inc1ude<conio.h>
void maint)
{ long int nr,p_bazei;
char cifra,n[10],aux[1O];
int i, valcif.x.corect;
clrscrt);
do
{
cout"\ndati numarul in baza 16 de transformat: ";
cinn;
p_bazei=l;
nr=O;
corect=l;
strcpytaux,n);
for (i=strlen(n)-l ;i>=O;i--)

122
{
cifra=aux[i] ;
if ((cifra>='0')&&(cifra<='9'
nr=nr+(cifra-'O')*p_bazei;
else if((cifra>='A')&&(cifra<='F))
. nr=nr+(cifra-'A'+ lO)*p_bazei;
else if((cifra>='a')&&(cifra<='f))
nr=nr+(cifra-'a'+ 1O)*p_bazei;
else {corect=O;
coutcc''cifra "cifra" nu apartine bazei 16";
i=l ;}
p_bazei=p_bazei*16;
}
}
while (!corect);
coutocnumarul "n" scris in baza 16 = "nr" in baza 10";
getch);
}
40. Similar cu 26. Se citesc caractere i se numr separat bieii i fetele care au intrat.
42. Se calculeaz.suma numerelor introduse pe poziii impere i media celor de pe poziii
pare.
44. Se calculeaz numarul de clase (nc). Dac n este divizibil cu 25 nc=n/25 i se mpart
eate 25 de elevi ntr-o clas. Dac nu, nc=n/25+ 1. Se calculeaz numrul de elevi dintr-o
clas necectul mpririi lui n la nc iar rerestul mpririi lui n la ne. n primele r clase vor
fi repartizai cte nec+ 1 elevi iar n celelalte cte nec elevi.
45. Se calculeaz ne numrul de cifre al lui q i se verific ultimele nc cifre din p. Pentru o
nou cutare a lui q n p se elimin la fiecare pas cte o cifr de la sfritul lui p.
46. Se calculeaz nti numrul de cifre al lui q.
47. Se calculeaz produsul dintre k i 10 la puterea n apoi se mparte acest numr la fi.
51. program verifica_ordonare;
var a,b:word;
crescator,descrescator:boolean;
begin
writeln('Introduceti o succesiune de numere.',#lO#13,
t Programul se opreste la citirea valorii zero');
read(a,b);
crescator.errue;
descrescator.etrue;
repeat
if a>b then crescator.efalse
else if a<b then descrescator:=false;
a:=b;
read(b);
until b=O;
if crescator
then if descrescator
then writeln('Succesiune de numere egale')

123
else writeln('Succesiune de numere in ordine crescatoare')
else if descrescator
then writeln('Succesiune de numere in ordine descrescatoare')
else writeln('Succesiune neordonata de numere');
readln;
readln;
end.
Varianta C++
#include<iostream.h>
#include<conio.h>
void maini)
{unsigned int a,b,crescator,descrescator;
cout"\nlntroduceti o succesiune de numere.m";
cout" Programul se opreste la citirea valorii zero";
cinab;
crescator= 1;
descrescator 1;
do
{if (a>b) crescator=O;
else if (a<b) descrescator=O;
a=b;
cinb;}
while (b !=O);
if (crescator)
if (descrescator)
cout"Succesiune de numere egale";
else cout"Succesiune de numere in ordine crescatoare";
else if (descrescator)
cout"Succesiune de numere in ordine descrescatoare";
else cout"Succesiune neordonata de numere";
getcht);
}
54. Se calculeaz pe rnd puterile lui 2 i se compar cu p.
61. program divizor;
var n,d,i:longint;
prim:boolean;
begin
write('n=');
readln(n);
writet'Divizorii primi ai lui ',n,' sunt: 1');
for d:=2 to (n div 2) do
if n mod d=O then begin
prim:=true;
for i:=2 to (d div 2) do
if d mod i =0 then prim:=false;
if prim then write(' ",d);
end;

124
writeln;
readln;
end.

Varianta C++
#include<iostream.h>
#inel ude-cconio.h>
void maint)
{long int n.d.i.prim;
clrscn);
cout"n=";
cinn;
cout"Divizorii primi ai lui "n" sunt: 1";
for (d=2;d<=n12;d++)
if (n%d==O) {primvl ;
for(i=2;i<=dl2;i++)
if (d%i==O) prim-O;
if (prim) cout" ,"d;}
cout'\n';
getcht);
}
64. Se numr n timpul citirii cte calculatoare sunt din fiecare tip apoi se verific pe rnd
dac ajung calculatoarele pentium, dac nu, cti elevi rmn, din elevii rmai se
repartizeaz pe 586 .a.m.d.
66. Se caut toate perechile x si y de numere pentru care x*c+y*n=s. Am notat prin c i n
costul unei ciocolate respectiv al unui pachet de napolitane.
79. Fiecare cifr a rezultatului (cr) se obine din cifra cu acelai rang din numr (cn) + o
cifr de transport (ct) (care la nceput are valoarea 1.). cr=cn+ct. Dac cr=2 atunci ct
rmne 1, altfel ct devine O.
80-84. Se descompun numerele n cifrele componente i se adun sau se scad cifrele cu
acelai rang. Dac valoarea obinut depete valoarea bazei se transport 1 la suma
cifrelor de rangul urmtor.

CAPITOLUL II
TIPURI DE DATE STRUCTURATE

II.1. VECTORI
2. Se parcurge irul i se verific pentru fiecare element de pe o poziie k dac acesta mai
exist ntre cele k-1 valori precedente, dac exist se mut spre stnga toate elementele
irului cu o poziie.
4. Se citesc primele pentru cei n juctori ntr-un vector V. Se calculeaz suma pentru
juctorii cu numere pare, adic indicii numere pare i cei cu numere impare, iar la sfrit se
compar cele dou sume obinute. Programul este urmtorul:

125
Varianta Pascal:
Program Echipe;
var jucatori:ARRAY[1..20] oflongint;
n,i:integer;
S_pare,S_impare:longint;
begin
Write('Numarul de jucatori este: ');
ReadLn(n);
for i:=l to n do
begin
Write('Prima pentru jucatorul cu numarul ',i,' este: ');
ReadLn(jucatori[i]);
end;
S_pare := O;
S_impare := O;
For i:=l to n do
if i mod 2 = Othen S_pare := S_pare + jucatori[i]
else S_impare := S_impare + jucatori[i];
if S_pare = S_impare then WriteLn('Sume egale')
else WriteLn('Sume diferite');
ReadLn;
end.

Varianta C++:
#include<stdio.h>;
long jucatori[20];
int n.i;
long S_pare,S_impare;
main()
{
printf("\n Numarul de jucatori este: ");
scanf("%d",&n);
for (i=l;i<=n;i++)
{
printf("\nPrima pentru jucatorul cu numarul %d este: ',i);
scanf("%d",&jucatori[i]);
}
S_pare = O;
S_impare = O;
for (i=l;i<=n;i++)
if (i % 2 == O) S_pare = S_pare + jucatori[i];
else S_impare = S_impare + jucatori[i];
if (S_pare ==S_impare) printf("\nSume egale");
else printf("\n Sume diferite");
}
5. Se folosete un vector F ce pstreaz frecvena de apariie a cifrelor 0,1, ... 9.

126
7. Considerm c n este numr par pentru a se putea realiza mprirea grupelor. Grupele se
vor forma astfel: casa cu numrul 1 cu casa cu numrul n, casa cu numrul 2 cu casa cu
numrul n-1 i aa mai departe.
14. Numerele de identificare pentru fiecare deinut se pstreaz ntr-un ir. Cei care
prsesc nchisoarea se elimin din ir astfel: se caut poziia n i a deinutului ce va fi
ters (notat cu k) i cei de pe poziiile k+ 1, k+2, ... n se vor muta cu o poziie spre stnga,
iar la fiecare tergere din ir numrul de deinui va deveni n-I. La sosirea unui nou deinut
el se adaug la sfritul irului, astfel c numrul total de deinui devine n+1.
19. Se ordoneaz irullexicografic i se afieaz irul rezultat. Dac se mai nscrie un elev
n excursie se parcurge irul ordonat i se caut poziia n ir unde se adaug noul elev.
Dac aceasta este poziia k elevii de pe poziiile k- l , k+2, ... n se mut cu cte o poziie spre
dreapta.
23. Se determin numitorul comun al fraciilor ca fiind cel mai mic multiplu comun al
numitorilor (v l , v2, ... vn). Mai nti se determin cmmmc a componentelor vl, v2 apoi
cmmmc dintre v3 i cmmmc-ul anterior i aa mai departe, ultimul rezultat tiind cmmmc al
tuturor numitorilor. La fiecare pas se poate folosi relaia cmmmc(a,b)=a*b I cmmdc(a,b),
iar cmmdc se poate determina cu algoritmul lui Euc1id. Amplificm fiecare numrtor cu
cmmmc mprit la vi i nsumm rezultatele.
28. Pentru fiecare concurent se rein numele i notele obinute la fiecare prob. Dac la
citirea notelor concurentului se ntlnete o not sub 3 acesta este eliminat. Ctigtorul este
acela pentru care suma punctajelor este maxim.
29. irul Y va avea componentele Yi = TRUNC( Xi I i) (Pascal) i Yi=(int)(Xi/i) (varianta
C++), pentru i=I,2, ... n , iar irul Z va avea elementele Zi=Xili - Yi pentru i=I,2, ... n.
30. Se transform numrul din baza 10 n baza 2 i se rein ntr-un vector cifrele numrului
n baza 2. La parcurgerea vectorului se codific cifrele dup regula enunat.
31. Transformarea unui numr din baza 10 ntr-o baz b se face astfel: se mparte numrul
la baz i se reine restul ntr-un vector, ctul se mparte din nou la baz i aa mai departe
pn cnd ctul este O. Numrul n baza b este format din cifrele vectorului citite n ordine
invers.
40. Se vor genera subiruri ale celui dat pentru care suma dimensiunilor fiecrei
componente din subir s fie mai mare sau egal cu dimensiunea necesar jocului nou.
41. Codificm cciula alba cu O i cea roie cu 1. Piticii vor fi grupai doi cte doi n felul
urmtor: primul cu al doilea, al treilea cu al patrulea, i aa mai departe. Se va folosi un
vector ajuttor unde se reine sub irul gsit. Cutarea continu, iar dac lungimea unui nou
subir gsit este mai mare dect lungimea celui reinut n vectorul ajuttor atunci vectorul
ajuttor se va modifica cu valorile subirului.

11.2. MATRICI
8. Varianta C++
#inc1ude -ciostream.h
void maim)]
int n.m;
int x.y;
int liv[20] [20];

127
char specie[20] [20][20];
cout"Dati n si m:";
cinnm;
for (int i=O;i<n;i++)
for (int j=;O;j<m;j++){
cout"Dati specia si varsta pomului din pozitia "i" si "<<j<<":";
cinspecie[i][j]liv[i][j];}
int varsta=O;
for (i=O;i<n;i++){
if (liv[i] [O]>varsta){varsta=liv[i][O];x=i;y=O;}
if (liv[i][m-l]>varsta){ varsta=liv[i][m-l];x=i;y=m-1;} }
for (intj=O;j<m;j++){
if (liv[O] [jp-varsta) {varsta=liv[O][j];x=O;y=j;}
if (1iv[n-1][j]>varsta){varsta=liv[n-1][j];x=n-1 ;y=j;} }
cout"Copacul cel mai batran se afla in pozitia "x' 'yendl;
cout"EI este un "specie[x][y]endl;
cout"Are varsta "varstaendl;}

Varianta Pascal
program livada;
type matrice=array[1 ..50,1..50] of word;
var liv:matrice;
specia:array[1..50,1..50] of string[ 10];
m,n,i,j,max,imax,jmax:word;
begin
write('introduceti numarul de linii din livada');
readlnm):
write('introduceti numarul de coloane din livada');
readIn(m);
for i:=1 to n do
for j:=l to m do
begin
write('dati varsta si specia pomuluide pe pozitia ',i,' ',j);
readln(liv[i,j]);
readlnr speciali,j]);
end;
max:=liv[1,1];
imax.e l ;
jmax:=l;
for i:= 1 ta n do begin
if liv[i,1]>max then begin
max.elivi.I];
imax.ei;
jmax.e l;
end;
if liv[i,m]>max then begin
max.elivli.m] ;

128
imax.e-i;
jmax.vm;
end;
end;
for j:=l to m do begin
ifliv[l,j]>max then begin
max:=liv[l,j];
imax.e l ;
jmax:j;
end;
it' liv[n,j]>max then begin
max:=liv[n,j] ;
imax:=n;
jmax.:=j;
end;
end;
write('pomulcare se va taia este ',specia[imax,jmax]);
writeln(' are pozitia ',imax,' ',jmax);
writeln(' el este cel mai batran si are ',max,' ani');
readln .'
end.

9, Se determin poziia n matrice a elevului are lipsete i se deplaseaz elementele care


urmeaz cu o poziie spre stnga, cu excepia elementelor de pe prima coloan care vor
trece pe ultima coloan a liniei anterioare.
12. Se parcurge matricea, aflndu-se nlimile cele mai mari. Pentru fiecare dintre aceste
nlimii se calculeaz suma nlimilor alturate i se alege cea mai bun soluie.
14.Varianta C++
#include iostream.h
void maint)]
int n.m, mat[1O][20];
unsigned long s=O, nr;
cout"Dati n si m:";
cinnm;
cout"Dati cifrele din matrice:";
for (int i=O;i<n;i++)
for (int j=O;j<m;j++)cinmat[i][j];
for (i=O;i<n;i++){
nr=O;
for (int j=O;j<m;j++){
nr*=lO;
nr+=a[i]UJ;}
s+=nr;}
cout"Suma numerelor formate pe linii este :"sendl;}
Varianta Pascal
program numere;
type matrice=array[l.. lO,l.. 10] of byte;
var a:matrice;
n.m.i.j: byte;
s.slinie.p.longint;
begin
write('dati numarul de lini si numarul de coloane ');
readln(n,m);
for i:=1 to n do
for j:=1 to m do begin
write('dati cifra de pe linia ',i,' coloana ',j);
readln(a[i,j]);
end;
s:=O;
for i:= 1 to n do begin
p:=l;
slinie:=O;
for j:=m downto 1 do begin
slinie:=slinie+a[i,j]*p;
p:=p*lO; end;
s:=s+slinie;
end;
writeln('numarul rezultat este ',s);
readln
end.

15. Elementele de pe diagonala principal au formula a[i][i].


17. Se numr de cte ori apare fiecare numr n codificarea apartamentului. Se alege
numrul cu cele mai multe apariii.
19. Noua matrice va avea dimensiunile mxn, iar elementul b[i][j] va fi egal cu a[j][i]
(matricea a e cea iniial iar b e cea ntoars la dreapta).
21.Varianta C++
#include <iostream.h>
#include <conio.h>
void main(){
int n, mat[1O][20],a,diferit=0;
cout"Dati n:";
cinn;
cout"Dati metricea de pe prima foaie:";
for (int i=O;i<n;i++)
for (int j=O;j<n;j++)cinmat[i][j];
cout"Dati matricea de pe a doua foaie:";
for (i=O;i<n;i++)
for (int j=n-1 ;j>=O;j--){
cina;
if (a!=mat[iJU]) diferit=1;}

130
if (diferite>I )cout"DIFERIT\n" ;
else cout"IDENTIC\n";
getcht).}

Varianta Pascal
program carte;
type matrice=array[1..30,1..30] of integer;
var a:matrice;
val.integer;
n,m,i,j :word;
ok.boolean;
begin
write('dati numarul de linii si numarul de coloane ');
readln(n,m);
for i:=l to n do
for j:=l to m do begin
write('dati numarul de pe linia ',i,' coloana ',j);
readln(a[i,j]);
end:, ,,~

ok:=true;
writeln('introduceti matricea de pe pagina a doua');
for i:=l to n do
for j:=l to m do begin
write('dati numarul de pe linia ',i,' coloana ',j);
readln(val);
if val<>a[i,n-j+ 1] then ok.efalse;
. end;
if ok then writeln('identic')
else writeln('diferit');
readln
end.

25. n cazul spre est vom parcurge fiecare linie, pn la jumtatea ei, fiecare element
comparndu-se cu cel aflat pe aceeai linie, simetric cu el fa de mijlocul liniei. Analog se
face i pentru cel spre sud, dar elementele comparate vor fi pe aceeai coloan.
27. Indicele de linie este (k-l)/n, iar al coloanei e k-l-(int)(k1m)*m (k reprezint numrul
de ordine al soldatului).
29. Datele se codific sub forma unei matrici,

a[i][j]= Ji ',
1 concurentul j a tiut s rspund la ntrebarea i
concurentul j nu a tiut s rspund la ntrebarea i

Se face suma fiecrei linii, semnificnd numrul de concureni care au tiut s rspund la
ntrebarea i. Se compar cu n i se afl rezultatul.
37. Se verific toate perechile a[i][j], a[j][i], cnd i=2, ....n i j= i,...,n.

131
H.3. SIRURI DE CARACTERE
4. Parcurgem vectorul de cuvinte i determinm n variabila lmax lungimea celui mai lung
cuvnt, apoi parcurgem din nou vectorul pentru a afia cuvintele care au lungimea
maxim(adic egal cu lmax).
Varianta Pascal
var x:array[1..20] of string[20];
n.i.lmax.integer;
begin
write('Introduceti nr de cuvinte ');readln(n);
writeln('Introduceti cuvintele ');
for i:=l to n do readln(x[i]);
lmax:=length(x[l]);
for i:=2 to n do
if length(x[i]lmax then lmax:=length(x[i]);
writeln('Cuvintele de lungime maxima sunt');
for i:=l to n do
if length(x[i])=lmax then write(x[i],' ');
readln;
end.

Varianta C++
#include<iostream.h>
#include<string.h>
maint)
{
char x[20] [20];
int lmax.n.i;
cout"Introduceti numrul de cuvinte" ;cinn;
cout"Introduceti cuvintele ";
for(i=O;i<n;i++) cinx[i];
lmax=strlen(x[O]);
for(i=l ;i<n;i++)
if (strlen(x[i]lmax) lmax=strlen(x[i]);
cout"Cuvintele de lungime maxima sunt:"endl;
for(i= 1;i<n;i++)
if (strlen(x[i])==lmax) coutx[i]" ";
}
6. Se parcurg ntr-un ciclu toate literele din alfabet i pentru fiecare liter se parcurge textul i se
determin numrul de apariii ale literei respective n text.
9. Reinem ntr-un vector titlurile crilor i n altul, pe poziii corespunztoare, autorii
carilor. Parcurgem alfabetul i pentru fiecare liter din alfabet afim autorii care au
iniiala identic cu litera respectiv.
11. Utilizm doi vectori: unul care reine denumirile produselor i altul ce reine preurile
aferente (produsul aflat pe poziia i n vectorul produselor are preul aflat pe poziia i n

132
vectorul preurilor). Parcurgem simultan cei doi vectori i n cazul n care denumirea unui
produs conine cuvntul "hartie" afiam preul majorat.
17. Se mparte textul n entiti (entitile sunt separate prin spaii). O entitate poate
reprezenta un cuvnt sau un numr. Entitile care pot fi convertite n numere vor fi
adugate, dup conversie, la suma valorilor numerice.
Varianta C++
#include -ciostream.h
#include -cstring.h
#include <stdlib.h>
mainO
{
char sir[lOO],separator[]=" ",cifre[]="1234567890", *p;
int s=O;
cin.get(sir,lOO);
p=strtok(sir.separator);
while(p)
{
if (strspn(p,cifre)==strlen(p
s+=atoi(p);
pestrtokrNl.Il.Jz.separator);
}
cout"suma numerelor este: "s;

18. Utilizm trei vectori: primul reine denumirile rilor, al doilea capitalele i al treilea
continentele corespunztoare. Ordonm alfabetic vectorul ce reine continentele, dar atunci
cnd interschimbm dou componente ale vectorului vom interschimba i componentele
corespunztoare (de pe aceleai poziii) din ceilali doi vectori. Analog obinem lista rilor
n ordinea alfabetic a capitalelor lor.
22. Varianta C++
# include -ciostream.h
# include -cstring.h
maint)
{
char x[50][20],cuv[20];
int i,j ,k,n;
cout"n=";cinn;
cout"introduceti cuvintele ";
for(i=O;i<n;i++)cin(x[i]);
cout"cuvintele cerute sunt:";
for(i=O;i<n;i++)
{
strcpy(cuv,x[i]); /* retinem in variabila cuv fiecare cuvant din vectorul de cuvinte*/
k=l; /* presupunem ca literele cuvantului sunt in ordine alfabetica */
forG=O;j<strlen(cuvj-I ;j++) /* parcurgem literele cuvantului si testam daca sunt in */.
/* ordine alfabetica */
if (cuv[j]>cuv[j+l]) k=O;

133
if (k) coutcuv" ":
}

Varianta Pascal
var x:array[1..50] of string;
i.j.n.byte;
cuv:string;
ordo:boolean;
begin
write('n=');readln(n);
writeln('introduceti cuvintele ');
for i:=l to n do readln(x[i));
writeln('cuvintele cerute sunt');
for i:=l to n do
begin
cuv.exji]; { retinem in variabila cuv fiecare cuvant din vectorul de cuvinte}
ordo:=true; {presupunem ca literele cuvantului sunt in ordine alfabetica}
for j:=l to length(cuv)-l do { parcurgem literele cuvantului si testam daca sunt in
ordine alfabetica}
if cuvlj]>cuv[j+1] then ordo.efalse;
if ordo then write(cuv,' ');
end;
end.

23. Varianta C++


#include <iostream.h>
#include<string.h>
mainr)
{
char s[lOOO],a[lOOO];
int i;
cin.get(s,1000);
for(i=O;i<strlen(s);i++)
if( s[i]=='Y') a[i]='A';
else if (s[i]=='Z') a[i]='B';
else if (s[i]>='A' && s[i]<='Z') a[i]=s[i]+2;
else a[i]=s[i];
cout"Textul codificat:"a;
}

134
Varianta Pascal
var s,a:string;
i.byte;
begin
write('Introduceti textul');readln(s);
a:=";
for i:=l to length(s) do
if s[i]='Y' then a:=a+'A'
else if s[i]='Z' then a:=a+'B'
else if (s[i]>='A')and (s[i]<'Y') then a:=a+chr(ord(s[i])+2)
else a:=a+chr(ord(s[i]));
writeln('Textul codificat: ',a);
readln;
end.

28. Se mparte textul n entiti (entitile sunt separate prin spaii sau semne de punctuaie (, !
? ; : )). O entitate poate reprezenta numrul cutat doar dac are lungimea de 4 caractere, caz
n care se va face conversia ctre tipul ntreg.
30. Folosim un vector care pstreaz punctajul fiecrui item. Itemii la care a rspuns corect
un elev i citim mtr-un ir de caractere. Extragem fiecare item (fiecare component din irul
de caractere) i lum din vectorul punctajelor punctajul corespunztor, nsumnd
punctajele.

H.4. NREGISTRRI
3. Fie a=x+yi i b=z+ti cele dou numere complexe. Utilizm formulele:
a+b=(x+z)+(y+t)i
a-b=(x-z)+(y-t)i
a*b=(xz-yt)+(xt+yz)i
lal=~x2 + y2
Ibl=.J Z2 + t 2
4. Definim un vector de elevi cu elemente de tip nregistrare. Fiecare element conine
cmpurile nume, prenume, numr de absene i media general. Citim ntr-un ciclu toate
datele elevilor. Pentru determinarea mediei generale a clasei calculm suma mediilor i
mprim la n, numrul elevilor. Ordonm apoi vectorul de nregistrri n funcie de media
general a elevilor.
6. ntr-un ciclu citim datele elevilor i n acelai timp calculm media la purtare folosind
instruciunea CASE (respectiv SWITCH). Ordonm vectorul dup numrul total de absene
i l afim.
12. Crem un vector cu elemente de tip nregistrare, fiecare element avnd drept cmpuri
lungimea i limea unui dreptunghi. Pentru a determina dreptunghiul cu diagonala cea mai
mare, aplicm algoritmul de maxim folosind formula de calcul a diagonalei : d
2=e
+f .
Pentru a determina dreptunghiul de arie maxim utilizm formula ariael, *1.
13. Vectorul x va conine elementele distincte din matrice mpreun cu frecvenele de
apariie. Pentru fiecare element din matrice se verific dac se gsete n vector i se

135
mrete frecvena n cazul n care s-a gsit, iar n caz contrar se adaug n vector i se
iniializeaz frecvena cu 1. Se ordoneaz apoi vectorul cresctor.
Varianta Pascal:
type elementerecord
numar:real;
frecventa: byte;
end;
var a:array[1..20,L20]of real;
x:array[1..400] of element;
n.m.i.j.k.p.integer;
aux:element;
begin
write('introduceti numarul de linii si numarul de coloane ');readln(n,m);
writeln('introduceti elementele matricii');
for i:=l to n do
for j:=l to m do read(a[i,j]);
k:=O;
for i:=l to n do
for j:=l to m do
begin p:=l;
while (a[i,j]<>x[p].numar) and (p<=k) do p.ep--I;
if p<=k then inc(x[p].frecventa)
e1sebegin inc(k);
x[k].numar:=a[i,j];
x[k].frecventa:1;
end;
end;
for i:=l to k-I do
for j:=i+1 to k do
if xjij.nnmao-xj.numar then begin aux:=x[i];
x[i]:=xUl;
x[j]:=aux;
end;
for i:=l to k do writeln(x[i].numar:5:2,' ',x[i).frecventa);
end.

Varianta C++
#include -ciostream.h
#include <conio.h>
void main(){
struct element{
double numar;
int frecventa;};
double a[20][20];
element x[400],aux;
int n.m.i.j.k.p:
cout"Introduceti numarul de linii si numarul de coloane ";

136
cinnm;
cout"Introduceti elementele matricii\n";
for (i=O;i<n;i++)
for (j=O;j<m;j++) cina[i][j];
k=O;
for (i=O;i<n;i++)
for (j=O;j<m;j++){
p=l;
while (a[i][j]!=x[p].numar && p<=k) p++;
if (p<=k) x[p].frecventa++;
else {
k++;
x[k].numar=a[i][j];
x[k].frecventa= 1;}}
for (i=O;i<k;i++)
for (j=i+l;j<k;j++)
. if (x[i].numar>x[j].numar){ aux=x[i];x[i]=x[j];x[j]=aux;}
for (i=1 ;i<=k;i++ )coutx[i] .numar' 'x[i].frecventaendl;
getcht)'}
15. Crem un vector de produse, n care fiecare element este o nregistrare cu cmpurile
denumire i pre. Pentru un client, citim ntr-un ciclu indicii produselor cumprate mpreun
cu cantiti le respective i afim cte o linie din factur. La fiecare pas n ciclu citesc un
indice al unui produs, fie acesta j, i o cantitate, c. Preul i denumirea acestui produs se iau
din vectorul de produse de pe poziia j. La suma total de plat se adaug valoarea
produsului (cantitatea c nmulit cu preul).
16. Crem un vector de puncte, n care fiecare element este o nregistrare care conine litera
corespunztoare punctului i coordonatele sale n plan. Pentru a determina toate
triunghiurile echilaterale avem nevoie de trei cicluri, corespunztoare celor trei puncte ale
triunghiului. n primul, parcurgem elementele vectorului de la 1 la n-2 pentru primul punct
al triunghiului, n al doilea ciclu parcurgem elementele de la punctul anterior + 1 pna la Il-
1, iar pentru cel de-al treilea ciclu parcurgem elementele vectorului de la punctul precedent
+1 pn la n. n al doilea ciclu se calculeaz distana dintre cele dou puncte determinate,
iar n al treilea ciclu avem de calculat dou distane: dintre primul i al treailea punct i
dintre al doilea i al treilea punct. Dac toate cele trei distane sunt egale, atunci triunghiul
respectiv este echilateral i se pot afia cele trei puncte care formeaz triunghiul.
17. b) Ca s obtinem un produs maxim trebuie ca toate fraciile care formeaz produsul s
fie supraunitaremumrtorul mai mare sau egal dect numitorul). n cazul n care nu exist
fracii supraunitare se ia fracia cea mai mare.
19. Crem vectorul x de nregistrri, n care fiecare element conine baza i exponentul
puterii. Eliminm elemente din vector astfel nct s avem baze distincte. Pentru fiecare
element verificm dac mai exist unul cu aceeai baz. nainte de eliminare adunm
exponenii n elementul gsit.
Varianta Pascal
type putere-record
baza.exp.byte;
end;
var x:array[ 1..20]of putere;

137
n,i,j.k,b, e: byte;
produs.longint;
begin
writeln('introduceti sirul de puteri; O marcheaza sfarsitul sirului');
n:=O;
readlrub,e);
while b-c-O do
begin inc(n);
x[n].baza:=b;
x[n].exp:=e;
readln(b,e);
end;
i:=l;
while i<n do
begin j :=i+1;
while j<=n do
if x[i].baza=x[j].baza then
begin x[i].exp:=x[i].exp+x[j].exp;
for k:=j+1 to n do x[k-1]:=x[k];
dec(n);
end
else inc(j);
inc(i);
end;
produs:=1;
for i:=1 to n do
for j:=1 to x[i].exp do produs:=produs*x[i].baza;
for i:=1 to n-I do write(x[i].baza,' A ',x[i].exp,' * ');
write(x[n].baza,' A ',x[n].exp,' = ',produs);
end.

Varianta C++
#include <iostream.h>
#include <conio.h>
void maintj]
struct putere{
int baza.exp.};
putere x[20];
int n.i.j.k.b,e;
unsigned long produs;
cout"Introduceti sirul de puteri; Omarcheaza sfarsitul sirului";
n=-1;
cinbe;
while (b){
n++;
x[n].baza=b;
x[n].exp=e;

138
cinbe; }
n++;
i=O;
while (i-cn-I)]
j=i+l;
while (j<n){
if (xil.baza-exjl.baza)]
xi.exp-exj.exp;
for (k=j+l;k<n;k++)x[k-l]=x[k];
n--;}
else j++;}
i++;}
produs=l;
for (i=O;i<n;i++)
for (j=O;j<x[il.exp;j++) produs*=x[i].baza;
for (i=O;i<n;i++) coutx[i].baza"A"x[i].exp"*";
cout"\b ="produs;
getcht)'}
27. Parcurgem toate mnstirile din cea de-a doua list i pe fiecare o cutm n prima list
(presupunem c In' direcia patrimoniu se gsesc toate mnstirile deci vom gasi fiecare
mnstire n prima list) apoi modificm anul restaurrii.
31. Varianta Pascal
type eleverecord
nume,pren:string[ 15];
media:real;
end;
var i,j,n,m:byte;
x:array[1..200] of elev;
clasa:array[1..l0] of string[3];
aux:elev;
begin
write('numarul de clase');readln(m);
writeln('clasele sunt');
for i:=l to m do readln(clasa[i]);
write('numarul elevilor');readln(n);
writeln('elevii sunt:');
for i:=l to n do
begin writeln('elevul ',i,': ');
with x[i] do
begin readln(nume);
readln(pren);
readln(media);
end;
end;
for i:=l to n-I do
for j:=i+1 to n do
if xij.mediacxjj.mediathen begin aux:=x[i];

139
x[i]:=x[j];
x[j]:=aux;
end;
for i:=l to m do
begin writeln('clasa ',clasa[i],' .');
j:=i;
while j<=n do
begin writeln(x[j].nume,' ',x[j].pren,' ',x[j].media:6:2);
j:=j+m;
end;
writeln;
end;
end.

Varianta C++
#include <iostream.h>
#include <string.h>
#include <eonio.h>
void maint)]
struet elev {
ehar nume[20],pren[20];
double media;};
elev x[200],aux;
ehar clasa[1O][3];
int i.j.n.m;
eout"Dati numarul de clase:";
einm;
eout"Clasele sunt";
for (i=O;i<m;i++) einclasa[i];
eout"Numarul elevilor este:";
cinn;
cout"Elevii sunt";
for (i=O;i<n;i++){
cout"Elevul "i+1" este: ":
einx[i] .nume x[i].prenx[i] .media;}
for (i=O;i<n-1;i++)
for G=i+1;j<n;j++)
if (x[i].media<x[j].media){ aux=x[i];x[i]=x[j];x[j]=aux;}
for (i=O;i<m;i++){
eout"clasa "clasa[i]":";
j=i;
while G<n){coutx[j].nume' 'x[j] .pren' 'x[j].mediaendl;
j+=m;}} }

140
CAPITOLUL III
FIIERE TEXT

2. Parcurgem ntr-un ciclu (pn la ntlnirea marcaj ului de sfrit de fiier) toate liniile
fiierului: Pentru fiecare linie presupunem c elementele irului sunt ordonate cresctor,
initializnd cu true o variabil boolean. ntr-un alt ciclu (pn la ntlnirea marcajului de
sfrit de linie) citim cte un numr din fiier i l comparm cu numrul precedent; dac
gsim o pereche de numere consecutive n care primul este mai mare dect al doilea,
nseamn c irul de pe aceast linie nu este ordonat cresctor, deci variabila boolean
devine fals. nainte de a trece la linia urmtoare se verific variabila boolean. Dac
aceasta are valoarea tTue atunci se afieaz numrul de ordine al acestei linii.
5. tiind c orice adres de e-mail conine caracterul "@" numrm toate apariiile acestui
caracter pentru a afla cte adrese de e-mail sunt n fiier. n acelai timp vom numra de cte ori
apare n fiier irul de caractere "@yahoo" pentru a afla cte adrese de e-mail sunt pe "yahoo".
8. ntr-un ciclu 'citim pe rnd numele unui fiier, l deschidem, apoi adugm coninutului
fiierului DOCUMENT.TXT (acesta trebuie deschis la fiecare pas n ciclu pentru a aduga
coninutul lui la toate fiierele).
12, Utilizm un fiier "de lucru" n care scriem textul transformat (prima liter din fiecare
cuvnt o scriem cu liter mare), apoi tergem fiierul IN.TXT. Redenumim fiierul "de
lucru" cu numele IN.TXT apoi afim coninutul su.
16. Definim un vector cu 10 elemente corespunztoare celor zece cifre. Elementul de pe
poziia i reprezint numrul de apariii n fiier ale cifrei i. Iniializm cu Otot vectorul apoi
parcurgem fiierul ntr-un ciclu i pentru fiecare cifr gsit mrim cu 1 elementul din
vector corespunztor cifrei. ntr-o alt variabil numrm toate caracterele din fiier.
20. Varianta Pascal:
program poeme;
var i:longint;
linie.s,s1,s2:string;
incrucisata,imperecheata:boolean;
f:text;
begin
assign( f,'poeme. txt');
reset(f);
imperecheata:=true; incrucisata.etrue;
i:=O; {numaram liniile pe care se afla versuri}
while not eof(f) do
begin while seekeoln(f) do readln(f); {trecem peste liniile vide}
inc(i); {care separa strofele}
readln(f,linie);
if (linie[length(linie)]='.') or (linie[length(linie)]=',') then
delete(linie,length(linie),l); {sterge ultimul caracter daca este
'.' sau ','}
s:=copy(linie,length(linie)-2,3); {extrage ultimele trei
caractere din vers}
if i mod 2=0 then
if s<>s2 then imperecheata.efalse;

141
if (i mod 4=3) ar (i mod 4=0) then
if s-o-s 1 then incrucisata.efalse;
s1:=s2; s2:=s;
end;
if imperecheata then writeln('rima este imperecheata')
else if incrucisata then writeln('rima este incrucisata')
else writeln('altfel de rima');
end.

Varianta C++
#inelude <fstream.h>
#inelude <string.h>
#include <conio.h>
void readln(ifstream &f,char *linie){
int i=O;
char c;
while ((c=f.getO)!='\n'&&!f.eofO)linie[i++]=c;
linie[i]=O; }
void mainf)]
clrscrt):
unsigned long i=O;
char sl [1O],s2[1O],s[1O],linie[100],*p;
int imperecheata=1,incrucisata=1;
ifstream f("poeme.txt");
while (!f.eof()){
readln(f,linie);
while (!strcmp(linie,"\n"))readln(f,linie);
i++;
if (linie[strlen(linie)]=='. 'iilinie[strlen(linie)]==', ')linie[strlen(linie)]=0;
p=&linie[strlen(linie)-3];
strncpy(s,p,4);
if(i%2==O)
if (strcmp(sl,s)) imperecheata=O;
if (i%4==3I1i%4==0)
if (strcmp(s1,s2)) incrucisata=O;
strcpy(s1,s);
strcpy(s2,s 1);}
if (imperecheata)cout"Rima e imperecheata\n";
else if (incrucisata)cout"Rima e incrucisata\n";
else cout"Rima este altfel\n";
getchO;}

24. Fie x vectorul n care vom obine lista final. Elementele acestui vector reprezint
reuniunea celor dou mulimi de nume din fiierele date. Mai nti copiem n x toate
numele din primul fiier, apoi parcurgem al doilea fiier i adugm n vectorul x doar acele
nume care nu se afl deja n fiier.

142
30. Varianta Pascal
program matrici rare;
var a:array[ 1..10, 1..10] of integer;
i,j.n.m.nrzero.integer;
f,g:text;
begin
assign(f,'matrici.in');reset(f);
assign(g,'matrici.out');rewrite(g);
nrzero.et);
while not eof(f) do
begin inc(i);j:=O;
while not eoln(f) do
begin inctj);
read(f,a[i,j]);
if a[i,j]=O then nrzero.enrzeto--L;
end;
readln(f);
if seekeoln(f) then
"~o
begin n:=i;m:=j;
if nrzero>n*m div 2 then
begin for i:=l to n do
begin for j:=l to m do write(g,a[i,j],' ');
writeln(g);
end;
writeln(g) ;
end;
readln(f);
nrzero:=O;
i:=O;
end;
end;
close(f);close(g);
end.

Varianta C++
/*
am citit din fisier eate o linie, in functia citire
care returneaza nr elementelor de pe linie
daca acest numar e O => matricea cureanta s-a terminat de citit*/
#include <fstream.h>
#include <conio.h>
ifstream f("f.txt");
int citire(int *ma){
int i=O;
ma[]=O;
nt ch;
chef.geti);

143
while (!f.eofO&&ch!='\n'){
ma[i]=ch-'O';
ch-ef.getf):
while(ch !='\n' && !f.eofO&&ch!=' '){
ma[i] *=10;
ma[i]+=ch-'O';
chef.gen); }
i++;
while(ch==' ')ch=f.getO;}
return i;}
void maim)]
clrscn);
int matr[lOO] [100];
int Suma[lOO][lOO];
int n,m,i,j,nmax=O,mmax=O;
for (i=O;i<l OO;i++)for (j=O;j<l OO;j++)Suma[i]UJ=O;
while (!f.eofOH
n=O,m=O;
while (i=citire(matr[n++])m=i;
n--;
for (i=O;i<n;i++)
for (j=O;j<m;j++)
Suma[i] UJ+=matr[i] UJ;
if (n>nmax)nmax=n;
if (m>mmax)mmax=m;}
for (i=O;i<nmax;i++) {
for (j=O;j<mmax;j++)
coutSuma[i][j]' ';
coutendl; }
getch();}
35. Gsim nti punctajul candidatului, dup care numrm ci candidai au punctajul mai
mare dect el.
36. Trebuie s interclasm datele din cele dou fiiere. Utilizm algoritmul de interclasare a
doi vectori, cu deosebirea c prelum datele din dou fiiere.
39. Se vor cuta cuvintele comune tuturor liniilor fiierului.
41. Parcurgem ntr-un ciclu toate fiierele de la 1 la n. La fiecare pas n ciclu construim
numele fiierului ntr-o variabil de tip string, concatennd irul de caractere 'parte' cu
numrul corespunztor convertit ntr-un ir de caractere i cu irul '.txt'. Deschidem apoi
fiierul, adugm coninutul lui la fiierul profesor.txt i trecem mai departe la urmtorul
fiier.
42. Pentru fiecare elev din fiier citim numele i prenumele ntr-o variabil de tip string, iar
de pe linia urmtoare citim clasa i mediile ntr-un ciclu pna la sfritul liniei. n acest
ciclu calculm suma numerelor reale reprezentnd mediile pe discipline i numrm aceste
medii (n fiier sunt elevi din clase diferite, i au un numr diferit de discipline). Totodat
numrm ntr-o alt variabil mediile sub 5 i dac la ieirea din ciclu, aceast variabil este
diferit de O atunci elevul este corigent i putem afia la cte discipline este corigent.
nainte de a trece la un alt elev se afieaz media general a acestui elev.

144
44. Varianta Pascal:
program misiune;
type agent=record
nume,cod:string;
end;
var a:array[1..20] of agent;
i,n,p:integer;
linie:string;
f,g,h:text;
begin
assign(f,'nume.txt');reset(f);
assign(g, 'misiune. txt') ;reset(g);
assign(h, 'misiunef. txt');rewrite(h);
n:=O;
while not eof(f) do
begin readln(f,linie);
inc(n);
a[n].cod:=copy(linie,length(linie)-3,4);
delete(1inie,length(linie )-4,5);
a[n]:~ume:=linie;
end;
close(f);
while not eof(g) do
begin readln(g,linie);
linie:=' '+linie+' ';
for i:=l to n do
begin p:=pos(' '+a[i].nume+' ,,linie);
while p-c-O do begin
delete(linie,p+ 1,length( ari].nume));
insert(a[i].cod,linie,p+ 1);
p:=pos(' '+a[i].nume+' ',linie);
end;
end;
delete(1inie,1,1);
delete(linie,length(1inie), 1);
writeln(h,linie);
end;
close(g);close(h);
end.

Varianta C++
#include <fstream.h>
#include <string.h>
void main(){
struct agent{
char nume[lO];
char cod[5];}a[lOO];

145
ifstream f("nume.txt");
ifstream g("misiune.txt");
ofstrearn h("misiunef.txt");
int n=O,i=l;
doi
fa[n].numea[n].cod;
n++;}
while( !f.eof());
char *p=new char[2000];
char cuv[20];
int indeO;
while (!g.eofO){
gcuv;
for (i=O;i<n;i++)
if (!strcmp(ari] .nume,cuv))strcpy(cuv.ali] .cod);
strcpy(&p[ind],cuv);
ind+=strlen(cuv);
p[ind++]=' ';
}
p[ind]=O;
hp;}

CAPITOLUL IV
LISTE ALOCATE STATIC
1. Considerm nmax dimensiunea maxim a vectorului stiv i vf poziia vrfului stivei.
Varianta Pascal
uses crt;
const nmax=50;
var x:array[1..nmax] of integer;
vf,i:integer;
opt:char;
begin
vf:=O;{initial stiva e vida}
repeat
clrscr;
writeln('Optiunile programului ');
writeln('A-adaugarea unui element');
writeln('E-eliminarea unui element');
writeln('L-listarea elementelor din stiva');
writeln('T-terminarea programului');
writeln('Alegeti o optiune '); readln(opt);
case opt of
'A'; if vfenmax then writeln('stiva e plina')
else
begin

146
inc(vf);
writer'introduceti elementul ce se va adauga');
readln(x[vf));
end;
'E': if vf=O then writelnr'stiva e vida')
else dec(vf);
'L': if vf=O then
begin writelni'stiva e vida');
readln;
end
else
begin
for i:=vf downto 1 do write(x[i),' ');
readln;
end;
end;
until opt='T';
end.

Varianta C++
#include<iostream.h>
mairu)
{
const int nmax=50;
int x[nmax),i,vf=O,el;
char opt;
do
{
cout <<" Optiunile programului"<<endl;
cout"A-adaugarea unui element"endl;
cout"E-eliminarea unui element"endl;
cout"L-listarea elementelor din stiva"endl;
cout"T-terminare"endl;
cout"Alegeti o optiune" ;cinopt;
switch(opt)
{
case 'A':if (vf==nmax) cout"stiva plina"endl;
else
{ cout"introduceti un element ":
vf++;
cinx[vf];
};break;

case 'E':if (vf==O) cout"stiva vida"endl;


else vf--;break;
case 'L':if (vf==O) cout"stiva vida"endl;
else for(i=vf;i>O;i--) coutx[i)" ";

147
break;
}
}
while (opt!='T');
}
4. Se asociaz fiecrei tije o structur de date de tip stiv. Se introduc cele n elemente
(numerele asociate bilelor) n prima stiv. Apoi se mut pe rnd cte un element n a doua
stiv, pan la ntlnirea elementului cu valoarea x. Acesta este eliminat din prima stiv,
dup care se depun toate elementele din a doua stiv n prima.
5. Utilizm trei structuri de date de tip stiv (stivele 1 si II sunt asociate celor dou turnuri
iniiale, iar stiva III e asociat noului turn ce trebuie format). Fie vfl, respectiv vf2 poziiile
vrfurilor stivelor 1 si II. Comparm elementele din vrfurile stivelor 1 i II i depunem n
cea de-a treia stiv elementul cu valoarea mai mic, eliminndu-l din stiva din care l-am
preluat. Realizm compararea elementelor din vrfurile stivelor pn cnd una din stive
devine vid, dup care mutm n stiva III elementele rmase n stiva nevid.

Varianta Pascal
var x,y,z:array[1 ..20] of integer;
i,vfl,vf2, vf3,nr:integer;
r:char;
begin
vfl:=O;
writeln('Introduceti numerele inscrise pe cuburile din primul turn, in ordine
descrescatoare de la baza spre varf ');
repeat
writeln('dati nr unui nou cub ');readln(nr);
inc(vfl);
x[vf1]:=nr;
writeln('Continuati?(din) ');readln(r);
until r='n';
vf2:=O;
writeln('Introduceti numerele inscrise pe cuburile din al doilea turn, in ordine
descrescatoare de la baza spre varf ');
repeat
writeln('dati nr unui nou cub ');readln(nr);
inc(vf2);
y[vf2]:=nr;
writeln('Continuati?(d/n)');readln(r);
until r='n';
writeln('primul turn este:');
for i:=l to vfl do write(x[i],' ');
writeln;
writeln('al doilea');
for i:=l to vf2 do write(y[i],' ');
writeln;
vf3:=O;
while (vfl <>0) and (vf2<>O) do {cat timp nu am ajuns la baza unei stive}

148
if x[vfl ]<y[vf2] then {comparam elementele din varfurile stivelor }
begin
inc(vf3);
z[vf3]:=x[vn]; {depunem elementul mai mic in a treia stiva}
dec(vf1); {eliminam elementul din prima stiva,
coborand nivelul stivei}
end
else
begin
inc(vf3);
z[vf3]:=y[vf2];
dec(vf2);
end;
if vn=o then
while vf2<>Odo begin
inc(vf3);
z[vf3]:=y[ vf2];
dec(vf2);
end
else q'

while vfl <>0 do begin


inc(vf3);
z[vf3]:=x[vn];
decrvf'l);
end;

writeln('Elementele din noul turn sunt');


for i:=vf3 downto I do write(z[i],' ');
readln;
end.
Varianta C++
#include<iostream,h>
#inc!ude<string,h>
main/)
{
int x[lO],y[lO],z[lO],i,vf1=O,vf2=O,vf3=O,nr;
char r;
cout"Introduceti numerele inscrise pe cuburile din primul turn, in ordine descrescatoare
de la baza spre varf "endl;
do
{
cout"dati nr unui nou cub";cinnr;
vf'l-i-;
xvfl jenr;
cout"Continuati?(din) ";cinr;
}
while(r!='n');

149
cout"Introduceti numerele inscrise pe cuburile din al doilea turn, in ordine
descrescatoare de la baza spre varf "endl;
do
{
cout"dati nr unui nou cub";cinnr;
vf2++;
y[vf2]=nr;
cout"Continuati?(d/n)";cinr;
}
while(r!='n');
while (vf'I && vf2) /*cat timp nu am ajuns la baza unei stive*/
if (x[vfl j-cy]vf2]) /*comparam elementele din varfurile stivelor} */
{
vf3++;
z[vf3]=x[vn]; /*depunem elementul mai mic in a treia stiva*/
vfl--;/*eliminam elementul din prima stiva,coborand nivelul stivei}*/
}
else
{
vf3++;
z[vf3]=y[ vf2];
vf2--;
}
if (vflo-O)
while (vf1 !=O)
{
vf3++;
z[vf3]=x[vf1];
vfl->;
}
else
while (vf2!=O)
{
vf3++;
z[vf3]=y[vf2];
vf2--;
}
cout"Elementele din noul turn sunt:"endl;
for(i=vf3;i>O;i--)coutz[i]" ";
}
10. Se utilizeaz o structurde tip coad; se parcurg elementele din coad: cele cu culoarea
neagr se elimin i celelalte se adauga din nou n coad. Parcurgerea are loc atta timp ct
mai exist n coad elemente cu culoarea neagr.

150
CAPITOLUL V
SUBPROGRAME
2. Fiecrui element initializat i se va da valoarea indicelui de coloan.
8. Se vor ordona cuburile dup lungimea muchiei, apoi se vor aseza n form de V. Pe
prima linie nu punem dect un cub, cel cu latura cea mai mic, pe urmtoarele linii vom
pune cte dou cuburi, n ordinea cresctoare a muchiilor.
9. Varianta Pascal
program fisier;
function fisi(nume:string):longint;
var f:text;
c:char;
i:longint;
begin
assign(f,nume);
reset(f);
i:=O;
while not eof(f) do begin
read(f,c); ,,-
case c of
'a','e','i','o\'u': ineei);
end;
end;
fisi:=i;
end;
var nume:string;
begin
write('introduceti numele tissierului'); readln(nume);
writeln('numarul de vocale din fisierul ',nume,' este ',fisi(nume));
readln;
end.

Varianta C++
#include <fstream.h>
//varianta c++
int functie(char nume[])
{
ifstream f(nume);
char c;
int nrvoc=O;
while c=f.get())!=EOF)
switch (c){
case 'a':
case 'e':
case "i':
case 'o':

151
case 'u':nrvoc++;break;}
return nrvoc;
}
void maint)
{
char nume[lOO];
cout"Dati numele fisierului:";
cinnume;
cout"Numarul de vocale din text e: "functie(nume)endl;
}

Il. Se va construi un alt numr, folosind cifrele primului n ordine invers. Cifra unitilor
se obine din restul mpririi la 1O, numrul se mparte la 10 i cifra zecilor devine a
unitilor.
12. Se va ine seama i de anii biseci, care sunt toi anii divizibili cu 4, n afar de cei
divizibili cu 400.
18. Se va citi din fiier. Cuvintele sunt desprite prin spaii, frazele prin punct, iar aliniatele
prin tab.
21. Vom parcurge irul i dac vom gsi valoarea vom iei din funcie retumnd 1
(adevrat). Altfel vom transmite O(fals).
25. program p25;
{varianta Pascal}
procedure afis(n,x,y:integer);
var i:integer;
begin
for i:=x to y do
if i mod n=O then write(i,' ');
end;
var n,x,y:integer;
begin
writet'dati n, apoi x si y:');
readln(n,x,y);
afis(n,x,y);
readln;
end.

#include <iostream.h>
Ilvarianta c++
void afis(int n.int x,int y)
{
for (int i=x;i<=y;i++)
if (!(i%n)) couti" ";
}
void maint)
{
int n.x.y;
cout"Dati n, apoi x si y:";

152
cinnxy;
afism.x.y);
}
28. Se va parcurge irul i se vor verifica cte 3 valori alturate. Dac gsim un astfel de
grup vom returna 1 iar n caz contrar O.
30. Vom parcurge matricile pe linii, ns una de la indicele 1 la n, iar cea dea doua ncepnd
cu indicele n, descresctor. Pentru a face funcia mai eficient, n cazul n care gsim dou
elemente care nu corespund vom iei, retumnd O(false).
33. Vom parcurge fiecare ir, verificnd condiia x[i-l]<xi. Trebuie avut grij s nu se plece
de la primul element.
36. Varianta Pascal
program ex36;
procedure verif(cont,cod:string);
begin
if pos(cod,cont)=O then
writeln(cont);
end;
var conturi.array] 1..100] of string;
cod:string;
i.n.integer; 't~
begin
write('dati codul'); readln(cod);
write('dati numarul de conturi'); readln(n);
for i=1 to n do begin
write('contul: ');readln(conturi[i]);
end;
writeln('lista codurilor care trebuie modificate');
for i=1 to n do verif(conturi[i],cod);
readln;
end.

Varianta C++
#include <iostream.h>
#include <string.h>
//varianta c++
int verif(char cont[],char cod[])
{
int lcont=strlen(cont),lcod=strlen(cod);
for (char *i=cont;i<=cont+(lcont-lcod);i++)
if (!strncmp(i,cod,lcod))return 1;
return O;
}
void maintj]
char cont[3l],cod[31];
cout"Dati contul si codul:";
cincontcod;
if (verif(cont.codjjcout-oc''Codul apare in cont!\n";

153
else cout"Codul nu apare in cont!\n";
}
38. Verificm dac numrul este divizibil cu 10, eliminnd cte o cifr de la sfritul
acestuia.
41. Fiecrui numr din irul a i va fi asociat un numr din alt ir, b, care reprezint numrul
divizorilor. Se vor sorta irurile n funcie de valorile din irul b.

CAPITOLUL VI
TEHNICI DE PROGRAMARE

VI.1. BACKTRACKING
2. Se aplic algoritmul BackTracking dup schem.
Varianta Pascal
type stiva=ARRAY[1..20] of integer;
var st : stiva;
n.k.i : integer;
are_solutie, valida: boolean;
a:ARRAY[ 1..20] of integer;
function prim(x:integer):boolean;
var i:integer;
begin
prim:=true;
for i:=2 to trunctsqrux) do
if x mod i = O then begin prim.efalse; i:=x; end;
end;
procedure continuare(var are_solutie:boolean; var st:stiva; k:integer);
begin
if st[k]<n then begin
inc(st[k]);
are_solutie:=TRUE;
end
else are_solutie:=FALSE;
end;
procedure validare(var valida:boolean; st:stiva; k:integer);
var i:integer;
begin
valida:=TRUE;
for i:=1 ta k-I do
if st[k]=st[i] then begin valida:=FALSE; i:=k-l ;end;
if (101) and (prim(a[st[k]]) and prim(a[st[k-l]]) then valida:=false;
end;
procedure solutie;
var i:integer;
begin
for i:=1 to n do write(a[st[i]]:3);

154
writeln;
end;
begin
write('N=');
readln(n);
for i:=l to n do begin Write('a[',i,'] = ');readLn(a[i]);end;
k:=l;
st[l]:=O;
while le-O do
begin
repeat
continuarerare solutie.st.k);
if are_solutie then validare(valida,st,k);
until (not are_solutie) Of (are_solutie and valida);
if are_solutie then if k=n then solutie
, else begin inc(k);st[k]:=O;end
else dec(k);
end;
readln(n);
end. "~

Varianta C ++
#include<stdio.h>
#include<math.h>
typedef int stiva[lOO]
stiva st.a;
int k.n.i.p;
int as.ev;

int prim(int x);


{
pe l ;
for (i=2;xl2;i++)
if (x%i==O) { p=O; iex; };
return p;
}
void init(int k,stiva &st);
{
st[k]=O;
}
void succesor(int &as,stiva &st,int k);
{
if(st[k]<n)
{
st[k]=st[k]+1;
ase l ;
}

155
,..------------------
else as=O;
}
void valid(int &ev,stiva &st,int k);
{
eve l ;
for(int I=1;I<=(k-1);i + +)
if(st[k]==st[i]) ev=O;
if 101) && prim(a[st[k]])==l) && (prim(a[st[k-1]])==l)) ev=O;
}
void tiparO
(
for(i=l;i<=n;i + +)
printf(" %d",arstri]]);
printf("\n");
}
mainr)
{
int conteO;
printf("n=");scanf("%d" ,&n);
for(i= 1;i<=n;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i])
}
k=1;init(k,st);
while (le-O)
{
do
(
succesor(as.st.k);
if (as= =l)valid(ev,st,k);
}
while (!(!as= =1) \1 (as= =1) && (ev= =1));
if (as= =1)
if (solutie (k))
{
tipan)
cont + +

else k - -;
}
printf("nr este %d",cont);
}
5. Indicaie:
denumirile pomilor pstrai-le ntr-un vector v cu componentele v1:= 'mr';
v2:='pr'; v3:='nuc'. Dimensiunea maxim a stivei este 15 fiindc lotul conine 60 de metri
i pomii trebuie plantai la o distan de cel puin 4 metri unul de cellalt. Pe fiecare nivel al .
stivei se poate genera oricare din indicii 1,2,3, dar condiia ce trebuie ndeplinit este ca pe

156
dou nivele consecutive ale stivei s nu se genereze acelai indice, i dac pe nivelul k
st[k]=3 (adic pomul k este nuc, fiindc distana dintre acetia trebuie s fie cel puin 12
metri), conditia este ca st[k]<> st[k-l] i st[k] <> st[k-2]. La generarea solutiei se tine
seama i de condiia ca numrul de meri s fie mai mare dect numrul de peri i mai mare
dect numrul de nuci. .
6. Indicaie: soluia nu are aceeai lungime n toate cazurile, adic pot s fie mai muli
termeni n descompunere sau mai puini. Inlimea stivei n care se genereaz soluia este
stabilit n momentul n care suma elementelor ce compun stiva este egal cu suma M. n
stiv se genereaz indicii vectorului n care se citesc numerele date.
7. Problema se va rezolva prin algoritmul BackTracking dup schem.
Se folosete un vector n care se vor pune literele: 'a' ,'b', 'c'.
Varianta Pascal
type stiva=ARRA Y[ 1..20] of integer;
var st : stiva;
n,k : integer;
aresolutie, valida: boolean;
v : arrayf I.B] of char;
procedure continuare(var are_solutie:boolean; var ststiva; k:integer);
begin
if st[k]<3 then begin-
inc(st[k));
are_solutie:=TRUE;
end
else are_solutie:=FALSE;
end;
procedure validare(var valida:boolean; st.stiva; k:integer);
var i:integer;
begin
valida:=TRUE;
if (k> 1) then if st[k] =st[k-1] then valida:=FALSE;
end;
procedure solutie;
var i:integer;
begin
for i:=l to n do write(v[st[i]]:3);
writeln;
end;
begin
write('N=');
readln(n);
v[1]:='a'; v[2]:='b'; v[3]:='c';
k.e l ;
st[1]:=O;
while k>0 do
begin
repeat
continuare(are_solutie,st,k);

157
if are_solutie then validare(valida.st.k);
until (not are_solutie) or (are_solutie and valida);
if are_solutie then if k=n then solutie
else begin inc(k);st[k]:=O;end
else dec(k);
end;
readln(n);
end.
Varianta C ++
#include<stdio.h>
#include<math.h>
typedef int stiva[lOO]
stiva st;
int k,n;
int as.ev;
cjar v[4];
void init(int k,stiva &st);
{
st[k]=O;
}
void succesor(int &as,stiva &st,int k);
{
if(st[k]<3)
{
st[k]=st[k]+1;
ase l ;
}
else as=O;
}
void valid(int &ev,stiva &st,int k);
{
eve.l ;
if(st[k]==st[k-l]) ev=O;
}
void tipart)
{
for(i= 1;i<=n;i + +)
printf("%d",v[st[i]]);
printf("\n");
}
mainO
{
int cont=O;
printf("n=");scanf("%d",&n);
v [l]=" a";
v[2]="b";
v[3]="c";

158
k=l ;init(k,st);
while (le-O)
{
do
{
succesorias,st,k);
if (ase =l)valid(ev,st,k);
}
while (!(!as= =1) II (as= =1) && (ev= =1));
if (as= =1)
if (solutie (k))
{
tipan)
cont + +

else k --;
}
printf("nr este %d".cont):
} ~
22. Se codific cele- n tipuri de flori cu valori 1,2,... n. Stiva va avea dimensiunea Nri. In
stiv se vor genera toate florile dintr-un strat. Condiia ce trebuie ndeplinit este ca tipurile
de flori dintr-un strat s fie v. Se vor numra soluiile (straturile) pn cnd se ajunge la n i
generarea se oprete.
23. Numerele 1,2,..9 se genereaz n stiv, iar semnele + i - sunt codificate cu valoarea 10
respectiv 11. Pentru un pas k se testeaz dac k este par i atunci este obligatoriu ca st[k] s
fie 10 sau 11, adic + sau - (fiindc ntre 2 operanzi trebuie s fie un operator). Pentru pasul
k cu k impar se testeaz dac pe nivelul anterior(st[k-1]) s-a retinut valoarea 10 (pentru +)
i 11 (pentru - ). Dac pe nivelul k-I valoarea e 10 atunci la suma obinut anterior se
adun valoarea de pe nivelul k al stivei, iar dac pe nivelul k-I valoare reinut este 11
atunci din suma anterioar se scade componenta de pe poziia k. Se ajunge la soluie dac
suma elementelor din stiv este 2.
25. Fiecare grup se genereaz n stiv, dimensiunea stivei variaz de la grup la grup.
ntr-o grup se genereaz persoanele care nu se cunosc. De fiecare dat cnd se gsete o
grup se tiprete i se numr ntr-un contor cte grupe sunt. Se va afia cte grupe sunt,
ceea ce reprezint cte variante de text trebuie s formuleze Ionel.
27. Problema const n tierea unei panglici n buci.
Se folosesc notaiile: lung care reprezint lungimile segmentelor n care trebuie tiat
panglica; lb este lungimea total a panglicii, st este stiva n care se genereaz soluiile; nr
este numrul de soluii.
Varianta Pascal
Program taie;
Var lung, st: alTay[1..100] ofinteger;
S, lb, nr, 1 :integer;
Bun:boolean;
Procedure tipar;
Var 1: integer;
Begin

159
nr.enr-s l ;
write(' solutia', nr);
for 1: = 1 ta s-I do write(st[I], '*', lungei], '+' );
writeln(st[s],' *', lung[s], '=', lb )
end;
procedure tai(lb,k:integer);
{lb-elungimea ramasa din bara; k= tipul de segment la care am ajuns}
var 1: integer;
begin { daca am taiat exact toata bara si am taiat cel putin un segment din fiecare lungime
ceruta 'atunci am ajuns la solutie si o tiparim}
if ( Ib=O) and (k=s+ 1) then tipar
else {daca nu am depasit numarul de segmente date, incercam toate
variantele pentru a determina eate segmente de lungime lung[I] se pot taia}
ifk<= s then
for 1:= 1 ta (lb div lung[k]) do
begin
st[k]:=I;
tai(lb -1* lung[k], k+ 1)
end;
end;
begin
write('lungimea panglicii:'); readln(lb);
s:=O;
repeat
s:=s+l;
write('lungime segment', s, ' (pentru Ose termina): ');
{nu sunt permise segmente de lungimi egale}
repeat
bun:=true;
readin(lung[s]);
for 1:=1 to s-I do
if lung[I]=lug[s] then bun.efalse
until bun ar (lung[s]=O);
untillung[s]=O;
s:=s-l;
nr:=O;
tai(lb,l);
if nr=Othen writeln(' nu exista nici o solutie!')
else writeln('s-au gasit', nr, 'modalitati de taiere')
end.

Varianta C++
#include<stdio.h>
int lung, st[IOO],S, lb, nr, 1;
int Bun;
void tipari);
{int 1;

160
nr==nr+ 1;
printf]" solutia %d", nr);
for (1 == 1;1<==s-I;1++) printf("%d * %d +",st[I],lung[1]);
printf("\n %d * %d == %d",st[s],lung[s],lb );
}
void tai(int lb,k);
{
IIlb==lungimea ramasa din bara; k== tipul de segment la care am ajuns
int 1;
//daca am taiat exact toata bara si am taiat cel putin un segment din fiecare lungime ceruta
//atunci am ajuns la solutie si o tiparim
if( Ib====O) && (k===s+l) tipart);
else {
//daca nu am depasit numarul de segmente date, incercam toate variantele pentru a
determina //cate, segmente de lungime lung[1] se pot taia
if (k<= s) for (1== l;1<=(1b / lung[k]);1++)
{
st[k]=1;
tai(1b -1* lung[k], k+ 1)
.' };
};
maim);
{
printf("lungimea panglicii : "); scanf("%d",&lb);
s==O;
do
{
s==s+l;
printf("lungime segment %d (pentru O se termina): ",s);
//nu sunt permise segmente de lungimi egale
do
{
bun=l;
scanf("%d",&lung[s]);
for (1=1;1<=s-] ;1++)
if( lung[I]===lug[s]) bun=O;
}
while( !bun) II (lung[s]==O);
}
while (!(lung[s]==O;
s=s-l;
nr=O;
tai(lb,I);
if (nr==0) printf("\n nu exista nici o solutie!");
else printf("\n s-au gasit %d modalitati de taiere",nr);

161
30. Persoanele invitate la mas sunt reinute ntr-un vector. Pentru fiecare persoan se
cunoate numele i cele dou limbi vorbite de ea. Pentru un pas k trebuie ndeplinit
condiia ca persoana generat pe nivelul k-I s cunosc aceeai limb cu persoana generat
pe nivelul k. Deoarece masa e rotund atunci prima persoan generat trebuie s cunosc o
limb de conversaie cu persoana aflat pe ultimul nivel al stivei.
31. Se codific cele cinci feluri de flori cu valorile 1,2,... 5. Stiva va fi considerat cu
dimensiunea m (numrul de flori ce compun un buchet). Se vor numra soluiile i cnd se
va ajunge la n astfel de buchete, se oprete generarea.
32. Numerele de nmatriculare existente se pstreaz ntr-un vector de iruri de caractere,
fiindc numrul poate fi privit ca o succesiune de caractere. n stiv se genereaz numerele,
dar nu pot s pun n stiv dect un numr care s conin iniiala numelui i iniiala
prenumelui celui interesat. Astfel de fiecare dat cnd n stiv se generaz un numr se
caut mai nti dac acesta are iniiala numelui i iniiala prenumelui, acest lucru se poate
face cu funcia pos(subsir, sir) care ntoarce poziia subirului ntr-un sir, iar dac valoarea
ntoars de pos este zero atunci subirul nu este gsit n ir.
34. Numerele ntregi longint se reprezint fiecare pe rnd n baza 2. Cifrele numrului
obinut din codificarea din baza 10 n baza 2 se genereaz n stiv. Se adun cifrele pstrate
n stiv i dac suma lor este egal cu n atunci se tiprete stiva.
39. Crile din fiecare raft se genereaz n stiv. Ele se genereaz n funcie de autor, pe un
raft vor fi cri cu acelai autor. Pentru crile aranjate pe un raft, acestea se vor elimina din
irul celor existente iniial astfel nct la generarea raftului urmtor s nu se aeze o carte
deja aranjat. Fiecare raft are cel mult p cri. Algoritmul se termin cnd sunt generate cele
10 rafturi i toate crile sunt aranjate.
46. Numele elevilor i notele lor sunt memorate ntr-un vector. n stiv se genereaz
grupele de elevi. ntr-o grup se genereaz elevi pentru care media aritmetica a notelor
fiecrui elev din grup difer cu mai puin de un punct de media clasei. Dup generarea
unei grupe, elevii ce o compun sunt eliminai din vectorul iniial, pentru ca la generarea
altei grupe elevii selectai deja ntr-o grup s nu figureze i alt grup.

VI.2. RECURSIVITATE
3. Cu cifrele numrului dat se formeaz un vector i se calculeaz valoarea maxim a
vectorului. Pentru determinarea valorii maxime dintr-un vector se folosete o funcie
maxim(i, max) care determin cifra maxim. Max va fi un parametru transmis prin referina
i este actualizat la fiecare execuie (iniial el este 0, deoarece elementele irului sunt
numere naturale). In lanul de auto-apeluri i va trece prin poziiile elementelor 9,8,... 2,1
(sunt maxim 9 elemente n vector fiindc numrul este de maxim 9 cifre). Dac i=O se
ntrerup auto-apelurile i funcia d ca rezultat valoarea lui max, altfel dac vei] > max
atunci max : = v[i]i se auto-apeleaz maxim (i-l, max) pentru a trece la urmtorul
element.
4. Se poate folosi o procedur recursiv ce ntoarce inversul numrului, dac numrul este
egal cu inversul su atunci el este simetric.
Varianta Pascal:
Var n, nr, p : longint;
Function invers(n : longint): longint;
Begin

162
If n = oThen
begin
p:=l;
invers :=0;
end
Else
begin
invers := p*(n mod 10) + invers(n div 10);
p:=p*lO;
end;
End;
begin
Write(' n = ');
ReadLn(n);
If invers(n) = n Then Write('NUMAR SIMETRIC)
Else Write('NU E SIMETRIC);
End.

Varianta C++
#inc!ude<string:h>
#inc!ude<iostream.h>
long n, nr, p;
long invers(long n)
{
if (n== O)
{
p=l;
return O;
}
else
{
return (p*(n % 10) + invers(n 110));
p=p*lO;
}
}
maint)
{
printf(" n = ");
scanf("%d",&n);
if (invers(n) == n) printf("\n NUMAR SIMETRIC");
else printf("\n NU E SIMETRIC");
}
5. Pentru determinarea valorii maxime dintr-un vector se folosete indicaia de la problema
3, astfel determinarea minimului nu provoac greuti.
9. Se caut n irul s apariia spaiilor inutile, adic dou consecutive i dac exist atunci
se elimin i procedeul continu printr-un apel recursiv.

163
16. Se citete din fiier m i n i se apeleaz procedura recursiv ce va avea ca parametru o
variabil de tip matrice. n procedura recursiv dac nu s-a ajuns la sfritul fiierului se
citete o matrice i se nsumeaz cu cea dat ca parametru variabil.

VI.3. DIVIDE ET IMPERA


1. Varianta Pascal
Program laureat;
Type participant = record
Nume: string;
Nota: integer;
End;
Var v: array[ 1..100] of participant;
X, n, i: integer;
Function max ( li, ls: integer):integer;
Var m, a, b:integer;
Begin
If li=ls then max:= v[li]. Nota
Else
Ifli<1s then begin
M:= (1i+ls) div2;
A:= max (li, m);
B:= max (m+ 1, ls);
If a>b then max.ea
Else max.eb
End;
End;
Begin
Write('n='); readln(n);
For i:=l to n do begin
Write('numele participantului: '); readln(v[i]. nume);
Write ('nota participantului: '); readln(v[i]. nota);
End;
X:= max(l,n);
For i:=l ta n do
Ifx= v[i]. Nota then writeln( v[i]. nume)
End.

Varianta C++
#include<stdio.h>;
char nume[30] ;
int nota[30];
int X, n, i;
int max (int li, int ls)
{
int m, a, b;

164
if (li==ls) return nota[li];
else
if (li<ls) {
m= (li+ls) /2;
a= max(li, m);
b= max (m+l, ls);
if (a>b) return a;
else return b;
};
};
maini)
{
printf("n="); scanf("%d",&n);
for(i= 1;I<=n;i++)
{ .
printf("\n numele participantului: ");
scanf("%s", &nume[i]);
printf("\n nota participantului: ");
scanf("%d",&nota[i]);
}; .'
X=max(l,n);
for(i=l ;i<=n;i++)
if (X==nota[i]) printf("\n %s", nume[i]);

CAPITOLUL VII
GRAFURI
2. Din datele citite din fiier se construiete matricea de adiacen a grafului n care
vrfurile vor reprezenta ncperi, iar muchiile vor fi coridoare.
a) ncperile cu cele mai multe coridoare de legtur, vor fi indicii acelor linii din
matricea de adiacen, n care se gsesc un numr maxim de cifre 1.
b) ncperile n care petera se nfund vor fi cele care au un singur coridor.
c) Grupul de ncperi cutat corespunde noiunii de clica a unui graf (un subgraf partial
complet al grafului). O cale simpl de rezolvare ar fi prin metoda backtracking: Se
selecteaz n soluie vrfuri ale grafului (de la 1 la n). Soluia va fi afiat de fiecare
dat cnd numrul de elemente din soluie este mai mare sau egal cu 3. Un vrf va fi
considerat valid n soluie dac are legturi spre toate vrfurile deja alese.
4. Numrul minim de canale de transmisie va fi acel numr minim de culori cu care ar
putea fi colorat graful astfel nct oricare dou vrfuri (staii) adiacente s fie colorate
diferit. Acest numr corespunde noiunii de numr cromatic al grafului.
8. Vrfurile grafului vor reprezenta elevii. Graful ce corespunde acestei probleme este un
multigraf deoarece ntre doi elevi pot fi schimbate mai multe crti .(la aceeai situaie
ajungem i dac considerm crile ca vrfuri). Mai mult, acest graf va fi un graf ponderat,
n care ponderea reprezint numrul crii transmise.

165
Pentru simplificarea rezolvrii, vom pstra informaiile citite ntr-un ir de triplei (sau trei
iruri), rezolvarea intuitiv reducndu-se la o problem cu iruri.
15. La primul subpunct se verific dac graful rezultat conform datelor de intrare este
conex. Pentru urmtorul subpunct trebuie determinat arborele parial de cost minim.
18. Este vorba de un graf bipartit, n care vrfurile grafului sunt mprite n dou mulimi
disjuncte de vrfuri (solicitanii i posturile).
21. Planul unei expoziii trebuie s fie un graf eulerian.
29. Varianta recursiv intuitiv:
Varianta Pascal
type sir=array[1..7] ofbyte;
var a: array[1..7] of sir;
sol.sir; {sirul solutie, continand o insiruire de persoane }
v:sir; {v[i] varful cozii i din a
sau indicele curent din lista de prieteni ai lui i}
n:sir; {n[i] numarul de prieteni ai lui i}
i: byte; {indice curent in sirul solutiilor}
m:byte; {numarul de persoane}
primul:byte; {"zvonacul" - cel de la care pornesc zvonurile}
k,j,ilinie:byte;
f:text;
procedure afisez(i:byte;sol:sir);
var j:byte;
begin
for j:=l to i do
write(sol[j]:5);
writeln;
end;
function este_in_sol(nouLp:byte;i:byte;sol:sir):boolean;
{verifica daca noul prieten este cu adevarat nou}
var j:byte;
begin
este_in_sol:=false;
for j:=l to i do
if sol[j]=noul_p then
este_in_sol:=true;
end;
function prieteniInformatitp.i.byte):boolean;
{p ultimul elev ales in solutie, i - pozitia curenta in solutie}
var ii:byte;
begin
prietenijnforrnati.etrue;
for ii.e l to n[p] do
if not este_in_sol(a[p,ii],i,sol) then
prieteni_informati:=false;
{daca gasim cel putin un prieten al lui p ce nu este inca in solutie
inseamna ca mai avem cui transmite zvonul si solutia nu este completa}
end;

166
procedure ZVON(i:byte;sol,v:sir);
{pune in solutie pe pozitia i urmatorul copil care transmite zvonul
v - pozitiile curente ale indicilor din sirul de prieteni}
var pa,urmatorul:byte;
begin
pa:=sol[i-l]; {persoana anterioara}
if (v[pa]>n[pa]) then
{daca am ajuns la sf. unei liste de prieteni}
begin
if prietenUnformati(pa,i-l) then
{si toti prietenii lui pa sunt deja in solutie}
afisez(i-l,sol);
end
else
begin
urmatorul:=a[pa,v[pa]]; {urmatorul prieten al lui pa}
inc(v[pa]);{avanseaza varful cozii pe urmatorul prieten al lui pa}
if not este_in_sol(urmatorul,i,sol) then
begin {daca urmatorul nu este inca in solutie, il adaug}
sot[i]:=urmatorul;
zvon(i+Lsol,v); {si generez in continuare}
end;
zvon(i,sol,v); {incerc si alt prieten}
end;
end;
begin
assign(f,'persoane.in');
reset(f);
{citirea datelor din fisier si construirea maricii a in care
linia j reprezinta lista de prieteni ai lui j }
readln(f,m);
for j:=l to m do
begin
k:=O;
read(f,ilinie);
if ilinie<>j then begin {prima persoana in aceasta linie trebuie sa fie j
apoi vor veni prietenii sai}
writeln('date eronate');
exit;
end;
while not eoln(f) do {atata timp cat mai sunt prieteni in lista lui j}
begin
inc(k);
read(f,a[j,k]); {ii citesc}
end;
n[j]:=k; {pastrez numarul de prieteni ai lui j in n[j]}
readln(f);

167
end;
{citirea "zvonacului'' }
write(' Cine este cel de la care incepe zvonul sa circule? ');readln(primul);
sol[l]:=primul;
{initializarea indicilor varf;}
for j:=l to m do v[j]:=l;
ZVON(2,sol,v); {apel VARIANTA 1, VARIANTA2 s-ar apela din acelasi loc}
readln;
close (f);
end.
Rezolvare prin metoda backtracking
Analiza problemei:
n soluie adugm persoane, deci x[i] ia valori ntre 1 si m.
Lungimea soluiei este variabil, afim o soluie dac toi vecinii ultimului elev din soluie
au aflat deja zvonul (deci se afl n soluie).
n funcia posibil verificm doar ca x[i] s fie prietenul lui x[i-1] astfel ca zvonul s se
poat propaga.
Optimizare: Vom pune n soluie un elev numai dac zvonul nu a ajuns nc la el.

{Varianta de back:tracking recursiv pentru procedura ZVON}


procedure ZVON (i:byte);
var j:byte;
begin
for j:=1 to m do
begin
if not este_in_sol(j,i-1,sol) then x[i]:=j; {daca j nu a auzit deja zvonul}
if posibilei) then
if prietenUnformati(x[i-l,i-1) then
{si toti prietenii lui x[i-1] sunt deja in solutie}
afisez(i-l,sol)
else zvon(i+ 1);
end;
{in functia posibil se va verifica daca x[i] se afla in lista de prieteni ai lui x[i-l] astfel incat
zvonul sa se propage. }
Function posibil(i:byte):boolean;
Var j:byte;
Begin
Posibile-false;
For j:=1 to n[x[i-1]] do
If x[i]=a[x[i-1],j] then posibil:=true;
End;

30. Pentru a nelege mai bine cine cu cine a jucat rescriem matricea asfel:

168
A B C D E F G H
A o 1 O 1 1 O O O
B 1 O O O O O O O
C O O O 1 O O O O
D 1 O 1 O O O O O
E 1 O O O O 1 O 1
F O O O O 1 O O O
G O O O O O O O 1
H O O O O 1 O 1 O

Folosind informaiile din matricea de adiacen, putem schematiza desfurarea


campionatului astfel:

Etapa 1 : A B C D E F G H
\ / \ / \ / \ /
Etapa2 : A D E H
\ / \ /
Etapa3 : A E

Observm c finalitii particip la toate cele 3 etape (8 = 2 3)


Varianta Pascal
Program Fisier, virusat;
var f:text;
scoli:array[ 1..40] of string]40];
a:array[ 1..40, 1..40] of byte;
nr_etapejucate:array[ 1. .40] of byte;
p.integer;
etapa,i,j,n:byte;
function puterea_Iui_2(n:byte):integer;
var p:byte;
prod:byte;
begin
prod:=l;
p:=O;
while prod-cn do
begin
inc(p);
prod:=prod*2;
end;
if prod=n then puterea_Iui_2:=p
e1se puterea_1ui_2:=-1; {daca n nu este putere a lui 2}
end;
begin
assign(f, 'rezultate.in');
reset(f);

169
readln(f,n);
{calculam puterea la care este ridicat 2 pentru a da n}
p:=puterea_IuL2(n);
{p reprezinta numarul total al etapelor competitiei}
if p=-l then
begin
writeln('Numarul de echipe participante este gresit');
exit;
end
else
begin
{citirea scolilor si a matricii de adiacenta}
for i:=l to n do
readln(f,scoli[i]);
for i:=l to n do
begin
for j:=l to n do
read(f,a[i,j]);
readln(t);
end;
end;
{Echipele finaliste sunt acele echipe care au jucat p-l etape}
writeln(' Cele doua echipe finaliste sunt: ');
for i:=l to il do
begin
ncetapejucate[i]:=O;
for j:=l to n do
nr_etapejucate[i]:=ncetapejucate[i]+a[i,j];
if nr_etapejucate[i]=p then writeln(scoli[i]);
end;
{Echipe descalificate la o anumita etapa}
write(' Pentru ce etapa doriti echipele descalificate? ');
readln(etapa);
{echipele descalificate vor fi cele
ce au jucat un nr. de etape egal cu etapa}
for i:=l to n do
if nr_etapejucate[i]=etapa then writeln(scoli[i]);
readln;
end.

CAPITOLUL VIU
ALOCAREA DINAMIC A MEMORIEI
I.Varianta Pascal
prograrn teme;
uses crt;

170
type adr=Acaiet;
caiet=record
nume:string[ 15];
urm:adr;
end;
var nr caiete.byte;
vf' stiva.vf stiva azi.p.adr;
procedure eleviLaduc_caietele;
var elev:string[15];
begin
llf_caiete:=O;
vCstiva:=nil;
{elevii aduc caietele}
writelnr'dati numele elevului care a predat primul caietul: ');
writelnt'pentru oprire tastati "?" ');
readln(elev);
while elev<>'?' do
begin
nr caiete.enr caiete- 1;
new(p); c,'

po.nume.eelev;
pA.urm:=vCstiva;
vCstiva:=p;
writelnf'urmatorul caiet: ');
readln(elev);
end;
end;
procedure cautcaietul Iui razvan;
var gasit:boolean;
begin
p:=vCstiva;
gasit:=false;
while p-c-nil do
if po.numee'Razvan' then begin
gasit:=true;
p:=nil;
end
else p:=pA.urm;
if gasit then writelnr'Razvan a predat caietul')
else writeln (Razvan nu a predat caietul');
end;
procedure doua_teancuri_de_caiete;
var i:byte;
begin
vCstiva_azi:=nil;
for i:=l to nrcaiete div 2 do
begin

171
p:=vCstiva;
vCstiva:=vCstiva".urm;
p".urm:=vCstiva_azi;
vCstiva_azi:=p;
end;
end;
procedure afiseaza_Iista( vf:adr);
begin
p:=vf;
if p=nil then writeln('lista vida');
while p-c-nil do
begin
write(' ',p".nume);
p:=p".urm;
end;
writeln;
end;
begin
clrscr;
elevii uduc.caietele;
cautcaietul Iuirazvan;
doua_teancuri_de_caiete;
writeln('lista caietelor pentru astazi: ');
afiseaza_Iista( vCstiva_azi);
writeln('lista caietelor pentru maine: ');
afiseazaIistatvf.stiva);
readln;
end.

VARIANTA C++
#include<iostream.h>
#include<conio.h>
#include<alloc.h>
#include<string.h>
typedef struct adr{
char nume[15];
struct adr *urm;
}ELEVI;
int nrcaiete;
ELEVI *vCstiva,*vCstiva_azi,*p;
void elevii aduccaietelet)
{
char elev[15];
nr caieteeO;
vCstiva=NULL;
Ilelevii aduc caietele
cout"\ndati numele elevului care a predat primul caietul: ";

172
cout"\n( pentru oprire tastati '1' )\n";
cinelev;
while (strcmp(elev,"?")!=O)
{
nr caiete--r;
p=(ELEVI*)mal1oc(sizeof(ELEVI));
strcpy(p->nume,elev);
p-c-urmevfstiva;
vCstiva=p;
cout"\nurmatorul caiet: ";
cinelev;
}
}
void cautcaietul Iuijazvant)
{int gasit;
p=vCstiva;
gasit=O;
while (p!=NULL)
if (strcmp(p-c-nume, "Razvan")==O)
,,' {gasite l;
p=NULL;}
else p=p->urm;
if (gasit) cout"\nRazvan a predat caietul";
else cout"\nRazvan nu a predat caietul";
}
void doua_teancuri_de_caieteO
{
int i;
vCstiva_azi=NULL;
for (i=l ;i<=nccaietel2;i++)
{
p=vCstiva;
vCstiva=vCstiva->urm;
p->urm=vCstiva_azi;
vCstiva_azi=p;
}
}
void afiseaza_lista(ELEVI *vf)
{
p=vf;
if (p==NULL) cout"\nlista vida";
while (p!=NULL)
{
cout" "p->nume;
pep-c-urm;
}
cout'\n';

173
}
void mainr)
{clrscn);
elevii aduccaietelet);
caut caietul Iui razvan);
douateancuri decaietet);
cout"\nlista caietelor pentru astazi: ";
afiseazaIistarvf' stivaazi);
cout"\nlista caietelor pentru maine: ";
afiseaza Iistatvfstiva);
getcht);
}
2. Pentru fiecare termen din prima list (primul polinom) se caut corespondenii lui n cea
de-a doua list.
5. Pentru a pstra doar vocale distincte se parcurge la fiecare vocal gsit lista cu vocalele
deja ntlnite.
Similar pentru consoane.
9. Similar cu problema rezolvat 10.
10. program stomatologie;
uses crt;
type adr="pacient;
pacient-record
nume:string[15];
urm:adr;
end;
var optiune:char;
prim_pacient,prim_urgenta,ultim_pacient,ultim_urgenta,p:adr;
scaun_ocupat:string[15];
procedure sosire_pacient(var prim,ultim:adr);
var nou:adr;
num:string[15];
begin
write('numele pacientului: ');
readln(num);
if (scaun_ocupat[l ]='?')and(prim=nil)
then begin
scaun_ocupat:=num;
writeln('PACIENTUL ',num,' A INTRAT DIRECT IN CABINET);
end
else begin
writeln('PACIENTUL ',num,' SE ASEAZA LA COADA');
if prim=nil then begin
new(prim);
prim" .nume.enum;
prim".urm:=nil;
ultim:=prim;
end

174
else begin
new(nou);
nouo.nume.enum;
nouo.urm.enil;
ultimo.urm.enou;
ultim:=nou;
end;
end;
end;
procedure intra_in_cabinet(var prim:adr);
var p:adr;
begin
scaunocupat.eprimenume;
writeln('PACIENTUL ',scaun_ocupat,' INTRA IN CABINET);
p:=prim; .
prim.eprimo.urrn;
dispose(p) ;
end;
procedure eliberare_scaun;
begin "
if scaun_ocupat='?'
then writeln('IN CABINET NU ERA NIMENI' )
else
begin
writeln('PACIENTUL ',scaun_ocupat,' IESE DIN CABINET);
scaun_ocupat:='?';
if prim_urgenta<>nil
then intra_in_cabinet(prim_urgenta)
else if prim_pacient<>nil
then intra_in_cabinet(prim_pacient)
else writeln('NU MAI ASTEAPTA NIMENI LA COADA');
end;
end;
procedure listare_pacienti(prim:adr);
var p:adr;
begin
if primenil then writeln(NU ASTEAPTA NIMENI LA ACEASTA COADA')
else begin
p:=prim;
while p-c-nil do
begin
writetp-.nume,' ');
p:=pA.urm;
end;
writeln;
end;
end;

175
begin
optiune:='*';
scaun_ocupat:='?';
prim_pacient:=nil;
prim_urgenta:=nil;
while optiune-o-T' do
begin
elrscr;
writeln('P -sosire pacient ',#lO#13,'U -sosire urgenta');
writeln('E -eliberare scaun ',#l0#13,'L -listarea pacientilor de la rand'):
writeln('T -terminarea programului');
write('dati optiunea dumneavoastra:');
readln(optiune);
optiune:=upcase(optiune);
case optiune of
'P':begin sosire_pacient(prim_pacient,ultim_pacient); readln;end;
'U':begin sosire_pacient(prim_urgenta,ultim_urgenta); readln; end;
'E':begin eliberare_scaun; readln; end;
'L'ibegin writeln('URGENTE:');
listare_pacienti(prim_urgenta);
writeln('PACIENTI:');
listare_pacienti(prim_pacient); readln; end;
'T':begin write('SFARSIT PROGRAM'); readln; end;
else writer'Ati tastat gresit'); readln;
end;
end;
end.

Varianta C++
#inc lude<iostream.h>
#inelude<conio.h>
#inelude<alloc.h>
#inelude<string.h>
typedef struct pacient { char nume[15];
struct pacient *urm; }PACIENT;
PACIENT *prim_pacient,*prim_urgenta,*ultim_pacient,*ultim_urgenta,*p;
char optiune,scaun_ocupat[l5];
void sosire_pacient(PACIENT **prim,PACIENT **ultim)
{
PACIENT *nou;
char num[l5];
cout"\nnumele pacientului: ";
cinnum;
il' ((strcmp(scaun_ocupat," ?")==O)&&(*prim==NULL
{
strcpy( scaun;ocupat,num);
cout"\nPACIENTUL "num" A INTRAT DIRECT IN CABINET";

176
else {
cout"\nPACIENTUL "num" SE ASEAZA LA COADA";
if (*prim==NULL) {
*prim=(PACIENT *)malloc(sizeof(P ACIENT));
strcpy((*prim)->nume,num);
(*prim)->urm=NULL;
*ultim=*prim;
}
else {
nou=(PACIENT *)malloc(sizeof(PACIENT));;
strcpy(nou->nume,num);
nou->urm=NULL;
(*ultim)->urm=nou;
*ultim=nou;
}

}
void intra_in_cabinet(PACIENT **prim)
{
PACIENT *p;
strcpy(scaun_ocupat,(*prim)->nume);
cout"\nPACIENTUL "scaun_ocupat" INTRA IN CABINET";
p=*prim;
*prim=(*prim)->urm;
free(p);
}
void eliberare_scaun()
{
if (strcmp(scaun_ocupat,"?")==O)
cout"\nIN CABINET NU ERA NIMENI";
else
{
cout"\nPACIENTUL "scaun_ocupat" IESE DIN CABINET";
strcpy(scaun_ocupat," ?");
if (prim_urgenta!=NULL)
intra_in_ cabinete&prim_ urgenta);
else if (prim_pacient!=NULL)
intra_in_cabinet(&prim_pacient);
else cout"\nNU MAI ASTEAPTA NIMENI LA COADA";
}
void listare_pacienti(PACIENT *prim)
{
PACIENT *p;
if (prim==NULL) cout"\nNU ASTEAPTA NIMENI LA ACEASTA COADA";
else {

177
p=prim;
while (p!=NULL)
{
coutp->nume" ";
pep-e-urm;
}
cout'\n';

}
void mainO
{
optiune='*';
strcpy(scaun_ocupat,"?");
prim_pacient=NULL;
prim_urgenta=NULL;
while (optiune !='T')
{
clrscn);
cout"\nP -sosire pacient \nU -sosire urgenta";
cout"\nE -eliberare scaun \nL -listarea pacientilor de la rand";
cout"\nT -terminarea programului";
cout"\ndati optiunea dumneavoastra:";
cinoptiune;
II optiuneeupperioptiune);
switch (optiune){
case 'P': sosire_pacient(&prim_pacient,&ultim_pacient); getchrj.break;
case 'U': sosire_pacient(&prim_urgenta,&ultim_urgenta); getcht); break;
case 'E': eliberarescaum); getcht): break;
case 'L':{ cout"\nURGENTE:";
listare_pacienti(prim_urgenta);
cout"\nPACIENTI:";
listare_pacienti(prim_pacient); getcht); break;}
case 'T': cout"\nSFARSIT PROGRAM"; getcht); break;
default: cout"\nAti tastat gresit"; getclu):
}
}
}
11. Se scrie pentru fiecare triplet ecuaia dreptei care trece prin dou dintre puncte i se
calculeaz dac al treilea punct verific ecuaia.
12-13. Similar cu 10.
15. Se caut sportivul n list apoi se numr ci sportivi au sritura mai mare dect el.
22. n timp ce se creaz lista iniial se numr concurentele, se afieaz lista, se ordoneaz
dup nlime. Se caut elementul de la mijlocul listei i se pstreaz ntr-o variabil adresa
lui. Aceast adres i cea a primului element sunt adresele de nceput ale celor dou liste
cutate.

178
28-29. Se va pstra fiecare cifr a numrului n cte o component a listei apoi se parcurg
cele dou liste de la ultimul element spre primul. Fiecare cifr a rezultatului se pstreaz n
cte o component a listei rezultat.
30. program baza16;
uses crt;
const b2:array[0..15]of word=
(0,1,10,11,100,101,110,111,1000,1001,1010,1011,1100,11 01, 1110,1111);
b16:array[0..15]of char=('O','l ','2','3','4','5','6','7', '8','9','A','B ','C','D','E','F');
type adr2=Anumar2;
numar2=record
cifra, nr repetari:byte;
urm,prec:adr2;
end;
adr16=Anumar16;
numar16=record
cl o.char;
urrn:adr16;
end;
var p_b2,u_b2,p:adr2;
p_b16,q:adrl6.;.
procedure creare_lista_baza2;
var c:byte;
begin
write1n('tastati pe rand cifra urmata de numarul de repetari');
writeln('pentru oprire tastati o cifra diferita de O sau 1');
writeln('cifra: ');
readln(c);
while (c=O) or (ce l ) do
begin
new(p);
pA.cifra:=c;
write('de eate ori se repeta? ');
. readlmpo.nrjepetari);
pA.urm:=nil;
if p_b2=nil then begin
p_b2:=p;
p_b2 A.prec:=nil;
u_b2:=p;
end
else begin
u_b2 A.urm:=p;
pA.p rec:=u_b2;
u_b2:=p;
end;
repeat
write('urmatoarea cifra: ');
readln(c);

179
until c<>u_b2".cifra;
end;
end;
procedure creare numarbazalti;
var m,plO,n,aux:word;
i.c.byte;
begin
m:=O;
{ lista cu cifre in baza 2 se parcurge
de la ultimul element spre primul}
p:=u_b2;
n:=p".ncrepetari-1 ;
aux:=p".cifra;
c:=p".cifra;
plO:=l;
while p-c-nil do
begin
while n-e-O do
begin
m.em--I;
n:=n-1;
{ dupa fiecare 4 cifre din baza 2 se formeaza
o cifra in baza 16 care se adauga
intr-o lista de tip stiva}
if m mod 4=0 then
begin
new(q);
q".urm:=p_b16;
p_b16:=q;
i:=O;while b2[i]<>aux do i:=i+ 1;
p_b16".c16:=b16[i] ;
plO:=l;
aux:=c;
end
else begin
p lO:=p 10*10;
aux:=aux+c*plO;
end;
end;
p:=p".prec;
c:=p".cifra;
n:=p".ncrepetari;
end;
i:=O; while b2[i]<>aux do i:=i+ 1;
{ adaugare in stiva cu cifre in b 16
a ultimei cifre obtinute }
new(q);

180
qJ\.urm:=p_b16;
p_b16:=q;
p_b 16J\.cl6:=b 16[i];
end;
procedure afisare_numacbaza16;
begin
writeln('numarul in baza 16 este:');
q:=p_b16;
while q-o-nil do
begin
write(qJ\.c16);
q:=qJ\.urm;
end;
writeln;
end;
begin
p_b16:=nil;
p_b2:=nil;
creare_lista_baza2;
creare_numar_baz~16;
afisare_numar_baza16;
end.

Varianta C++
#include<conio.h>
#include<iostream.h>
#include<alloc.h>
int b2[16J={ 0,1,10, 11,100,101,110, 111,1000,1001,101 0, 1011, l100,I101,111O,1111};
char bI6[16J={ 'O','1','2','3', '4','5', '6','7', '8','9', 'A', 'B','C','D','E','F'};
typedef struct numar2 {int cifra.nrrepetari:
struct numar2 *urm,*prec;}adr2;
typedef struct numar16 {char c16;
struct numar16 *urm;}adr16;
adr2 *p_b2,*u_b2, *p;
adr16 *p_bI6,*q;
void creare_lista_baza20
{int c;


cout"\ntastati pe rand eate o cifra urmata de numarul de repetari";
cout"\npentru oprire tastati o cifra diferita de sau 1";
cout"\ncifra:" ;
cinc;
while ((c==O) " (c==I))
{
p=(adr2 *)malloc(sizeof(adr2));
p-c-cifraec;
cout"\nde eate ori se repeta? ";
circc-p-c-nr.repetari:

181
p->urm=NULL;
if (p_b2==NULL) {p_b2=p;
p_b2->prec=NULL;
u_b2=p;
}
else { u_b2->urm=p;
p->prec=u_b2;
u_b2=p;
}
do
{cout"\nurmatoarea cifra: ";
cinc;}
while (c==1,1_b2->cifra);
}
}
void creare_numar_baza160
{int m,plO,n,aux,i,c;
m=O;
II lista cu cifre in baza 2 se parcurge
II de la ultimul element spre primul
p=u_b2;
n=p->ncrepetari-l;
aux=p-cifra;
cep-e-cifra;
p10=1;
while (p!=NULL)
{
while (n !=O)
{
m++;
n--;
II dupa fiecare 4 cifre din baza 2 se formeaza
II o cifra in baza 16 care se adauga intr-o lista de tip stiva.
if (m%4==O) {q=(adr16*)mal1oc(sizeof(adr16));
q->urm=p_b16;
p_b16=q;
i=O;while (b2[i] !=aux) i++;
p_b16->c16=b16[i];
p10=1;
auxec;
}
else { p10=plO*1O;
aux=aux+c*plO;

}
p=p->prec;
cep-e-cifra;

182
n=p->ncrepetari;
}
i=O; while (b2[i] !=aux) i=i+ 1;
II adaugare in stiva cu cifre in b 16 a ultimei cifre obtinute
q=(adr 16*)malloc(sizeof( adr16));
q->urm=p_b16;
p_b16=q;
p_b16->c16=b16[i];
}
void afisare_numacbaza160
{
cout"\nnumarul in baza 16 este:";
q=p_b16;
while (q!=NULL)
{
coutq->c16;
q=q->urm;
}
cout'\n';
} , '
void maint)
{
p_b2=NULL; .
p_b16=NULL;
creareIista bazazt);
creare_llumar_baza160;
afisare_numar_baza160;
}
33. Interclasarea a dou liste.
34. Inserare de elemente preluate dintr-o list ntr-o alt list deja ordonat astfel nct lista
s rmn ordonat.
36. La fiecare subpunct se parcurge recursiv. Unde este cazul se compar rezultatul din
subarborele stng cu cel din subarborele drept.
37. Pentru a crea arborele de sortare se pornete de la arborele vid apoi fiecrui element i
se caut locul parcurgnd arborele de la rdcin.

CAPITOLUL IX
PROGRAMARE ORIENTAT PE OBIECTE
4. Varianta Pascal
program siruri;
type sir = object
n: word;
a:array[1..100] ofreal;
constructor init;
function monoton:integer;

183
procedure ordon (tip_o:integer);
function max: real;
function min: real;
function simetric: boolean;
procedure afisare;
end;
constructor sir.init;
var i:byte;
begin
write ('Introduceti dimensiunea sirului: ');
readln(n);
for i:= 1 to n do begin
write ('Introduceti elementele de indice ',i,': ');
readln(a[i));
end;
end;
function sir.monoton: integer;
var c,d:boolean;
i:byte;
begin
c:=true; d:=true;
for i:= 1 to n-I do begin
if a[i]>a[i+1] then c.efalse;
if a[i]<a[i+1] then d:=false;
end;
.if c then monoton:=1
else if d then rnonoton.e-I
else monoton:=O;
end;
procedure sir.ordon(tip_o:integer);
var i:integer;
ordonat: boolean;
auxireal;
begin
repeat ordonat:=true;
for i:=1 to n-I do
iftip_o * a[i]>tip_o * a[i+ 1] then begin
aux:=a[i];
a[i]:=a[i+1];
a[i+ 1]:=aux;
ordonat:=false;
end;
until ordonat
end;
function sir.max:real;
var m:real;
i:integer;

184
begin
m:=a[1];
for i:=2 to n do
if a[i]>m then m:=a[i];
max.ern;
end;
procedure sir.afisare;
var i:integer;
begin
writeln;
for i:=1 to n do
write (a[i], ' ');
writeln;
end;
function sir.min:real;
var m:real;
i:integer;
begin
m:=a[1];
for i:=2 to n do ,,'
if a[i]<m then m:=a[i];
min:=m;
end;
function sir.simetric:boolean;
var i: integer;
begin
simetric:=true;
for i:=1 to n div 2 do
if a[i)<>a[n-i+ 1] then simetric.efalse;
end;
var x:sir; tipordonare:integer;
begin
x.init;
if x.monotone-I then writeln('Sirul este dscrescator')
else if x.monoton=1 then writeln ('Sirul este crescator')
else writeln ('Sirul nu este monoton');
if x.simetric then writeln ('Sirul este simetric')
else writeln ('Sirul nu este simetrie');
write ('Cum doriti sa ordonati sirul? Introduceti 1 pentru crescator si -1 pentru
descrescator');
readln (tipordonare);
x.ordon(tipordonare);
writeln('Sirul ordonat este: ');
x.afisare;
writeln ('Maximul sirului este: ',x.max);
writeln ('Minimul sirului este: ',x.min);
readln;

185
end.

Varianta C++
#include -cconio.h>
#include <iostream.h>
II varianta c++
class sir {
int n;
double a[I00];
public:
void iniu);
int monotoni);
void ordon(int tip_o);
double rnaxt);
double mint);
int simetricr);
void afisare/);
};
void sir::initO
{int i;
cout"introduceti dimensiunea sirului";
cinn;
for(i=I;i<=n;i++) { cout"introduceti elementul de indice"i":";
cina[i]; }
}
int sir::monotonO
{int c.d.i;
d=c=l;
for(i= 1;i<=n-l ;i++)
{if (a[i]>a[i+1]) c=O;
if (a[i]<a[i+ 1]) d=O;)
if (c) return 1;
else if (d) return -1;
else return O;
)
void sir::ordon(int tip_o)
{int i,ordonat;
double aux;
do { ordonat=l;
for(i=l ;i<=n-l;i++)
if(tip_o*a[i]>tip_o*a[i+1])
{aux=a[i];
a[i]=a[i+1];
a[i+ 1]=aux;
ordonat=O; }
}
while (ordonat==O);

186
}
double sir..maxt)
{double m;
int i;
m=a[l];
for(:=2;i<=n;i++ )
if (a[i]>m) meali];
return m;
}
double sir.imim)
{double m=a[l];
int i;
for (i=2;i<=n;i++)
if(a[i]<m) m=a[i];
return m;
}
int sir..simetricr)
{ int i,sim=1;
for(i=l ;i<=nJ2;i++)
if(a[i] !=a[n-i+1]) ,&im=O;
return sim;
}
void sir..afisaret)
{int i;
cout"\n";
for (i= 1;i<=n;i++)
couta[i]" ";
cout"\n";
}
void mainO
{sir x;
int tipordonare;
x.iniu);
if (x.monoton()==-1) cout"\nsirul este descrescator""\n";
else if (x.monoton()==1) cout"\nsirul este crescator""\n";
else cout"\nsirul nu este monoton\n";
if (x.simetric()) cout"\nsirul este simetric\n";
else cout"\nsirul nu este simetric""\n";
cout"Cum doriti sa ordonati sirul? \nlntroduceti 1 pentru crescator si -1 pentru
descrescator ";
cintipordonare;
x.ordon(tipordonare);
cout"sirul ordonat este""\n";
x.afisare();
cout"maximul sirului este "x.max()"\n";
cout"minimul sirului este "x.minO"\n";
getcht);

187
}
6. Varianta Pascal
program numar;
type numeobject
n:longint;
constructor init;
function prim:boolean;
function suma:word;
function inserare(c.poz: byte ):longint;
function eliminare(c:byte): longint;
function invers:longint;
end;
constructor num.init;
begin
write('introduceti un numar de maxim 9 cifre');
readln(n);
end;
function num.prim:boolean;
var i:longint;
begin
prim:=true;
for i:=2 to n div 2 do
if n mod i = O then prim:=false;
end;
function num.suma.word;
var s:word; m:longint;
begin
s:=O;
m:=n;
while m-o-Odo begin
s:=s+m mod 10;
m.ern div 10
end;
suma:=s;
end;
function num.inserare(c.poz: byte ):longint;
var i:byte; put:longint;
begin
put:=l;
for i:=1 to poz-l do put:=put*lO;
inserare:=((n div put)*l0 +c)*put+n mod put;
end;
function num.eliminare(c:byte):longint;
var j,i:byte;
gasit:boolean;
k,m,put:longint;
begin

188
k.en;
repeat gasit.efalse;
i:=O;
m:=k;
while m<>O do begin inc(i);
if m mod lO=c then begin gasit:=true;
m:=O;
end;
m:=mdiv 10;
end;
put:=l;
forj:=l toi-Ido
put:=put*] O;
if gasit then
k:=(k div(put*)O))*put+k mod put;
until not gasit;
eliminare.ek;
end;
function num.invers: longint;
var m,k:longint; ,,-
begin m:=O; k:=n;
while k-o-O do begin
m:=m*IO+k mod 10;
k:=k div 10;
end;
invers:=m;
end;
var a:num;
c,poz:byte;
begin
a.init;
if a.prim then writeln'nr.a.n.este prim');
writelnt'suma cifrelor numarului',a.n,'este ',a.suma);
writer'introduceti cifra si pozitia pe care vreti sa inserati');
repeat
readln(c,poz);
until (c<=9) and(poz<=9);
writelru'numarul rezultat in urma inserarii cifrei', c,
'#13#lOpe pozitia', poz,'in numarul',a.n,'este ',a.inserare(c,poz));
writelnt'introduceti cifra pe care vreti s-a eliminati');
repeat
readln(c);
until c<=9;
writeln('numarul rezultat din eliminarea cifrei ',c,' din numarul',a.n,'este ',a.eliminare(c));
writeln/'inversul numarului " a.n,' este " a.invers);
readln;
end.

189
Varianta C++
#include <iostream.h>
#include <conio.h>
//varianata c++
class num {
public: long n;
public:
void initr);
int primt);
int surna/);
long inserare(int c.int poz);
long eliminare(int c);
long inversr);
};
void num: .iniu)
{cout"\n""introduceti un numar de maxim 9 cifre";
cinn;
}
int num::primO
{long i;
int p=l;
for (i=2;i<=n/2;i++)
if (n%i==O) p=O;
return p;
}
int num::sumaO
{int s=O;
long m;
m=n;
while (m!=O) { s+=m% 10;
m=rn/lO;
}
return s;
}
long num::inserare(int c.int poz)
{int i;
long put=l;
for (i= 1;i<=poz-l ;i++)
put*=10;
return ((n/put)*1O+c)*put+n%put;
}
long num: :eliminare(int c)
{int j,i,gasit;
long k,m,put;
ken;
do { gasit=O;
i=O; m=k;

190
while (m!=O) { i++;
if(m%lO==c) {gasit=l;
m=O; }
m/=IO;}
put=l;
for 0=1 ;j<=i-l ;j++)
put*=lO;
if (gasit) k=(k/(put*lO*put+k%put;
}
while (gasit);
return k;
}
long num::inversO
{long m=O,k=n;
while (k) {m=;m*lO+k%lO;
k/=1O;
}
return m;
}
void maim)
{num a;
int c,poz;
a.inin);
if (a.prim( cout"\nnumarul"a.n" este prim\n";
else cout"\nnumarul "a.n" nu este prim \n";
cout"suma cifrelor este"a.sumaO"\n";
cout"introduceti cifra si pozitia pe care vreti sa inserati ";
do
cincpoz;
while ((c>9)&&(poz>9;
cout"numarul rezultat in urma inserarii cifrei "c" \npe pozitia "poz "in
numarul "a.n" este "a.inserare(c,poz)"\n";
cout"introduceti cifra pe care vreti s-o eliminati";
do
cinc;
while (c>9);
cout "numarul rezultat prin eliminarea cifrei "c"din numarul "a.n"
este" a.eliminare(c)"\n";
cout"inversul numarului "a.n" este"a.inversO"\n";
getchr):
}
7. Numerele mari vor fi reprezentate cu ajutorul irurilor.
20. Se va numra n irul de relaii toate relaiile care au pe prima poziie i. Dintre toate se
reine cea cu valoarea maxim.
21. Varianta Pascal
program internet;
type utilizatorieobject

191
nr st.word;
orac,orad:record
ora,min:byte;
end;
constructor init;
function plata(x:real):real;
end;
constructor utilizatori.init;
begin
writer'introduceti numarul statiei');
readlnmrjst);
writer'introduceti ora conectarii sub forma hh mm');
readln(orac.ora,orac.min);
repeat
writer'introduceti ora deconectarii sub forma hh mm');
readIn( orad.ora,orad.min);
until (orad.ora>orac.ora)or(arad. oraeorac.ora)and
(orad.min>orac.min);
end;
function utilizatori.plata(x:real):real;
var durata:real;
begin
if orad.oraeorac.ora then durata.eorad.min-orac.rnin
else durata:=(60-orac.min)+orad.min+
(orad.ora-orac.ora-l )*60;
plata:=durata*x/60;
end;
var a:utilizatori;
x:real;
begin
a.init;
writer'introduceti costul unei ore');
readIn(x);
writer'suma de plata la statia ',a.ncst,' este: ',a.plata(x): 10:2);
readln
end.

Varianta C++
#include <conio.h>
#include <iostream.h>
II varianta c++
class utilizatori {
public:
int ncst;
struct o{ int ora,min;} orac,orad;
void iniu):
double plata(double x);

192
};
void utilizatori::initO
{ cout" introduceti numarul statiei ";
ciroc-nrjst;
cout"\n""introduceti ora conectarii sub forma hh mm";
cinorac.oraorac.min;
do
{cout"\n""introduceti ora deconectarii sub forma hh mm";
cinorad.oraorad.min;
}
while (! (orad.ora>orac .ora)II(orad. ora==orac. ora )&&( orad.mire-orac. min));
}
double utilizatori::plata(double x)
{double durata;
if (orad.ora==orac.ora) durataeorad.min-orac.min;
else durata=(60-orac.min)+orad.min+(orad.ora-orac.ora-I )*60;
return durata*xJ60.;
}
void maini)
{utilizatori a;
double x;
a.inin);
cout"\n""introduceti costul unei ore ";
cinx;
cout"\n""suma de plata la statia "a.ncst"este "a.plata(x)"\n";
getcht);
}
30. ntr-un graf turneu arcul (i,j) indic faptul c n competiia lui i cu j a ctigat j.
Ctigtorul este cel cu gradul interior cel mai mare.

193
BIBLIOGRAFIE

1. Doina Rancea, Gabriela Blan, Ioana Cucu, Diana Grui, Manual


de informatic-clasa a IX-a, Editura Computer Libris Agora, 1999.
2. Tudor Sorin, Manual de informatic-clasa a IX-a, varianta Pascal,
Editura L&S Infomat, 2000.
3. Tudor Sorin, Manual de informatic-clasa a IX-a, varianta C++, Editura
L&S Infomat, 2000.
4. George Daniel Mateescu, Pavel Florin Moraru, Otilia Sofron,
Manual de informatic-clasa a X-a, Editura Petrion, 2000.
5. Dana Lica, Emil Onea, Manual de informatic-clasa a X-a, Editura
PRO GNOSIS, 2000.
6. George Daniel Mateescu, Pavel Florin Moraru, Informatic, manual
pentru clasa a XI-a, Editura Niculescu, 2002.
7. Cornelia Ivac, Mona Prun, Bazele informaticii (Grafuri i elemente
de combinatoric), manual pentru clasa a X-a, Editura Petrion, 1995.
8. Tudor Sorin, Bazele programrii n C++, Editura L&S Infomat.
9. Liviu Negrescu, Limbajul C, Editura Computer Libris Agora.
10. Mihai Oltean, Proiectarea i implementarea algoritmilor, Editura
Agora, 1999.
11. Ministerul Educaiei i Cercetrii - Programe colare, vo1.6, Aria
curricular Tehnologii, Bucureti, 2001.

194
Specialitatea "informatic" este una dintre cele mai solicitate n
actualul context socio-economic. In sprijinul ei, ca i n sprijinul celorlalte
discipline din liceu au aprut i apar mereu manuale alternative. Din
pcate, sau poate din fericire, nsuirea acestei discipline presupune un
mare numr de ore de practic n care s se formeze deprinderile de
programator. Arta programrii, ca i aplicarea corect a tehnologiilor i
modelelor actuale legate de programare, presupune rezolvarea unui mare
numr de probleme. '
Autorii prezentei cri i propun ca obiectiv atingerea tocmai a
acestui deziderat. Coninutul crii reflect pe de o parte bogata experien
didactic a acelora dintre autori care sunt profesori, iar pe de alt parte aduc
suflul nou i prospeimeatinereii pentru acei dintre autori care sunt nc
elevi sau studeni. Aceast mbinare fericit face ca lucrarea s- i ating pe
deplin scopul propus.
Cartea cuprinde de dou ori cte nou capitole: structuri de control,
tipuri de date structurate, fiiere text, liste alocate static, subprograme,
tehnici de programare, grafuri, alocare dinamic, programare orientat pe
obiecte. Practic tot ceea ce prevede actuala program analitic pentru
clasele de informatic din licee. In prima parte se gsesc probleme propuse,
iar n partea a doua indicaii de rezolvare i soluii pentru probfmele mai
importante.
Trebuie remarcat marea varietate de probleme propuse i bogia
de stiluri i de clase de probleme. De asemenea trebuie remarcat
originalitatea soluiilor pe care autorii le sugereaz pentru rezolvri.
Suntem astfel n faa unei lucrri remarcabile, care nu trebuie s lipseasc
de pe masa celor care doresc s-i nsueasc aceast fermectoare
meserie-programator de calculatoare.

Prof.univ. dr. FlorianMirceaBoian

ISBN 973-8335-75-2