You are on page 1of 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 pregătitpentru o ocazie
pe care n-o vei avea, decât să ai vreo ocazie
şi să nu fii pregătit!"

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 ştiinţific: Prof.dr.ing. Virgil Maier
Consilier editorial: ing. Călin D. Câmpean

Recenzia: Prof.univ.dr. Florian Mircea Boian

Descrierea CIP a Bibliotecii Naţionale a României
INFORMATiCĂ
Informatică : Culegere de probleme pentru liceu I Carmen
Bucur, Crina Salanţiu, Doina Bucur, ş.a, - Cluj-Napoca : Editura
V.T. Pres, 2002
p. :cm.
Bibliogr.
ISBN 973-8335-75-2

1. Salanţiu, Crina
II. Bucur, Doina

004.42(076.3)

Copyright © 2002 Editura U.T.PRBS
Toate drepturile aparţin editurii U.T.PRBS. .
Reproducerea integrală sau parţială a textului sau ilustraţiilor 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

Coada 97 VIII.2.. 102 VII1.. 96 VIII..5..2..1. Metoda Divide et Impera 83 Capitolul VII Grafuri 85 Capitolul VIII Alocarea dinamică a memoriei 96 VIII..1. Capitolul VI Tehnici de programare 72 VI. Stiva :. 80 VI.. Vectori 24 11....... Înregistrări 46 Capitolul III Fişiere text 54 Capitolul IV Liste alocate static 62 Capitolul V 6 Subprograme ....3.. Liste simplu înlănţuite 99 VII1...... Liste dublu înlănţuite.... Siruri de caractere 41 11.1.I.3.4.2. Structura alternativă 4 1. Arbori binari 104 Capitolul IX Programare orientată pe obiecte 107 V . CUPRINS Capitolul 1 Structuri de control 1 1...3.. Structura liniară 1 1. Matrici 32 11.4. Backtracking 72 V1...3. Structura repetitivă 10 Capitolul II Tipuri de date structurate 24 11. Recursivitate ....2.

....3.. Structura alternativă 117 I.INDICAŢII ŞI REZOLVĂR1.... Backtracking 154 VL2..... Vectori 125 11........... LI.. 114 Capitolul 1 114 Structuri de control ...1..3.. Metoda Divide et Impera 164 Capitolul VII Grafuri 165 Capitolul VIII Alocarea dinamică a memoriei ...... Recursivitate 162 VI........2.. Matrici 127 II.... 170 Capitolul IX Programare orientată pe obiecte 183 Bibliografie 194 VI .. 132 11.3.2. Structura repetitivă 119 Capitolul II Tipuri de date structurate 125 11.1... Structura liniară 114 1...4... Înregistrări 135 Capitolul III Fişiere text 141 Capitolul IV Liste alocate static 146 Capitolul V Subprograme 151 Capitolul VI Tehnici de programare 154 VI......... Siruri de caractere.........

Profesorii pot selecta astfel problemele în funcţie de nivelul de pregătire al elevilor pentru activitatea în clasă. Respectând programa şcolară. conţinutul a fost organizat în nouă capitole. stimulându-i la efort propriu. Acest fapt a permis valorificarea experienţei fiecărui autor şi asigurarea unei varietăţi de stiluri şi de metodologii de concepere şi rezolvare a problemelor de programare. Cu-vân€ znain€e Prezenta culegere de probleme este rezultatul colaborării între mai multe cadre didactice care predau disciplina Informatică. problemele devin mai accesibile elevilor. Autorii vn . Majoritatea problemelor sunt creaţia originală a autorilor. Astfel. La sfârşitul lucrării se dau indicaţii pentru problemele mai dificile şi rezolvarea integrală în limbajele Pascal şi C++ a câtorva probleme reprezentative pentru fiecare capitol. Culegerea propune un număr mare de probleme cu grade diferite de dificultate. purtând amprenta specificităţii fiecăruia. care acoperă integral materia claselor IX-XI. la laborator sau ca teme suplimentare.

3. c/a. alc. Cunoscând sumele depuse de cei trei copii şi dobânda acordată de bancă 30%. b/d. Cunoscând preţul acestor produse (ex. 6. 7. b/a. a/d.1. afişaţi costul total al prăjiturii. d/c). Pentru două localităţi din ţara noastră se cunosc coordonatele lor într-un sistem xoy. (E şi B se citesc de la tastatură). scrieţi un program care calculează media lui. Se sapă un şanţ cu forma de paralelipiped dreptunghic având lungimea X. Prăjitura preferată a lui Ionel are următoarele ingrediente: făină (200g). d/b. Se dau patru numere naturale a. 2. Pământul scos din şanţ işi măreşte volumul cu 25%. un kilogram de zahăr 15000lei). 5. Afişaţi numărul de baieţi şi numărul de fete din clasă. După un an ei scot toţi banii şi cumpără împreună un cadou. c/b. Să se afişeze toate numerele reale care reprezintă fracţii în care numărătorul şi numitorul sunt unul din cele patru numere date (alb. Să se calculeze şi să se afişeze distanţa dintre ele. lăţimea Y iar adâncimea Z (date de la tastatura). Cunoscând cele 5 note obţinute de un elev la matematică pe parcursul unui semestru şi nota de la teză. stafide (lOOg). zahăr (lOOg).c. afişaţi suma totală din care copiii vor cumpăra cadoul. unt (lOOg).Aflaţi şi afişaţi volumul şanţului şi 1 .d. dia. 4. două ouă. STRUCTURA LINIARĂ 1. CAPITOLULI STRUCTURI DE CONTROL 1. o portocală. Într-o clasă sunt E elevi din care B% sunt băieţi iar restul fete. Trei copii au depus în acelaşi timp câte o sumă de bani la bancă. bie.b. c/d.

14. Ea a fost pavată cu dale de formă pătrată având perimetrul de 2 m. este necesară o cantitate de stofă care se calculează în funcţie de această înălţime a persoanei. şi lăţimea de Y m. regulată de latură 1. Scrieţi un program care citeşte înălţimea unei persoane şi afişează cantitatea de stofă necesară (în metri). Câte drumuri are de făcut Ionel pentru a umple acvariul? S-ar putea ca ultima găleţică să nu se golească complet.Y şi L se citesc de la tastatură). 2 . La balul bobocilor au participat E elevi. 13. Pentru a confecţiona un palton pentru o persoană a cărei înălţime este h. Dimensiunile acvariului sunt cunoscute: a. 9. Numărul de fete a fost cu F mai mare decât cel a băieţilor.b. 10. iar restul au fost frasini. Pentru plantarea unei păduri s-au adus P puieţi (P este citit de la tastatura).8*h metri de material pentru faţa şi spatele paltonului. Ionel vrea să schimbe apa din acvariu şi pentru aceasta doreşte să aducă apa din baie cu o găleţică de x litri.c. să se afle şi să se afişeze valoarea dalelor folosite la pavarea acestei curţi (X. Ştiind că 100 de dale au costat L lei. 11. Scrieţi un program care să rezolve această problemă. Grădina familiei Adam este în forma unui romb cu diagonalele cunoscute d1 şi d2. Calculaţi şi afişaţi câte fete şi câţi băieti au participat la bal. Ionel are un acvariu de peşti de formă paralelipipedică. Familia vrea să-şi paveze curtea cu dale de formă triunghiulară. Să se scrie un program care calculează şi afişează secolul în care s-a născut. Ştiind că preţul unei dale este piei scrieţi un program care să calculeze costul dalelor pentru întreaga curte. Se citeşte de la tastatură anul naşterii unui scriitor. volumul pământului după ce a fost scos din şanţ. plus încă 70 cm pentru mâneci. Scrieţi un program care să calculeze şi să afişeze numărul frasinilor. Dacă îl udă o ploaie pământul se tasează cu 5%. Curtea de recreaţie a unei şcoli are forma dreptunghiul ară cu baza de X dam. 3/5 din rest fagi. 12. 1/5 au fost stejari. Ce volum va avea pământul scos din şanţ după ce l-a udat ploaia? 8. Pentru această persoană sunt necesari 0.

Fie a un număr natural format din 5 cifre. De la o fabrică de încălţăminte s-au trimis la un 'magazin P perechi de pantofi bărbăteşti şi cu G mai puţine perechi de ghete pentru copii. 17. Să se scrie un program care să calculeze numărul obţinut prin împărţirea întreagă a numărului format cu primele două cifre din a la numărul format din ultimele două cifre din b. Se dau două numere naturale a şi b.schimbând între ele cifrele din mijloc. . Cunoscând că preţul unei perechi de pantofi este cu 1/3 mai mare decât preţul unei perechi de ghete. G. Doi prieteni marinari se întâlnesc cu vasele lor în mijlocul Oceanului Pacific. 20. Scrieţi un program care să calculeze câte ouă trebuie să fiarbă mama Florinei pentru ca să ajungă pentru toţi invitaţii şi să mai rămână 10 ouă pentru familie. 18. valorând în total L lei (P. Primul navighează cu Pi mile pe oră iar al doilea cu P2 mile pe oră.schimbând prima cifră cu ultima. Scrieţi un program care să determine la ce distanţă se găsesc cei doi după trei zile. Florina are invitaţi de Paşti n prieteni. pe care vrea să-i servească cu câte un ou roşu. scrieţi un program care să afle costul unei perechi de pantofi şi a uneia de ghete. a treia şi a cincea cifră din a. în a doua zi cu 3 mai puţin decât în a treia zi iar în a patra zi s-au vândut cât în a treia şi în prima la un loc. La fierbere unele se sparg. Afişaţi numerele obţinute în următoarele moduri: . Ştiind câte lăzi au fost iniţial (M dat de la tastatură) şi câte au rămas după cele patru zile.15. 19. 3 . De Paştimama Florinei vopseşte ouă. La un magazin sunt M lăzi de mere. calculaţi şi afişaţi câte mere s-au vândut în fiecare zi. Se citeşte un număr natural de patru cifre. Se cunoaşte că în medie se sparg s % dintre ele. Exemplu: pentru numărul natural 3874 se va afişa 4873 şi 3784. 21. L date la tastatura). În prima zi s-au vândut cu 4 mai mult decât în a doua zi. Să se scrie un program care să determine şi să afişeze numărul format cu prima. celălalt spre vest). 16. formate din patru cifre. apoi se despart şi pleacă în direcţii opuse (unul spre est.

Ajutaţi-l pe organizator să aranjeze participanţii în ordinea descrescătoare a numerelor extrase. 7. Fiind date 4 numere naturale a. b=15. c=105. 1. lună. Exemplu: a=100. Se va afişa 90. Să se scrie un program care citeşte de la tastatură ora şi afişează dacă este antemeridian sau postmeridian. Se dă un număr de maxim trei cifre. b. Fiind date patru numere naturale să se afişeze cea mai mare fracţie care se poate obţine având ca numărător şi numitor unul din cele patru numere date. Să se scrie un program care citeşte de la tastatură o dată calendaristică sub forma: zi. 3.c şi apoi afişează pe ecran cea mai mare diferenţă dintre oricare două valori date.2. Să se stabilească ce fel defracţie este alb (subunitară. STRUCTURA ALTERNATIVĂ Instructiunea IF 1. 2. 4 . . Cei trei concurenţi extrag dintr-o urnă câte un număr. c. 6. supraunitară sau echiunitară). 8. an apoi afişează sezonul pentru această dată: primăvara 21 martie-20 iunie vara 21 iunie-22 septembrie toamna 23 septembrie-Zl decembrie iarna 22 decembrie-20 martie 4. organizatorul trebuie să stabilească ordinea intrării în concurs. 5. La un concurs cu trei participanţi. să se decidă dacă se poate forma o proporţie cu ele. Scrieţi un program care citeşte de la tastatură trei valori numerice a. Să se afişeze cifrele în ordine crescătoare. b. Se dau 2 numere naturale a si b (b-o-O). d.

Se citesc de la tastatură coordonatele x şi yale celor trei vârfuri ale unui triunghi. Cunoscând preţul pentru diferite perioade ale anului. Să se scrie un program care citeşte aceste valori. afişaţi suma pe care trebuie să o plătească persoana respectivă: 1. Să se stabilească dacă se pot aşeza pe un "cântar"(balanţă) cu 2 braţe. 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. lună. verifică dacă pot fi vârfurile unui triunghi şi apoi afişează dacă triunghiul este ascuţitunghic sau obtuzunghic. Se citesc n şi m. c. afişaţi care din cei doi băieţi este mai mare. Într-un parc se joacă 3 copii care au greutăţile a. Să se scrie un program care să afişeze dacă Ana poate împărţi merele în mod egal şi dacă da. 14. R-radiani. iar apoi valoarea unghiului. Să se scrie un program care citeşte de la tastatură valoarea unui unghi măsurat în grade sau radiani şi afişează cadranul căruia îi aparţine. Ana are n mere pe care vrea sa le împartă în mod egal cu cei m fraţi ai ei.12-31. câte mere vor reveni fiecăruia. astfel încât acesta să stea în echilibru.07-31. Cunoscând data naşterii lui Florin (ZI. Iz. 10. an). La început programul va citi unitatea de masură : G-grade. 15. Florin şi Mihai sunt prieteni foarte buni. 12.06 => 150 EURO 1.08 => 200 EURO 1. 5 . 13. h. a2).9.12 => 175 EURO 16.09-15.12 => 210 EURO 11. Să se scrie un program care citeşte vârsta celor trei persoane şi durata prelegerii fiecăruia apoi afişează cele mai tinere două persoane şi cele mai scurte două prelegeri.aI) şi data naşterii lui Mihai (Z2. b.01-30. O persoană doreşte să cumpere un bilet de avion Bucureşti-Viena pentru o anumită dată (zi.

19. Să se scrie un program care verifică dacă Florina poate să-şi cumpere şi un kg de biscuiţi şi cele două reviste. Ştiind că bazinul are 8 culoare. Ea are m mii de lei. afişaţi câte persoane conţine. La ea vin m prietene. Florina vrea să-şi cumpere 2 reviste. Ioana are n reviste. 22. 100 de puncte dacă a ghicit din trei încercări. Scrieţi un program care 6 . La prima inecuaţie a obţinut ca soluţie intervalul (a.intervalul (c. Dacă da scrieţi câte reviste rămân. Scrieţi un program care simulează acest joc. Dacă materialul are lăţimea de 1. determinaţi câte grupe complete se pot forma astfel încât fiecare persoană dintr-o grupă să înoate pe un culoar. 17. iar la a doua. Alina are n punguliţe de seminţe de zorele a câte 20 g. presupunând că fiecare fată a luat o singură revistă. este dată de lungimea sacoului plus 80 cm. Ştiind că pentru fiecare metru semănat trebuie s grame de seminţe. Punctajul realizat este de O puncte dacă numărul nu a fost ghicit din trei încercări. atunci lungimea materialului necesar. Doi copii merg cu trenul mai multe ore şi au cu ei doar o carte cu n pagini. b). ştiind că se obţine intersectând cele 2 intervale obţinute. 20. Afişaţi soluţia sistemului. Un elev are de rezolvat un sistem de 2 inecuaţii. calculaţi dacă îi ajung Alinei seminţele pentru întreaga grădină (fiecare strat are lăţimea de 1 m). de câte n mii lei fiecare. 21.40 m. Pentru ca să nu se plictisească. 18. În cazul în care a rămas o grupă incompletă. au hotărât să joace următorul joc: unul dintre copii deschide cartea la o anumită pagină iar celălalt are la dispozţie trei încercări pentru a ghici numărul paginii.16.20 m atunci lungimea materialului necesar este de două ori lungimea sacoului. Dacă materialul are lăţimea de 1. Pentru a confecţiona un sacou de damă este nevoie de o anumită cantitate de material. 200 de puncte dacă a ghicit din două încercări şi 300 de puncte dacă a ghicit din prima încercare. Un kg de biscuiţi costă k mii lei. La un curs de înot s-au înscris n persoane. Să se scrie un program care să verifice dacă poate să împartă revistele astfel ca fiecare fată să citească cel puţin o revistă. d). să-şi facă o gradinuţă de m straturi lungi de nr metri fiecare.

23. Adrian şi Liviu au hotărât să realizeze un program care să-i ajute la ora de geometrie. în ordine descrescătoare. Rezultatul va fi afişat sub forma: Marcela poate cumpara X caiete de matematică şi i-ar rămâne Y lei. Când lucrul a fost gata. va citi după caz şi mărimile necesare calculării ariei figurii geometrice respective: • lungimea şi lăţimea • diagonalele It baza şi înălţimea 7 . C) şi apoi în funcţie de acesta. S lei. Z. iar ceea care a curăţat mai încet primeşte doar o caramea. Cea care a fost cea mai harnică primeşte 3 caramele. a 2-a dintre ele primeşte 2 caramele. Marcela dispune de o sumă de bani. numărul de legume curăţat de fiecare dintre ele era: Anca A. Ştiind că un caiet de matematică costa M lei. morcovi. Ele au de curăţat ţelină. citeştede la tastatură cantitatea de material. T. pătrunjel şi ceapă. 25. bunica B. Bunica face de mâncare şi este în criză de timp. Pentru proiectul din semestrul I. 24.20 m sau 1. P. De aceea le roagă pe nepoatele ei Anca şi Claudia să o ajute să cureţe zarzavaturile pentru supă. ajutaţi-o pe Marcela să se hotărască ce caiete ar trebui să cumpere astfel încât să îi rămână un rest cât mai mic de bani. Claudia C bucăţi. din care doreşte să cumpere numai caiete de matematică sau numai caiete cu linii. tipul acestuia (laţimea de 1.40 m) precum şi lungimea sacourilor care trebuie confecţionate apoi calculează numărul de sacouri care se pot confecţiona din acest material. R. Aflaţi clasamentul şi câte caramele a primit fiecare. de-limba română. Bunica are 6 caramele pe care doreşte să le tmpartă. Acest program va calcula ariile următoarelor figuri: It dreptunghi It romb It paralelogram It triunghi It trapez • cerc Programul va citi de la tastatură tipul figurii (D. iar un caiet cu linii costă L lei.

Dacă numărul obţinut are mai mult de o cifră se adună cifrele acestuia. baza mare. dacă există. d. apoi rezolvă sistemul şi afişează soluţiile. Un ogar urmăreşte o vulpe care este la x sărituri înaintea lui. Să se scrie un program care verifică dacă un punct (i. pentru a se obţine ca rezultat o cifră. Exemplu: nl=1453. 29. 30. Ştiind că în timp ce vulpea face a sărituri ogarul face b sărituri. 26. CII baza şi înălţimea • baza mică. Se citesc de la tastatură coeficienţii unei ecuaţii de gradul II: a. b. c. Cifra de control se obţine adunând ultimele cifre ale numerelor. b. c şi se cere să se scrie un program care determină natura soluţiilor ecuaţiei: El reale şi distincte • egale • complexe 28. n2=72114. f valori reale. 8 . Scrieţi un program care citeşte coeficienţii a. Se citesc coeficienţii unui polinom ax 2+bx+c. Trei copii joacă un joc: spune fiecare un număr natural de maxim cinci cifre şi caută numărul norocos. Prin număr norocos înţelegem "acel număr care se împarte exact la cifra de control. Să se scrie un program care determină numărul norocos sau numerele norocoase. înălţimea CII raza Realizaţi acest program care să afişeze valoarea ariei şi a mărimilor din care a fost calculată. n3=52279 Cifra control 3+4+9=16 1+6=7 Numărul norocos este n2=72114 deoarece se împarte exact la 7. 27. Coeficienţii pot fi orice valori reale (inclusiv zero). să se calculeze dacă ogarul va ajunge vulpea în acea zi (maxim m sărituri) şi în caz că poate fi ajunsă să se afişeze câte sărituri îi trebuie ogarului. j) citit de la tastatură se află deasupra sau dedesubtul graficului funcţiei polinomiale. e. Pentru a rezolva sistemul de două ecuaţii liniare: ax+by=c dx+ey=f se doreşte utilizarea metodei substituţiei.

La ora de educaţie fizica un elev a sărit x cm la proba de săritură în lungime. astfel încât elevii să lucreze la cele mai performante calculatoare. Organizatorii au m calculatoare (m>n).40 m 8 2. 35. Săritura Nota Sub2m 4 2-2. marţi-Z.30-2. Dacă se cunoaşte numărul corespunzător zilei de ieri. Jucaţi-vă cu calculatorul: introduceţi un număr de la 1 la 10 şi calculatorul va afişa numărul scris în litere.20-2.50 m 10 36. O persoană doreşte să-şi facă o asigurare de viaţă.. 586 şi Pentium.50 m 9 Peste 2. Calculatoarele sunt 386. . . Depozitul acordă o reducere de 10% pentru comenzile de cumpărare care conţin minim 10 bucăţi din fiecare tip de monitor.10-2.10 m 5 2. La un depozit există 3 tipuri de monitoare având preţurile pi. Instrucţiunea de selecţie multiplă 31.40-2. 33. 486. Folosind tabelul alăturat. Pl. La un concurs de informatică participă n concurenţi. \1" 34. scrieţi un program care îi ajută pe organizatori să-i aşeze pe elevi la calculatoare. Ştiind numărul de calculatoare şi de ce tip e fiecare.20 m 6 2. Numerotăm zilele săptămânii: luni-I. să se afişeze ce zi va fi poimâine? 32.30 m 7 2. afişaţi suma pe care va trebui să o plătească. stabiliţi ce notă va primi elevul.. Firma de asigurări încasează o anumită sumă de bani în funcţie de vârstă: 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 Cunoscând vârsta persoanei. Afişaţi cât are de 9 . duminică-7. P3.

între 16-25 absenţe nota 7. 5.3. nota 10. iar peste 36 de absenţe avertisment de exmatriculare şi nota 4 la purtare. Să se scrie un program care să numere de câte ori se găseşte cifra 7 în scrierea lui. nr2 şi nr3 monitoare din cele 3 tipuri. între 3-12 ani se indică x mg/kg corp. 38. STRUCTURA REPETITIVĂ WHILE ŞI REPEAT (DO-WHILE) 1. 4. Să se scrie un program care să numere câte dintre ele sunt formate din exact două cifre şi aceste cifre sunt identice. 37. Stabiliţi şi afişaţi care este doza de medicamente care trebuie prescrisă unui pacient în funcţie de vârsta V şi greutatea G în kilograme. Se citesc printr-un program numere de la tastatură până la citirea valorii O. Să se afişeze această valoare. ştiind că la copii sub 3 ani medicamentul nu este indicat. Între 11-15 absenţe nota 8. Se citesc numere naturale până la introducerea numărului O. 1. plătito firmă care face comanda pentru nrl. Un grup de copii numără de la 1 la 100 şi aplaudă ori de câte ori se rosteşte un număr care conţine cifra 7. iar numărul de absenţe influenţează nota la purtare astfel: până la 6 absenţe inclusiv. Calculaţi şi afişaţi nota pe care o primeşte la purtare un elev care a totalizat pe semestrul 1 x absenţe. Scrieţi un program care calculează şi afişează de câte ori se aplaudă. ştiind că nu are alte abateri. 3. Se dă un număr natural de maxim 9 cifre. Se cere calcularea şi afişarea mediei aritmetice a pătratelor numerelor pozitive citite. între 30-35 absenţe nota 5. între 26-30 nota 6. între 7-10 absenţe nota 9. Să se scrie un program care să afişeze toate numerele pătrate perfecte dintre ele. Se citesc numere naturale până la introducerea numărului 9999999. 2. iar peste 12 ani Y mg/kg corp/zi. 10 .

7. Rezolvaţi problema numărul 9 şi pentru cazul în care bancherul doreşte să codifice cifrul transformându-l în baza de numeraţie 7. Scrieţi un program care preia de la tastatură numerele b şi c şi afişează câte bomboane (şi câte caramele) primeşte Simona. 12. Aceeaşi problemă dar bancherul doreşte să codifice cifrul inserând între fiecare două cifre ale sale cifra 3. vrea să-I scrie pe o foaie. Se citesc de la tastatură numere naturale până la întâlnirea numărului zero. Programul va prelua de la tastatură cifrul codificat şi va afişa cifrul potrivit pentru a deschide seiful sau un mesaj de atenţionare pentru cazul în care codul nu a fost introdus corect. 10. Il. Bancherul şi-a ales un cifru. 11 . Pentru că încă nu s-a hotărât căror elevi să le ducă bomboanele calculaţi şi afişaţi printr-un program care este numărul minim de bomboane pe care trebuie să le cumpere pentru ca să le poată împărţi exact elevilor din oricare din cele două clase. Marius are b bomboane şi c caramele pe care doreşte să le împartă cu Simona. Programul va afişa numărul obţinut. Programul va citi de la tastatură pentru fiecare clasă numărul de elevi. Un bancher are un seif cu cifru.6. 10 şi Il. ajutaţi-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). Pentru a nu uita cifrul. Scrieţi câte un program care să decodifice cifrul codificat la problemele 9. El îi va da surorii lui un număr de bomboane (şi acelaşi număr de caramele) egal cu numărul care divide atât numărul b cât şi pe c. Sora lui Marius ar dori să mănânce cât mai multe dulciuri. Scrieţi un program care preia cifrul de la tastatură şi afişează cifrul codificat. sora lui mai mică. 8. dar codificat: fiecare cifră să fie înlocuită cu diferenţa dintre cifra 9 şi cifra respectivă. 9. Cu ocazia zilei de 1 Iunie doamna profesoară de informatică doreşte să dăruiască bomboane elevilor din clasa a IX-a (în care învaţă m elevi) sau celor din clasa a X-a (în care învaţă n elevi). Să se afişeze după citirea fiecărei perechi de numere dacă sunt prime între ele.

Să se scrie un program care citeşte un număr natural n (n<=lOOO) şi o cifră x şi afişează numărul de numeret. 17. ·18. (x se citeşte de la tastatură) 21. 12 . Exemplu: 24 se divide cu 6=2+4 şi cu 8=2*4 20. Continuaţi introducând numere până când îi veţi spune că nu mai doriţi să introduceţi alte numere.ţ~mnlle strict mai mici decât n care conţin cifra x de două ori. 16. Fie x un număr natural. Scrieţi un program prin care să determinaţi şi să afişaţi numerele de forma abac cu a-o-b-e-c ştiind că suma cifrelor este un număr de două cifre identice. Afişaţi printr-un program numerele de forma 512x6 divizibile cu 12 şi numerele de forma 25x3y divizibile cu 18. Determinaţi printr-un program şi afişaţi numerele naturale de 4 cifre de forma abcd ştiind că produsul dintre numerele ab şi cd este 323. Găsiţiprintr-un program numerele naturale de forma abac care se divid cu Il şi 13 şi afişaţi-le. Se dă un număr natural p. folosind un program PASCAL sau C. 15. Să se afişeze printr-un program numerele de două cifre de forma ab . determinaţi printr-un program factorul prim cel mai mare din descompunerea numărului x şi afişaţi-l. 19. Puneţi calculatorul la treabă: introduceţi un număr şi calculatorul va afişa pătratul şi eubul acestui număr.conţine p=141051 . 22. Să se afişeze printr-un program toate numerele de două cifre care se divid cu suma şi cu produsul cifrelor lor.13. ştiind că a şi b sunt cifre consecutive. Să se determine dacă numărul conţine în scrierea lui secvenţa 15. Exemplu: p=141510 .nu conţine 14.

27. Extragerea se realizează până la întâlnirea numărului O. Se extrag dintr-o urnă bilete pe care sunt scrise numere naturale. Numerele de inventar de pe utilajele unei întreprinderi sunt formate din maxim 9 cifre. Extragerea se realizează până la întâlnirea numărului O. 24. Scrieţi un program care simulează aceasta şi afişează câte perechi de numere citite consecutiv au proprietatea că unul este pătratul celuilalt. cu ocazia Crăciunului un grup de adolescenţi şi-au propus să facă daruri de o sumă de Slei. scrieţi un program care stabileşte dacă acesta aparţine întreprinderii. Într-o campanie de ajutorare a copiilor nevoiaşi. Pentru aceasta adună din şcoala lor de la toţi cei care doresc să contribuie la campania de Crăciun diferite sume şi se opresc din adunarea fondurilor în momentul în care au depăşit suma. 25. iar pe măsură ce urcăm distanţa dintre trepte creşte cu 1 cm. Scrieţi un program care simulează aceasta şi afişează după fiecare extragere numărul biletului şi dacă este cîştigător sau nu. 26.23. Se extrag dintr-o urnă bile pe care sunt scrise numere naturale. Extragerea se realizează până la întâlnirea numărului O. Câte trepte trebuie să urcăm astfel încât să ajungem la 1 m? 28. Scrieţi un program care simulează aceasta şi afişează numărul cifrelor Oîn care se termină numărul produs al numerelor citite. Biletele cu numere care nu conţin cifre pare sunt câştigătoare. 13 . dintre care primele 3 (din stânga numărului) sunt identice la toate utilajele (şi formează numărul 123). Scrieţi un program care să determine numărul de donatori şi suma donată în total. Fiind dat un număr de inventar. Să se calculeze suma cifrelor unui număr natural. fără a lua în considerare prima şi ultima cifră din număr. Se extrag dintr-o urnă bilete de tombolă pe care sunt scrise numere naturale. 30. Pe o scară treapta iniţială are 10 cm. 29. Fie x un număr natural nenuL Determinaţi şi afişaţi printr-un program numărul format din prima şi ultima cifră din x.

Scrieţi un program care determină şi afişează cel mai apropiat de n număr prim. El are de rezolvat următoarea problemă: "Scrieţi pe caiet toate numerele prime mai mici decât un număr natural N dat. numărul ales să nu dividă nici unul din divizorii aleşi până atunci. se cere să se scrie un program care afişează ce numere s-au ales în timpul jocului. etc. Câte numere de patru şi de cinci cifre există astfel încât suma ultimelor două cifre şi a numărului format de primele două cifre să fie egală cu numărul format din ultimele două cifre? Exemplu: 27530: 3+0+27=30. Doi jucători joacă următorul joc: ei aleg. pe ultima linie scrieţi întregul număr. 14 . 37. un divizor natural pozitiv al lui n dat. pe a doua linie numărul format din primele două cifre.31. Scrieţiun program care citeşte un număr natural n. Ştiind că jucătorii trebuie să aleagă divizorii în ordine descrescătoare." Se vor prelua de la tastatură numerele unul câte unul până la întâlnirea numărului zero. Aceeaşi problemă pentru tema:"Scrieţi pe caiet descompunerea în factori primi pentru mai multe numere date. pe rând. 36." Scrieţi un program care preia de la tastatură numărul N şi afişează numerele prime mai mici decât el pentru a-l ajuta pe Paul să verifice dacă a rezolvat corect tema. Se citeşte un număr natural n. Paul a învăţat să lucreze pe calculator şi doreşte să-şi verifice tema la matematică.. 33.000. determină şi afişează cel mai mic număr natural nenul care are proprietatea că suma dintre n şi acest număr este un număr cu toate cifrele diferite. 35. cu condiţia ca. Exemplu: n=78325 se va afişa: 7 78 783 7832 78325 34. Se citeşte de la tastatură un număr natural n (n < 1.000). de fiecare dată. 32. Afişaţi un triunghi dreptunghic isoscel format din cifrele acestui număr: pe prima linie scrieţi prima cifră.

42. citind pe rând de la tastatură numărul fiecărei bile extrase. După fiecare număr introdus se va afişa descompunerea lui în factori primi. 38. o familie ia un credit de la bancă pe un anumit număr de ani. Intr-o urnă există bile numerotate. ştiind că la intrarea unei fete se citeşte caracterul 'f' iar la a unui băiat caracterul 'b'. Ştiind că au dat banii alternativ tot câte o fată şi un băiat (prima a fost o fată) scrieţi un program care afişează suma contribuţiilor fetelor şi media aritmetică a valorilor cu care au contribuit băieţii.nnei discoteci stă un bodyguard care a primit dispoziţie să oprească intrarea atunci când au intrat minim m băieţi si minim n fete. Scrieţi un program care simulează aceasta. calculaţi suma pe care trebuie să o achite familia în fiecare lună. Se va repeta cererea unui număr de la tastatură până când numărul a fost tastat corect şi s-a afişat rezultat~l în baza 10. 40. numărul de ani în care va rambursa creditul şi dobânda anuală impusă de bancă. Scrieţi un program pentru el. Să se extragă pe rând bile până când avem cel puţin a bile cu TIr. 39. Se citesc numere de la tastatură reprezentând contribuţia în lei pe care şi-au adus-o elevii unei clase pentru cumpărarea unui cadou pentru unul dintre colegii de clasă. 43. 41. pare sau b bile cu TIr. Se va rezolva problema în două variante: B<=lO şi B=16. îl transformă în baza de numeraţie 10 şi îl afişează pe ecranul calculatorului. Citirea se opreşte când s-a introdus valoarea . Pentru a cumpăra un apartament. Scrieţi un program care preia de la tastatură un număr B şi un număr scris în baza IOpe care îl transformă în baza de numeraţie B apoi îl afişează. La intrarea . Scrieţiun program care citeşte de la tastatură un număr natural B şi un număr N scris în baza de numeraţie B. Cunoscând suma împrumutată. Programul se va scrie în două variante: pentru o bază B<=lO şi pentru baza 16. Această sumă va fi din ce în ce mai mică deoarece dobânda lunară se calculează pe 15 .O. impare. Dacă numărul nu a fost scris corect în baza B se va afişa pe ecran un mesaj de atenţionare şi se va cere un alt numar de la tastatură.

q=32. Să se scrie un program care să determine şi să afişeze numărul ce conţine cifrele numărului p urmate de cifrele numărului q. La închiderea magazinului se introduce valoarea zero. b. . Se dau două numere naturale p şi q. Scrieţi un program care să-I ajute pe Mihai să calculeze şi să-i afişeze pe ecranul calculatorului la sfârşitul zilei: a. 44. baza sumei ramase nerambursate la începutul lunii (dobânda lunară fiind 1/12 din dobânda anuală). Se cere determinarea primelor n cifre din scrierea fracţiei subunitare k/m = O. Cei n elevi înscrişi în clasa a IX-a trebuie împărţiţi în clase astfel încât să nu fie într-o clasă mai mult de 25 de elevi. Fie n un număr natural.. Exemplu: p=715324. 49. Exemplu: p=753. 16 . 46. 45. d. al câtelea a fost clientul care a făcut cele mai costisitoare cumpărături. c. calculează care este numărul de clase şi câţi elevi vor fi în fiecare clasă şi afişează mesajul "-----------------" după fiecare grupare de medii care formează o clasă. Să se scrie un program care să verifice dacă numărul q se poate obţine prin eliminarea unor cifre de la începutul şi sfârşitul lui p. cât au valorat în total vânzările magazinului în acea zi.c1c2c3. Se dau două numere naturale p şi q cu condiţia q<p. Se poate obţine q eliminând din p o cifră de la sfârşitul lui p şi trei cifre de la începutul lui p. La magazinul de jucării al lui Mihai se ţine evidenţa vânzărilor pe calculator. Numărul rezultat este 75312. câţi clienţi au făcut cumpărături de cel puţin X lei (X dat de la tastatură). Scrieţi un program care citeşte de la tastatură valoarea lui n şi mediile elevilor în ordine descrescătoare. q=12.. 47. Pentru fiecare client se introduce suma plătită pentru cumpărăturile făcute.. şi situaţia să fie echilibrată. pentru k şi m numere naturale date. Scrieţi un program care afişează descompunerea lui n ca sumă de puteri distincte ale lui 2. 48. numărul de clienţi din acea zi.

Se citesc de la tastatură numere întregi până la introducerea numărului O. Să se verifice printr-un program dacă aceste numere au fost introduse în ordine crescătoare. Fiecare oaie face în fiecare an câte o mieluţă. Să se scrie un program care să verifice dacă p este o putere a lui 2 şi să se dea un mesaj corespunzător. 55. După un an oaia face o mieluţă. Proprietatea trebuie să fie îndeplinită pe întreaga înşiruire de numere. Exemplu: pentru tabla înmulţirii cu 7 se va afişa: Ox7=0 lx7=7 lOx 7 = 70 54. (N dat de la tastatură) 51. e. Ajutaţi un elev să înveţe tabla înmulţirii. mioare şi mieluţe pe care le are ciobanul după Nani. Un cioban doreşte să-şi mărească turma. După un an mieluţa devine mioară. Să se verifice printr-un program dacă numerele introduse se succedă întâi crescător şi apoi descrescător (în formă de deal) sau întâi descrescător şi apoi crescător (în formă de vale). câţi bani s-au încasat de la primii 5 clienţi (dacă în acea zi au fost mai puţin de 5 clienţi la magazin se va specifica aceasta printr-un mesaj). FOR 53. Ştiind că ciob anul are o rasă specială de oi care fac doar mieluţe şi că dorind să-şi mărească turma el nu taie nici un animal se cere să se scrie un program care calculează şi afişează numărul de oi. 50. descrescătoare sau este o succesiune de numere neordonate. 17 . 51. Se dă un număr natural p. După încă un an mioara devine oaie. La început el are o oaie. Se citesc de la tastatură numere întregi până la introducerea numărului O. Pentru un număr n dat să se genereze şi să se afişeze printr-un program primele n numere prime. afişând tabla pentru înmulţirea/pânăla 10) cu orice cifră dorită de el.

1 şi 2. n prieteni se întâlnesc şi fiecare spune ce a realizat în această perioadă de timp: dacă s-a căsătorit şi în caz afirmativ câţi copii are. 57. Scrieţi un program care preia de la tastatură numărul de calculatoare şi tipul fiecărui calculator şi îi ajută pe organizatori să-i aşeze pe elevi la calculatoare astfel încât elevii să lucreze la cele mai performante calculatoare. Scrieţi un program care citeşte de la tastatură un număr natural n şi tipăreşte toţi divizorii lui care sunt numere prime.56. 60. Introduceţi de la tastatură douăzeci de numere naturale. 58. Afişaţi toate numerele de 3 cifre pe care le poate scrie acest elev. Să se scrie un program care să citească de la tastatură n numere naturale de maxim 9 cifre şi apoi să afişeze pentru fiecare dintre ele media aritmetică a tuturor divizorilor primi ai lui. Se citesc de la tastatură n numere naturale. La un concurs de informatică participă n concurenţi. 64. După 10 ani de la terminarea liceului.Calculatoarele sunt de tipul 386. formate numai din cifre distincte. 62. Afişaţiprintr-un program toate numerele pare de trei cifre. 586 şi Pentium. 61. Să se determine printr-un program toate numerele naturale mai mici decât un număr natural nenul dat n şi care sunt relativ prime cu n şi să se afişeze aceste numere. Scrieţi un program care citeşte pe rând 18 . 486. Determinaţi suma formată cu ultima cifră din fiecare număr citit printr-un program şi afişaţi-o. 63. 59. Un elev de clasa 1 a învăţat să scrie doar cifrele O. Scrieţi un program care să calculeze suma şi produsul numerelor divizibile cu zece din cele douăzeci de numere date. Scrieţi un program care afişează numerele de trei cifre formate numai din cifre distincte cu proprietatea că suma cifrelor numărului obţinut din suma cifrelor sale este cel mult 5. 65. Programul va afişa numărul de calculatoare folosite din fiecare tip. Organizatorii au m calculatoare (m şi n date de la tastatură).

...... Să se afişeze pe ecran: 1 22 333 nnnn . Scrieţi un program care citeşte un număr natural n şi afişează: 1 1 2 123 1 2 3 4 . 69. de care vrea să-şi cumpere ciocolată şi napolitane.... 1 2 3 4 n 68. n unde n este un număr întreg pozitiv citit de la tastatură. Cunoscând costul pentru o ciocolată şi costul pentru un pachet de napolitane...n (de nori) unde n este un număr întreg pozitiv citit de la tastatură.. 70....... câţi au un copil. 19 . doi copii sau mai mulţi.. aceste date şi apoi afişează câţi dintre prieteni sunt necăsătoriţi....(n-l)1l.... Scrieţi un program care citeşte de la tastatură un număr natural n şi tipăreşte valoarea l/(n-l) + 2/(n-2) + 3/(n-3) +... Un copil are la dispoziţie o sumă S.. afişaţi toate variantele de a-şi cheltui suma integral 67.. Să se afişeze pe ecran: 1 12 123 1234 .. 66.

74.. acordă treizeci puncte din oficiu. b.5 puncte toate celelalte litere un punct.7 puncte a. La locul 1 s-a adăugat la premiu o valoare de L lei. Pentru fiecare problemă se citeşte răspunsul: adevărat sau fals.+ n* 3n * 9n 72. Fiecare dintre celelalte fete a primit o valoare egală cu suma de bani primită de concurenta de pe locul imediat următor plus 15% din ce a primit aceasta. c.2 20 . Scrieţi un program care preia de la tastatură valorile X şi L apoi calculează şi afişează suma de bani pe care a primit-o fiecare dintre concurente precum şi cât s-a cheltuit pentru premii la acest concurs. x . La un concurs de frumuseţe toate cele n concurente primesc premii de participare din partea organizatorilor în funcţie de clasamentul final. Să se calculeze următoarea expresie: 1*2*4 + 2*4*8 + 3*6*12 + . 73. iar cele de la 21 la 30 câte cinci puncte. Ionel participă în acest an la jocul-concurs de matematică "Cangurul". d . fiecare având un singur răspuns corect. m. cele de la 11 la 20 câte patru puncte. + n* 2n * 4n E = ------------------------------------------------------- 1*3*9 + 2*6*18 + 3*9*27 + .10 puncte i. calculaţi punctajul total al alfabetului. Să se afişeze pe ecran: 2 prim 3 prim 4 2 5 prim 6 3. în funcţie de frecvenţa de utilizare. Trebuie să rezolve un set de treizeci de probleme. y . Problemele de la 1 la 10 valorează câte trei puncte fiecare. z . Se. Cea care s-a clasat ultima a primit un premiu în valoare de X mii lei.8 puncte k. 75. Atribuim literelor următoarele puncte: . n. j. 71. La informatică şi la matematică utilizăm frecvent anumite litere din alfabet.. Scrieţi un program care ajută profesorul corector să calculeze punctajul final pentru Ionel.. Având pentru fiecare literă un punctaj..

atunci de ce în această tară.. >. Guliver in tara priculicilor Priculicii erau nişte fiinţe rnărunţele având mai puţin de 10 degete. 4-4=0) Operatorii în ordine descrescătoare a priorităţilor sunt: !.. Exemplu: numărul l l Ll I. Exemplu: 2443 >2 = 4324 nrl < nr2 deplasare circulară spre stânga a cifrelor numărului nrl cu nr2 poziţii. Să se determine dacă există vreun sistem de numeraţie în care acest număr să fie pătrat perfect. În cazul a doi operatori cu aceeaşi prioritate operaţiile se efectuează de la stânga la dreapta.txt (pe prima linie se va citi baza de numeraţie iar pe următoarea linie se va citi expresia). Exemplul 1. Se citeşte de la tastatură un număr întreg. şi numărul de la casă şi-l scriau sub formă de expresie. In baza 3. 76.. 4-1=3. Înţelepciunea le venea din obiceiul de a se interioriza când se învârteau în jurul propriei cozi . iar operaţiile folosite erau <. E. Vă rugăm să scrieţi o aplicaţie care să calculeze valoarea unei expresii citite din fişierul de intrare E. ! definite cum urmează: nrl > nr2 deplasare circulară spre dreapta a cifrelor numărului nrl cu nr2"poziţii.. n .. ceea ce îl încurca grozav pe Guliver. 102*102=11111 77. apoi < si > si apoi + si -. -. Exemplu: 2443 < 1 = 4432 + adunarea numerelor în baza b scăderea numerelor în baza b complementarea unui număr cifră cu cifră faţă de b-I Exemplu: pentru b=5 !214 =230 (4-2=2.txt conţine: 5 2134+1111 rezultat obţinut: 3300 21 . E lesne de înteles . Fiind mari iubitori de matematică. unde n este un număr întreg pozitiv citit de la tastatură. numerele erau reprezentate în baza b (numărul de degete b<lO). +.

lună.Q.L. adună 1 la acest număr apoi afişează numărul obţinut. 79. 1+0=1.precum şi numele persoanei.txt conţine: 5 2134+133<1-!230 rezultat obţinut: 2301 78. Apoi cele doua numere de o cifră obţinute se adună iarăşi până se obţine un număr de o cifră.J.M. Numărul se calculează în felul următor: se adună cifrele din data naşterii până se obţine un număr de o cifră. născut în 3. Numărul personal indică anumite caracteristici ale oamenilor. 22 . Scrieţi un program care citeşte de la tastatură data naşterii şi numele persoanei apoi calculează şi afişează numărul personal.S 1 B. Se adună numerele corespunzătoare literelor numelui până se obţine un număr de o cifră.X 6 G.W 5 F. 7+0=7 Numărul personal este: 7+3=10.Y 7 H.P.10. Numerele corespunzătoare literelor sunt: A. 2+1=3 Numărul corespunzător numelui: 7+6+7+5+1+3+3+6+3+6+9+9+5=70.K.R 9 Exemplu: Pentru Popescu Florin.N.Z 8 l. Acest număr reprezintă numărul personal. numărul personal se obţine în felul următor: Numărul corespunzător datei: 3+1+1+9+7=21. an) .V 4 E.U 3 D.1970. Se spune că fiecare persoană are numărul ei caracteristic. Scrieţi un program care preia de la tastatură un număr scris în baza 2.O.T 2 C. Exemplul 2 E. Acest număr este de o cifră şi se calculează din mai multe informaţii: data naşterii( zi.

Calculele se vor efectua direct în baza b. 84. Scrieţi un program care calculează în baza b diferenţa a două numere x şi y scrise în baza de numeraţie b<lO. Observaţie: Nu se vor transforma numerele în baza 10. Suma va fi obţinută sub forma unui alt număr. Suma va fi obţinută sub forma unui alt număr. 23 . Observaţie: Nu se vor transforma numerele în baza 10. apoi calculează şi afişează diferenţa x-y în baza b. Programul va citi de la tastatură numerele a şi b care conţin doar cifre O şi 1. Programul va citi de la tastatură două numere care conţin doar cifre cuprinse între O şi b-I. Programul va citi de la tastatură numerele a şi b care conţin doar cifre O şi 1. apoi calculează şi afişează suma lor în baza 2. Diferenţa va fi obţinută sub forma unui alt număr. 82. Observaţie: Nu se vor transforma numerele în baza 10. Scrieţi un program care calculează în baza 2 suma a două numere a şi b scrise în baza de numeraţie 2. Se v:pr verifica datele de intrare ca a să fie mai mare decât b. Scrieţi un program care calculează şi afişează valoarea unui polinom pentru o valoare X dată de la tastatură. Se vor verifica datele de intrare ca x să fie mai mare decât y. Scrieţi un program care calculează în baza b suma a două numere x şi y scrise în baza de numeraţie b<10. Programul va citi pe rând câte un coeficient şi gradul termenului căruia li corespunde coeficientul (într-o ordine oarecare) şi se va opri când coeficientul introdus este zero. 81. Observaţie: Nu se vor transforma numerele în baza 10. Calculele se vor efectua direct în baza b. Scrieţi un program care calculează în baza 2 diferenţa a două numere a şi b scrise în baza de numeraţie 2. Diferenţa va fi obţinută sub forma unui alt număr. 85. apoi calculează şi afişează diferenţa a-b în baza 2. Observaţie: Nu se va transforma numărul în baza 10. Calculele se vor efectua direct în baza 2. apoi calculează şi afişează suma lor în baza b.80. Scrieţi un program care citeşte de la tastatură un număr n scris în baza de numeraţie b<lO apoi calculează în baza b valoarea n+ 1 şi o afişează. 83. Calculele se vor efectua direct în baza b. Calculele se vor efectua direct în baza 2. Programul va citi de la tastatură două numere care conţin doar cifre cuprinse între O şi b-I.

3. 2. apoi cineva din clasă va trebui să răspundă la următoarele întrebări: Care sunt cifrele preferate de către elevii clasei? Care este cifra pe care o preferă cei mai mulţi elevi? Care sunt cifrele care nu sunt preferate de nici un elev? Scrieţi un program care să poată răspunde la aceste întrebări. Scrieţi un program care să determine şi să afişeze valoarea fracţiilor cu trei zecimale exacte. 3. CAPITOLUL I I TIPURI DE DATE STRUCTURATE u. Se dă un şir de fracţii prin numărători şi numitori (un şir de numărători şi un şir de numitori). O fracţie este definită dacă se cunoaşte numărătorul şi numitorul ei. Să se scrie un progşam care să afişeze Da sau Nu după cum cele două sume sunt egale sau nu sunt egale. Să se scrie un program care calculează produsul a n numere întregi date de la tastatură. VECTORI 1. Jucătorii unei echipe de fotbal primesc în urma disputării unui meci prime de joc. să se elimine acestea astfel încât fiecare element să apară o singură dată.i. În clasa 1 doamna învăţătoare propune. Exemplu: date de intrare: 1. la ora de aritmetică celor 25 de elevi ai săi următorul joc: fiecare elev va desena pe o foaie de hârtie cifra preferată. 24 . Date de ieşire: Nu 5.7. 4.12. Să se verifice dacă suma primită de jucătorii cu numere pare este egală cu cea primită de cei cu numere impare.5.5. Se citesc de la tastatură n numere naturale (n număr natural dat).9. Dacă există în şirul dat elemente ce se repetă.

6.2. Scrieţi un program care citeşte numele persoanelor cu depozite pe carnete. Primul şir transformat va avea elemente sumele valorilor din şirul iniţial calculate astfel: prima plus a doua. pe care apoi să le unească şi astfel să poată reface şirul iniţial. Comandantul doreşte să aleagă pentru o misiune specială un soldat înalt şi unul scund. În curtea unei unităţi militare stau aliniaţi n soldaţi în faţa comandantului lor... etc. a treia plus a patra. a treia minus a patra. Programul va afişa suma donată de fiecare grupă. Dacă suma depusă depăşeşte 50. 25 . . astfel încât preotul este nevoit să ceară ajutorul localnicilor. la prima depunere i se va crea unul. A ales un şir de numere pe care vrea să-I transforme în alte două şiruri de lungime jumătate. Cunoscând suma de bani de care dispune fiecare casă. La sfârşitul zilei programul va afişa toate depozitele şi proprietarii lor. 7. iar al doilea şir format va avea ca elemente diferenţele valorilor din şirul iniţial calculate astfel prima minus a doua. Perechile de case trebuie formate astfel încât suma numerelor de casă de la cele două case care formează o grupă să fie constantă. apoi citeşte toate depunerile care se realizează într-o zi. Acesta ordonă primului soldat să facă un pas în faţă.. celui de-al treilea un pas în faţă. Într-o comună cu n case.000 lei se va forma un nou depozit pentru aceeaşi persoană. Se cere un program care construieşte aceste şiruri. după posibilităţi. numerotate 1.n. Dacă o persoană nu are un depozit. La o bancă. suma maximă donată şi casele din grupa care a donat această sumă.000. etc. Aceştia hotărăsc să se formeze grupe de câte două case şi fiecare grupă să doneze bisericii o sumă de bani. dacă are i se va creşte. 8. etc. iar dacă creşterea depăşeşte 50. sumele depuse. Andrei se joacă cu numerele. Suma alocată de primărie este insuficientă pentru a termina construcţia. celui de-al doilea un pas în spate. Soldaţii stau acum aliniaţi pe două linii. Cunoscând înălţimile soldaţilor ajutaţi-l pe comandant să aleagă cel mai înalt soldat din prima linie şi cel mai scund din cea de-a doua linie.000 lei se creează un nou depozit. n persoane au carnete de depozit. 9. La fiecare depunere suma pe care o are creşte. se construieşte o biserică. scrieţi un program care să-i ajute pe săteni să se grupeze.000.

La ora de geografie profesoara le cere elevilor să memoreze suprafaţa fiecărei ţări din Europa. Laura îşi face o listă cu toate aceste informaţii (numele ţării. Scrieţi un program care să o ajute pe Laura să creeze lista. Fiecare zi din lună este caracterizată de temperatura maximă şi minimă. Profesorul cunoaşte nivelul de cunoştinţe al elevilor (are mediile lor din semestrul trecut) şi vrea să-i grupeze astfel încât să fie un elev mai bun şi unul mai slab.. numărul de identificare al fiecăruia. În fiecare lună câţiva părăsesc închisoarea (unii eliberaţi şi alţii decedează). 14. Scrieţi un program care citeşte temperaturile maxime şi minime din fiecare zi apoi determină ziua cu cea mai mare diferenţă de temperatură. Scrieţi un program care citeşte preţurile vechi. aceştia primind numere noi. La sfârşitul anului preţurile cresc.v[n]. La o benzinărie se vând n produse. Scrieţi un program care citeşte un număr de telefon (în noul format) şi afişează toate datele cerute. Numerele celor care părăsesc închisoarea nu sunt atribuite noilor veniţi. calculează şi afişează preţurile noi. care sunt acestea şi de câte ori apar fiecare. Cunoscându-se numărul deţinuţilor aflaţi la începutul lunii în închisoare. 12. 15. Pentru produsele mai scumpe de 300.. Să se afişeze elementul care are cei mai mulţi divizori. afişaţi deţinuţii existenţi la sfârşitul lunii.. 26 . Pentru a le reţine mai uşor ea ar vrea să ordoneze această listă în ordinea descrescătoare a suprafeţelor. Scrieţi un program care citeşte mediile din semestrul trecut ale elevilor şi afişează cele 14 grupe. Se consideră şirul de elemente v[1].10.. 16. 11. iar în acelaşi timp sosesc deţinuţi noi.000 lei preţul creşte cu 7% iar la produsele mai ieftine de 300.000 lei preţul creşte cu 10%. 13. La închisoarea X cei n deţinuţi sunt identificaţi printr-un număr întreg pe care fiecare îl poartă pe haină. Cei 28 de elevi din clasă trebuie să se grupeze câte doi. v[2]. Profesorul de informatică are la dispoziţie 14 calculatoare. E foarte pasionată de aceste numere şi ştie pentru fiecare câte cifre distincte are. Ana are de reţinut o mulţime de numere de telefon. suprafaţa). precum şi numerele celor care părăsesc închisoarea şi ale celor care sosesc.

dacă există. Au hotărât ca după fiecare două cifre să adauge cifra 2. Se cere ca acest program să afişeze poziţia elementului egal cu cel mai mic divizor comun al tuturor numerelor din ŞIr. poziţia pe care se află elementul care poate fi scris ca sumă a tuturor poziţiilor de dinaintea lui. Să se determine care sunt cărţile pe care le-au citit cei doi băieţi împreună. să se citească numele acestuia şi să se adauge în sir astfel încât şirul să rămână ordonat alfabetic. 20. Scrieţi un program care formează un nou şir în care păstrează numărul de participanţi pentru ţările cu mai mult de trei participanţi apoi afişează şirul rezultat. 1. Ionel şi Gige1 au fiecare n cărţi preferate citite. să se calculeze suma acestor fractii. Se citesc de la tastatură numere întregi separate prin spatii. Date de ieşire:4. Exemplu: date de intrare: n=5. 27 .2. a) Să se verifice dacă elevii au fost introduşi în ordine alfabetica. iar în caz contrar să se ordoneze acest şir de nume. 21. Fiind dat un vector ordonat cu n elemente numere întregi să se găsească.6. Rezultatul va fi afişat ca raport a două numere întregi.17. Să se scrie un program care citeşte de la tastatură numărul de la casa unui pitic şi-l ajută să îl schimbe. Se citesc de la tastatură numele a n elevi participanţi la o excursie. Se citeşte într-un şir. La un concurs pe echipe participă n ţări. Considerând ca aceste numere sunt numitorii . numărul de concurenţi cu care a venit. b) Considerând că un nou elev s-a înscris pentru excursie. unor fractii . până la apăsarea tastei ENTER. 18. titlurile cărţilor citite de fiecare băiat. având numărătorul 1. 23. Piticii din ţara lui Papură Vodă s-au hotărât să-şi schimbe numerele de la casă. pentru fiecare ţară.7. Să se scrie un program care citeşte numărul de cărţi citite. 22. 19. Să se scrie un program care citeşte de la tastatură elementele unui vector până întâlneşte valoarea "O". apoi afişează cărţile pe care le-au citit Ionel şi Gigel împreună.5.

b) se află cea mai mare cifră şi se formează un al doilea număr în care cifrele au valoarea maximului minus cifra curentă. b) Să se elimine din şir acele elemente ce au cifra cpe poziţia unităţilor şi să se afişeze şirul rezultat. dacă luăm ultima cifră a ultimelor n div 2 elemente ale şirului.375.6. c) al doilea număr format trebuie să fie divizibil cu cele două elemente ale vectorului de la care s-a luat ultima cifră. astfel încât ele să fie numere consecutive în şirul lui Fibonnacci. Se precizează că numărul elementelor trebuie să fie mai mare sau egal cu 3. Se dă un vector de numere întregi de 2 cifre. 28 . Se citesc de la tastatură n numere naturale (n<=100). Exemplu: vectorul 5 2 1 3 se va afişa 1 2 3 5 26.80. 25. dacă este posibil. Să se afişeze toate combinaţiile posibile de 3 elemente dacă : a) se formează un număr din primul element şi ultima cifra a celorlalte două. c) Să se elimine cifra c din toate numerele şirului şi să se afişeze şirul rezultat.13. a) Să se afişeze frecvenţele de apariţie ale fiecărei cifre şi să se determine cifra / cifrele cu mai mică frecvenţă de apariţie în numerele din şirul dat. Afişaţi media aritmetică a celui mai mic număr format dacă luăm prima cifră a primelor n div 2 elemente şi a celui mai mare număr format.25.4. Să se rearanjeze elementele din vector. Exemplu: date de intrare: n=7. Date de ieşire: 328.24. Se citeşte un vector cu n elemente numere naturale. Se citesc de la tastatură n numere naturale şi o cifră c. Exemplu: vectorul 56 81 97 33 12 44 23 elementele 97 12 23 primul număr este 9723 maximul este 9 al doilea număr 0276 27. 10.

Se citeşte de la tastatură un număr n natural.'. Cunoscând N numărul de elevi ai clasei şi mediile celor n-I colegi. n mai mic decât 100. iar pentru fiecare bit O se afişează '_'. Concurenţii care obţin nota 0. Se dă un şir x de numere naturale. 29.. de aceeaşi lungime cu x şi care conţin: y partea întreagă. La sfârşitul clasei a 9-a după ce au fost calculate mediile la informatică Mihai doreşte să afle câţi colegi l-au întrecut şi au media mai mare decât el. 32. elimină concurenţii care au fost descalificaţi. . Fiecare probă este eliminatorie. y de valori naturale iar z de valori reale. La un concurs de matematică participă n concurenţi. ale căror pătrate sunt palindrom într-o bază b de numeraţie (2~::. notele la fiecare etapă.' 30. Exemplu: pentru n=3 citim 123 45 9 în sistem binar acestea ar fi: 1111011 101101 1001 deci pe ecran se va afişa: 31.10).. d) În faţa fiecărui element al şirului format dintr-o singură cifră se va insera un nou element de valoare c şi să se afişeze şirul rezultat. 1 sau 2 sunt eliminaţi. apoi afişează şirurile rezultate. La fiecare etapă concurenţii primesc câte o notă cuprinsă între O şi 10. Să se scrie un program care realizează aceasta. precum şi media lui Mihai. pe rând. Să se formeze două şiruri y şi z. Scrieţi un program care citeşte numele celor n concurenţi. iar la sfârşit afişează punctajele celor rămaşi în concurs. Determinaţitoate numerele naturale mai mici decât n. 28. precum şi câştigătorul concursului. Între afişările a două numere se lasă un spaţiu. 29 . scrieţi un program care să-I ajute să stabilească pe ce loc este în clasă la informatica. Să se afişeze codificat acest şir de numere astfel: pentru bitul 1 al fiecărui număr se afişează '. Concursul are m etape. iar z partea fracţionară a împărţirii elementului din şirul x la poziţia lui. apoi se citesc n numere întregi.

37. -1 pe poziţiile corespunzătoare zilelor cu temperatura medie negativă. obţinând un alt şir. Un număr cu foarte multe cifre scris în baza de numeraţie B se memorează sub forma unui şir în care pe fiecare poziţie se află câte o cifră a numărului. c) Să se precizeze care zile au fost cele mai numeroase: cele cu temperatura minimă peste sau sub zero grade. Scrieţi un program care citeşte de la tastatură înălţimile elevilor în ordinea descrescătoare. nepermiţând să 30 . Să se mărească cu l un număr scris în baza 2. pe fiecare poziţie a şirului aflându-se câte o cifră a numărului. păstrat într-un şir. Profesorul de sport doreşte să-i inverseze. b) Zilele pentru care troax a fost sub zero grade. Afişaţi rezultatele. Să se afişeze: a) Zilele pentru care diferenţa dintre troax (temperatura maximă) şi troin (temperatura minimă) nu a depăşit o anumită valoare dată. d) Să se construiască şi afişeze un alt şir care conţine: +1 pe poziţiile corespunzătoare zilelor în care temperatura medie a fost pozitivă. Să se afişeze şirul obţinut. Afişaţi rezultatul obţinut.introducerea lor astfel încât cifrele să aparţină bazei de numeraţie B. schimbă locul primului cu ultimul. 34. Să se insereze în şir după fiecare element numărul de coechipieri mai înalţi decât el în două moduri: a) formând un nou şir. Verificaţi numerele la . 35. Opentru zilele cu temperatura medie egală cu zero grade. Pentru aceasta. 36. La ora de educaţie fizică elevii sunt aşezaţi pe un rând în ordinea înălţimii de la cel mai mare la cel mai mic. al celui de al doilea cu penultimul. astfel ca să fie aşezaţi de la cel mai mic la cel mai mare.33. Calculaţi suma în baza B a două astfel de numere. La o staţie meteo se păstrează temperaturile minime şi maxime pentru fiecare zi dintr-o anumită perioadă de n zile. b) folosind doar şirul iniţial. de la tastatură. Pentru jucătorii dintr-o echipă de baschet se păstrează înălţimea fiecăruia într-un şir de numere. şi aşa mai departe. apoi calculaţi diferenţa lor.

Deoarece nu mai are spaţiu pe disc. Se citeşte de la tastatură un şir de numere. după care dacă mai există elemente se va afişa mesajul: Pagina noua ? (YIN) În cazul în care utilizatorul apăsa Y se va continua afişarea în acelaşi mod. se hotărăşte să şteargă câteva jocuri pentru a instala unul nou. f) Ştiind că manopera unei cămăşi se plăteşte cu MIei (M dat de la tastatură) se cere să se precizeze ce salariu va primi fiecare muncitoare pe luna ianuarie. îl păstrează într-un şir şi apoi afişează acest şir. Un copil are pe calculator mai multe jocuri. Pentru norma realizată exact şirul va conţine valoarea zero. c) Să se precizeze care a fost (a câta) cea mai harnică şi care a fost cea mai leneşă muncitoare. Să se tipărească şirul obţinut. fie introduse în altă ordine. 31 . câte au făcut mai multe şi câte mai puţine cămăşi decât norma. apoi inversează elevii şi-i afişează în noua ordine. La un atelier de confecţii cele N muncitoare au o normă de realizat de X cămăşi în fiecare lună (X dat de la tastatură). valoare negativă). Se cunoaşte 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. g) Afişaţi clasamentul realizărilor din atelier în ordine crescătoare şi apoi în ordine descrescătoare. Se vor umple întâi 7 rânduri. Să se scrie un program care: a) Pentru luna ianuarie citeşte de la tastatură numărul de camaşi confecţionat de fiecare muncitoare. e) Să se precizeze dacă s-a realizat norma în ansamblu (pe total atelier). o valoare pozitivă) sau în minus (nu a făcut norma. 40. 39. 38. d) Să se numere şi să se tipărească câte muncitoare au realizat norma exact. scriind pentru fiecare muncitoare numărul de cămăşi realizate şi numărul ei de ordine în şirul iniţial. b) Construieşte un alt şir care conţine pentru fiecare muncitoare numărul de cămăşi pe care le-a realizat în plus (peste normă. afişează şirul. altfel algoritmul se opreşte. Să se afişeze şirul de numere câte 7 numere pe un rând. Pentru fiecare se cunoaşte denumirea jocului şi dimensiunea în Mega octeţi.

6. pentru a putea face prezenţa.81.33. 11.4.2.41. Afişaţi al câtelea din cei n pitici este primul pitic din acest subşir şi câţi pitici formează sub şirul. . b) Determină şi afişează alimentele care nu se consumă în fiecare zi (au cantitatea O).21. 44. Exemplu: date de intrare: 5. Se cere să se tipărească cel mai lung subşir ale cărui componente sunt numere în progresie aritmetică. Acum profesoara vrea să vadă care e cel mai lung subşir de elevi aşezaţi în ordine crescătoare. 43. Scrieţi un program care construieşte un nou şir cu aceste numere în baza zece obţinute din fiecare grupă. care citeşte n (numărul elevilor) şi înălţimile acestora. Să se scrie un program care realizează următoarele: a) Determină şi afişeazăpentru fiecare zi din lună mâncarea de bază (cu cantitatea cea mai mare).15.-19. Date de ieşire: 2. Scrieţi un program . 32 . La cantina studenţească se face meniul pentru fiecare zi la începutul lunii. iar numărul în baza doi din fiecare grupă se transformă în baza zece.6. Acesta se împarte în grupe de câte cinci cifre binare.2.2. MATRICI 1. Găsiţi cel mai lung subşir de pitici alăturaţi care au căciula de aceeaşi culoare. în ordinea în care ei s-au aşezat. N pitici aşezaţi unul în spatele celuilalt poartă căciuli roşii sau albe. 42. într-o ordine oarecare.Se păstrează pentru fiecare zi denumirea alimentelor care se consumă şi cantitatea fiecărui aliment. Elevii s-au aşezat. Se citeşte de la tastatură un şir de n cifre binare (n-multiplu de 5). după înălţime.-1.4. Se dă un şirde numere care se reţine într-un vector.23. Profesoara de sport a clasei a X. şi afişează sub şirul căutat de doamna profesoară de sport.5.a i-a rugat pe elevi să se aşeze într-un şir.

5. 6. La clasa a IX-a dirigintele a păstrat pe calculator pentru toţi elevii numele. formând o matrice. crescător. Să se scrie un program care citeşte de la tastatură aceste date. Dintr-o greşeală a inversat mediile elevei POP RODICA cu mediile elevei POP RADA. undeva la marginea 33 . Să se scrie un program care ordonează elevii descrescător dupa media generală apoi îi afişează în această ordine. b) Determină şi afişează perioada cu preţul mediu cel mai ridicat. La o clasă de elevi se păstrează pe calculator numele elevilor. care este prima din sezon. Pentru fiecare pom din livadă se cunoaşte vârsta lui şi specia. Să se scrie un program care realizează următoarele: a) Determină şi afişează elevii care au majoritatea mediilor peste 7. apoi formează un şir cu acele medii ale elevilor care sunt maxime (la fiecare elev se păstrează media maximă). La o clasă de elevi se păstrează pe calculator mediile din semestrul 1 ale fiecărui elev. la fiecare disciplină. se păstrează pe calculator evidenţa mediilor din semestrul 1 a fiecărui elev. 4. O firmă de tUrism păstrează pentru toate staţiunile de pe litoral preţurile de cazare corespunzatoare fiecărei perioade. La o clasă de elevi se păstrează pe calculator mediile din semestrul 1 ale fiecărui elev. la fiecare disciplină. la fiecare disciplină. Într-o livadă mare pomii sunt plantaţi pe rânduri . inversând mediile celor două eleve. numerotaţi de la 1 la n.2. precum şi mediile din semestrul 1 ale fiecărui elev. Să se scrie un program care realizează următoarele: a) Determină şi afişează staţiunea care are cel mai mic preţ pentru săptămâna a 7-a. Informaţiile au fost memorate în calculator în ordinea alfabetică. La o clasăde elevi. Să se scrie un program care citeşte de la tastatură aceste date apoi afişează mediile fiecărui elev. pâna la a 25-a săptamână. prenumele şi mediile la cele 15 discipline. 3. Perioadele se numerotează începând cu săptămâna 1V-7V. b) Afişează elevii în ordinea mediilor la română (este prima materie în catalog). Scrieţi un program care să-I ajute pe diriginte să corecteze greşeala. 7. 8. Proprietarul livezii vrea să-şi construiască o casă.

Apoi le spune elevilor să se aşeze pe fiecare linie de la dreapta la stânga. întâi fetele. Un alpinist vrea să caute cea mai înaltă zonă. etc. Pe o tablă de şah (8*8=64 pătrăţele) sunt aşezate n ture (n<64). Toţi elevii. Pentru că nu ar renunţa la nici un pom se hotăreşte să taie cel mai bătrân pom de pe marginea livezii. Scrieţi un program care citeşte de la tastatură numele. dar în locul turelor avem nebuni care se atacă pe diagonală. astfel: pe linia din faţa lui clasa întâi. Poziţia fiecăreia este dată prin două coordonate x. La clasa 1. de după el ar trece atunci pe poziţia dinaintea lor. Se va citi de la tastatură configuraţia iniţială a elevilor. Scrieţi un program care să rezolve această problemă. 13. dar nu are suficient spaţiu. iar dacă sunt mai multe cu aceeaşi înălţime să o aleagă pe cea care are cele opt zone învecinate de înălţimi foarte mici (suma înălţimilor să fie cea mai mică). 10. afişând un mesaj corespunzător. 11. la ora de educaţie fizică. apoi băieţii. Afişaţi coordonatele turelor care au rămas pe tabla de şah. y. 34 . Ajutaţi alpinistul să găsească zona preferată (această zonă nu trebuie să fie pe margine). determină aşezarea obişnuită. fiecare zonă având o înălţime cunoscută. Un teren muntos are forma unei matrice cu m*n zone. se va ordona fiecare linie fete-sbăieţi. În această configuraţie se pot observa uşor care sunt clasele cu cele mai multe fete. Aceeaşi problemă. Elevii sunt aşezaţi după înălţime. Ar trebui să taie un pom de pe margine şi spaţiul i-ar fi suficient. pe ultima linie clasa a VIIT-a. livezii. În prima zi de şcoală. 9. 12. apoi se vor afişa clasele cu cele mai multe fete. apoi determină şi afişează noua aşezare a elevilor.. în curtea şcolii domnul director le cere tuturor elevilor să se aşeze pe clase. înălţimea celor 30 de elevi. Se ştie că în fiecare clasă sunt 25 de elevi. iar locul lui ar trebui ocupat astfel încât locul liber să rămână în ultimul rând. Într-una din ore elevul POP SORIN lipseşte. pe a doua linie clasa a IT-a. Turele care se găsesc pe aceeaşi linie (verticală sau orizontală) dispar instantaneu. învăţătoarea îi aşează pe elevi pe 5 rânduri şi 6 coloane.

Se citeşte de la tastatură o matrice nxm. Afişaţi valorile din panou dupa 1. respectiv "diferit" în caz contrar. 2 sau 3 rotiri succesive spre dreapta (se consideră că după o rotire numerele se pot vedea normal. 15. numerele care se suprapun au aceeaşi valoare. Să se scrie un program care afişează elevii de pe diagonala principală.lO. Rezolvaţi problema folosind: a) două matrici cu aceleaşi dimensiuni b) o singură matrice. Cei n2 elevi ai unei clase sunt aşezaţi într-o matrice de nxn. Să Exemplu: 1 se afişeze suma numerelor care se pot forma din cifrele fiecărei linii. Pereţii sunt codificaţi cu -1. O6 8 2 4 Pt. 21. de linii şi coloane). Se citeşte o matrice An*m (n:::. Se citesc n şi matricea cu numărul de ordine al elevilor în catalog. Se va afişa "identic" dacă suprapunerea e perfectă. 17. 16. m:::. 20. Un apartament are planul codificat sub forma unei matrici nxm. 35 . Să se scrie un program care construieşte calendarul lunii respective şi afişează acest calendar sub o formă frumoasă. atunci când se închide cartea. Să se scrie un program care află linia care are suma elementelor cea mai mare. Un panou cu numere este prins într-un cui în mijloc şi se poate roti spre dreapta. 18. iar camerele cu numere începând de la 1. Se citeşte de la tastatură o zi în care începe luna şi numărul de zile al lunii.20) cu elemente cifre de la Ola 9. Să se scrie un program care determină şi afişează camera cea mai mare ca arie. Să se întoarcă matricea 90° spre dreapta. Să se stabilească dacă. 19. matricea A3*5 9 7 O 5 8 se va calcula 6824+ 97058 3 1 7 9 5 31795 135677 şi se va afişa 135677.14. O carte deschisă conţine în centrul fiecarei pagini câte un tabel cu numere (tabelele conţin acelaşi nr. uşile cu O. o afişează apoi calculează şi afişează această sumă. Generalizare pentru fi rotiri. deci nu răsturnate). Se citeşte o matrice cu nxm numere reale.

Exemplu: Pentru matricea 1 2 3 . 456 654 789 987 iar oglindita spre sud este matricea 7 8 9 456 123 Scrieţi un program care să obţină şi să afişeze matricea oglindită spre est şi matricea oglindită spre sud pentru Amxn dată. Exemplu: oglindita spre est a matricii 1 2 3 este matricea 3 2 l. matricea completată spre est este: 1 2 3 3 2 1 456 456654 789 789987 Scrieţi un program care citeşte o matrice şi obţine matricea completată spre est. 23.22. 26. Fiind dată o matrice A numim matrice completata spre est matricea ce conţine pe fiecare linie 1 elementele liniei 1 din A urmate de elementele liniei 1 luate în ordine inversă. Analog obţinem oglindita spre sud a lui A: matricea în care fiecare coloană j este formată din elementele coloanei j din A luate în ordine inversă. Dându-se o matrice. să se stabilească dacă una reprezintă oglindita spre est a celeilalte. La instrucţia de dimineaţă p soldaţi (având fiecare un număr de identificare) sunt aliniaţi într-un şir. Li se ordonă să se grupeze pe m rânduri şi n coloane astfel: primii il din şir în primul rând. 24. (se consideră p=m*n). de la ultimul spre primul. 27. următorii n din şir în al doilea rând etc. Afişaţi careul rezultat. 36 . Considerând 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ă. să se stabilească dacă ea reprezintă o matrice completată spre est sau spre sud. Analog să se obţină matricea completată spre sud. 25. Dându-se două matrici cu aceleaşi dimensiuni.

Stabiliţi dacă biletul a fost câştigător (un bilet se consideră câştigător dacă el conţine linia câstigătoare). 30. Se dau coordonatele pietrelor din 37 . are un bilet cu 4 linii şi 5 coloane la jocul Bingo. Exemplu: 1 2 3 4 0579 0064 0001 34. Forma grădinii este un dreptunghi cu laturile de Lg şi Lt (date în metri). Se consideră lJ) matrice Am. Fiind dată o matrice cu m linii şi n coloane să se elimine o linie k fară a folosi alte matrici. fiecare răspuns corect valorând 1 punct. 31. c) câte persoane au răspuns corect la toate întrebările. Se cere să se calculeze sumele din zonele haşurate (triunghiurile din mijloc). 32. 33. Aranjaţi rondourile astfel încât la sfârşit să fie grupate într-un capăt al grădinii acele rondouri ce conţin flori. 35. adică formarea şirului din careu. O grădină dreptunghiul ară de lungime m şi lăţime n conţine rondouri de plante diferite.28. Într-o grădină există N pietre.m . Să se scrie un program care verifică dacă o matrice pătratică e triunghiularăinferior (elementele de sub diagonala principală sunt egale cu zero). un rondou are lungimea m. cu n=2*m-1. Comisia de evaluare primeşte rezultatele a m candidaţi şi doreşte să întocmească un raport din care să reiasă: a) care au fost întrebările la care nu a ştiut să răspundă nimeni. Un test conţine n întrebări. Scrieţi un program care să simuleze acţiunea corespunzătoare. Comandantul soldaţilordin problema anterioară ordonă "La loc comanda!". O persoană. Se anunţă numerele de pe linia câstigătoare. 29. b) care au fost întrebările la care a ştiut să răspundă majoritatea (peste 50% din subiecţii testaţi).

interiorul dreptunghiului, se cere să se afle dreptunghiul de arie maximă
din interiorul grădinii.

36. Considerăm următorul joc: avem o tablă dreptunghiulară de lungime n şi
lăţime m. Tabla este împărţită în pătrăţele, asemănător tablei de şah. În
fiecare pătrăţel se află un cartonaş pe care este scris un număr întreg.
Trebuie găsită suma cartonaşelor ce conţin 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 pătrăţel se scrie un număr
natural. Găsiţi toate perechile de pătrăţele care sunt simetrice faţă de
diagonală şi conţin valori ce sunt prime între ele.

38. Elevii dintr-o clasă sunt aşezati în bănci pe rânduri şi coloane. Se ştie
câte rânduri şi câte coloane de elevi sunt în clasă. Cunoscându-se nota la
ultima lucrare la informatică pentru fiecare elev din clasă în ordinea în
care sunt aşezaţi în bănci şi ştiind că pentru elevii absenţi nota dată de la
tastatură este O (zero) să se afişeze numărul de elevi absenţi la lucrare
din fiecare rând şi poziţiile elevilor absenţi pe coloane sub forma: "din
coloana 'i' au fost absenţi elevii de pe poziţiile: kl, k2, ..., kp (p -
numărul de absenţi pe coloana i).

39. Într-o livadă pomii sunt aşezati pe n rânduri şi pe m coloane. Pentru
fiecare pom se cunoaşte înălţimea sa. Primăvara, grădinarul doreşte să
cureţe pomii de crengile uscate. El ar vrea să treacă pe la fiecare pom în
următoarea ordine:
a. rândul 1 de pomi de la primul la ultimul apoi în rândul al doilea de la
ultimul la primul, în al treilea rând de la primul la ultimul ş. a. m. d.
până când termină pomii de curăţat. Tipăriţi poziţiile pomilor din livadă
în ordinea în care va trece grădinarul pe la ei.
b. în spirală, rândul 1 de la primul pom la ultimul, coloana m de la primul
pom la ultimul, rândul n de la ultimul la primul, coloana 1 de la ultimul
la primul după care să continue cu rândul 2, coloana m-I, rândul n-I,
coloana 2, etc. până termină pomii de curăţat. Tipăriţi poziţiile pomilor
din livadă în ordinea în care va trece grădinarul pe la ei ştiind că pe la
un pom deja curăţat grădinarul nu trece încă odată.

a) Afişati poziţia pomului care este cel mai înalt în rândul lui iar pe
coloana lui cel mai scund.

38

b) Care este poziţia şi înălţimea copacului cel mai scund ? Dar pentru
cel mai înalt?
c) Afişati liniile în care există cel puţin un pom cu înălţimea sub
valoarea x (dată de la tastatură).
d) Afişaţi numărul de pomi mai înalţi decât o valoare dată de la
tastatură, y, din fiecare coloană.

40. Se dă o matrice de n*n numere naturale (n număr natural dat),
reprezentând codurile de culoare ale pixelilor unei imagini ce urmează a
se reprezenta pe ecran. Se citesc de asemenea valorile liml şi lim2
reprezentând codurile culorilor limită ale monitorului pe care dorim să
facem afişarea. Având în vedere faptul că monitorul nu poate reprezenta
culori cu coduri mai mici decât lim l şi nici mai mari decât lim2, să se
efectueze o operaţie de corecţie asupra matricii date astfel încât orice
valoare mai mică decât liml să fie înlocuită cu liml şi orice valoare mai
mare decât lim2 să fie înlocuită cu lim2, astfel încât 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) reprezentând
codurile de culoare ale unei imagini. Să se determine nuanţa
predominantă din tablou şi ce procent din întreaga matrice reprezintă.

42. Se dă o matrice de n*n numere naturale (n nr. natural dat) reprezentând
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 număr natural dat). Să se
interschimbe elementele dintre cele două diagonale ale matricii (zona
asemănătoare cu o clepsidră), prin simetrie faţă de orizontala ce trece
prin mijloc astfel încât 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, reprezentând limitele
unui interval. Să se elimine din matrice elementele ce nu aparţin
intervalului [a.b], împreună cu linia şi respectiv coloana
corespunzătoare.

45. Se citeşte de la tastatură o matrice de numere O sau 1 (biţi). 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
siguranţa transmiterii corecte a datelor constă în determinarea a două
numere obţinute 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 deteriorării informaţiei dintr-un bit al matricii,
prin recalcularea celor două numere vor rezulta diferenţe în ambele
numere, un bit alterat modificând atât informaţia pe linia pe care se află
cât şi pe coloana sa.

46. Se citesc de la tastatură n*m numere naturale într-o matrice cu n linii şi
m coloane, reprezentând mediile a m elevi la n materii (n şi m sunt două
numere naturale citite de la tastatură).
a) Să se afişeze o situaţie statistică generală cuprinzând:
numărul de medii sub 5
numărul de medii cuprinse între 5 şi 5.99
numărul de medii cuprinse între 6 şi 6.99

numărul de medii cuprinse între 9 şi 9.99
numărul de medii de 10
b) Să se afişeze descrescator un clasament al materiilor după numarul
de corigenţe. Nu vor fi afişate materiile la care nu exista corigenţi.

47. Un matematician, iubitor de tir sportiv şi-a pus problema construirii unei
ţinte pătrate de latură n (n număr natural citit de la tastatură), în care
punctajele să fie distribuite după reguli matematice proprii. S-a gândit
întâi 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 număr natural neprim este urmat de cel mai mare divizor
de-al său. Apoi, pentru o bună distribuţie a acestor numere ce trebuie să
crească pe interior s-a gândit să le aşeze în formă de spirală începând din

40

colţulstânga sus, continuând spre dreapta şi apoi jos. Să se afişeze ţinta
obţinută pentru o latură n citită de la tastatură.

II.3. ŞIRURI DE CARACTERE

1. Se citeşte de la tastatură un cuvânt. Să se stabilească dacă el conţine
două litere alăturate identice, afi.şându-se un mesaj corespunzător.

2. Se citeşte de la tastatură un şir de caractere ce reprezintă un număr de
telefon. Numărul este format dintr-un prefix de 4 cifre urmat de "-" şi
apoi de 6 cifre. Afişaţi numărul de telefon fără prefix.

3. Se citeşte de la tastatură un cuvânt cu litere mari sau mici. Să se scrie un
program care să afişeze cuvântul scris cu prima literă mare şi restul mici.

4. Se citesc deIa tastatură n cuvinte. Se cere să se afişeze cuvintele cu
lungime maximă.

5. Să se scrie un program care să valideze citirea unui şir de caractere ce
reprezintă numărul de înmatriculare al unei maşini: primele două
caractere trebuie să fie litere mari, următoarele două trebuie să fie cifre,
iar ultimele trei litere mari.

6. Un lingvist face un studiu asupra unui text scris într-o limbă străină. El
vrea să afle de câte ori apare în text fiecare literă a alfabetului. Scrieţi un
program care citeşte de la tastatură un text scris cu majuscule şi afişează
numărul de apariţii pentru fiecare literă.

7. Se citesc de la tastatură n cuvinte. Se cere să se afişeze numărul
cuvintelor ce conţin caracterul "-" (liniuţa de despărţire).

8. De la tastatură se citesc n litere şi un cuvânt. Să se scrie un program care
să afişeze dacă folosind literele citite se poate scrie cuvântul ( exemplu:
n=3 literele citite: ma b ; cuvântul citit: mama=>DA).

9. La bibliotecă se păstrează pentru fiecare carte titlul şi autorul.
Bibliotecara vrea să aranjeze cărţile pe rafturi grupate pe autori. Afişaţi
aceste informaţii în liste: prima listă conţine toţi autorii al căror nume

41

12. 11. În magazia cantinei şcolare se găsesc n alimente. 13. Scrieţi un program care listează produsele cu cantitatea zero şi afişează alfabetic toate produsele şi cantităţile acestora. Să se afişeze propoziţia ce conţine un număr maxim de litere. 42 . În momentul în care cantitatea ajunge la zero trebuie aprovizionate. Textul poate începe direct cu un cuvânt sau cu unul sau mai multe spaţii. 14. Se citeşte un text dat într-o linie de la tastatură în care cuvintele sunt separate prin unul sau mai multe spaţii. La sfârşitul trimestrului 1 se scumpeşte hârtia cu 30% şi în consecinţă. începe cu litera 'A'. toate produsele de hârtie. iar dacă elimină literele rămâne data naşterii (sub forma zzllaaaa). Calculaţi şi afişati numărul de cuvinte din text. Pe măsură ce produsele se consumă. Scrieţi un program care să listeze toate produsele şi preţurile lor. În depozitul de papetărie al unei firme se găsesc n produse. etc. a doua listă conţine autorii al căror nume începe cu 'B'. Pentru jocul "Nu spune NU" realizaţi un program care verifică dacă într- un text dat apare vreodată cuvântul NU. 15. Se cere să se afişeze cuvintele palindrom (un cuvânt se numeşte palindrom dacă citindu-l de la sfârşit spre început se obţine acelaşi cuvânt). cantitatea scade. 16. Se citeştede la tastatură un text. În tren un călător îl întreabă pe vecinul său cum se numeşte şi în ce dată s-a născut. Ajutaţi călătorul să afle răspunsul la întrebarea pe care a pus-o. ştiind că la produsele care conţin în denumire cuvântul "hârtie" preţul creşte cu 30%. Acesta îi întinde o bucată de hârtie pe care este scris un şir de litere amestecate cu cifre şi îi spune că dacă elimină cifrele din şir rămâne numele şi prenumele. Se citesc de la tastatură n cuvinte. 10. Pentru fiecare produs se cunoaşte denumirea şi preţul. fiecare având o anumită cantitate.

numărarea literelor începe cu prima literă din şir). 'Y' devine 'A'. pentru a nu le putea citi părinţii. etc. Ajutaţi-l pe Ionel scriind un program corespunzător. Ea îi dă lui Ionel lista cumpărăturilor care conţine produsele cumpărate şi costurile lor. Se citeşte de la tastatură un text ce conţine litere mici şi spaţii.17. Laura şiAna vor să-şi scrie scrisorile cifrat. începând cu prima literă care urmează după o literă selectată anterior (pentru prima cifră a numărului. 19. 20. Ajutaţi-I pe Ionel să scrie un program care citeşte lista cumpărăturilor ca şir de caractere şi afişează valoarea totală a produselor din listă. Mama lui Ionel s-a întors de la piaţă şi vrea să afle cât a cheltuit. 'Z' devine 'B'. Astfel litera 'A' devine litera 'C'. Afişaţi numărul cuvintelor care au literele ordonate alfabetic. Pentru ca să înveţe mai uşor. Afişaţi numărul cuvintelor care sunt scrise cu majuscule. 22. Litera 'X' devine 'Z'. Doamna învaţătoare a observat că Andrei a scris greşit un cuvânt şi vrea să afle dacă greşeala a fost repetată. Elevii trebuie să cunoască pentru fiecare ţară capitala ei şi continentul din care face parte. Se citeşte de la tastatură un şir de caractere format din litere mici ale alfabetului englez şi un număr de maxim 12 cifre. Scrieţi un program care 43 . Valoarea fiecărei cifre din numărul' dat ne indică a câta literă din şir trebuie selectată. 23. Ionel şi colegii lui învaţă la ora de geografie ţările lumii. Literele astfel selectate formează un cuvânt. litera 'B' devine 'D'. Se citeşte de la tastatură o linie cuprinzând cuvinte separate prin unul sau mai multe spaţii. Scrieţi un program care citeşte textul compunerii şi cuvântul scris greşit şi afişează de câte ori apare cuvântul în text. Construiţi şi afişaţi cuvântul obţinut. 21. 18. Ionel vrea să alcătuiască 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 afişate în ordinea alfabetică a capitalelor. Andrei este elev în clasa 1 şi a primit ca temă să scrie o compunere.

A. Se citeşte de la tastatură un cuvânt şi apoi o frază ce conţine cuvinte separate prin spaţii. Scrieţi un program care citeşte fraza reprezentând răspunsul vedetei şi afişaţi numărul reprezentând anul (pot exista în frază şi alte date numerice. Mesajul secret al bunicii: Pe la începutul secolului nostru. între fiecare două cuvinte să 44 . Un reporter are înregistrat un interviu luat unei vedete de muzică pop. dar numai una este anul primei apariţii discografice). fără spaţii. 24. Atât la codificare cât şi la decodificare se înlocuia în tot textul vocala prin consoana corespunzătoare şi invers. 25. Să se scrie un program care să simuleze această operaţie. 29. cum ar fi: LA CE NI RO PU în care fiecare vocală era cuplată cu o consoană.Amariei). Să se scrie un algoritm care codifică un text citit de la tastatură.Popescu. Între fiecare două cuvinte pot fi unul sau mai multe spaţii. când bunica era fată. Amariei). Să se stabilească dacă există în frază două cuvinte care prin concatenare formează cuvântul citit. codifică un text scris cu majuscule. 27. Se citesc-numele şi prenumele celor n elevi din clasă. 26. Textul poate începe cu un cuvânt sau cu unul sau mai multe spaţii. Se citesc n cuvinte.Moldovan. Ea vrea să insereze înaintea numelui iniţiala prenumelui lor (M. Se folosea un cod simplu. folosind modul de codificare specificat. L. astfel încât noul identificator va conţine iniţiala. Să se scrie un program care să afişeze două liste: una care conţine cuvintele în care predomină vocalele şi alta care conţine cuvintele în care predomină consoanele. şi în caz afirmativ să se afişeze cele două cuvinte. Îl interesează în mod special răspunsul la întrebarea legată de anul în care a scos primul album. de ordinul milioanelor. circula prin lume moda codificării scrisorilor de dragoste. 28. Se citeşte un text de la tastatură scris pe o linie până la apăsarea tastei <enter>. La începutul anului şcolar doamna dirigintă primeşte o listă cu numele elevilor (Popescu. punct şi numele. Să se afişeze textul formatat: scris cu majuscule. Moldovan.

Exemplu: Ochii tăi. existe un singur spaţiu. 31. Se afişează şirul obţinut. Toţi elevii unei clase dau acest test. Se cere să se scrie un program în care: a) Se verifică datele la introducerea lor astfel încât să nu fie permisă citirea într-o altă ordine decât cea alfabetică. d) Se elimină din şirul de la punctul «c» numele care încep cu « pop ». Exemplu: Se dă: 7 850321 45 . etc. Pentru ca să ştie care sunt melodiile folosite le dă numele sugestive. b) Se afişează numele care încep cu « pop » de ex. Să se afişeze în cuvinte suma respectivă.: pentru un şir de caractere de lungime n considerăm că prima şi a doua treime conţin nl3 caractere. Hineana. textul să înceapă direct cu un cuvânt fără spaţii în faţă. iar ultima parte a numelui melodiei este formată din ultima treime al celui de-al treilea nume. c) Se crează un şir de caractere din aceste nume prin concatenarea lor fiecare două nume fiind separate în şir prin câte un spaţiu. Dimineaţa. Hero. Obs. Canadia Se va afişa: Ocheata. iar ultima treime conţine restul caracterelor. Un copil ajunge la calculator şi din lista de melodii selectate face tot din câte 3 melodii consecutive una. Se afişează şirul obţinut. popa. Se citeşte de la tastatură un număr natural. 30. Se cunoaşte punctajul fiecărui item. 32. Prima parte a numelui melodiei este formată din prima treime a numelui primei melodii. Se citesc de la tastatură în ordine alfabetică numele a n persoane. Scrieţi un program care citeşte numele tuturor elevilor. Într-un studio de înregistrări se fac mixaje. partea din mijloc a numelui rezultat este formată din treimea din mijloc a melodiei a doua. pop. reprezentând o sumă de lei. Să se scrie un program care citeşte şirul numelor melodiilor şi determină numele rezultate. itemii la care au răspuns corect apoi afişează elevii în ordinea descrescătoare a punctajului realizat. Pentru fiecare elev se cunosc itemii la care a răspuns corect. popescu. Un test de informatică conţine n itemi. 33. popovici.

Q.S 2 pentru B.M. Se afişează: şapte milioane opt sute cinci zeci de mii trei sute două zeci unu lei. 34.P. Se cunosc de asemenea valorile asociate fiecarei litere: 1 pentru A.L.J. Obs. 35.Y 8 pentru H.: Datele referitoare la cilindru vor fi descrise ca articol. Fie a şi b două numere reale şi p natural nenul. Numărul asociat numelui dumneavoastră se calculează ca suma tuturor numerelor asociate literelor care îl compun. Scrieţi un program care citeşte aceste informaţii referitoare la un cilindru apoi calculează şi afişează aria laterală. Conform tratatelor de numerologie numele dumneavoastră întreg influenţează imaginea dumneavoastră publică şi va reprezinta în totalitate. lună.Z 9 pentru l.U 4 pentru D.T 3 pentru C. adunate până când rezultatul final este doar o cifră.N. an) Să se scrie un program care citeşte în variabile de tip articol aceste informaţii apoi afişează numele persoanei mai vârstnice precum şi vârsta acesteia.V 5 pentru E. separate prin caracterul "T". aria totală şi volumul cilindrului. Pentru două persoane se cunosc următoarele informaţii: • numele • data naşterii (zi. Se citeşte de la tastatură un şir de caractere ce reprezintă o mulţime de numere scrise în baza 16. ÎNREGISTRĂRI 1. 2. Să se afişeze valoarea în baza 1O a acestor numere. 46 . să se calculeze cifra asociată acestuia.W 6 pentru F. Un cilindru circular drept este caracterizat de raza bazei şi înălţime. Dându-se de la tastatură numele întreg al unei persoane.K. 36. Să se afişeze zecimalele p şi p+ 1 ale numărului real alb.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.X 7 pentru G.O.

Dintre aceste informaţii. numele. 6. 7. Fiind date două numere complexe a şi b. În laboratorul de informatică sunt n calculatoare.3. prenumele. media la purtare.. capacitatea hard discului. numărul de absenţe. 4. Pentru elevii clasei a IX-a profesorul diriginte are nevoie de următoarele informaţii: numele. tipul monitorului şi alte periferice. Pentru cei n elevi ai unei clase se cunosc următoarele date: numele. numărul de absenţe şi absenţele nemotivate se preiau din catalog (se cunosc). fiecare scrise sub forma x+yi (x şi y sunt numere reale) se cere să se calculeze şi să se afişeze suma. Să se scrie un program care citeşte aceste informaţii. numărul de absenţe nemotivate. La un magazin de textile produsele sunt caracterizate de următoarele informaţii: 1» denumirea articolului . capacitatea memoriei interne. diferenţa. prenumele. apoi afişează o listă a elevilor ordonată după numărul total de absenţe. le afişează. media generală. Pentru fiecare se cunoaşte tipul procesorului. prenumele. produsul şi modulul celor două numere complexe. Scrieţi un program care citeşte aceste informaţii apoi afişează toate echipamentele pe care poate 47 . calculează şi afişează valoarea totală a materialelor existente. calculează media generală a clasei şi afişează toate informaţiile în ordinea descrescătoare a mediei generale. numărul de absenţe. 5. preţul unui metru de material • lăţimea materialului • cantitatea de material Scrieţi un ~~ogram care citeşte de la tastatură informaţiile referitoare la cele n produse din magazin. iar media la purtare se calculează în funcţie de absenţele nemotivate astfel: între 0-9 absenţe nota 10 între 10-20 absenţe nota 9 între 21-27 absenţe nota 8 între 28-35 absente nota 7 între 36-42 absenţe nota 6 între 43-50 absenţe nota 5 peste 50 absenţe nota 4 Scrieţi un program care calculează notele la purtare ale elevilor.

10. porci. vaci şi cai. Să se calculeze care dreptunghi are cea mai mare diagonală şi care are aria cea mai mare. Se citesc lungimea şi lăţimea pentru mai multe dreptunghiuri. vacilor şi al cailor. 13. 8. Să se creeze un şir de articole ordonat crescător conţinând numerele distincte din matrice şi frecvenţele de apariţie ale acestora. Se citeşte de la tastatură o piesă. 9. (n şi m sunt două numere naturale citite de la tastatură). memorie cel puţin 32MO. 14. elemente ale unei matrici cu il linii şi m coloane. dirigintele are nevoie de numele şi prenumele elevilor. iar pentru elevii cu acelaşi nume să se ordoneze alfabetic după prenume. raţe. denumirea piesei (max. La un festival de dans studenţesc participă n trupe. cai şi care are cele mai multe animale. Se citeşte n. Să se ordoneze aceste date alfabetic. raţe. pentru a face o lucrare. vaci. porci. după nume. raţelor. Pentru mai multe videoclipuri se citeşte artistul. Dansurile se identifică prin numele dansului precum şi numele trupei. Se citeşte n (numărul elevilor) apoi n perechi de date. capacitatea hard discului cel puţin 200MO). 12. Se citeşte n apoi n perechi de numere reprezentând preţul/zi de lucru şi durata (în zile). Pentru a putea fi urmărite de către juriu mai este necesară o listare a trupelor alfabetic. Să se afişeze care e cea mai bună ofertă (cea mai ieftină). apoi n mulţimi de numere reprezentând numărul găinilor. Fiecare are o ofertă de preţ şi de durată. Ordinea de concurs este cea crescătoare a duratei. N firme de construcţii participă la o licitaţie. 11. rula sistemul de operare WINDOWS 95 (adică procesor cel puţin 486. Fiecare trupă prezintă un program care durează d minute. Pentru a scrie catalogul. Se citesc de la tastatură n*m numere reale. Scrieţi un program care realizează programarea pentru festival a acestor trupe. Dacă aceasta este pe listă să se afişeze artistul şi albumul de pe care aceasta face parte. 200 caractere) şi albumul de pe care aceasta face parte. N ferme au găini. porcilor. Să se afişeze ferma care are cele mai multe găini. 48 .

dintre cele n tipuri existente. la tastatură perechi de numere naturale. b) preia de la tastatură indicii produselor şi cantităţile pentru cele k produse cumpărate de un client şi afişează factura de plată sub forma: produs 1 cantitate1 * preţ1 produs2 cantitate2 * preţ2 produsk cantitatek * preţk TOTAL suma de plată 16. Se dă un produs de puteri (fiecare factor este format din bază şi exponent). Calculaţi şi afişaţi valoarea acestei sume. Se dau n puncte (A.. Scrieţi un program care: a) permite introducerea de la tastatură a denumirilor şi preţurilor celor n tipuri de produse.0). b) numărătorul şi numitorul fracţiei obţinute prin înmulţirea acelor fracţii din şirul dat.. DJ-ul este invitat la o petrecere şi îşi propune să facă o selecţie de 100 de minute de muzică. Pentru aceasta urmează să copieze pe un CD mai multe piese din lista pe care o 49 . Un DJ are o listă cu piese muzicale. Afişaţi: a) numărătorul şi numitorul fracţiei/fracţii1or care are/au valoare maximă. 18. 17. Să se afişeze toate triunghiurile echilaterale ce se pot forma din aceste puncte. eliminaţi din produs acei factori a căror bază se repetă. pentru fiecare fiind precizată formaţia. apoi calculaţi şi afişaţi valoarea produsului. Se dă o sumă de puteri (fiecare termen este format din bază şi exponent). La un magazin se păstrează pentru fiecare tip de produs. titlul piesei. genul şi durata. Utilizând formula. Citirea se termină la întâlnirea perechii (0.astfelîncât valoarea fracţiei produs să fie maximă. C. Pentru fiecare client vânzătoarea tastează indicele pentru fiecare din cele k produse cumpărate şi cantitatea cumpărată din fiecare produs.15. Se citesc de. 20. an * affi=an+ffi . 19. reprezentând numărătorul şi numitorul unei fracţii simple. denumirea şi preţul.. ) şi coordonatele lor într-un plan xOy. B.

La un laborator de recoltare a sângelui există lista donatorilor şi grupele lor sangvine. populaţia. Un elev a primit o temă pentru ora de geografie: trebuie să afle informaţii despre anumite ţări de pe glob. Laborantul trebuie sa întocmească o situaţie care să cuprindă: a) lista persoanelor care pot dona sânge oricui. Lista cuprinde. b) numărul donatorilor din fiecare grupă. 21. suprafaţa. are. capitala. 24. 22. 50 . din fiecare formaţie. Scrieţi un program care să răspundă întrebărilor din tema elevului: a) Care este ţara cu cea mai mare densitate a populaţiei? b) În ce ţări europene poate călători 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. Are o listă cu numele şi data naşterii colegilor. având la dispoziţie o listă cu date referitoare la acestea. Afişaţi o variantă pentru lista de piese selectate de DJ pentru petrecere. Ajutaţi-l să afle dacă are vreun coleg născut în aceeaşi zi şi aceeaşi lună cu el. pentru fiecare ţară: denumirea. b) dar după a doua săritură? c) care sunt concurentele care au avut diferenţa mai mare de un punct între notele de la cele două sărituri? d) care sunt numele primelor 10 clasate şi notele lor finale (nota finală a unei concurente se obţine ca medie a celor două note). limba oficială şi continentul în care e situată. iar dacă nu. Un elev din clasa a IX-a vrea să îşi sărbătorească ziua de naştere împreună cu un coleg. La proba de sărituri a unui concurs de gimnastică artistică fiecare concurentă are dreptul la două sărituri şi pentru fiecare saritură i se acordă o notă. Preşedintele 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 săritură? . astfel încât să apară cel puţin o melodie din fiecare gen şi. căutaţi o persoană din clasa care-şi sărbătoreşte ziua de naştere la diferenţă de maxim o săptămână faţă de el. Scrieţi un program care să soluţioneze cerinţele preşedintelui juriului. dacă e posibil.

27. Recent s-au mai finalizat lucrăile de restaurare la unele mănăstiri şi a sosit o nouă listă. se vor afişa toate). Scrieţi un program care preluând de la tastatură aceste informaţii. La începutul anului şcolar. situatiei cerute. nemaiavând pereche. afişează toate cărţile pe edituri. La o agenţie matrimonială se păstrează informaţii referitoare la persoanele înscrise: numele. 26. Pentru toate cărţile unei biblioteci şcolare se păstrează următoarele date: autorul. La direcţia Patrimoniu există o listă cuprinzând numele mănăstirilor din Moldova şi anul restaurării acestora. apoi afişează toate cărţile scrise de L. 28. doamna învăţătoare vrea să aranjeze elevii în bănci astfel: în fiecare bancă o fată cu un băiat (dacă numărul fetelor este diferit de cel al băieţilor atunci. realizând un program care să permită alegerea uneia din opţiunile următoare: • Căutarea unei persoane de aceeaşi vârstă cu solicitanta şi afişarea ei (dacă se găsesc mai multe persoane. editura. vor sta şi două fete sau doi băieţi). prenumele. afişând situaţia completă. Lista cuprinde numele. iar în spatele unui 51 . anul naşterii şi anul morţii scriitorilor. La o librărie există o listă cu scriitori celebri. scrieţi un program care să permită obtinerea . Folosind tabelul de mai jos. c) afişarea scriitorilor care au trăit în două secole diferite. 29. prenumele. anul apariţiei. • Căutareaunei persoane cu vârsta cuprinsă într-un domeniu de valori specificate. genul. În spatele unei fete va sta un băiat. • Căutarea unei persoane de vârstă cât mai apropiată. Ajutaţi o persoană singură să-şi găsească "jumătatea". număr de pagini. 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. Actualizaţi informaţiile din prima listă. Blaga. titlul. vârsta şi ocupaţia. Scrieţi un program care să realizeze următoarele: a) afişarea scriitorilor al căror centenar se sărbătoreşte în acest an. b) ordonarea alfabetică a scriitorilor născuţi în secolul al XIX-lea.

pentru fiecare element al tabloului scriind marca. Exemplu: fiat dacia mercedes dacia dacia roşu alb roşu roşu gri opel dacia XXX fiat ford gri gri gri alb opel xxx ford fiat XXX alb alb verde b) Determinaţi numărul de maşini cu marca "fiat" de culoare verde din parcare. Locurile libere se marchează cu "XXX". înălţimea sa şi sexul. să-i împartă în cele m clase corespunzătoare. Pentru înscrierile de la început de an trebuie făcut un program care. Ajutaţi-o pe doamna învăţătoare să aranjeze elevii în bănci. băiat va sta o fată. împărţirea se face în ordinea descrescătoare a mediilor. 30. f) Construiţi şi apoi afişaţi o matrice cu două coloane care să conţină poziţia pentru fiecare din locurile libere (linia şi coloana). numărul de maşini şi culoarea acestora. culoarea maşinii respective. al doilea în următoarea şi tot asa până când s-a repartizat câte un elev în fiecare 52 . c) Câte maşini din fiecare marcă sunt parcate pe fiecare linie de parcare? d) Afişaţi linia cea mai aglomerată şi linia de parcare cu cele-mai puţine maşini parcate şi tipăriţi numărul maşinilor de pe fiecare dintre ele. 31. Se cunoaşte culoarea şi marca maşinii pentru fiecare dintre maşinile parcate. iar cei mai înalţi în ultimele bănci. e) Există vreo linie de parcare în care toate maşinile au aceeaşi culoare? În caz afirmativ tipăriţi numărul liniei. În clasă sunt trei rânduri de bănci. În fiecare loc din parcare poate să fie parcată o maşină sau să fie loc liber. iar sub marcă. Cei mai mici de înălţime vor sta în primele bănci. prenumele şi media de admitere a fiecăruia dintre cei n elevi. Parcarea de la un supermagazin este organizată pe linii şi pe coloane. a) Afişati situaţia din parcare sub forma unui tablou bidimensional. cunoscând numele. Se va citi de la tastatură numele fiecărui elev. Primul în prima clasă. pe linii şi coloane.

apoi se trece din nou la prima clasă pentru cel de-al doilea elev. Cu ocazia inceperii campionatului de fotbal. Reprezentantul fabricii prezintă conducerii clubului o listă cu următoarele informaţii: numărul de pantof . Pentru aceasta se adresează unei fabrici producătoare cu producţie mică dar cu produse de calitate. Afişaţielevii ordonaţi pe clase.număr pantof Să se distribuie câte o pereche de pantofi de sport din stocul producătorilor fiecărui fotbalist în ordinea dată şi în conformitate cu numărul pe care-I poartă la pantof. care-şi prezintă disponibilitatea de moment. etc.care este preţul unei perechi Informaţiile despre fotbalişti se găsesc pe o altă listă sub forma următoare: nume fotbalist . În plan sunt date n dreptunghiuri cu laturile paralele cu axele. Scrieţi un program care determină aria figurii formată din suprapunerea acestor dreptunghiuri. 53 . 33. conducerea clubului "Avântul tineresc" hotăreşte să cumpere echipei de fotbal un set complet de adidaşi pentru antrenament. 32. clasă.câte perechi există în stoc . Pentru fiecare dreptunghi se dau coordonatele x şi y ale eolţurilor stânga jos şi dreapta sus. Să se afişeze suma plătită de club şi numărul de jucători ce au rămas eventual rară încălţămine (din cauza stocului limitat).

Scrieţi un program care determină acest număr şi îl afişează. TXT se găsesc numere naturale de maxim 9 cifre separate prin spaţii. Să se scrie un program care afişează elevii cu media 10 şi creează fişierul ELEVBUN.TXT şi DIV3. CAPITOLUL I I I FIŞIERE TEXT 1. Afişaţi câte adrese de e-mail sunt în fişier şi câte persoane au cont de e-mail pe "yahoo". În fişierul text PROBLEME. În fişierul text NUMERE. Aceste fişiere vor conţine numerele divizibile cu 2 respectiv 3 din fişierul iniţial. 2. Determinaţi numărul de probleme care cer prelucrarea unor fişiere. conţinând numele elevilor cu media peste 7.TXT conţine mai multe şiruri de numere întregi. 4. separate prin spaţiu.OUT toate cuvintele care încep cu majusculă. Programul va afişa numărul de numere citite din fişierul de intrare. 6. Scrieţi un program care citeşte textul din fişierul dat şi scrie în fişierul MAJUSCULE. Nu se cunoaşte numărul de şiruri şi nici câte elemente are fiecare şir.DAT se găsesc scrise pe câte un rând media generală şi numele elevilor.TXT. 5. Într-un fişier text sunt memorate adresele de e-mail ale unor persoane. fiecare cuvânt va fi scris pe o linie. elementele fiecărui şir aflându-se pe câte o linie.DAT. În fişierul ELEVI. Există creat pe disc fişierul CUVINTE. Fişierul ŞIRURI. 54 . separate prin câte un spaţiu. 3.TXT sunt scrise enunţurile mai multor probleme de informatică. fiecare problemă fiind scrisă pe o linie. Scrieţi un program care să creeze fişierele DIV2. Aceste probleme conţin cuvântul "fisier" în textul lor. Afişaţi numărul de ordine al fiecărei linii din fişier care conţine un şir ordonat crescător.IN care conţine un text format din mai multe linii.

Fişierul text ECUAŢII. 8.TXT ce va conţine pe fiecare linie soluţiile ecuaţiei de gradul al II-lea cu coeficienţi a.TXT trebuie adăugat. conţine localitatea în care s-au înregistrat aceste precipitaţii. care să conţină 10000 de numere aleatoare divizibile cu 3 din intervalul [1. verifică dacă sunt identice şi în caz afirmativ. Un elev are pe discul calculatorului foarte puţin spaţiu liber. 11.DAT. 9. ce conţine numai caracterele de la "a" la "m" şi apoi de la tastatură un caracter. Există creat pe disc fişierul DOCUMENT. Scrieţi un program care citeşte numele a două fişiere.TXT conţine un text format din litere mici. conţinutul fişierului DOCUMENT. Datele existente în aceste fişiere nu trebuie şterse. iar dacă ecuaţia nu are soluţii reale va scrie pe linia corespunzătoare mesajul "NU ARE SOLUŢIE REALĂ". Se mai citeşte denumirea unei localităţi şi se cere să se afişeze cantitatea de precipitaţii pentru acea localitate. al cărui conţinut trebuie copiat în mai multe fişiere.b. conţine cantitatea de precipitaţii. Se dau două fişiere cu acelaşi număr de linii.. apoi afişează conţinutul fişierului pe ecran.c. iar celălalt. Numele acestora se citeşte pe rând de la tastatură. 10. cu numele LOCALIT. Să se verifice dacă acest caracter se găseşte în mullţime. TXT conţine pe fiecare linie triplete de forma abc numere reale. Să se scrie un program care crează fişierul ALEATOR.7. Fişierul IN. 14. Scrieţi un program care transformă prima literă a fiecărui cuvânt în literă mare. precum şi localitatea în care s-au înregistrat aceste precipitaţii. OUT. cu numele PRECIP.20000]. şterge fişierul cu numele mai lung. Să se creeze fişierul SOLUŢII. Se citeşte dintr-un fişier o mulţime.TXT. Scrieţi un program care să determine cantitatea de precipitaţii maximă.DAT. Să se scrie un program care determină câte aliniate are romanul şi câte pagini ştiind că pe o pagină intră 40 de rânduri. 55 . În fişierul ROMAN. Primul. 13. 12. De aceea el vrea să depisteze fişierele text identice şi să aleagă unul dintre ele.TXT se găseşte scris un roman de aventură.

Scrieţi un program care preia de la tastatură numele celor două fişiere. A rima înseamnă că ultimele 3 litere din vers coincid. versul 3 cu versul 4 şi aşa mai departe. 56 .TXT sunt scrise versuri. În fişierul POEME. 18.15. Adelina a scris o scrisoare bunicii sale şi a salvat textul într-un fişier de tip text. b) Număraţi de câte ori apare în scrisoarea Adelinei (din fişier) cuvântul "bunic" (chiar dacă se găseşte ca parte a unui alt cuvânt. A încurcat textele şi acum nu mai ştie dacă cele două fişiere sunt identice sau conţin părţi diferite ale scrisorii. Rima este încrucişată dacă versul 1 rimează cu versul 3. Se citesc dintr-un fişier numere. în două fişiere diferite pe aceeaşi dischetă. de exemplu "bunicuţa" sau "bunicul") şi tipăriţi valoarea obţinută. Rima împerecheată este caracterizată de faptul că versul 1 rimează cu versul 2. Să se scrie un program care să citească câte 4 numere şi să afişeze suma lor pe ecran. La sfârşit să se afişeze şi suma tuturor numerelor din fişier. Fiecare vers este scris pe o linie şi se poate încheia cu '. încrucişată sau de alt fel. le compară şi afişează unul dintre textele: "fişierele sunt identice" sau "fişierele sunt diferite". A doua zi a mai scris o parte din scrisoare şi a salvat-o într-un alt fişier de tip text. versul 2 rimează cu versul 4 şi aşa mai departe. Frecvenţa se calculează ca raport între numărul de apariţii al cifrei şi numărul total de caractere din text.' sau '. a) Scrieţi un program prin care să o ajutaţi pe Adelina să concateneze cele două fişiere astfel încât scrisoarea pentru bunica ei să se afle într-un singur fişier. 16. Sunt păstraţi doar termenii diferiţi de zero. Într-un fişier text se află termenii unui polinom. Să se calculeze valoarea polinomului pentru o valoare reală x. Să se calculeze şi să se afişeze frecvenţa de apariţie a fiecărei cifre dintr- un text scris pe mai multe linii într-un fişier. 20. în acelaşi director. 17.'. Să se scrie un program care să determine dacă rima este împerecheată. dată de la tastatură. Adelina a salvat textul cu scrisoarea pentru bunica ei de două ori. fiecare pe câte o linie (coeficientul urmat de un spaţiu şi gradul termenului). 19.

Fiind date două fişiere text. Într-un fişier text există pe fiecare linie numele şi media unui elev. Alcătuiţi lista finală astfel încât o persoană să nu fie invitată de două ori. următoarele 4 codifică data naşterii sub forma aal1zz. Schimbarea denumirii străzilor şi pieţelor a fost întotdeauna o ocupaţie favorită a autorităţilor orăşeneşti din întreaga lume. Se consideră două fişiere ce conţin litere. Un fişier text conţine pe fiecare linie câte un identificator de fişier format din nume şi extensie. 25. Să se scrie "promovat" în dreptul elevilor cu medii peste 5. Un copil vede pe o maşină sigla unei ţări necunoscute. separate prin caracterul "=".TXT sunt păstrate codurile personale ale unor angajaţi dintr-o firmă (fiecare pe câte o linie). iar ultimele sunt caracteristice fiecărei persoane. Doi asociaţi ai unei firme au numele persoanelor care urmează să fie invitate la un dineu păstrate în două fişiere text (pe fiecare linie este trecut numele unei persoane). b) dacă există persoane născute în perioada 1960-1970 care lucrează în firmă. Ajutaţi-l să afle din ce ţară e maşina.21. unul conţinând pe fiecare linie denumirea veche şi denumirea nouă a unei străzi separate prin semnul ' !'. Să se afişeze lista fişierelor Pascal. 57 . se cere să se stabilească: a) câte persoane de gen feminin şi câte de gen masculin sunt angajate la firmă. iar celălalt conţinând cartea de telefoane a oraşului. 26. 22. separate prin punct. despărţite prin spaţiu. 24. Ştiind că în fişierul text CODURl. folosind un fişier text ce conţine pe fiecare linie sigla unei ţări (formată din una sau două litere) şi denumirea ţării. 23. să se creeze o carte de telefoane actualizată. Codul numeric personal din buletinul de identitate este format din 13 cifre: prima reprezintă codul genului (l pentru bărbaţi şi 2 pentru femei). respectiv "respins" în cazul celorlalţi. Se va crea un fişier pe are pe prima linie literele comune şi pe a doua linie literele distincte. 27.

28. Se citesc' din fişierul MATRICI.IN un şir de matrici scrise în felul
următor: pe prima linie sunt date numărul de linii şi coloane ale primei
matrici, separate prin spaţiu. Pe următoarele linii vor fi elementele
acesteia separate prin spaţiu. Apoi urmează celelalte matrici după
modelul descris la prima matrice. Să se scrie un program care determină
matricea care se obţine din toate matricile din fişier, însumând
elementele care se suprapun. Elementele se suprapun dacă sunt pe
aceeaşi linie şi aceeaşi coloană.

29. Fişierul MATRICI.TXT conţine două matrici şi are structura următoare:
pe prima linie două numere naturale n şi m, reprezentând numărul de
linii, respectiv numărul de coloane ale primei matrici; pe următoarele n
linii elementele acesteia; urmează o linie vidă, apoi pe următoarea linie
alte două numere naturale p şi g, reprezentând numărul de linii, respectiv
numărul de coloane al celei de-a doua matrice, iar pe următoarele p linii
se află elementele acesteia. Scrieţi în acelaşi fişier elementele matricii
produs, după ce aţi lăsat o linie vidă şi apoi pe o altă linie aţi scris
mesajul: "Produsul celor două matrici este: ". În cazul în care nu se
poate efectua produsul (numărul de coloane al primei matrici este
diferitde numărul de linii al celei de-a doua) scrieţi mesajul: "Nu se
poate efectua produsul celor două matrici".

30. În fişierul MATRICI.IN se găsesc mai multe matrici scrise pe linii.
Matricile sunt separate între ele printr-o linie goală. Să se scrie un
program care citeşte pe rând aceste matrici şi formează fişierul
MATRICI.OUT. Acest fişier conţine matricile rare din fişierul
MATRICI.IN. O matrice rară este acea matrice care are-majoritatea
elementelor zero.

31. Într-un fişier există date despre fiecare produs dintr-un magazin. Fiecare
linie conţine numele produsului şi categoria din care el face parte. Să se
afişeze aceste produse ordonate alfabetic după categoria din care fac
parte.

32. Un fişier conţine un text scris pe mai multe linii în care cuvintele sunt
separate prin unul sau mai multe spaţii. Se cere să se afişeze lungimea
maximă şi minimă a cuvintelor care reprezintă nume proprii din fişier.
Numele proprii sunt scrise cu toate caracterele majuscule.

58

33. Se citeşte un text scris pe mai multe linii într-un fişier. Să se codifice
textul, iar rezultatul obţinut să se scrie într-un alt fişier de tip text,
păstrându-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, ... ,
ramânând neschimbate.
°cu 9), celelalte caractere

34. Dintr-un fişier text se citesc de pe prima linie numărul de linii şi
. numărul de coloane ale unui tablou bidimensional, ce păstrează aşezarea
mai multor flori de specii diferite într-un strat. De pe liniile următoare se
citesc elementele tabloului astfel: pe fiecare linie din fişier se află câte o
linie din tablou, denumirile florilor fiind scrise fiecare pe câte 15
caractere. Să se creeze un alt fişier text care conţine indicii de linie şi de
coloană ai poziţiilor în care se află în strat "lalele". Se vor scrie pe
fiecare linie câte doi indici separaţi prin spaţiu, întâi indicele de linie
apoi cel de coloană.

35. În urma unui examen de admitere a rezultat un fişier text conţinând pe
fiecare linie punctajul obţinut de un candidat, un spaţiu şi apoi numele
şi prenumele candidatului respectiv. Ştiind că rezultatele nu sunt
ordonate descrescător după punctaj şi cunoscând numărul de reuşiţi, să
se determine (fără 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 afişa şi poziţia pe care o ocupă în clasament.

36. Se dau două fişiere text. Primul conţine numele şi prenumele elevilor
din clasa a IX-a A şi al doilea numele şi prenumele elevilor din clasa a
IX-a B. Ambele fişiere sunt ordonate alfabetic. Se cere un fişier rezultat
ce va conţine datele din cele două fişiere ordonate alfabetic, fără a folosi
alte structuri de date.

37. Fie ŢĂRI.TXT un fişier text ce conţine pe fiecare linie numele unei ţări
şi populaţia ţării respective şi CONTINENT.TXT un fişier text ce
conţine pe fiecare linie un nume de continent şi, separate prin spaţii, pe
rândul respectiv, ţările de pe respectivul continent. Se cere fişierul
TOTAL.TXT ce va conţine pe fiecare linie numele continentului şi
populaţia totală pe acel continent.

59

38. Ionel a scris într-un fişier text numele tuturor prietenilor săi, în ordinea
gradului de prietenie, începând cu cel mai bun prieten. În timp, această
ordine nu se mai potriveşte realităţii, astfel încât Ionel trebuie să
rearanjeze numele prietenilor din fişier. El atribuie un număr
corespunzător gradului de prietenie fiecărui nume din fişier (1 pentru cel
mai bun prieten). Scrieţi un program care să rearanjeze aceste nume în
funcţie de numărul corespunzător gradului de prietenie pe care vi-I dă
Ionel.

39. Se citesc dintr-un fişier text, pe fiecare linie, nume de microbi găsiţi în
corpul unei persoane (vor fi separaţi cu un spaţiu). Ştiind că toţi pacienţii
suferă de aceeaşi boală, se încearcă găsirea unor microbi comuni, care ar
putea fi un agent al bolii respective. Să se scrie un program care să
găsească eventualii agenţi ai bolii.

40. O dactilografă neglijentă a bătut
la maşină o ghicitoare, deşi ştia că o
anumsăsastă îi este defectă. Tot ce ştim este că e vorba de o vocală în
locul căreia trebuia să apară o consoană. Să se detecteze un cuvânt greşit
(ce conţine trei vocale alăturate) şi să se permită introducerea corectă a
acestui cuvânt, de la tastatură, descoperind astfel tasta defectă. Să se
facă apoi corecturile în text astfel: se vor afişa pe rând toate cuvintele ce
conţin litera greşită, şi ni se va permite să alegem dacă dorim sau nu
înlocuirea acesteia cu consoana în cauză.
Precizăm că scrisoarea se găseşte într-un fişier text.
Exemplu: fişierul ghicitoare.in:
Are pleaoa verde moşu'
Nasul lung hazliu şi roşu;
Pleaoa fluoură în vano,
Nasul roşu e-n pămâno.
Primul cuvânt cu trei vocale găsit este: pleaoa.
Introducem cuvântul corect: pleata.
Urmează să parcurgem din nou fişierul şi la fiecare apariţie a literei o să
întrebăm dacă se doreşte înlocuirea ei cu t.
În final textul corect este:
Are pleata verde moşu'
Nasul lung hazliu şi roşu;
Pleata flutură în vânt
Nasul roşu e-n pământ.

60

41. Profesoara a dat celor n elevi ai săi să realizeze câte un mic fişier text care
să conţină informaţii despre modul de viaţă al unor vieţuitoare şi le-a spus
să salveze lucrările cu numele: parte1.txt, parte2.txt, ... , parten.txt.
Scrieţi o aplicaţie care să concateneze aceste fişiere în fişierul
profesor. txt.

42. Se citeşte din fişierul elevi.in, situaţia la învăţătură a fiecărui elev. Pe
liniile impare se găsesc numele şi prenumele elevilor. Pe cele pare se
găsesc numere separate prin spaţii, astfel: primul număr reprezintă clasa
(ex: 7 sau 10), apoi se regăsesc mediile pe discipline. Să se calculeze şi
să se afişeze media generală a fiecărui elev; în cazul în care un elev este
corigent se va afişa la câte discipline este corigent.

43. Se citesc de pe liniile unui fişier text cărţi de joc separate prin spaţii. Să
se verifice dacă formează un set complet de cărţi de joc, apoi să se
distribuie câte cinci cărţi de joc celor patru jucători şi să se afişeze sub
forma: ",
3+ A'If Jf! 9+

9+
K'lf
10+
5+

44. Fişierul NUME.TXT conţine numele unor agenţi secreţi, urmat de spaţiu
şi un cod de 4 caractere (litere sau cifre). Fişierul MISIUNE.TXT
conţine descrisă misiunea pe care agenţii o au de realizat (caractere
alfabetice, numerice şi spaţii). În acest text apar însă numele agenţilor.
Se cere să se scrie un program care să creeze un fişier MISIUNEF.TXT
care să conţină descrierea misiunii însă nu cu numele agenţilor ci cu
codul lor.

61

3. Într-un depozit lăzile cu marfă sunt stivuite pe verticală. titlul începe cu cuvântul "manual") şi le memorează într-o structură de date adecvată. 2. La ora de matematică a clasei 1 doamna învăţătoare a aşezat pe catedră două turnuri formate din n l . dacă un cuvânt începe cu Q. Scrieţi un program care citeşte de la tastatură numerele asociate celor n bile.. aranjându-le de la stânga spre dreapta. una peste alta. Se citeşte de la tastatură un şir de n cuvinte. eliminarea unei lăzi. Scrieţi un program care citeşte de la tastatură titlurile cărtilor pe rând (pentru manuale. depune bilele pe tijă şi apoi elimină bila cu numărul x. 4.ocală îl pune în şirul A. Afişaţi cele două şiruri şi numărul de cuvinte conţinute de fiecare. iar dacă începe cu o consoană îl pune în şirul B. perforate în centru. pe baza unui meniu. Memoraţi într-o altă structură de date manualele şi afişaţi titlurile lor în ordinea în care au fost aşezate pe raft. apoi le ia în ordine începând din vârful teancului şi le analizează. afişarea stivei de la vârf spre bază.M. Aşează manualele într-un raft şi celelalte cărţi în alt raft. Ea aşează întâi toate cărţile într-un teanc. Atât adăugarea cât şi extragerea unei lăzi se face doar în vârful stivei. CAPITOLUL IV LISTE ALOCATE STATIC 1. Ioana îşi face ordine în bibliotecă. Scrieţi un program care ia cuvintele din şir în ordine inversă introducerii. folosindu-se o altă tijă verticală pe care pot fi mutate temporar bile. 5. respectiv n2 cuburi. Ştiind că de la podea până la tavan încap un număr de 1 lăzi şi că fiecare ladă are o etichetă cu numărul ei. Pe o tijă verticală sudată la bază sunt dispuse n bile numerotate. scrieţi un program care. Se doreşte eliminarea bilei cu numărul x. permite alegerea unei operaţii ce se poate efectua în depozit: adăugarea unei lăzi în stivă. apoi afişează cărţile din teancul obţinut pe masă de sus în jos. Fiecare cub are înscris 62 .

Adună toate farfuriile din dulapul de bucătărie şi le pune unele peste altele. 8. Programul va citi de la tastatură numerele înscrise pe cuburile din cele două turnuri. 6. din unele vagoane de pe linia 1. În depozitul Societăţii de Legume Fructe se află mai multe stive cu lăzi. Una dintre stive conţine lăzi cu cartofi şi lăzi cu alte legume. un numar pe el. Gestionarul vrea să separe această stivă în două stive: una care să conţină numai Iăzile cu cartofi şi una care să conţină lăzile cu celelalte legume.ieşire de pe linia 1 sau IN-intrare pe linia 3). Să se scrie un program care afişează operaţiile care trebui făcute (IE. de la bază spre vârf. scrieţi un program care să-I ajute pe Ionel să formeze turnul cerut. considerate de la bază spre vârf. şterge praful din dulap. 2 3 Numărul vagoanelor care intră în componenţa garniturii se află într-un şir (dat de la tastatură). Operatorul trebuie să formeze garnitura pentru Bucureşti pe linia 3. 63 . precum şi legumele existente în Iăzile din stivă. 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ă staţioneze pe linia 2). Scrieţi un program care să simuleze această acţiune şi care să afişeze cantitatea totală de cartofi. Într-un depou de vagoane operatorul CFR trebuie să formeze un tren cu m vagoane care va pleca spre Bucureşti. Ştiind că Ionel are voie să ia câte un cub doar din vârful unui turn şi să-I aşeze în turnul nou. pentru ca să se formeze garnitura spre Bucureşti pe linia 3. cele albe la mijloc şi cele din material plastic pe raftul de jos. apoi vrea să le aranjeze pe cele trei rafturi astfel: cele cu flori pe raftul de sus. Scrieţi un program care să simuleze această activitate a Irinei. Iniţial pe linia 1 a depoului se află n vagoane. numerotate descrescător începând de -la capătul care nu comunică cu altă linie. Ionel trebuie să formeze un nou turn care să conţină cuburile din ambele turnuri şi acestea să fie aşezate în ordinea crescătoare a numerelor lor. în fiecare turn cuburile sunt aşezate în ordine descrescătoare a numerelor lor începând de la bază spre vârf. 7. În fiecare ladă există un anumit produs pentru care se cunoaşte cantitatea. Irina face curăţenieîn bucătarie.

Un grup de n elevi participă la un concurs de tir. Ioana şi Maria au un şirag de mărgele de diferite culori. fiecare elev primeşte un punctaj apoi trece din nou la coadă.ieşire din program Pentru fiecare persoană se cunoaşte numele şi vârsta. le memorează într-o structură de date adecvată şi apoi simuleză formarea noului şirag după procedeul descris mai sus. La un ghişeu persoanele sunt deservite în ordinea sosirii. Cei n elevi ai clasei se aranjează la ora de educaţie fizică într-un rând. fiecare piesă este numerotată. Numărul de băieţi şi de fete nu este neapărat acelaşi.9.afişarea persoanelor în vârstă (peste 65 de ani) • X. Il. Se aşează unul după altul în faţa ţintei şi după ce ţinteşte. Scrieţi un program care să afişeze un meniu din care utilizatorul să poată alege opţiunea dorită. Ele vor să elimine din colier mărgelele negre şi pentru acesta au hotarât să procedeze astfel: Ioana va extrage câte o mărgea dintr-un capăt al şiragului şi dacă nu are culoarea neagră i-o dă Mariei pentru a o adăuga din nou în şirag.listarea persoanelor tinere ( sub 35 de ani) • A. Pe bandă încap p piese la un moment dat. Concursul se încheie după ce fiecare elev a a tras de trei ori.plecarea unei persoane 4/1 L. Piesele intră succesiv pe bandă la un capăt al ei şi atunci când banda este plină se elimină pe rând câte o piesă (eliminarea se face la capătul opus celui la care s-a făcut introducerea). Opţiunile din meniu vor fi: 4/1 S. Într-o secţie de vopsitorie există o bandă rulantă orizontală pe care sunt depuse piese pentru a fi vopsite. Pornind de la lista elevilor participanţi la acest concurs. 13. 64 . Scrieţi un program care simulează operaţiile din secţie: depunerea unei piese pe bandă. la celălalt capăt. Apoi ei sunt împărţiţi de către profesor pe două rânduri: unul de fete şi altul de băieţi. Scrieţi un program care citeşte pe rând culorile mărgelelor. 10.sosirea unei persoane • P. Pentru o paradă sportivă trebuie să treacă prin faţa tribunei un număr de . afişarea pieselor existente la un moment dat pe bandă. 12. scrieţi un program care simulează desfăşurarea concursului şi afişează elevii clasaţi pe primele trei locuri. eliminarea unei piese.

. Copiii intră într-un şir şi dansează în faţa scenei. m perechi formate dintr-un băiat şi o fată. iar cercul exterior în sens antiorar. apoi după paradă se aşează la sfârşitul rândului. ceilalţi rămân în cercul exterior. Să se scrie un program folosind structuri statice de date care să afişeze cele m perechi ale paradei astfel: perechea 1: nume_fata. La serbarea de sfârşit de an şcolar clasa a IV-a prezintă un dans popular. nume_băiat perechea2: nume_fata. nume_băiat 14.' 65 . Prima fată din rând formează pereche cu primul băiat. În cercul din interior intră tot al treilea elev. . Din cercul format se alcătuiesc două cercuri concentrice. nume_băiat perechea m: nume_fata. apoi din acel şir se formează un cerc. Scrieţi un program care să formeze cele trei aranjări pentru dans. Cercul interior se învârte în sens orar. fiecare aranjare păstrându-se într-o listă alocată static.

în zig-zag. Ajutaţi-l pe Mihai să-şi plătească datoria. 66 .v2 ... . 1]. pornind de la elementul [n. cu toate elementele nule. 5. să-i adauge TVA de 19% . Are bancnote de valori v l . de dimensiune n*m. m>n. 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. 1. 5 Florin va primi 1*5 + 4*50 + 4* l + 3*10 = 239 4. 2.vn şi vrea să-i plătească. Să se scrie un subprogram care să afişeze textul "La mulţi ani!" şi apoi să se apeleze dintr-un program. Scrieţi un subprogram care primeşte ca parametru pe x real şi y întreg şi calculează pe x". să afişeze noul preţ şi să-I returneze. scrieţi un subprogram care scrie în matrice numerele naturale în ordine crescătoare (începând cu numărul 1). . lui Florin suma S în cât mai puţine bancnote (dispune de cantităţi suficiente din fiecare bancnotă şi are bancnote de 1 pentru a putea plăti exact suma datorată). Exemplu: S=239 Bancnotele au valorile 10. Fiind dată o matrice A. Operaţia matematică de ridicare la putere se simulează în limbajul PASCAL prin intermediul unor expresii complicate. Mihai îi datorează lui Florin o sumă S şi a reuşit să strângă suficienţi bani ca să-şi plătească datoria. CAPITOLUL V SUBPROGRAME 1. până la un element de pe ultima coloană. Scrieţi o funcţie care primeşte ca parametru preţul unei mărfuri. 50.

lună. 67 . apoi calculează şi returnează numărătorul şi numitorul sumei celor două fracţii.N cuburi de dimensiuni diferite sunt aşezate în linie pe masă. Observaţie: se va simplifica fracţia rezultată. cele două cu laturile cele mai mari pe margine. 7. Cei rămaşi fără pereche trebuie să aştepte înscrierea altor persoane pentru a-şi găsi un partener. Scrieţi un subprogram care primeşte ca parametru două date calendaristice de forma: zi. Antrenorul încearcă să formeze perechi în care fata şi băiatul sunt de aceeaşi vârstă. Să se scrie un subprogram care ordonează crescător un şir de numere. La un club de dansuri de societate s-au înscris n fete şi m băieţi. de o parte şi de alta a cubului mic în ordine crescătoare spre cuburile mari. 8. Scrieţiun subprogram care primeşte ca parametru numele unui fişier text. El ar avea nevoie de ajutor. calculează şi returnează numărul de vocale care apar în fişier. adică eubul cu latura cea mai mică în mijloc. numărul de ani precum şi un indicator cu valoarea 1 sau -1 după cum prima dată este mai mare respectiv mai mică decât a doua. Scrieţi un subprogram care primeşte ca parametru un număr natural de cel mult 9 cifre şi returnează textul "SIMETRIC" sau "NESIMETRIC".6. iar restul. Un număr este simetric dacă citit de la stânga la dreapta sau de la dreapta la stânga reprezintă aceeaşi valoare. Acestea trebuie aranjate sub forma literei V. Cunoscând numele şi vârsta fiecărei fete şi a fiecărui băiat. 10. Când nu mai poate forma astfel de perechi alege fiecărei fete un băiat cu cel mult doi ani mai mare. scrieţi un subprogram care formează perechile şi returnează numărul de perechi formate. 11. Subprogramul va returna: numărul de zile. La clasa a V-a se studiază fracţiile. Scrieţi un subprogram care primeşte ca parametri numărătorii şi numitorii a două fracţii. De multe ori în probleme ne interesează diferenţa a două date calendaristice. 9. an şi calculează diferenţa celor două date. Adunarea fracţiilor este o problemă grea pentru Mihai. 12. scrieţi un subprogram care aranjează cuburile sub forma literei V. Cunoscând numărul de cuburi şi latura fiecăruia.

17. Se dautLcărămizi prin dimensiunile lor (lungime. iar poziţiile cu valori impare rămân cu valori impare.10.7. Cele două fişiere (al lui Mihai şi al lui Rareş) au acelaşi număr de linii.13. Concurenţii primesc note de la O la 10. 68 .-4.5. Câştigătorul "Jocului inteligent" este cel care are "Numărul caracteristic" mai mare. Cărămizile se pot pune în orice poziţie.5. fiecare fiind identificată printr-un număr care este înscris pe ea.8. ştiind că media cea mai mică şi cea mai mare se elimină şi se iau în calcul doar restul mediilor. Mihai şi Rareş se joacă "Jocul inteligent". Exemplu: a=(7. lăţime şi înălţime). 15.0. Scrieţi un subprogram care calculeză media unui concurent.4. afişează cuvintele distincte de 4 litere apoi returnează numărul caracteristic. apoi să calclll~ţecare este Rea mai mare suprafaţă pe care o poate acoperi cu ~~zile rămase. Numărul caracteristic al acestui text este dat de numărul de cuvinte de patru litere distincte din text. Să se scrie un subprogram care să ordoneze "crescător-descrescător" un şir de numere întregi. Elementele pare să fie în ordine crescătoare. Poziţiile care au avut valori pare rămân cu valori pare.3. Scrieţi un subprogram care să returneze informaţiile despre elevul cu cele mai multe absenţe nemotivate şi un alt subprogram care să afişeze elevii ordonaţi descrescător după media generală. Meşterul care lucrează cu aceste cărămizi vrea să elimine din lucrare cea mai mică şi cea mai mare cărămidă ca volum.-2. numărul de absenţe motivate şi numărul de absenţe nemotivate.-2. Scrieţi un subprogram care citeşte un text dintr- un fişier. iar cele impare în ordine descrescătoare. 14.3. Scrieţi un program care afişează cele două cărămizi eliminate şi suprafaţa calculată de meşter. prenumele. Şirul rezultat este: a=(7.10) 16.4.0. La un concurs de gimnastică arbitrează n arbitri. Acest joc constă în următoarele: se dă un text pe mai multe rânduri. Folosind acest subprogram să se scrie un program care simulează acest joc. mediile la cele 15 materii.7. La clasa a 9-a dirigintele păstrează pentru fiecare elev următoarele informaţii: numele.8.-4).

Scrieţi o funcţie care să-I ajute pe Andrei să calculeze această greutate. a1. Săse scrie un subprogram care să afişeze toate numerele divizibile cu n (n<lO) din intervalul [x. Scrieţi un subprogram care să-I ajute pe Mihai la temă. 20. Folosiţi pentru aceasta un subprogram de inserare a unui subşir într-un şir. Afişaţi configuraţia finală a celor două rânduri formate. Să se scrie o funcţie care calculează valoarea polinomului P(x) în punctul xo.a2. Săse scrie un subprogram care să verifice dacă o valoare x aparţine sau nu unui şir de numere întregi. Scrieţi un subprogram care să calculeze şi să returneze numărul de cuvinte. Rândurile nu au acelaşi număr de persoane. începând de la o poziţie specificată de el. an· 24..DAT. începând de la o poziţie dată. Profesorul le cere rândurilor de fete să se includă în cele de băieţi. 25. Să se scrie' o funcţie care să calculze şi să returneze media pe un semestru a unui elev. 22.y]. x şi y se transmit ca parametri. Funcţia trebuie să afişeze numărul rezultat. 69 . El cunoaşte volumul lemnelor şi densitatea lor.. Andrei vrea să calculeze greutatea unei remorci cu lemne. Fiecare persoană are un nr de ordine. 19. Coeficienţii polinomului se transmit prin intermediul şirului 30. 21. El are de rezolvat mai multe exerciţii şi ar vrea să verifice dacă a lucrat bine. Mihai învaţă la şcoală să calculeze cel mai mare divizor comun a două numere folosind descompunerile numerelor în factori. de fraze şi de aliniate dintr-un text scris în fişierul TEXTUL. Să se scrie o funcţie care să transforme un număr n (n<l00) scris cu cifre arabe în cifre romane.. . La ora de educaţie fizică sunt aliniate două rânduri de băieţi şi două de fete. 23. Numărul de materii şi şirul de medii se dau ca parametru.. 26.18.

Afişaţi în care din cele 3 zile a fost amendat proprietarul maşinii cu nr x (există posibilitatea să fi fost amendat în mai multe zilei). Se cere să se elimine din listă persoanele care au abandonat şi apoi să se afişeze lista concurenţilor care au ajuns la finish. În timpul cursei se anunţă abandonurile. Săse scrie o funcţie care să verifice dacă un vector x de dimensiune n este simetric faţă de mijloc. 30. Folosiţi un program de căutare a unei valori date într-un vector. Considerând 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ă. 34. Se cunoaşte numărul de angajaţi din fiecare secţie şi salarul fiecărui angajat. Într-o intreprindere există 4 secţii. folosind un subprogram care să verifice dacă într-un vector x de dimensiune n există cel puţin 3 elemente alăturate egale şi în caz afirmativ să returneze valoarea lor comună. 33. Afişaţi care din acestea nu sunt ordonate cronologic. folosind pentru acesta un subprogram care să returneze salarul mediu al unei secţii. Realizaţi cererea lui. de la ultimul spre primul.27. La o cursă de maraton există o listă a concurentilor. În 3 şiruri sunt păstrate date din biografiile a 3 scriitori (anul naşterii. Dirigintele unei clase are lista elevilor ordonată descrescător după medii şi vrea să afle dacă există cel puţin 3 elevi în clasă cu aceeaşi medie. anul începerii studiilor etc). 28. 31. fiecare concurent are înscris pe tricou numărul de concurs corespunzător poziţiei din listă. 70 . Scrieţiun subprogram care returnează numărul de ortograme (cuvinte care folosesc liniuţa de despărţire) dintr-un text de maxim 255 de caractere. folosind un subprogram. Scrieţiun subprogram care primeşte ca parametri două matrici cu aceleaşi dimensiuni şi verifică dacă cea de-a doua este oglindita spre est a primeia. 29. 32. La secţia de poliţie au sosit 3 liste cu numerele de înmatriculare ale maşinilor amendate de Poliţie în ultimele 3 zile. prin numerele concurenţilor. Se cere să se afişeze salarul mediu pentru fiecare secţie.

b. Se cere un subprogram care verifică dacă numărul x conţine cel puţin un O. Având la dispoziţie lista conturilor. Scrieţiun subprogram care verifică dacă un număr natural x este format din cifre distincte. Fie un şir de n numere întregi citite de la tastatură. 41. 36. a. 44. etc. Sortaţi crescător şirul după numărul de divizori ai fiecărui element al şirului folosind subprograme. Alcătuiţi un subprogram care primeşte ca parametru un număr natural de maxim 9 cifre şi afişează o piramidă formată din cifrele acestui număr: pe prima linie cifra sau cifrele din mijloc. 39. Dacă numărul de linii ale matricii depăşeşte numărul de linii ecran. codul şi verifică dacă în cont apare codul. Alcătuiti un subprogram care determină punctul de extrem al funcţiei de gr.c numere reale.35. 42. Fie x un număr natural. continuarea afişării se va face numai după apăsarea tastei Y în urma afişării mesajului: Continuare ? (YIN) 71 . Fie un şir de n numere întregi citite de la tastatură. Scrieţi un subprogram care verifică dacă un număr natural conţine acelaşi număr de cifre pare şi impare. Scrieţi un subprogram care transmite şirul de numere în ordine inversă. Scrieţi un subprogram care verifică dacă pot forma un triunghi şi în caz afirmativ să-i calculeze aria şi perimetrul. 38. 43. pe a doua linie cele trei sau patru cifre din mijloc. Să se scrie un subprogram de afişare a unei matrici în forma clasică. indiferent pe ce poziţie. date prin coordonatele x şi y. a nenul. 37. O bancă a hotărât să schimbe vechile numere de cont astfel încât noile numere să conţină obligatoriu un cod. II f(x)=ax 2 +bx+c. Fie trei puncte în plan. stabiliţi care din acestea necesită modificări. Pentru aceasta scrieţi un subprogram care primeşte ca parametri contul vechi. 40.

La o cofetărie se comercializează n sortimente de prăjituri. CAPITOLUL VI TEHNICI DE PROGRAMARE VI. Scrieţi un program care citeşte acest şir şi afişează pe câte un rând fiecare variantă. Se dă un şir de n numere naturale. BACKTRACKlNG 1.nu pot fi plantaţi doi meri. dar să nu fie două tablouri ale aceluiaşi pictor aşezate alături.I. . programul va. afişa un mesaj corespunzător. Să se genereze toate modurile de aranjare a acestor numere astfel încât în nici o aranjare să nu existe pe poziţii consecutive numere prime. Scrieţi un program care afişează toate variantele posibile. 4. . 2. Cunoscând numărul de tablouri şi codul înscris pe fiecare tablou. Scrieţi un program care afişează aceste variante precum şi numărul lor. .un nuc trebuie să fie la o distanţă de cel puţin 12 metri de alt nuc. La o florărie sunt S specii de flori. Angajaţii galeriei au ordin să aranjeze toate tablourile pe un perete. Scrieţi un program care citeşte de la tastatură denumirile florilor şi afişează componenţa buchetelor. 72 . scrieţi un program care afişează toate posibilităţile de aşezare a tablourilor. dar trebuie să respecte următoarele condiţii: . păr şi nuc) pe o distanţă de 60 de metri în spatele casei. În cazul în care nu este posibilă o astfel de aranjare. Să se determine toate variantele de a face pachete cu câte p prăjituri diferite. N pictori doresc să-şi expună lucrările într-o galerie de artă. El vrea să planteze cât mai mulţi pomi. în linie dreaptă. Un gospodar vrea să planteze pomi fructiferi (măr.trebuie să se planteze meri mai mulţi decât peri şi peri mai mulţi decât nucI.distanţa dintre doi pomi fructiferi trebuie să fie de cel puţin 4 metri. 5. 3. Se doreşte să se realizeze buchete diferite cu câte F flori fiecare. doi peri sau doi nuci unul lângă altul.

toţi trebuie să fie aceeaşi zodie şi cel mult jumătate din tinerii unui grup pot aparţine aceleaşi ţări.5. o împărţire în grupuri pentru ziua respectivă.CubuI2:8 5. 8. Să se scrie un program care să genereze toate şirurile de lungime n formate numai din literele A. c:S20) generaţi toate cuvintele de cel mult 15 litere care nu conţin mai mult de trei vocale sau trei consoane alăturate. numărul tinerilor participanţi. fiecare cub fiind caracterizat de lungimea laturii şi culoarea sa. 12. Scrieţi un program care să rezolve această problemă. zodia fiecăruia şi determină dacă este posibil. 11.7. Grupurile trebuie să fie formate cu tineri din ţări diferite. Fiind dată o mulţime de n cuburi.2.3. a uitat cifrul şi îşi aminteşte doar că în cifru apare şi ziua lui de naştere.Cubul 1 -2-3. Rezultă: Cubul 2 -8-5. Să se scrie un program care citeşte numărul ţărilor participante. şiruri care să nu aibă litere consecutive identice.9} M=6 =>2+4. La întâlnire a Tineretului Creştin din Europa se alcătuiesc grupuri de discuţii pentru fiecare din cele şapte zile cât durează ţntâlnirea.6. Să se determine toate submulţimile pentru care suma elementelor este M. cel puţin 3 persoane. Afişaţi ce încercări trebuie să facă o persoană pentru a obţine cifrul său de la seif de 6 cifre.CubuI3:6 4. Să se determine o împărţire pe grupuri pentru această zi. Intr-una dintre zile grupurile 'se formează pe zodii. dar aceasta nu figurează nici la începutul şi nici la sfârşitul cifrului. Exemplu: N=9 {1.8. Se citeşte un număr natural n. 10. să se scrie un program care să genereze toate turnurile care se pot forma cu p cuburi astfel încât două cuburi vecine să nu aibă aceeaşi culoare. Fiind dat un alfabet care conţine v vocale şi c consoane (v9. Se dă o mulţime cu n elemente. B.1+2+3 7. 73 . şi un număr întreg pozitiv M.Cubul 3 -6-4.4. Exemplu: 3 cuburi: Cubull:2 3.1+5.6. C. adică 13. Să se determine numărul natural cel mai apropiat de n care conţine acele~şi cifre ca şi acesta. 9. ştiind că în fiecare grup trebuie să fie cel mult 15 persoane.

iar literele din care sunt formate apar în ordine lexicografică. albastru. 17. 15. 19. Elevii pe rând trebuie să spună un număr mai mare cel puţin cu 2 decât al celui dinainte şi care are suma cifrelor divizibilă cu 7. Scrieţiun program care să determine câte numere strict mai mici ca 1. 18. iar pentru fiecare răspuns fals s-au scăzut din punctaj d puncte.000. culoarea costumului fiecăruia şi afişează o dispunere a sportivilor în cercuri. Fiecare sportiv are un costum colorat: roşu.000. Să se scrie un program care să stabilească toate voiajele prin p oraşe care să nu depăşească un cost total disponibil. La o demonstraţie a sportivilor participă un număr de 3*n sportrvi. Să se determine numărul de răspunsuri corecte şi numărul de răspunsuri false pentru a o1Dţipţ nota f i (m citit de la tastatură). cu proprietatea că au toate cifrele distincte şi suma cifrelor lor este un număr tot cu cifre distincte. Scrieţi un program care citeşte un şir de n litere mici distincte şi generează toate cuvintele care au următoarele proprietăţi: conţin exact p litere din cele n. Fiecare oraş are stabilit un tarif de cazare. Un grup de copii are}a dispoziţie n cartonaşe cu n cuvinte distincte pentru jocul "fazan".13. iar trei sportivi au costumul alb. 16. Un traseu turistic cuprinde n oraşe. Sportivii vor fi împărţiţi în trei cercuri policrome. Elevii clasei a 5-a joacă un joc. Scrieţi un program care citeşte de la tastatură numărul n de sportivi. formate numai din cifre distincte şi care sunt divizibile cu 4. Scrieţi un program care să afişeze toate numerele de trei cifre. 14. Profesorul spune un număr natural. Un test alcătuit din n întrebări a fost notat în modul următor: pentru fiecare răspuns corect s-au punctat c puncte. Î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. Să se scrie un program care simulează acest joc şi afişează valorile spuse de cei n copii ai clasei. In acest joc un copil trebuie să spună un cuvânt 74 . 20. Se citeşte de la tastatură numărul spus de profesor.000 există. galben.

verifică să fie C mai mare decât E şi afişează toate variantele de împărţire a copiilor în echipe. Unii dintre prietenii lui se cunosc între ei şi acelora nu doreşte să le scrie felicitări cu acelaşi conţinut.' 23.ştiind că are suficiente cartonaşe cu fiecare operator. 25. Se vor afişa pentru fiecare soluţie echipele şi componenţa fiecăreia pe câte un rând. Ajutaţi-l să intercaleze cartonaşele + şi . ştiind că în fiecare strat trebuie să existe v feluri de flori. afişaţi varianta cu cele mai multe cuvinte care se poate obţine cu ajutorul cartonaşelor date. Din orice fel de floare grădinarul are suficiente seminţe. Scrieţi un program care citeşte dintr-un fişier text numărul de prieteni ai lui Ionel şi perechi de numere (x y separate prin spaţiu) cu semnificaţia că persoanele x şi y se cunosc. 22. care să aibă primele două litere identice cu ultimele două ale cuvântului spus de predecesorul lui. Deoarece este în criza de inspiraţie el s-a gândit să formuleze doar câteva variante de texte şi să scrie acelaşi text la persoane diferite. Florin are n cartonaşe (n:SlO). astfel încât să alterneze elemente pozitive şi negative şi suma acestora să fie minimă. r. Scrieţi un program care să genereze şi să afişeze această modalitate. Să se genereze un subşir de lungime maximă de elemente din şirul dat. În fiecare strat i încap câte mi flori.vrea să obţină rezultatul 2. Într-o grupă de grădiniţă sunt C copii. 21. Să se afişeze o modalitate în care grădinarul poate aşeza florile în straturi. Ionel doreşte să trimităcelor P prieteni ai lui (numerotaţi de la 1 la P) felicitări cu ocazia sărbătorilor de iarnă. Pe fiecare este scrisă o cifră de la 1 la 9. El are la dispozitie n feluri de flori şi m straturi. Doamna educatoare doreşte să-i împartă în E echipe (cel puţin 1 copil într-o echipă) pentru un joc. Utilizând două cartonaşe cu + şi . 24. Fiind dat cuvântul de început pentru joc. Programul va afişa o varianta de împărţire a prietenilor lui Ionel pe grupe (din aceeaşi grupă vor face parte prietenii cărora le poate scrie acelaşi text) astfel încât să fie 75 . Un grădinar vrea să planteze flori. Scrieţi un program care citeşte valorile C şi E . Se dă un şir de n numere întregi (n este număr întreg citit de la tastatură).

31. La o masă rotundă sunt n persoane de diverse naţionalităţi. Fiind date perechile de rude în fişierul rude. Ionel este în clasa întâi şi are următorul material pentru tema de casă: pe un cartonaş are scris un cuvânt. Afişaţi toate variantele pe care trebuie să le încerce pentru a vorbi cu prietenul său. pentru fiecare persoană precizându-se două limbi străine cunoscute de ea. În lipsă de ocupaţie aceasta şi-a propus să încerce să-i căsătorească pe toţi. începe cu cifra 1 şi conţine 3 zerouri dintre care două sunt alăturate. surori vitrege sau verişoare. iar fetele între n+ 1 şi 2*n. Acest lucru nu este prea uşor de realizat. O persoană a uitat numărul de telefon al unui prieten. El trebuie să determine cel mai mic număr de cartonaşe din care se poate forma cuvântul dat. iar pe alte n c. Ştie doar că numărul are 6 cifre.in va conţine pe fiecare linie perechi de numere a două persoane rude apropiate. trandafiri albi. să se determine toate modalităţile în care s-ar putea căsători toţi aceşti tineri. O florărie are de executat n buchete diferite pentru care are la dispoziţie crini albi. Pentru simplificare putem considera băieţii ca având numere între 1 şi n. 30. cale şi crizanteme albe.artonaşe grupuri de litere (pe fiecare cartonaş o literă sau un gmp de litere). surori. margarete. Fişierul rude. Se dă o bucată de panglică de lungime X. Stabiliţi toate modurile posibile de tăiere a panglicii în bucăţi de lungimi date astfel încât din fiecare bucată să existe cel puţin o panglică. 27. Problema căsătoriei În satul Margaretei Lenor exista acelaşi număr de băieţi de însurat şi fete de măritat. 28. necesar un număr cât mai mic de variante de "urări pentru sărbătorile de iarna". În fiecare 76 .in. Se cere să ajutaţi organizatorii mesei rotunde să aranjeze persoanele astfel încât fiecare să poată conversa atât cu cea din stânga cât şi cu cea din dreapta. Ajutaţi-l pe Ionel să rezolve corect tema. fără a încălca obiceiurile străbune. 29. ţinând cont de obiceiurile locului care nu admit căsătorii între rude apropiate: fraţi. 26.

O echipă de pompieri dispune de o maşină şi n tipuri de furtun. Afişaţi toate variantele din care poate să-şi aleagă numărul de înmatriculare. 37. prenumele elevilor şi determină toate variantele de concurs.in astfel: . Nu trebuie să existe două buchete identice. Maşina se poate apropia până la x metri de incendiu. 33. Elevii unei clase participă la un concurs pe echipe. astfel încât în fiecare căsuţă să fie două persoane care se preferă reciproc. Să se scrie un program care să genereze toate numerele întregi de tip longint (Pascal) sau long (C++) a căror reprezentare în baza 2 conţine n biţi cu valoarea 1. 36.pe prima linie se află numărul de copii. Această echipă trebuie să stingă un incendiu. 32. Clasa a X-a organizează o excursie la munte. Scrieţi un program care citeşte numele. precum şi lista de preferinţe a fiecăruia şi determină o soluţie. Scrieţi un program care să determine modurile de legare a segmentelor de furtun astfel încât să ajungă până la incendiu. Proprietarul unei maşini din judeţul Cluj vrea să-şi aleagă numărul de înmatriculare al maşinii. 35. aflat într-o zonă inaccesibilă maşinii. Din cei 30 de elevi trebuie formate trei echipe cu câte cinci concurenţi. Determinaţi toate variantele de formare a echipelor. Se cunosc preferinţele fiecărei persoane. În camping sunt căsuţe cu câte două locuri. dacă este posibilă. fiecare tip având o lungime dată. Nu-l interesează ce cifre va conţine numărul. 34. 77 . ţinând cont de restricţia că în fiecare echipă trebuie să fie doar concurenţi cu nume diferite. dar vrea ca acesta să includă iniţiala numelui şi a prenumelui său. Să se scrie un program care să afişeze o variantă cu n buchete. buchet trebuie să fie câte m flori. N copii doresc să plece în excursie. Să se scrie un program care citeşte de la tastatură numărul de persoane. dar autocarul nu are decât 44 de locuri. Să se genereze toate modalităţile de a aşeza 44 de copii în autocar astfel încât numărul de fete să fie egal cu numărul de băieţi şi copiii ce sunt aşezaţi alături să se agreeze reciproc. Să se determine o repartizare. Datele de intrare se citesc din fişierul Elevi.

Rafturile se completează începând cu raftul 1 apoi raftul 2 şi aşa mai departe. Pentru fiecare gâza se citesc: . O bibliotecară doreşte să repartizeze cele m volume pe care le are în bibliotecă pe cel mult 10 rafturi.numele florii pe care locuieşte.. b) Să se determine dacă există un traseu pe la toate aceste gâze astfel încât trecând în vizita de la o gâză la alta să schimbăm ori specia florii ori culoarea acesteia rară a le schimba pe amândouă odată..culoarea florii. Vom considera pentru simplificare că toţi copiii al căror nume se termina în a sunt de sex feminin. pe următoarele linii se găsesc perechi de numere separate prin spaţiu. cu semnificaţia că primul elev îl agreează pe cel de-al doilea.. .vârsta gâzei (în zile). Fiecare locuia pe una din aceste flori..numele. frezie ...pe următoarele N linii se află numele copiilor. dacă există.-. astfel încât totalul vârstelor gâzelor din grup să nu depăşească T zile. Coriştii din spate trebuie să fie mai înalţi decât cei din faţă iar cei din mijloc mai mici decât cei de pe margine. Scrieţi un program care citeşte numărul de cori şti . iar ceilalţi de sex masculin. Pentru serbarea de Crăciun corul şcolii susţine un concert de colinzi. . Pentru fiecare carte se cunoaşte autorul şi titluL 40. ~ frezie alb mov alb 78 . ce corespund numerelor de ordine a doi elevi. Exemplu: li~elula} fluturaş} mămăruţă cnn --~. 39. înălţimea fiecăruia şi determină o aranjare a corului.. N gâzuţe se plimbau într-o grădină plină de flori înmiresmate. Soluţia va fi afişată conform aranjării scaunelor din orice autocar. 38. a) Să se selecteze un grup de cât mai multe gâze cu vârsta între nl şi n2 zile. ştiind că pe un raft încap cel mult p volume. şi cărţile aceluiaşi autor trebuie să fie depuse pe acelaşi raft. -. . . Scrieţi un program care să determine o astfel de repartizare. Cori ştii trebuie repartizaţi pe patru rânduri aproximativ egale (ultimul rând poate fi mai scurt şi aşezat pe centru)..

yl) al hărţii în punctul de coordonate (x2.y2) astfel încât să fie văzut de cât mai puţini oameni. precum şi faptul că fiecare profesor trebuie să aibă cel puţin 18 ore şi cel mult 27 ore. Se cunosc numărul de ore de informatică ale fiecărei clase.in. şi afişează repartizarea cerută. uşile prin O iar încăperile prin numere începând de la 1. În fişierul litere. Se citeşte această matrice şi se cere să se scrie un program care află şi afişează cel mai scurt drum din încăpere a x în încăperea y (x şi y sunt numerele cu care sunt codificate încăperile).41. 44. în care pe ultima linie se află suma liniilor anterioare. Un soldat vrea să ajungă din punctul de coordonate (xl. Să se aranjeze aceşti soldaţi în toate modurile posibile într-o formaţie de n rânduri şi m coloane astfel încât orice soldat să aibă atât în faţă cât şi în stânga lui numai soldaţi mai scunzi decât el.' LUNA STATIUNI 43. Găsiţi cifra corespunzătoare fiecărei litere. 42. Se citesc de la tastatură înălţimile a n*m soldaţi (n şi m sunt numere naturale date). Realizaţi un program care determină şi afişează drumul soldatului. Să se determine o repartizare a profesorilor. dacă aceasta este posibil. Exemplu: litere. 79 .. Teritoriul e codificat sub forma unei matrici nxn care conţine pe poziţia i.j numărul persoanelor care văd soldatul dacă trece prin acea poziţie. Pereţii sunt codificaţi prin -1. Scrieţi un program care citeşte numărul de ore al fiecărei clase. Sunt exact zece litere diferite corespunzătoare celor zece cifre.. Înlocuind într-un anume mod fiecare literă cu aceeaşi cifră şi literele diferite cu cifre diferite se ajunge la o adunare "cifrică" corectă din punct de vedere aritmetic.in Se va afişa: S TOI C E N ALU 1839240567 STOICENI SINAIA . Datele de intrare se citesc din fişierul litere. O matrice nxn reprezintă planul unui apartament. 45.in este scrisă folosind litere o adunare codificată. La 10 clase trebuie repartizaţi 3 profesori de informatică.

49. Fiecare grup trebuie să aibă între 2-5 membri şi trebuie să fie echilibrat din punct de vedere al notelor. 3. Grupul este echilibrat dacă media grupului nu diferă cu mai mult de un punct de media clasei. Pe fiecare pătrat se poate aşeza o literă astfel încât să se formeze cuvinte pe orizontală sau pe verticală.a2]. Scrieţi un program recursiv pentru calculul numărului de ani bisecţi din intervalul [al. dacă aceasta există. dar care să conţină cel puţin o dală din fiecare culoare. buchete diferite de câte trei fire. La clasa a X-a se realizează proiecte colective de sfârşit de semestru.46. Se cere să se caute pe tablă un cuvânt dat şi să se precizeze dacă este aşezat pe orizontală sau pe verticală. 48. Elevii unei clase vor să ofere celor m profesoare. 47. VI. Într-un buchet florile pot fi de acelaşi fel sau pot fi diferite. Scrieţi un program care să determine o singură împărţire în grupe a clasei. Pe un şantier arheologic s-a descoperit un mozaic format din mxn dale pătratede diferite culori. Se cunoaşte media la informatică a fiecărui elev. 80 . Se cunoaşte pentru fiecare sortiment preţul unui fir. 2. RECURSIV/TATE 1. Scrieţi un program recursiv pentru determinarea cifrei maxime dintr-un număr de cel mult 9 cifre. Ajutaţi-l să descopere un dreptunghi format din cât mai puţine dale. Cei n elevi trebuie împărţiţi în grupuri de lucru. La o florărie se comercializează n sortimente de flori.2. Se consideră o tablă de Scrabble cu m*n pătrate. Scrieţi un program care afişează toate variantele posibile şi costul total al fiecărei variante afişate. Restauratorii vor să ia o probă pentru a studia compoziţia culorilor (dar astfel încât să nu spargă mozaicul decât într- un singur loc). Scrieţi un program recursiv pentru calcularea sumei elementelor de pe o linie a unei matrici. unde al şi a2 sunt numere naturale cu proprietatea al<a2.

de maxim 9 cifre. Scrieţi un program care citeşte de la tastatura un număr natural şi apeleazăsubprogramele recursive care: a) numără câte cifre 3 conţine numărul. d) calculează suma cifrelor numărului. Scrieţiun program care rezolvă următoarea problemă prin două variante: a) Folosind un subprogram recursiv. 7. Scrieţi un program recursiv care să determine media maximă şi media minimă a unei clase cu n elevi. Comparaţi cele doua variante. este simetric (adică citit de la dreapta la stânga reprezintă aceeaşi valoare). Presupunând ca nici un animal din turmă nu moare şi că toate oile fac doar mieluţe şi niciodată berbecuţi să se calculeze câte oi. Scrieţi un program recursiv pentru a verifica dacă un număr dat a. b) determină valoarea cifrei maxime din număr. e) calculează suma tuturor divizorilor numărului. c) determină rangul cifrei cu valoarea maximă din număr (cifra unităţilor are rangul zero). 5. După un an mioara devine oaie. Problema se va rezolva în următoarele două variante: 1) Subprogramul va returna rezultatul prin intermediul unui parametru.4. Un cioban are o oaie. După un an oaia face o mieluţă. f) numără divizorii numărului. Scrieţi U11 subprogram recursiv care tipăreşte: 1 2 2 333 n 11 11 n 81 . N se citeşte de la tastatura. 6. În fiecare an fiecare oaie face câte o mieluţă. 8. După un an de viaţă mieluţa devine mioară. 2) Rezultatul va fi asociat numelui subprogramului. câte mioare şi câte mieluţe are ciobanul în turmă după Nani. g) numără cifrele pare conţinute de număr. b) Folosind două subprograme care se apelează reciproc.

Să se scrie un program care determină matricea care se obţine din toate matricile din fişier însumând elementele 82 . La un zgomot rândunelele îşi iau zborul. pentru o valoare X dată de la tastatură. Scrieţi un program recursiv pentru a verifica dacă elevii unei clase au prenumele diferite. sud sau nord.23. Funcţia recursivă va citi la fiecare apel câte un coeficient şi gradul termenului cu acel coeficient. 12.47 cel mai apropiat este 37. 11. 15. Unele zboară spre est altele spre vest. Se consideră harta unui teren de fotbal memorată sub forma unei matrice ce conţine valori 1 şi O. Scrieţi un program recursiv care să găsească cel mai apropiat număr de un pătrat perfect. Exemplu: Din şirul 11. Scrieţi un program care citeşte de la tastatura pentru fiecare rândunica direcţia în care a zburat şi afişează/prin intermediul unui subprogram recursiv. Un tabel conţine cuvinte. 14. numerele corespunzătoare rândune1elor care au zburat spre nord. Care este numărul zonelor distincte cu denivelări? Scrieţi pentru această problemă un subprogram recursiv. Scrieţi un algoritm recursiv care elimină spaţiile inutile din X. apoi va returna valoarea polinomului în punctul X.IN un şir de matrici scrise în felul următor: pe prima linie sunt date numărul de linii şi coloane ale primei matrice separate prin spaţiu. Pe un fir de telegraf se odihnesc N rândunele numerotate de la 1la N. numele. Apoi urmează următoarele matrici după modelul descris la prima matrice. Pe următoarele linii vor fi liniile matricei cu elementele separate prin spaţiu. 10. Programul va citi numărul de elevi. Scrieţi un program care prin intermediul unei funcţii recursive calculează valoarea unui polinom de gradul n.37. . 16. Scrieţi un program recursiv pentru a determina cuvântul de lungime maximă. O reprezintă zonă fără denivelări şi 1 cu denivelări.9. Fie X un şir de cuvinte separate prin unul sau mai multe spaţii.29. prenumele lor şi va afişa mesajul "DIFERITE" sau "NUME MULTIPLE". Se citesc din fişierul MATRICI. dintr-un şir de n numere naturale. 13.

Dreptunghiul obţinut se îndoaie la rândul său tot pe lungime. Elementele se suprapun dacă sunt pe aceeaşi linie şi aceeaşi coloană. numele participanţilor. METODA "DIVIDE ET IMPERA" 1.in cu structura următoare: .out. folosind numai numerele date. Pentru elevii unei clase se cunosc mediile trimestriale ale fiecăruia la fiecare materie. 18. şi afişează numele laureatului.d.m. ş. Programul va citi numărul de participanţi. Ieşirea se va face în fişierul Triunghi. O foaie de hârtie de formă dreptunghiulară se îndoaie pe lungime.pe prima linie n. un subşir al său s l şi un alt şir s2. Scrieţi un program care citeşte de la tastatură notele de concurs ale celor n participanţi la un festival muzical şi afişează laureatul. . Fiind dat un şir de caractere S. 2. Să se scrie un program care citeşte numărul de elevi.in Triunghi.pe următoarea linie cele n numere naturale separate prin spaţiu. Scrieţi un subprogram recursiv care afişează aria dreptunghiului obţinut prin n îndoiri succesive ale unui dreptunghi de lungime a şi lăţime b. Exemplu: Triunghi. 83 .out 2 4 9 16 36 64 81 144 256 324 576 729 etc. nota fiecăruia. să se scrie o funcţie recursivă care returnează şirul obţinut prin înlocuirea în şirul S a tuturor apariţiilor lui s l cu s2 astfel încât şirul returnat de funcţie să nu conţină subşirul s L 19. Datele de intrare se citesc din fişierul Triunghi. Se vor afişa numere mai mici decât cel mai mare număr de tip integer (Pascal) respectiv int (C++). care se suprapun.a. 23 VI.3. Să se afişeze în ordine crescătoare "'numărul de triunghiuri ce se pot obţine prin împăturiri succesive. Latura unui triunghi echilateral se poate împărţi la oricare din cele n numere astfel încât printr-o împăturire să se obţină triunghiuri echilaterale egale. Se dau n numere naturale (O<n<15). 17.

Andrei are în grădină m meri. 6. Ioana are m cărţi. 4. numărul de materii.Realizaţi un program care rezolvă această problemă prin metoda divide et impera. în funcţie de situaţie. în ordinea în care ei au plecat la joacă. 7. Scrieţi un program care citeşte de la tastatură numărul de mere culese de către fiecare dintre cei n copii. pentru rezolvarea fiecăreia din următoarele cerinţe şi apelaţi toate aceste subprograme în programul principal: a) număraţi şi afişaţi câţi copii dintre cei N au cules un număr de mere mai mare decât un număr dat de la tastatură. 5. Să se scrie un program care să afle mărul cu cele mai multe fructe prin metoda divide et impera. Fiecare. Scrieţi câte un subprogram. Folosind tehnica Divide et impera scrieţi un program care determină numărul de persoane cu înălţimea mai mare decât 1. Pe ecran se va afişa DA respectiv NU. mediile fiecărui elev şi afişează elevul şi disciplina cu media maximă. c) calculaţi şi afişaţi al câtelea a plecat la joacă copilul care a cules cel mai puţine mere? Dar cel mai multe? d) care a fost cel mai mic număr de mere culese de către vreun copil? Dar cel mai mare? e) există vreun copil care a cules exact M mere? (M dat de la tastatură) Afişaţi al câtelea a plecat elIa joacă. Realizaţi un program care face această ordonare prin metoda divide et impera. 84 . precum şi înălţimea fiecărui locuitor. Profesoara de sport a clasei a X-a vrea să ştie dacă sunt în clasă 2 elevi cu aceeaşi înălţime . Prin program se citeşte numărul de locuitori ai oraşului. Ea vrea să ordoneze aceste cărţi după numele autorilor. b) calculaţi şi afişaţi numărul total de mere culese de cei N copii. 3..95 m dintr-un oraş. Fiecare măr i are ni fructe. folosind tehnica "divide et impera". N copii culeg mere dintr-o livada. când se plictiseşte. merge şi aşează merele într-o cutie apoi pleacă la joacă. Se citeşte n (numărul elevilor din clasă) şi n înălţimi (date în centimetri).

Pe teritoriul Australiei sunt dispuse n centre de televiziune (n.in se citesc de pe fiecare linie perechi de numere întregi (i. Din fişierul pestera. Ştiind că două centre apropiate geografic nu pot folosi acelaşi canal de transmisie deoarece acestea vor interfera şi imaginea nu va putea fi corect recepţionată. se cere să se scrie un program care să determine numărul minim de canale pe care pot emite cele n staţii. 5.n. Scrieţi un program care să răspundă la următoarele întrebări: a) Care sunt încăperile cu cele mai multe coridoare de legătură? b) Care sunt încăperile în care peştera se înfundă? Există încăperi ce sunt izolate? c) Există un grup de încăperi care să aibă toate acces direct la toate celelalte din grup? 3. Într-un oraş există n şcoli unite printr-o reţea stradală cu sens unic.. 2. Determinaţi o şcoală la care se poate ajunge pornind de la oricare altă şcoală. 85 . j) reprezentând legătura stradală între şcoala i şi şcoala j. Într-un grup de n persoane aflate la un festival există relaţii de cunoştinţă. Determinaţi centrul comercial care are legături directe cu cât mai multe centre. Se dă numărul de şcoli şi perechi de numere (i. Codificăm cele n încăperi ale unei peşteri cu 1. număr natural citit de la tastatură). VIP la acest festival înseamnă persoană cunoscută de cele mai multe persoane..j) are semnificaţia că persoana i cunoaşte persoana j.j) cu semnificaţia "încăperea i este legata direct de încăperea j". Fie n centre comerciale unite prin drumuri de acces.2. relaţiile de cunoştinţă şi afişează VIP-urile. Scrieţi un program care citeşte numele persoanelor. 4.. CAPITOLUL VII GRAFURI 1.. Relaţia (i.

La un concurs de badmington participă n concurenţi. triplete de numere cu următoarea semnificaţie: 6) Cod carte. Scrieţi un program care să răspundă la următoarele întrebări: a) Există elevi care au citit toate cărţile? În caz afirmativ afişaţi care sunt aceştia. 86 . • Să se afiseze numele echipelor ce au jucat deja toate meciurile posibile. de pe a doua linie. Fiecare concurent i a jucat un număr de m[i] de meciuri din care a câştigat c[i] meciuri. din diferite motive. 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. Pentru a ţine evidenţa meciurilor jucate pe măsura ce se desfăşoară. 7. de pe următoarele linii. Datele de intrare vor fi citite din fişierul text ECHIPE. Din fişierul carti. 8.IN astfel: -pe prima linie se află numărul de echipe participante (n). -pe următoarele n linii se află matricea de incidenţă corespunzătoare meciurilor susţinute până în prezent. Profesoara de limba română recomandă elevilor clasei a XI-a m cărţi pe care aceştia trebuie să le citească până la sfârşitul semestrului. La un campionat de volei fiecare echipă urmează să joace cu toate celelalte echipe. -pe urmatoarele n linii se găsesc denumirile echipelor (câte una pe un rând). • Să se afişeze meciurile ce nu au avut încă loc.6.in citesc: de pe prima linie numărul de cărţi. Să se scrie un program care să determine meciurile care mai trebuie jucate astfel încât fiecare participant să joace cu fiecare din ceilalţi şi apoi să afişeze clasamentul parţial (după numărul de victorii). • Elevul care primeşte cartea şi o citeşte. Obs. numărul de elevi. : Graful corespunzător meciurilor ce nu au avut încă loc reprezintă graful complementar celui dat (muchiile a două grafuri complementare formează împreună graful complet cu aceleaşi vârfuri). • Elevul care a citit cartea şi o dă mai departe. O parte din elevi nu vor reuşi să citească toate cărţile.

87 . b) Există elevi care nu au citit nici o carte? În caz afirmativ afişaţi lista lor. Deoarece doresc să se inspire unii de la alţii. Se consideră că dacă X a împrumutat caietul colegului Y. Scrieţi un program care să afişeze: a) La câţi colegi a împrumutat caietul fiecare elev şi de la câţi colegi a împrumutat caietul cu tema. există: 4 b) Da.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} Soluţii: ' a) Da. Se cunosc perechile de elevi (numerotaţi de la 1 la n după catalog) care şi-au împrumutat caietele. Primul din pereche este cel care a dat caietul cu tema. f) Tema cărui 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. iar Y a împrumutat colegului lui Z. există: 3 c) Carte citită de 3 elevi: 2 >-}':. care au fost aceia? h) Se citeşte de la tastatură o listă de elevi (sub formă de numere de ordine). c) Care este cartea (cărţile) citită de cei mai mulţi elevi? Exemplu: Date. lui Lee) c) Căror colegi le-a împrumutat elevul X caietul său? d) Numărul elevului care a dat caietul celor mai mulţi colegi. ei îşi împrumută unii altora caietele în care şi-au scris temele. tema lui Z este inspirată atât din tema lui X cât şi din a lui Y. b) Care a fost şirul cel mai lung de elevi a căror temă a fost inspirată de către tema elevului X? (alg. Elevii unei clase au de scris o compunere la limba franceză. 9. e) Numărul elevului care a luat cele mai multe caiete pentru a se inspira. Precizaţi dacă este adevărat sau nu faptul că fiecare elev din listă a împrumutat caietul la cel care urmează imediat după el în listă. iar al doilea cel care l-a primit.

Iniţial deplasarea între oricare două puncte se face într-un timp t. Ei se înţeleg "din priviri" însă nu pot "vorbi"cu toţi colegii.: corturile. El are o hartă pe care sunt marcate iglu-urile din zonă (numerotate de 1 la n) şi distanţele dintre acestea. e) Verifică dacă între localităţile x şi y date de la tastatură se pot realiza convorbiri folosind trasee diferite. deci dacă o informaţie poate ajunge la fiecare. 12. numai cu unii. Să se scrie un program care citeşte numărul de elevi (n). Într-o tabără elevii au n puncte de plecare (de ex. cantina. afişaţi toate variantele de a ajunge la prietenul lui care locuieşte la iglu-ul cu numărul y. Un eschimos locuieşte la iglu-ul cu numărul x. Dacă da. Ştiind că din cauza frigului eschimosul nu poate să parcurgă o distanţă mai mare de 100 km fără oprire la un iglu.10. Se ştie că elevii comunică în timpul unei lucrări de verificare a cunoştinţelor. până la întâlnire a caracterului Ctrl/Z. 11. stejarul cel bătrân etc). d) Afişează localităţile grupate în modul următor: din aceeaşi grupă fac parte localităţile 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 aparţine grupei. Se cunosc perechile de localităţi între care există legătură prin fir direct. 13. programul va afişa şi drumul acestei informaţii. Între N localităţi numerotate de la 1 la N sunt instalate legături telefonice. însă organizatorii au amplasat m obstacole pe· 88 . apoi. citeşte perechi de elevi care pot comunica şi verifică dacă există o legătură între toţi elevii din clasă. Se va afişa 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". dată de la tastatură b) Afişează localităţile legate prin fir direct de o singură localitate c) Stabileşte şi afişează dacă între oricare două localităţi se poate realiza o legătură telefonică (directă sau prin intermediul altor localităţi). Scrieţi un program care citeşte de la tastatură aceste legături apoi realizează urmatoarele: a) Calculează şi afişează cu câte localităţi se poate comunica direct din localitatea x.

m. Se consideră că orice drum de legătură permite circulaţia în ambele sensuri. urmând ca la timpul potrivit să le spargă pentru ca apa să inunde plantaţiile. Pentru cele n oraşe mari (cu peste 50000 locuitori) ale unei ţări se cunosc drumurile de legătură dintre ele. dar vor să meargă pe drumul cel mai scurt. pe un traseu pot fi mai multe obstacole. • Pe prima linie. Un turist are la dispoziţie o sumă de bani pentru a vizita cât mai multe oraşe. 16. b) dacă suma existentă pentru investiţie este suficientă pentru a alimenta tot satul şi în caz afirmativ să se afişeze o soluţie de cost minim. Cu fiecare obstacol care trebuie depăşit elevii pierd 30 de secunde. După cum se obişnuieşte în Estul Chinei. Pentru aceasta se face un studiu în urma căruia rezultă următoarele informatii salvate într-un fişier text: fr ~ . Scrieţi un program care citeşte n. AgenţiaNaţională de distribuţie a gazelor naturale ROMGAZ primeşte o investiţie de x miliarde lei pentru a realiza legarea la reţeaua natională de gaz a tuturor caselor din satul Făget. O plantaţie parcelată poate arăta astfel : 89 . traseele dintre aceste puncte. numărul de case ce trebuie legate (n) • Pe următoarele linii se află costurile instalării conductelor de gaz de la o casă la alta. Să se scrie un program care să împartă aceste oraşe în grupe pe "grade de izolare". 14. x. astfel: Numar_casa _i numar _casa -J costul instalării 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 reţea. 15. O grupă cu acelaşi grad de izolare este formată din oraşele care au acelaşi număr de artere care intră în oraş. ţăranii construiesc diguri de jur împrejurul plantaţiilor de orez. y apoi m perechi de puncte între care sunt obstacole şi afişează drumul cel mai rapid între x şi y. Acum elevii trebuie să ajungă din punctul x în y. Fie o reţea de drumuri între n oraşe. 17. Cunoscându-se legăturile dintre oraşe şi costul deplasării între oraşe determinaţi numărul maxim de oraşe ce pot fi vizitate şi stabiliţi traseul turistului.

graful ce rezultă arată astfel: Fiind date costurile de spargere (şi apoi refacere) ale tuturor digurilor existente. O firmă are un număr de posturi vacante de diferite tipuri şi există de asemenea un grup de solicitanţi pentru ocuparea lor. Să se determine dacă există 90 .graf. Dacă fiecărei parcele îi asociem vârful unui . Fiecare persoană este calificată pentru anumite posturi. 18. se cere să se determine o soluţie de spargere de cost minim astfel încât toate parcelele să poată fi irigate. iar două parcele alăturate vor fi reprezentate ca având o muchie comuna.

Dar cu toate acestea este optimistă fiindcă cunoaşte toate "obligaţiunile" din oraşul său. Să se scrie un algoritm care determina cel mai mare grup cu proprietatea că există relaţii puternice între toţi membrii lui.. În acest scop se efectuează un studiu al căilor de acces din interiorul clădirii. Se vor afişa şi potenţialii conducători. Muzeul de artă doreşte să achiziţioneze o clădire în scopul deschiderii unei expoziţii. persoane calificate pentru a ocupa oricare din posturile scoase la concurs. se cere să se determine: a. şi aşa mai departe şi va găsi ea o cale să-I oblige pe stimabilul profesor să-I treacă pe puişorul ei. Una dintre initiaţivele puse în practică este găsirea upui consiliu managerial format din oameni foarte uniţi şi plini de idei. În cazul în care acest lucru este posibil. ştiind că acesta se numeşte Protopopescu. În urma studiului se desenează graful corespunzător. Miţi îi e datoare lui Mimi. 21. ca fiind persoanele cele mai agreate din acest grup. Cea mai scurtă soluţie pentru puişor. Să se determine dacă în aceste condiţii publicul ar putea vizita expoziţia circulând exact o dată pe lângă fiecare obiect. Ştie de pildă că Popeasca îi e datoare lui Miţi. în speranţa reabilitării situaţiei financiare. 19.. iar numele profesorului se citeşte de la tastatură. să se afişeze un astfel de circuit. b. 20. iar arcele reprezintă posibile direcţii de deplasare. s-a construit un graf ale cărui muchii semnifică puternice relaţii de colaborare. 91 . în care vârfurile reprezintă locuri unde ar putea fi expuse obiecte. O mare agenţie în prag de faliment încearcă să producă o schimbare în conducere. In urma unui sondaj de opinie referitor la încrederea pe care o au fiecare dintre ei în toţi ceilalţi.ln perechi de nume cu semnificaţia că persoana cu primul nume îi este datoare celeilalte. Observaţie: Un subgraf parţial complet al unui graf se numeste clica. Lanţul slăbiciunilor Mamiţica este disperată: "puişorul" este "corijent" la chimie. Nu se va considera o soluţie ca aceeaşi persoană să câştige două posturi. Toate lanţurile slăbiciunilor din oraş. Citind din fişierul slablciuni.

b) Afişaţi toţi membrii arborelui genealogie. Să se scrie un program care să rezolve această problemă. Se va scrie întâi numele baiatului şi apoi numele fetei (R(S. Elevii trebuie să se grupeze pentru a realiza aceste proiecte după preferinţe. c) Afişaţi numele părinţilor urmat fiecare de numele copiilor lui scrise între paranteze. 25. Să se determine numărul minim de. în care nu există solutie. Se va ţine seama de sexul fiecărei persoane prin poziţia pe care o ocupă în arbore. În fiecare grupă. dansuri necesare astfel încât fiecare să danseze cel puţin o dată cu cei cu care doreşte. în vederea realizării proiectelor. La disciplina informatică se realizează proiecte de grup în fiecare semestru. 92 . În situatia . 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 aceştia au fost băiat şi fată.22. Fiecare are anumite preferinţe de a invita sau de a fi. 23. 24. separate prin virgulă. Transportul se face cu avionul. fiecare elev trebuie să prefere pe cineva din grupa sa. Să se scrie un program care împarte elevii în grupe. a) Găsiţi o structură de date potrivită pentru păstrarea î~~. Într-o familie mai deesebită. Grupele trebuie să fie formate din cel puţin doi elevi şi cel mult jumătate din numărul elevilor clasei.llculator a numelor persoanelor din arborele genealogie şi scrieţi un program care preia datele de la tastatură. afişându-se şi perechile la fiecare dans. invitat la dans. O agenţie de turism oferă spre vizitare mai multe obiective turistice. Să se scrie un program care să afişeze traseul cel mai scurt pentru vizitarea obiectivelor dorite de acel turist. Pentru fiecare obiectiv se cunosc coordonatele sale (latitudine şi longitudine). Fiecare elev are voie să aibă două preferinţe. Un turist poate alege dintre aceste obiective pe cele pe care vrea să le viziteze. se va afişa un mesaj corespunzător.D)). d) Câte generaţii cuprinde linia cea mai lungă de descendenţi? Afişaţi valoarea obţinută. în ordinea generaţiilor (pe nivele). La o discotecă organizată la şcoală participă n băieţi şi m fete.

Se precizează că elevul cu numărul 1 este băiat. deoarece prietenii săi l-au recepţionat deja.a. Dirigintele vrea să construiască un arbore de informare în clasă astfel încât fiecare elev să obţină informaţia în timp cât mai scurt. Aceştia transmit fiecare mai departe prietenilor care nu au recepţionat încă zvonul. codificate 1. Fiecare elev primeşte informaţia de la o singură persoană. scrieţi un program care preia datele de la tastatură (perechile de numere) şi afişează. Fiind dat numele unui patruped se cere să se afişeze numele părinţilor şi al "bunicilor". iar nodul din dreapta pe cel al "mamei".y) cu semnificaţia: x corespondează cu y (relaţie reciprocă).m. Relaţia de prietenie nu este neapărat reciprocă. Băieţii dintr-o şcoală corespondează cu fetele dintr-o altă şcoală. Un chinolog întocmeste pedigree-ul câinelui său. Se cunosc perechi de numere (x. 93 . Pentru aceasta construieşte un arbore binar care cuprinde strămoşii câinelui al cărui nume figurează în rădăcina arborelui. grupa fetelor şi grupa băieţilor. iar fiecare din cei doi elevi anunţă câte trei elevi. dacă este posibil.26. Ştiind că nici un băiat nu corespondează cu un alt băiat din şcoala lui şi nici o fată nu corespondează cu vreo altă fată din şcoala ei. Strămoşii se citesc corespunzător parcurgerii în preordine a arborelui.in cu structura următoare: • pe prima linie se dă numărul de persoane (n) 1» pe următoarele n linii codul fiecărei persoane din grup şi codurile prietenilor săi. separate prin spaţii. 29. 27. În cazul în care problema nu are soluţie..d.. Copiii sunt numerotaţi de la 1 la N într-o ordine oarecare. şi aşa mai departe. Într-o clasă sunt n elevi.n se precizează pentru fiecare persoană. Nodul care se află în stânga unui nod oarecare conţine numele "tatălui". dacă aceştia figurează în arbore.. Dirigintele anunţă doi elevi. 28.. care la rândul lor anunţă câte trei elevi. Să se scrie un program care construieşte un astfel de arbore de informare. Datele se citesc din fişierul persoane. Într-un grup de n persoane. O persoană din grup recepţionează un zvon pe care îl transmite prietenilor săi. Să se afişeze toate posibilităţile de transmitere a zvonului. să se afişeze: "nu se pot stabili grupele exact". lista de prieteni.2. Persoana care recepţionează zvonul se citeşte de la tastatură. ş. începând cu persoana care l-a recepţionat şi sfârşind cu o persoană care nu mai are cui să transmită zvonul.

• care au fost echipele descalificate la o etapă dată (citită de la tastatură). B. C. un 1 având semnificaţia că şcoala din acea linie a jucat în campionat cu şcoala din coloana corespunzătoare. Ştiind că regula internă a acestui campionat face ca în fiecare etapă. La citirea numărului etapei se va realiza o validare a datelor. a accesat serverul pentru a afla informaţii despre această competiţie. calculatorul fiind virusat s-au pierdut o seamă de informaţii. E. Iată ce a mai rămas: • pe primele linii. Din păcate. It pe următoarele linii se găsesc cifre de O şi 1 separate prin câte un spaţiu. reprezentând o matrice cu atâtea linii şi coloane câte şcoli participante. H. Ex. Fişierul de intrare este: 8 A B C D E 94 . Exemplu. aflat temporar în Italia. Ionică. fişierul persoane.: Participă la campionat 8 şcoli: A. in Se va afişa: 6 135 43 2154 465213 34 46513 463 5216 645 Persoana care recepţionează zvonul: 4 30. denumirile şcolilor participante (câte una pe un rând) . F. în sensul că nu va fi permisă introducerea unui număr mai mare decât numărul maxim de etape. D.G. să se scrie o aplicaţie care să determine : • care au fost echipele finaliste . echipele ce pierd meciul să fie scoase din competiţie. În urma campionatului interşcolar de fotbal elevii au redactat un material informativ pe care l-au salvat pe serverul liceului.

F G H 01011000 10000000 00010000 10100000 10000101 00001000 00000001 00001010 95 .

3. STIVA 1. Scrieţi un program care să simuleze această acţiune şi care să afişeze cantitatea totală de cartofi precum şi legumele existente în stivă. Fiecare element al listei va reprezenta un termen şi va păstra gradul si coeficientul termenului respectiv. În depozitul de legume fructe al societătii Legume-Fructe SA se află mai multe stive de lăzi cu legume. CAPITOLUL VIII ALOCAREA DINAMICĂ A MEMORIEI VIII. Maria o ajută pe mama sa la bucătărie după plecarea musafirilor.1. Pentru că are la dispoziţie doar două ore pentru. murdare. dar mama îi atrage atenţia că farfuriile de desert curate le va pune una . Fiecare polinom rezultat se va păstra în câte o listă simplu înlănţuită. Gestionarul vrea să separe această stivă în două stive: una care să conţină numai lăzile cu cartofi şi una care să conţină celelalte legume. 96 . Scrieţi un program care să simuleze aceste acţiuni ale profesorului. a le corecta. În pauză vrea să verifice dacă Răzvan a predat caietul cu tema. 2.: Nu se vor păstra în nici una dintre liste termenii care au coeficientul egal cu zero. Toate farfuriile de desert şi de felul doi. Să se calculeze suma şi produsul a două polinoame date sub forma a două liste simplu înlănţuite. Obs. ia acasă doar jumătate din caiete. Una dintre stive conţine cartofi şi alte legume. 4. Programul va afişa mesajul "Răzvan a predat caietul" sau mesajul "Răzvan nu a predat caietul" apoi va afişa "Lista caietelor pentru astăzi" precum şi "Lista caietelor pentru mâine". sunt puse unele peste altele lângă chiuvetă pentru a fi spălate. Maria începe să spele aceste farfurii. Profesorul de informatică adună caietele cu tema de casă a elevilor formând cu ele un teanc. În fiecar'e ladă există un anumit produs şi fiecare ladă are o cantitate dată de legume.

6. 5. una a farfuriilor de desert şi alta a farfuriilor de felul doi.2. la al treilea etaj cărţi care au cote cuprinse între 20000 şi 29999. simulează spălarea acestora şi creează alte două stive. marca şi culoarea. Creaţi o stivă cu vocalele distincte din cuvânt şi o altă stivă care cuprinde consoanele distincte. Aranjarea în lift se va face astfel încât atunci când liftul ajunge la fiecare etaj. în vârful coloanei să fie aşezate cărţile care aparţin nivelului respectiv. 7. Se introduce un cuvânt de la tastatură. peste alta într-o parte şi la fel cele de felul doi în altă parte. Scrieţi un program care. Creaţi o listă cu toate maşinile dintr-un parc auto. la cel de-al doilea etaj cărţile care au cota de la 10000 la 19999. Afişaţi de câte ori a fost solicitat liftul pentru transportul cărţilor. B şi C. Ştiind că angajatul este corect şi permite să intre alternativ câte o persoană din fiecare rând. Periodic. b) culoarea care predomină în acest parc auto. Cărţile sunt distribuite cititorilor în trei săli de lectură: sala A. Depozitul de carte al unei biblioteci se întinde pe patru etaje ale aceleaşi clădiri. COADA 8. Pentru fiecare maşină se cunoaşte numărul de înmatriculare. cărţile returnate de cititori sunt trimise din cele trei săli de lectură înapoi la depozit. Pentru că există doar un singur angajat care verifică biletele. pornind de la stiva farfuriilor murdare. La intrarea intr-o sală de spectacole sunt 2 rânduri de persoane păstrate în două liste simplu înlănţuite de tip coadă. pe poartă poate să intre la un moment dat o singură persoană. VIII. Liftul este astfel construit încât toate cele 100 de cărţi se aşează una peste alta într-o singură coloană. 97 . fiind transportate cu un lift care are o capacitate de 100 de cărţi. Afişaţi: a) numărul de maşini din fiecare marcă existente în parc. La primul etaj se găsesc cărţile care au cota de la 00001 la 09999. pornind de la listele cărţilor returnate din fiecare sală de lectură. Afişaţi care din cele două stive conţine mai multe elemente. iar la ultimul etaj cotele sunt de la 30000 la 39999. se cere să se afişeze ordinea de intrare a persoanelor în sala de spectacol (fiecare persoană este identificată prin numărul biletului său). Scrieţi un program care pe baza unui subprogram. să simuleze aşezarea cărţilor în lift şi repartizarea acestora pe etaje.

C-prezentare client la service. pacienţii sunt consultaţi în ordinea sosirii. Fiecare maşină este identificată prin numărul de înmatriculare şi fiecare rampă prin numărul ei. L. 12. T-terminarea programului 11. R-listarea rampelor. Meniul va avea următoarele opţiuni: P-sosire pacient. Pacienţii se identifică prin nume. mecanicul auto anunţă aceasta şi prima maşină din rând (dacă există) este repartizată la acea rampă. Scrieţi un program care lucrează pe baza unui meniu pentru planificarea consultaţiilor. Când o rampă se eliberează. Pe bandă intră cel mult 20 de bagaje. să gestioneze rândul şi rampele. Pe aeroportul Ben Habib bagajele sunt aduse de la aeronavă într-o sală de preluat bagaje. 10. X-ieşire din program. Excepţiile sunt cazurile de urgenţă care intră la consultaţie imediat ce se eliberează scaunul. Pe fiecare rampă se poate repara la un moment dat o singură maşină. de unde fiecare călător îşi poate ridica bagajul atunci când acesta a ajuns la acest capăt.9.Să se determine triplete1e de puncte consecutive în listă care sunt coliniare şi să se afişeze. O listă conţine coordonatele a n puncte din plan.listarea maşinilor de la rând.eliberare scaun. U-sosire urgenţă. . Cunoscând numărul călătorilor care coboară dintr-un avion (fiecare are un singur bagaj pe care este scris numele şi prenumele). La un service auto există n rampe de reparare a maşinilor. În această sală se află o bandă rulantă care are două capete: unul este în exteriorul sălii. L-listarea pacienţilor de la rând. scrieţi un program care simulează intrarea bagajelor pe 98 . iar celălalt capăt se află în interior. E. unde bagajele sunt depuse unul câte unul. Programul va afişa un meniu de forma: E.eliberare rampă. La un cabinet stomatologic cu un singur medic. Scrieţi un program care să repartizeze maşinile la rampe. Un client care vine la service este repartizat la o rampă liberă (dacă există) sau este rugat să aştepte la rând.

3. La introducerea fiecărui elev verificaţi dacă acesta nu a mai fost introdus în listă. la ora deschiderii sunt maşini care aşteaptă să fie servite. precum şi dobânzile aferente sunt reţinute într-o listă liniară simplu înlănţuită. În fiecare minut se serveşte o maşină sau alta intră în staţie şi îşi aşteaptă rândul. De obicei. P-preluare bagaj. Pot exista momente în care nu sunt maşini în staţie şi atunci afişaţi "Pauză". 17. reprezentând altitudinea unor puncte de pe hartă. VIH. pentru fiecare elev cunoscându-se numele şi media la informatică. 16. Într-un oraş mic din sudul ţării există o staţie Peco cu o singură pompă la care se serveşte benzină şi motorină. Scrieţi un program care preia de la tastatură numele acestuia şi răspunde cererii sportivului. Firma dispune de o sumă S cu care doreşte să îşi achite datoriile la bancă. O firmă a făcut numeroase împrumuturi la o bancă. banda rulantă şipreluarea lor de către călători pe baza unui meniu cu opţiunile l-intrare bagaj. Inseraţi între fiecare două elemente consecutive din lista iniţială media aritmetică a celor două valori şi afişaţi noua listă. La sfârşitul programului afişaţi cantităţile de benzină şi de motorină vândute. Valorile acestora. LISTE SIMPLU ÎNLĂNTUITE . 14. Scrieţi un program care să elimine din listă acele 99 . Creaţi o listă liniară simplu înlănţuită cu elevii clasei a XI-a. scrieţi un subprogram care pe baza unui meniu simulează intrarea maşinilor şi servirea lor într-o singură zi. Staţia are un regim special deoarece este deschisă o jumătate de oră pe zi. Se citesc n numere reale într-o structură de tip listă. 13. S-sfârşit program. Cunoscând maşinile (numărul de înmatriculare. ce tip de combustibil doresc şi în ce cantitate) care se află în staţie la ora deschiderii. Într-o listă liniară simplu înlănţuită sunt reţinute rezultatele sportivilor unui club de atletism: numele şi valoarea săriturii în lungime. Un sportiv vrea să afle ce loc ar ocupa dacă s-ar alcătui un clasament în ordinea descrescătoare a săriturilor. Afişaţi apoi cel mai bun informatician (informaticieni) al (ai) clasei. 15.

unde pe fiecare linie avem un număr de bancnote. iar pe celălalt băieţii. Se va folosi pentru aceasta o listă liniară alocată dinamic.introducere de bani în bancomat. conform cererii din fişierul Bani. Numele elevilor din cele două clase sunt memorate în două liste simplu înlănţuite ordonate alfabetic.extragere de bani.in 500000 10000 10000 100000 10000 500000 E. spaţiu.out. Se opreşte dacă nu mai sunt băieţi sau dacă nu mai sunt două fete alăturate. . în fiecare nod al listei păstrându-se valoarea bancnotei şi numărul de bucăţi existente în bancomat. valoarea bancnotei. Apoi ia pe rând câte un băiat şi îl aşează între două fete. Să se scrie o aplicaţie pe baza de meniu care gestionează banii dintr-un astfel de bancomat pe parcursul unei zile. 20. modifică lista fetelor astfel încât aceasta să fie formată din câte un băiat şi o fată. din fişierul Bani. Să se insereze în lista elevilor din XI A câte un elev din XI B.. Elevii claselor a XI-a A si a XI-a B trebuie să susţină un test la limba străină studiată: cei din XI A la limba engleză. pornind de la cele două liste. Afişaţi dacă au rămas băieţi pe dinafară sau dacă mai sunt fete alăturate. 18. 19. a fetelor şi a băieţilor. Scrieţi un subprogram care. Să se afişeze lista obţinută după inserare. astfel încât să nu existe alături doi elevi care susţin testul la aceeaşi limbă străină. Meniul va conţine urmatoarele opţiuni: I. La o grădiniţă d-na educatoare aşează copiii pe două rânduri: pe unul fetele. Profesorii hotărăsc să aranjeze elevii astfel încât într-o bancă să stea un cunoscător de limba engleză şi unul de franceză. iar cei din XI B la limba franceză. 100 . Un bancomat poate primi toate tipurile de bancnote (valuta naţională). împrumuturi care pot fi restituite având la dispoziţie suma S (restituirea va începe cu primul împrumut din listă şi se vor lua în considerare dobânzile).in în care pe fiecare rând se află valoarea unei bancnote Exemplu: Bani.

unii dintre candidaţi sunt eliminaţi. d) Să se găsească şi să se afişeze poziţia pe care se găseşte buchetul cu cele mai multe flori. Exemplu: Bani. iar la sfârşit listează candidaţii reuşiţi ordonaţi după medii. La început candidaţii sunt în ordine alfabetică. c) Să se numere şi să se afişeze numărul de buchete care conţin numere prime de flori. ceea ce înseamnă că se doreşte extragerea de bancnote cu acea valoare în numărul specificat. După terminarea probelor sunt excluşi din lista iniţială şi cei care nu au media cel puţin 6. La o florărie sunt pregătite buchete de flori pentru diferite ocazii. La un concurs de frumuseţe concurentele se prezintă prin următoarele date: numele. 22. Se citesc de la tastatură numărul de flori din fiecare buchet până la întâlnirea numărului zero şi se păstrează într-o listă alocată dinamic. Scrieţi un program care creează lista de înscriere (fiecare candidat participă la 6 probe) apoi adaugă notele la fiecare probă şi îi exclude pe cei respinşi. Fiecare candidat se identifică prin nume. a celor respinşi. dar sunt trecuţi în altă listă.out 7500000 8610000 3 100000 A.afişarea disponibilului la un moment dat Iniţializarea bancomatului cu bani se va face printr-o operaţie de introducere de bani dintr-un fişier de tipul Bani. La examenul de bacalaureat se prezintă n candidaţi.out. Toate aceste informaţii se păstrează într-o listă liniară. precum şi pe cei respinşi. înălţimea. Se cere: a) Să se afişeze numerele de flori din buchete în ordinea citirii. e) Afişaţi buchetele în ordinea descrescătoare a numărului de flori conţinute. b) Să se afişeze şi apoi să se elimine din listă toate buchetele cu un număr par de flori după care să se afişeze numărul de flori din fiecare dintre buchetele rămase. greutatea. Dacă sunt mai multe cu acelaşi număr maxim se vor afişa toate acele poziţii. Pe parcursul desfăşurării examenului. Cei care au obţinut note sub 5 sunt scoşi din lista de examen. 21. Juriul vrea să aleagă două premiante (una 101 . 23. vârsta.

Acum cei n turişti aflaţi pe n cămile îşi pot continua drumul prin deşert. dintre cele mai înalte şi una dintre cele mai scunde). câmpul rezervat celei de-a doua persoane rămâne liber). Doreşte să aranjeze elevii în bănci astfel încât primul din clasă să stea 102 . reprezentând altitudinea unor puncte de pe hartă. La prima oază cămilele pe care se află doi turişti ies din caravană şi rămân să se odihnească. 27. 26. Caravana porneşte la drum. 25_Flaviu este în clasa a IX-a şi nu pre cUllqaşte care este poziţia lui în clasă. Inseraţi între fiecare două valori consecutive din lista iniţială media aritmetică a celor două valori şi afişaţi noua listă. Ei au la dispoziţie m cămile (nl2<m<n). Dirigintele unei clase are un tabel cu elevii săi ordonaţi după medii. Fiecare element al listei va cuprinde un număr de identificare a cămilei şi numele celor două persoane. fiecare putând transporta unul sau doi turişti. cei trei de după el. după ce turiştii au urcat pe cămile. care se află pe cămilă. Cele două elemente corespund celor doi turişti care au coborât de pe o cămilă şi care urcă pe câte o alta. Se citesc n numere reale într-o structură de tip listă. astfel încât fiecare turist rămas pe dinafară poate urca pe câte o cămilă. Pentru aceasta se creează două liste: una cu concurentele cele mai înalte (jumătate) şi una cu concurentele mai scunde (jumătate). După fiecare ştergere adăugaţi două elemente la sfârşitul listei. VUI. să se scrie un program care afişează cei trei elevi din faţa lui Flaviu. Pentru fiecare elev din clasă se cunoaşte numele şi media lui generală. 24.4. Un grup de n turişti se află în Tunisia şi doresc să facă o excursie prin deşert. Folosind o listă ordonată. respectiv al unei singure persoane (în acest caz. Alte cămile se aşează la sfârşitul caravanei. Scrieţi un program care creează cele trei liste apoi le afişează însoţite de un titlu potrivit. LISTE DUBLU ÎNLĂNTUITE . precum şi poziţia pe care se găseşte el în clasă. Scrieţi câte o procedură pentru fiecare din următoarele cerinţe: a) Creaţi o listă liniară simplu înlănţuită corespunzătoare caravanei care se formează la începutul excursiei prin deşert. b) ştergeţi din listă elementele corespunzătoare cămilelor cu câte doi turişti.

Ştiind că tabelul este memorat într-o listă liniară dublu înlănţuită.1---1. Cunoscând numărul elevilor. Fie a şi b două numere naturale cu multe cifre.3---0. creaţi o listă cu toţi elevii clasei. Pentru aceasta nu vor ţine cont de simpatiile existente. Se reia formarea perechilor începând de data aceasta cu primul băiat din partea stângă şi prima fată din partea dreaptă. Se memorează cifrele unui număr scris în baza 2 într-o listă alocată dinamic. în bancă cu ultimul. 28. Să se afişeze cele două numere apoi să se calculeze şi afişeze diferenţa lor folosind structuri de date alocate dinamic.1---0. ci vor forma perechile în modul următor: toţi elevii clasei se vor aşeza pe o singură linie. 32. Fie a şi b două numere naturale cu multe cifre. afişaţi perechile obţinute în urma aranjării elevilor în bănci. La sfârşitul semestrului 1 lista cu numele şi mediile din fiecare grupă în ordine crescătoare a mediilor este păstrată în câte o listă alocată dinamic. apoi formaţi perechile după procedeul descris mai sus. Elevii dintr-o clasă de informatică lucrează la laborator pe grupe. Să se afişeze cele două numere apoi să se calculeze şi să se afişeze suma lor folosind structuri de date alocate dinamic. 30. parcurgând şirul dinspre margini spre centru. 29. Prima fată din partea stângă şi primul băiat din partea dreaptă formează prima pereche. Perechile se formează. 31.2---1.1 va afişa E5). Următorul băiat din partea stângă şi următoarea fată din partea dreaptă formează a doua pereche. prenumele şi sexul fiecăruia. Creaţi şi apoi afisaţi o listă ce va conţine cifrele numărului în baza 16 (exemplu: 11100101 1. până când cele două parcurgeri se întâlnesc. Se cere: a) Verificaţi datele de intrare în timpul introducerii lor de la tastatură şi nu permiteţi adăugarea în listă a mediilor mai mici decât 1 sau mai mari 103 . al doilea cu penultimul etc. Elevii clasei a XI-a hotărăsc să formeze cât mai multe perechi de Ziua Îndrăgostiţilor. Pentru cea de-a treia se ia următoarea fată din partea stângă şi următorul băiat din partea dreaptă. Se continuă în acest mod până când nu se mai poate forma nici o pereche. o celulă conţine cifra şi numărul de repetări consecutive ale acesteia.

folosind două structuri de date alocate dinamic: una conţinând formaţiile vechi (ordonată alfabetic) şi una conţinând noile formaţii.lista să rămână ordonată. Se va preciza de la tastatură numele elevului care pleacă. b) Creaţi o singură listă obţinută direct ordonată crescător care să conţină situaţia întregii clase şi afişaţi-o. c) Tipăriţi numele elevilor împreună cu media pentru aceia care au media minim 7. 10 sunt repartizate două şcoli. sau pe unul singur dacă el nu are coleg de bancă (există 104 . Fiecare şcoală are memoraţi candidaţii în câte o listă liniară simplu înlănţuită.2 decât 10. 35. Când este nevoie să se facă un anunţ urgent la sfârşit de săptămână sau în vacanţă ei au stabilit un sistem prin care un elev va anunţa pe alţii doi care sunt colegi de bancă.5. Scrieţi un prograrri care simulează această operaţie. Obs. Se ştie că într-o sală sunt cel mult 20 de candidaţi. Elevii unei clase stau în bancă câte doi sau câte unul singur. La repartizarea pe săli candidaţii sunt distribuiţi în ordine alfabetică. Se precizează de la tastatură numele şi media noului venit. 33. 34. d) Presupunând că un nou elev dintr-o clasă paralelă vine în clasă adaugaţi-l în listă astfel încât lista să ramână ordonată. Se memorează într-o listă circulară cifrele unui număr naturalScrieţi un program care afişează valoarea maximă care se poate forma prin permutări circulare ale cifrelor din număr. La comisia de bacalaureat nr. Scrieţi un program care citeşte listele celor două şcoli apoi creează lista de bacalaureat şi afişează repartiţia în sălile de examen. ordonată alfabetic. ARBORI BINARI 36. indiferent de şcoala de la care provin. Afişaţi lista. nici introducerea mediilor într-o altă ordine decât cea crescătoare. Un DJ primeste o listă cu formaţiile apărute recent şi vrea să le includă în vechea lui listă ordonată alfabetic astfel încât . Citirea datelor se opreşte când se introduce semnul * pentru numele unui elev.: Nu se cunoaşte numărul de elevi din fiecare listă. VIU. e) Presupunând că un elev pleacă din clasă eliminaţi-l din listă şi apoi afişaţi lista.

Folosind pentru reprezentarea datelor un arbore binar de căutare alocat dinamic. şi elevi care nu vor da telefoane mai departe). d. b. h. afişează numele tuturor elevilor din clasă. Să se caute în structura creată numele clientului care a schimbat L lei (L dat de la tastatură). g. 37. j. f. afişează lista cu colegii de bancă (perechi). Nu se cunoaşte numărul de clienţi care au schimbat bani. se cere să se scrie un program care realizează următoarele: a. afişează numele elevului la care anunţul a ajuns pe cel mai lung drum. b. La o casă de schimb valutar se cunoaşte pentru fiecare client numele şi suma în lei care i-a fost schimbată. c. afişează numele elevilor de pe un nivel dat. e. citirea datelor se va opri când numele introdus de la tastatură are valoarea '*'. Să se scrie un subprogram care adaugă un nou client în arbore (iniţial vid) astfel încât toţi clienţii care au schimbat sume mai mici decât el să fie în arbore aşezaţi în stânga lui. afişează numele elevilor care nu mai au de anunţat pe nimeni. Obs. 105 . Se va afişa numele lui sau mesajul: "nici un client nu a schimbat L lei".: Fiecare subpunct se va rezolva prin intermediul câte unui subprogram. crează arborele ce conţine situaţia la sfârşitul zilei. Să se scrie un program care folosind subprogramul de la punctul a.nimeni şi afişează rezultatul. numără şi afişează din câţi elevi este formată clasa. numără câţi elevi din clasă au acelaşi nume cu un nume dat de la tastatură. la care a ajuns anunţul după ce a treeut pe la k persoane (k dat de la tastatură). citeşte de la tastatură numele primului şi al celui de-al doilea coleg pe care-I anunţă fiecare elev al clasei şi păstrează datele într-un arbore binar alocat dinamic (Semnul * pentru elev inexistent). afişează numele elevilor pe care-i anunţă doamna dirigintă. calculează din câţi elevi este formată lista cu cele mai multe telefoane date începând cu doamna dirigintă până la un elev care nu mai anunţă pe . iar cei care au schimbat mai mult să fie în dreapta lui în arbore. se cere: a. i. c. Ştiind că doamna dirigintă face primul anunţ (anunţă doi elevi care sunt colegi de bancă) şi apoi fiecare elev îşi anunţă alţi doi colegi de clasă şi aşa mai departe.

106 . Să se construiască o listă simplu înlănţuită care să conţină numele şi suma schimbată pentru fiecare client în parte în ordinea crescătoare a sumelor şi să se afişeze.d.

mediile la cele n obiecte. EI funcţie pentru calculul mediei clasei. prenumele elevului. prelucrează informaţiile referitoare la un elev şi afişează numele. • subprogram pentru calculul ariei triunghiului. media propusă la purtare. media generală. precum şi informaţiile referitoare la aceşti elevi. Folosind obiectul elev. 2. II.sare propune media la purtare în funcţie de numărul de absenţe nemotivate. • constructor care permite iniţializarea datelor membru. Metodele vor fi următoarele: • subprogram pentru determinarea premianţilor 1. Această clasă cuprinde: EI numele. • subprogram pentru reprezentarea grafică a triunghiului. să se definească un nou obiect clasa. Scrieţi un program care foloseşte un obiect cu numele elev. care a fost descris la problema anterioară.y3) şi următoarele metode: EI constructor pentru citirea coordonatelor.x3. • subprogram pentru calculul lungimii laturilor. • numărul n de obiecte de studiu. mediile. care are ca date membru numărul de elevi din clasă. Construiţi un obiect triunghi care are ca date membru coordonatele vârfurilor unui triunghi (xl. CAPITOLUL IX PROGRAMARE ORIENTATĂ PE OBIECTE 1. de tip numeric. de tipul elevi. III. prenumele. de tip şir de caractere. 107 . Definiţi o clasă cu numele elevi care permite prelucrarea la sfârşit de semestru a datelor referitoare la un elev. absenţe.y2. absenţe motivate. 3. • funcţie .x2. • funcţie care calculează media generală. • subprogram pentru afişarea elevilo în ordinea descrescătoare a mediilor generale.yl.

Folosiţi această clasă într-un program care să citească de la tastatură o matrice. Programul va afişa.. de asemenea. să determine şi să afişeze dacă o valoare citită de la tastatură se găseşte în matrice şi poziţia ei. • subprogram pentru determinarea maximului de pe o anumită coloană dată ca parametru. Definiţi o clasă şir pentru prelucrarea şirurilor de numere reale. valoarea maximă şi minimă. . 6. • subprogram pentru afişarea matricei. apoi să se ordoneze liniile din matrice după care să se afişeze matricea. • subprogram pentru ordonarea liniilor matricei. neordonat). să determine şi să afişeze elementele maxime de pe fiecare linie. Metodele vor fi următoarele: • constructor pentru citirea datelor. • subprogram pentru determinarea maximului de pe o anumită linie dată ca parametru. Folosiţi această clasă într-un program care să citească un şir apoi să afişeze caracteristicile lui. subprogram pentru căutarea unui element în matrice. 5. Această clasă va avea ca date membru numărul natural de maxim 9 cifre iar metodele vor fi următoarele: • constructor pentru citire. • subprogram pentru ordonarea crescătoare sau descrescătoare a şirului. să determine şi să afişeze elementele maxime de pe fiecare coloană. descrescător. • funcţii pentru determinarea maximului şi minimului din şir. Metodele vor fi următoarele: • constructor pentru citirea datelor. " elementele matricei.4. Datele membru vor fi: lungimea şi elementele şirului. şirul. Definiţi o clasă pentru prelucrarea unui număr natural. Definiţi o clasă matrice pentru prelucrarea matricilor. Datele membru vor fi: 6) numărulde linii şi de coloane. " funcţie pentru verificarea simetriei şirului. 108 . " funcţie pentru verificarea monotoniei şirului (şir crescător.

It subprogram pentru calculul conjugatului unui număr complex. definiţi o clasă bac care va avea ca metode următoarele: ElI subprogram pentru calculul mediei fiecărui candidat. Definiţi o clasă candidat ce păstrează datele personale ale unui candidat la examenul de bacalaureat. Scrieţi un program care citeşte două numere complexe. Scrieţi un program care citeşte de la tastatură două numere mari. It funcţie pentruverificarea proprietăţii de a fi număr prim. 1& subprogram pentru numărarea candidaţilor promovaţi. tll funcţie pentru calculul sumei cifrelor numărului. Proba 1 şi 3 sunt probe de limba română. Datele membru vor fi numărul de cifre. calculează suma cifrelor celor două numere. 7. afişează conjugatele lor. Definiţi o clasă pentru prelucrarea numerelor naturale mari. 1& funcţie pentru calculul modulului numărului complex. 109 . 1& subprogram pentru calculul sumei cifrelor numărului. ElI subprogram pentru numărarea candidaţilor cu medii între 9 şi 10. 1& funcţie pentru inversarea numărului. precum şi şirul de cifre din scrierea lui. precum şi notele la cele 6 probe. Metodele vor fi următoarele: 1& constructor pentru citire. Cifra şi poziţia vor fi date ca parametri. Datele membru sunt partea reală şi partea imaginară. scrieţi un program care să citească un număr şi să prelucreze numărul folosind metodele descrise. Folosind această definiţie. Folosind această clasă. 9. ElI subprogram pentru listarea alfabetică a elevilor nepromovaţi. 4) funcţie pentru inserarea unei cifre dată pe o poziţie precizată. 8. le afişează. le afişează. Definiţi o clasă complex pentru prelucrarea numerelor complexe. • subprogram pentru calculul sumei a două numere. Metodele vor fi: 1& c-onstructor de citire. calculează suma lor şi o afişează. apoi calculează şi afişează suma celor două numere. • subprogram pentru calculul sumei a două numere complexe. li funcţie pentru eliminarea din scrierea numărului a unei cifre date ca parametru.

Scrieţi un program care prelucrează funcţia liniară f(x)=a*x+b. 10. • subprogram care stabileşte dacă graful este hamiltonian (în caz afirmativ afişează ciclurile hamiltoniene). Utilizaţi pentru a rezolva problema un obiect potrivit. 1& subprogram care stabileşte dacă graful este eulerian. • Lista candidaţilorpromovaţi. Scrieţi un program care foloseşte un obiect cu numele CLASAXI. $ Numărul candidaţilor promovaţi. datele lor personale. . 13. • subprogram pentru stabilirea conexităţii (în caz negativ afişează componentele conexe). iar metodele vor fi următoarele: 1& constructor pentru citire. Acesta va conţine mediile generale ale elevilor din clasa a XI-a şi o metodă care să permită eliminarea mediilor sub 5.1 $ subprogram pentru listarea elevilor promovaţi în ordinea descrescătoare a mediilor.metodă pentru calculul celui mai mare divizor comun a două numere întregi. Definiţi un obiect care conţine un membru număr natural şi o metodă prin care numărul se descompune în sumă de numere prime. 14. Această clasă va avea ca date membru matricea de adiacenţă corespunzătoare grafului. Lista candidaţilor nepromovaţi. notele obţinute la fiecare probă. Definiţi o clasă pentru un graf neorientat. Definiţi un obiect care conţine un membru de tip întreg şi o metodă prin care se afişează descompunerea sa în factori primi. apoi afişează următoarele situaţii: • Numărul candidaţilor promovaţi cu medii între 9 şi 10. 110 . Programul va determina şi va afişa punctele de intersecţie cu axele. valoarea funcţiei într-un punct dat şi va trasa graficul funcţiei. 12. Scrieţi un program corespunzător care primeşte de la tastatură numărul de candidaţi la examenul de bacalaureat. Definiţi un obiect cmmdc care să conţină două date de tip întreg şi o . 11. 15..

Să se definească clasa matrice rara ce conţine numărul de elemente nenule şi coordonatele acestora. Se cunoaşte că indicele de linie este asociat poziţiei din şirul ce conţine numele elevilor. Să se declare un obiect cub ce aparţine clasei cuburi. La un coneurs de atletism concurenţii pot alege să participe la două din cele 5 probe. 17. numele. se va folosi o metodă potrivită. Folosind clasa cuburi definită la problema anterioară. folosind un constructor de citire. culoarea. notal . scrieţi un program care prelucrează un graf folosind metodele descrise. 1 dacă e plin). b) să se calculeze media fiecărui concurent. Să se declare clasa bilete care să conţină următoarele date: destinaţia. 20. Definiţi o clasă concurenti care conţine numărul de concurs. Se va afişa preţul pentru fiecare bilet. stabilind dacă primul se poate aşeza peste al doilea (criteriul de aşezare este ca primul să aibă volumul mai mic şi să fie gol). valabilitate şi cost. 111 . materialul din care e construit şi umplerea (O dacă un cub e gol. respectiv "respins" pentru ceilalţi. 19. proba1. 16. să se scrie un program care să afişeze numele elevului cu cei mai mulţi prieteni. escala. Folosind această clasă. data plecarii. data rezervării. c) să se afişeze primii 10 câştigători. 18. posesor. Ştiind că relaţiile de prietenie dintre elevii unei şcoli se reprezintă cu ajutorul acestei clase. Se cere: a) să se citească şirul concurenţi lor. rezultat. să se scrie o metodă care să compare două cuburi între ele. Definiti o clasă cuburi care să conţină următoarele date membru: lungimea laturii cubului. Să se declare două obiecte ce aparţin clasei cuburi şi să se compare între ele (care dintre ele se poate aşeza peste celălalt). Să se folosească două obiecte ce aparţin clasei bilete şi să se verifice dacă posesorii lor beneficiază de reducere. pentru care să se calculeze volumul şi să se afişeze caracteristicile lui. completând rezultatul cu "admis" pentru cei cu media peste 5. prenumele. nota2. Agenţia aviatică " Fly Away" sărbatoreşte 5 ani de la înfiinţare. proba2. Cu această ocazie face reducere de 10% la biletele de avion pentru luna septembrie.

b. Această clasă va conţine în plus metode de eliminare a unui element. Definiţi două obiecte ce aparţin clasei sir şi apelaţi cele două metode definite anterior. adăugarea unui element la sfârşit. Definiţi o clasă pentru prelucrarea fişierelor text. Să se definească o clasă utilizatori care să conţină următoarele date membru: numărul staţiei. Utilizând clasa de la problema anterioară. Definiţio clasă pentru prelucrarea listelor simplu înlănţuite alocate dinamic. ora conectării şi ora deconectării. Folosind definiţia din problema anterioară definiţi o nouă clasă care să moştenească proprietăţile celei dinainte şi în plus să conţină o metodă de concatenare a două fişiere. iar ca metode următoarele: a. 22. Să se definească o metoda care să realizeze interclasarea a două şiruri ordonate şi o alta care să realizeze concatenarea a doua şiruri. 27. 28. 25. 26. Folosind clasa definită la problema anterioară definiţi o nouă clasă pentru prelucrarea stivelor. ştiind că o oră de navigare pe Internet costă x lei. 24. 23. să se scrie un program care să definească trei obiecte ce aparţin clasei şi să se apeleze pentru fiecare metoda definită. La un Internet-Cafe se reţin informaţii despre utilizatorii serviciilor furnizate. subprogram pentru compararea a două fişiere. Ca date membru vom avea numele fişierului de pe suport. subprogram pentru determinarea lungimii fişierului (a numărului de caractere). Să se definească clasa sir având ca date membru lungimea şirului şi elementele lui.21. Să se scrie o metodă ce calculează suma de plată. Această clasă să conţină metode pentru: crearea unei liste vide. c. 112 . adăugarea unui element la începutul listei. căutarea unui element dat ca parametru şi metode de parcurgere şi afişare a listei. constructor pentru citirea numelui fişierului.

30. 113 .29. cos. definiţi o clasă pentru graful tumeu. subprogram pentru determinarea gradelor interioare şi exterioare ale unui vârf dat. Datele membru vor fi numărul de vârfuri şi matricea de adiacenţă. Definiţio clasă pentru prelucrarea unui graf orientat. subprogram pentru verificarea conexităţii. tg. Definiţi o clasă grafice care să realizeze trasarea graficului unei funcţii trigonometrice. Funcţia va avea ca dată membru un şir de caractere ce conţine numele funcţiei: sin. Această clasă conţine pe lângă metodele de mai sus o metodă care să verifice dacă graful este tumeu (adică între oricare două vârfuri există un arc şi numai unul) şi o metodă pentru afişarea câştigătorului sau câştigătorilor. ctg şi o metodă un subprogram pentru trasarea graficului acestei funcţii. iar ca metode următoarele: constructor de citire. Folosind clasa de la problema anterioară. 31. subprogram pentru determinarea numărului de arce a grafului.

d=sqrt((xl-x2)*(xl-x2)+(yl-y2)*(yl-y2)).yl).1. writeln('distanta dintre localitati este:' .h> #include -cmath. Media se calculează folosind următoarea formulă: M=(3*media de la oral + teza)/4 2. STRUCTURA LINIARĂ 1. getcht). cin»x1»yl.h» #include -cconio.d:real. readln. Valoarea cadoului va fi: (a+b+c)*1. Varianta C++ #include <iostream. readln(x2. d:=sqrt(sqr(xl-x2)+sqr(y l-y2)). cout«"Distanta dintre localitati este:"«d«endl. var xl.c sumele depuse de cei trei copii. cin»x2»y2.d.y2).x2. } 3.b.d:10:2). Fie a. readln(xl . write('introduceti coordonatele x si yale celei de a doua localitate'). Varianta Pascal program localitati.yl.y2. end.yl. cout«"Introduceti coordonatele x si y ale celei de a doua localitati:".3 6. Numarul de băieţi=E*B-100 numărul de fete=E*(lOO-B)/lOO 114 .x2.h» void maini) ( double xl. INDICAŢII ŞI REZOLVĂRI CAPITOLUL 1 STRUCTURI DE CONTROL 1. begin write('introduceti coordonatele x si yale primei localitati').y2. cout«"Introduceti coordonatele x si y ale primei localitati:".

begin write('introduceti dimensiunile x y zale santului') . Cantitatea de stofa este 0.y.z. 9.5 suprafaţa unei dale este 0. 115 .. getchî). v2:=vl *1.y.v1. Varianta Pascal program pamant. Se calculează aria grădinii cu formula d1*d2/2 . suprafaţa curţii este Y*XllO. Costul unei dale este L/100. Această valoare trebuie rotunjită. v3=v2-v2*5/100. 15. 12. v3:=v2-v2*5/100. writeln('volumul pamantului dupa ploaie este:'.h> #include <conio. Costul total se obţine înmulţind numărul de dale cu costul unei dale.h> void rnaint) { .v3:10:2). vl:=x*y*z.v2:10:2). 13. latura dalei este 0. 14. writeln( 'volumul pamantului este:' . S-a ţinut cont de faptul că baza este dată în dam şi lăţimea în m.' double x.7 10.25. Numărul de fete este (E+F)12 iar numarul de băieţi este (E-F)I2. cout«"Volumul pamantului dupa ploaie este:"«v3«endl. var x.v2. Numarul de frasini este P-P/5-P*3/5. cout«"Introduceti dimensiunile x y zale santului:".v3:real. cin»x»y»z.y. Numărul de drumuri este în funcţie de valoarea V/x.vl. cout«"Volumul santului este:"«v1«endl.v3. readln(x. Secolul este [an/100)+1. 11. V=a*b*c. Se calculează aria unei dale.8*h+0.z).7. v2=v1*1. } 8. Varianta C++ #include <iostream. vl=x*y*z.25. readln end. writeln('volumul santului este:'. cout«"Volumul pamantului este:"«v2«endl.z.vl: 10:2). apoi se determină numărul de dale împărţind aria grădinii la aria unei dale.25 m2 numărul dalelor este dat de suprafaţa curţii împărţită la suprafaţa unei dale. Se rezolvă folosind un sistem de două ecuaţii cu două necunoscute.v2.

c. y=z-3 . Numărul de ouă este 100*(n+l0)/(I00-s).c2. cout«"Introduceti un numar de patru cifre:". c1=a%1O. readln(a). cout«"Numarul obtinut schimband prima cifra cu ultima este:"«b«endl.h» void main() { unsigned a. Se separă numărul format din primele două cifre din a : nl=[a/lOO]. c2:=a div 1000. Se separă cifrele la fel ca la problema 21 apoi se formează numărul înmulţind cifrele corespunzătoare respectiv cu 100. c4:=a div 1000. c1=a%lO. Apoi se face câtul nlln2. writeln('numarul obtinut schimband prima cifra cu ultima este:'.b). Se separă numărul obţinut din ultimele două cifre din b: n2=rest[b/lOO] . 116 .eec l *1000+r*1O+c2.word. Distanţa este pl *72+p2*72 mile. c2=a/1000.r:byte. 1. c3:=(a div 100) mod 10. z.c).16. 20. y.b. b. bec l *1000+r*1O+c2. Se rezolvă sistemul şi se obţine câte o relaţie pentru x.b.c2. x numărul de lăzi din prima zi. r:=adiv 10. y numărul de lăzi din a doua zi. begin write('introduceti un numar de patru cifre'). 21. el :=a mod 10. int c1.c3. var a. Avem următoarele relaţii: x=y+4. c2:=(a div 10) mod 10. c:=c4 *1000+c2* 100+c3*1O+c1. end. r%=lO. c l. z numărul de lăzi din a treia zi iar u numărul de lăzi din a patra zi.c. r=a/1O. Fie R numărul de lăzi rămase.h> #include -cconio.c3. x+y+z+u=M-R. readln. cin»a. Varianta Pascal program numar. 10. u=z+x . r:=rmod 10. 19. 17.u.c4. Varianta C++ #include <iostream. writeln( 'numarul obtinut schimband cifrele din mijloc este:' .c4. 18.

1. c=c4*1000+c2*100+c3*10+cl. cout«endl. c2=(al1O)% 10. c4=al1000. c3=( al 100)%10. cout«"Numarul obtinut schimband cifrele din mijloc intre ele este:"«c. STRUCTURA ALTERNATIVĂ 19. Analiza problemei: 20 9 20 9 20 9 TOTAL == n:l: 20g seminte n pungulite GRADINUTA cu mstretun 1 NECESft. getchf).R = m :1: (nr *s seminte 2 m pentru1m ne trebuie grame 117 .2.

//calculam necesarul de seminte// Necesar=m*nr*s. ) . readln(s). Write('Introduceti numarul de straturi:').s. } 118 . //calculam totalul de seminte// Total=n*20. trebuie sa mai cumpere '. readln(nr). 'pungulite'). scanf("%d". scanf("%d". printf("\n Introduceti numarul de seminte necesare pentru lm2:" ) . Varianta C++ #include<stdio.&nr). Write('Introduceti numarul de metri ai unui strat: '). Total.dif. dif).m.&s).nr.h> int n.nr. pungulite". scanf("%d". printf("\n Introduceti numarul de straturi:"). {calculam totalul de seminte} Total:=n*20. printf("Alina nu are destule seminte. readln(n).Necesar. Write('Introduceti numarul de seminte necesare pentru lm2 : . Var n. trebuie sa mai cumpere %d . Total. scanf("%d". else { dif=(Necesar-Total) / s + (Necesar-Total) % s.Necesar:integer. {afisare rezultat} if Totab-eNecesar then writeln('Alinei ii ajung semintele') else begin dif:=(Necesar-Total) div s + (Necesar-Total) mod s. printf("\n Introduceti numarul de metri ai unui strat: ").Varianta Pascal: Program Gradinuta. readln(m).s. {calculam necesarul de seminte} Necesar:=m*nr*s.m. Begin Write('Introduceti numarul de seminte dintr-o punguta:'). //afisare rezultat// if (Total>=Necesar) printf("\n Alinei ii ajung semintele").&m).&n). end. writeln('Alina nu are destule seminte. main() { printf("\n Introduceti numarul de seminte dintr-o punguta : "). end.

si cii cif=a % 10 +b % 10 +c % 10. readln(a). if c mod cif=O then writeln(c. readln(b). ifb mod cif=O then writeln(b. int cif.&c). cif:byte.&a).28. b.n).rez. Begin Write( 'Primul jucator sa-si introduca numarul: '). } 1. Se calculează cmmdc(b. printf("\n Al doilea jucator sa-si introduca numarul:"). din insumarea ultimelor cifre ale lui a. Varianta Pascal Program NumaruLNorocos.b). if (b % cif==O) printf("\n este numar norocos %d". Se verifică tot câte 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 .3. readln(c). Varianta C++ #include<stdio.rez: longint. 'este numar norocos'). Write('Al treilea jucator sa-si introduca numarul:'). {calculam cifra de control. 13. 'este numar norocos'). scanf("%d".a). end. Iicalculam cifra de control. if (cif>9) cif=cif /10 +cif % 10. main() { printf("Primul jucator sa-si introduca numarul:"). STRUCTURA REPETITIVA 6.c). din insumarea ultimelor cifre ale lui a. si c} cif:=a mod 10 +b mod 10 +c mod 10. {vom afisa numerele norocoase } if a mod cif=O then writeln(a.&b). 'este numar norocos'). if (c % cif==O) printf("\n este numar norocos %d". Se calculează cmmmc(m.c. if cif>9 then cif:=cif div 10 +cif mod 10.c. /Ivom afisa numerele norocoase// if (a % cif==O) printf("\n este numar norocos %d".h>" long a. readln. b. scanf("%d". 7. printf("\n Al treilea jucator sa-si introduca numarul:"). Var a.c). Write('Al doilea jucator sa-si introduca numarul:').b. scanf("%d".b.

23. begin repeat write('dati numarul de transformat: '). aux:=O.b. end.nr. writeln('numarul'. 35. corect:=true. end. 17. aux.cifra. if cifra>=b then begin corect:=false.nr.aux. Se iau toate valorile posibile (de la O la 9) pentru x.p_bazei:longint.eaux div 10. readln(n).' nu apartine bazei '. se verifică primul număr format şi pentru fiecare o astfel de valoare se iau toate variantele posibile pentru y (de la Ola 9). writeln('cifra '.b). readln.' = '. p_bazei:=l. until corect. p_bazei:=p_bazei*b.cifra: byte.Se elimină ultima cifră din p şi se repetă până când p devine <10. readln(b). var n. Similar cu 26. Se citesc într-o structură repetitivă numere şi se calculează suma şi numărul lor. corect:boolean.enr-scifra*p_bazei. repeat write('dati baza de numeratie in care este scris: '). aux. Se vor folosi direct cifrele care intră în calcule şi nu descompunerea numărului în părţi componente. nr. program baze. end. 32. until (b>=2) and (b<=1O).' scris in baza '. nr:=O. b. 39. 27.en. 120 .' in baza 10'). while aux>O do begin cifra:=aux mod 10.n. Se împarte numărul la 10 până când nr<lOOO şi se verifică dacă nr= 123. Se va forma întâi numărul care conţine cifrele în ordine inversă. 26. Condiţia de repetare este: S < suma numerelor citite până în acel moment.

'A'. n.. end. readln(n). i:=l.'9': begin valecifra. nr:=nr+valcif*p_bazei. else begin corect:=false.x. writeln('numarul '.BAZA 16 program baze. begin repeat writer'dati numarul in baza 16 de transformat: '). cifra:char. 121 . end. readln..integer. 'F': nr:=nr+(ord(cifra)-ordC'A')+10)*p_bazei.aux:string[ 10]. case cifra of '0'.corect. i.'f: nr:=nr+(ord( cifraj-ordr'a')« lO)*p_bazei. end. valcif. aux. int b.en. until corect.p_bazei. corect:=true.nr.' in baza 1'0'). corect: boolean.' nu apartine bazei 16'). Varianta C++ BAZA <10 #include<iostream.nr. 'a'. end.n. nr:=O.' scris in baza 16 = '.p_bazei:longint. for i:=length(n) downto 1 do begin cifra:=aux[i] . valcif.cifra. p_bazei:=p_bazei*16. end. writeln('cifra '. p_bazei:=l.aux.cifra..h> void maini) {long int n. var nr.x).h> #include<conio.

n).} while((b<2)II(b> 10)). corect=l. char cifra. int i. cin»n.x. pbazeie l .h> #include<stdlib. clrscrt). nr=nr+cifra*p_bazei.n[10]. auxen. do {cout«"\ndati baza de numeratie in care este scris: ".p_bazei. if (cifra>=b){ corecten. } BAZA 16 #inc1ude<iostream. cin»b. for (i=strlen(n)-l .h> void maint) { long int nr. p_bazei=l.h> #inc1ude<conio.do { cout«"\ndati numarul de transformat: ". strcpytaux.i>=O. auxeO. getchi).aux[1O]. cin»n.i--) 122 . valcif. nr=O. cout«"cifra"«cifra«" nu apartine bazei "«b. corect=l. while (auxe-O) { cifra=aux%10. do { cout«"\ndati numarul in baza 16 de transformat: ".h> #include<string. }} while (lcorect): cout«"numarul "«n«" scris in baza "«b«" = "«nr«" in baza 10". nr=O. p_bazei=p_bazei*b.corect. } aux=auxl10.

'. Se calculează numărul de elevi dintr-o clasă nececâtul împărţirii lui n la nc iar rerestul împărţirii lui n la ne. coutcc''cifra "«cifra«" nu apartine bazei 16". if ((cifra>='0')&&(cifra<='9'» nr=nr+(cifra-'O')*p_bazei.suma numerelor introduse pe poziţii impere şi media celor de pe poziţii pare. else if((cifra>='a')&&(cifra<='f)) nr=nr+(cifra-'a'+ 1O)*p_bazei.errue.descrescator:boolean. Se calculează produsul dintre k şi 10 la puterea n apoi se împarte acest număr la fi.b). crescator.{ cifra=aux[i] . Pentru o nouă căutare a lui q în p se elimină la fiecare pas câte o cifră de la sfârşitul lui p. a:=b. Dacă n este divizibil cu 25 nc=n/25 şi se împart eate 25 de elevi într-o clasă. nr=nr+(cifra-'A'+ lO)*p_bazei. read(a. read(b). 46. Se calculează ne numărul de cifre al lui q şi se verifică ultimele nc cifre din p.} p_bazei=p_bazei*16. if crescator then if descrescator then writeln('Succesiune de numere egale') 123 . t Programul se opreste la citirea valorii zero').efalse else if a<b then descrescator:=false. var a. } 40.b:word. crescator. Se calculează întâi numărul de cifre al lui q. begin writeln('Introduceti o succesiune de numere. descrescator. 42. } } while (!corect). Se calculează. nc=n/25+ 1. until b=O. Dacă nu. getchî).#lO#13. Se citesc caractere şi se numără separat băieţii şi fetele care au intrat. program verifica_ordonare. Similar cu 26. i=l . 44.etrue. Se calculează numarul de clase (nc). 47. else if((cifra>='A')&&(cifra<='F)) . 51. coutocnumarul "«n«" scris in baza 16 = "«nr«" in baza 10". repeat if a>b then crescator. else {corect=O. În primele r clase vor fi repartizaţi câte nec+ 1 elevi iar în celelalte câte nec elevi. 45.

124 . cin»b. crescator= 1. else cout«"Succesiune neordonata de numere". getcht).d.h> void maini) {unsigned int a.crescator. descrescator» 1. 61. else cout«"Succesiune de numere in ordine crescatoare".descrescator. var n. for d:=2 to (n div 2) do if n mod d=O then begin prim:=true. readln.d). end.' sunt: 1'). } 54.i:longint.n. if prim then write(' ". else if (a<b) descrescator=O. if (crescator) if (descrescator) cout«"Succesiune de numere egale". program divizor.b. prim:boolean. else if (descrescator) cout«"Succesiune de numere in ordine descrescatoare". cin»a»b. readln. for i:=2 to (d div 2) do if d mod i =0 then prim:=false. readln(n).h> #include<conio. writet'Divizorii primi ai lui '. cout«" Programul se opreste la citirea valorii zero". end. Se calculează pe rând puterile lui 2 şi se compară cu p. begin write('n=').m". a=b. do {if (a>b) crescator=O. cout«"\nlntroduceti o succesiune de numere. 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').} while (b !=O). Varianta C++ #include<iostream.

"«d. iar la sfârşit se compară cele două sume obţinute.h> #inel ude-cconio. Se calculează suma pentru jucătorii cu numere pare. cout«"Divizorii primi ai lui "«n«" sunt: 1".} cout«'\n'.d<=n12.prim. 66. câti elevi rămân. Se numără în timpul citirii câte calculatoare sunt din fiecare tip apoi se verifică pe rând dacă ajung calculatoarele pentium.i<=dl2.h> void maint) {long int n. Programul este următorul: 125 . VECTORI 2. cr=cn+ct.a. dacă nu. Se citesc primele pentru cei n jucători într-un vector V. Se caută toate perechile x si y de numere pentru care x*c+y*n=s. end.d.i++) if (d%i==O) prim-O. } 64. Dacă valoarea obţinută depăşeşte valoarea bazei se transportă 1 la suma cifrelor de rangul următor. din elevii rămaşi se repartizează pe 586 ş.1. dacă există se mută spre stânga toate elementele şirului cu o poziţie. Fiecare cifră a rezultatului (cr) se obţine din cifra cu acelaşi rang din număr (cn) + o cifră de transport (ct) (care la început are valoarea 1. readln.writeln. getcht). for (d=2. Am notat prin c şi n costul unei ciocolate respectiv al unui pachet de napolitane. cout«"n=".d++) if (n%d==O) {primvl . altfel ct devine O. 4.d. Se parcurge şirul şi se verifică pentru fiecare element de pe o poziţie k dacă acesta mai există între cele k-1 valori precedente.).m. 80-84. for(i=2. Dacă cr=2 atunci ct rămâne 1. Se descompun numerele în cifrele componente şi se adună sau se scad cifrele cu acelaşi rang.i. adică indicii numere pare şi cei cu numere impare. if (prim) cout«" . 79. Varianta C++ #include<iostream. cin»n. clrscn). CAPITOLUL II TIPURI DE DATE STRUCTURATE II.

scanf("%d". long S_pare. ReadLn.' este: '). ReadLn(jucatori[i]). } S_pare = O. else printf("\n Sume diferite"). S_impare := O. begin Write('Numarul de jucatori este: '). Varianta C++: #include<stdio.i++) if (i % 2 == O) S_pare = S_pare + jucatori[i].i:integer. For i:=l to n do if i mod 2 = Othen S_pare := S_pare + jucatori[i] else S_impare := S_impare + jucatori[i].Varianta Pascal: Program Echipe.S_impare. for i:=l to n do begin Write('Prima pentru jucatorul cu numarul '. } 5. S_pare := O.i.. end.h>. scanf("%d". int n.i<=n. for (i=l. S_impare = O. . var jucatori:ARRAY[1.i++) { printf("\nPrima pentru jucatorul cu numarul %d este: '.20] oflongint. if (S_pare ==S_impare) printf("\nSume egale"). Se foloseşte un vector F ce păstrează frecvenţa de apariţie a cifrelor 0.S_impare:longint. if S_pare = S_impare then WriteLn('Sume egale') else WriteLn('Sume diferite').i.&jucatori[i]).i).i<=n..1. long jucatori[20]. end. ReadLn(n). else S_impare = S_impare + jucatori[i]. 9. 126 . S_pare. for (i=l.. main() { printf("\n Numarul de jucatori este: "). n.&n).

Grupele se vor forma astfel: casa cu numărul 1 cu casa cu numărul n.m. 40.y. Numărul în baza b este format din cifrele vectorului citite în ordine inversă. Dacă aceasta este poziţia k elevii de pe poziţiile k. şi aşa mai departe. Căutarea continuă. MATRICI 8. . Dacă se mai înscrie un elev în excursie se parcurge şirul ordonat şi se caută poziţia în şir unde se adaugă noul elev. 127 .. n. Considerăm că n este număr par pentru a se putea realiza împărţirea grupelor. 23. La parcurgerea vectorului se codifică cifrele după regula enunţată. pentru i=I. k+2. La fiecare pas se poate folosi relaţia cmmmc(a. 14. Numerele de identificare pentru fiecare deţinut se păstrează într-un şir.. Varianta C++ #inc1ude -ciostream.. Se va folosi un vector ajutător unde se reţine sub şirul găsit. al treilea cu al patrulea.. k+2. n .7. Se ordonează şirullexicografic şi se afişează şirul rezultat. vn). Cei care părăsesc închisoarea se elimină din şir astfel: se caută poziţia în şi a deţinutului ce va fi şters (notată cu k) şi cei de pe poziţiile k+ 1. Dacă la citirea notelor concurentului se întâlneşte o notă sub 3 acesta este eliminat.. n se mută cu câte o poziţie spre dreapta.l . La sosirea unui nou deţinut el se adaugă la sfârşitul şirului. Transformarea unui număr din baza 10 într-o bază b se face astfel: se împarte numărul la bază şi se reţine restul într-un vector.. 41.. Amplificăm fiecare numărător cu cmmmc împărţit la vi şi însumăm rezultatele. iar dacă lungimea unui nou subşir găsit este mai mare decât lungimea celui reţinut în vectorul ajutător atunci vectorul ajutător se va modifica cu valorile subşirului. câtul se împarte din nou la bază şi aşa mai departe până când câtul este O. v2 apoi cmmmc dintre v3 şi cmmmc-ul anterior şi aşa mai departe.. Codificăm căciula alba cu O şi cea roşie cu 1. v2. Se determină numitorul comun al fracţiilor ca fiind cel mai mic multiplu comun al numitorilor (v l . int liv[20] [20]. . iar la fiecare ştergere din şir numărul de deţinuţi va deveni n-I.2.Yi pentru i=I.2. 19. Pentru fiecare concurent se reţin numele şi notele obţinute la fiecare probă. . astfel că numărul total de deţinuţi devine n+1. . . int x.2. 29. Şirul Y va avea componentele Yi = TRUNC( Xi I i) (Pascal) şi Yi=(int)(Xi/i) (varianta C++).. Mai întâi se determină cmmmc a componentelor vl. iar cmmdc se poate determina cu algoritmul lui Euc1id. 28. 30. ultimul rezultat tiind cmmmc al tuturor numitorilor. Se transformă numărul din baza 10 în baza 2 şi se reţin într-un vector cifrele numărului în baza 2.b)=a*b I cmmdc(a. iar şirul Z va avea elementele Zi=Xili .. n se vor muta cu o poziţie spre stânga.h» void maim)] int n. casa cu numărul 2 cu casa cu numărul n-1 şi aşa mai departe. Piticii vor fi grupaţi doi câte doi în felul următor: primul cu al doilea.b). Se vor genera subşiruri ale celui dat pentru care suma dimensiunilor fiecărei componente din subşir să fie mai mare sau egală cu dimensiunea necesară jocului nou. Câştigătorul este acela pentru care suma punctajelor este maximă. 11. 31.

. type matrice=array[1 .j++){ cout«"Dati specia si varsta pomului din pozitia "«i«" si "<<j<<":". if liv[i.n. readIn(m).x=i.' '.i++) for (int j=. cout«"EI este un "«specie[x][y]«endl. for (int i=O.e l. cout«"Dati n si m:".max.} int varsta=O. end.i<n.e l . var liv:matrice.j..x=n-1 . imax. begin write('introduceti numarul de linii din livada').i<n.50.} } cout«"Copacul cel mai batran se afla in pozitia "«x«' '«y«endl.jmax:word.j++){ if (liv[O] [jp-varsta) {varsta=liv[O][j]. jmax.j]). cout«"Are varsta "«varsta«endl. for (i=O. cin»specie[i][j]»liv[i][j]. 128 .50.j). readlnm): write('introduceti numarul de coloane din livada').m] .1]>max then begin max.j<m.O.j<m.. jmax:=l. imax.y=O. readln(liv[i.i.elivli.y=j.y=j.x=i. specia:array[1.1.ei.i++){ if (liv[i] [O]>varsta){varsta=liv[i][O].50] of word.j]). max:=liv[1..i. cin»n»m.50] of string[ 10].x=O.} if (1iv[n-1][j]>varsta){varsta=liv[n-1][j].1]. for i:=1 to n do for j:=l to m do begin write('dati varsta si specia pomuluide pe pozitia '.I].imax.} if (liv[i][m-l]>varsta){ varsta=liv[i][m-l].} Varianta Pascal program livada.} } for (intj=O. m.m]>max then begin max. for i:= 1 ta n do begin if liv[i.1.char specie[20] [20][20]. readlnr speciali.elivţi.y=m-1. end.

writeln(' are pozitia '. 14.h» void maint)] int n.} s+=nr. imax. jmax.specia[imax.i++){ nr=O.:=j. jmax. for (i=O.j<m.j] .vm.j++){ nr*=lO.j<m. Se determină poziţia în matrice a elevului are lipseşte şi se deplasează elementele care urmează cu o poziţie spre stânga.jmax). write('pomulcare se va taia este '. writeln(' el este cel mai batran si are '.max. for j:=l to m do begin ifliv[l. Pentru fiecare dintre aceste înălţimii se calculează suma înălţimilor alăturate şi se alege cea mai bună soluţie.} cout«"Suma numerelor formate pe linii este :"«s«endl. cout«"Dati cifrele din matrice:".j]>max then begin max:=liv[l. Se parcurge matricea. jmax:»j.' '. end.} .j]>max then begin max:=liv[n.i<n.' end.' ani').e-i. cout«"Dati n si m:". end.i<n.Varianta C++ #include «iostream.j++)cin»mat[i][j].j]. 12. for (int j=O.i++) for (int j=O. it' liv[n. 9. end. mat[1O][20]. cu excepţia elementelor de pe prima coloană care vor trece pe ultima coloană a liniei anterioare. end. end. imax:=n. aflându-se înălţimile cele mai mari.imax. imax. cin»n»m. readln . unsigned long s=O.e l .jmax]).m. nr+=a[i]UJ. for (int i=O. nr.

Se numără de câte ori apare fiecare număr în codificarea apartamentului.} 130 . for i:= 1 to n do begin p:=l. var a:matrice. end.j]*p.h> #include <conio. begin write('dati numarul de lini si numarul de coloane '). for j:=m downto 1 do begin slinie:=slinie+a[i. for (int i=O.m.j: byte. 17. slinie:=O. for (i=O. if (a!=mat[iJU]) diferit=1.j++)cin»mat[i][j]. s:=s+slinie.h> void main(){ int n.' coloana '. 15.s).i.i<n.p.. cin»n. type matrice=array[l.slinie.i. 10] of byte.l. Elementele de pe diagonala principală au formula a[i][i].m).longint.j]).diferit=0.j<n. end.j--){ cin»a.i++) for (int j=n-1 . mat[1O][20]. end.a.i++) for (int j=O. readln end. readln(a[i. cout«"Dati n:". for i:=1 to n do for j:=1 to m do begin write('dati cifra de pe linia '. n. lO.j>=O. 21. Se alege numărul cu cele mai multe apariţii. cout«"Dati matricea de pe a doua foaie:". cout«"Dati metricea de pe prima foaie:". Noua matrice va avea dimensiunile mxn. p:=p*lO. s..Varianta C++ #include <iostream.Varianta Pascal program numere. 19. iar elementul b[i][j] va fi egal cu a[j][i] (matricea a e cea iniţială iar b e cea întoarsă la dreapta). writeln('numarul rezultat este '.j).i<n. readln(n. s:=O.

1 concurentul j a ştiut să răspundă la întrebarea i concurentul j nu a ştiut să răspundă la întrebarea i Se face suma fiecărei linii. getcht).n-j+ 1] then ok.. când i=2.j]). Datele se codifică sub forma unei matrici. if val<>a[i.1.j :word.integer. ok. begin write('dati numarul de linii si numarul de coloane '). simetric cu el faţă de mijlocul liniei. else cout«"IDENTIC\n". iar al coloanei e k-l-(int)(k1m)*m (k reprezintă numărul de ordine al soldatului). . for i:=l to n do for j:=l to m do begin write('dati numarul de pe linia '..i. readln end.m.' coloana '..30. 29. var a:matrice.i. writeln('introduceti matricea de pe pagina a doua').n şi j= i.m).efalse.. . fiecare element comparându-se cu cel aflat pe aceeaşi linie.. dar elementele comparate vor fi pe aceeaşi coloană. Se verifică toate perechile a[i][j]. până la jumătatea ei.30] of integer.j).' coloana '. În cazul spre est vom parcurge fiecare linie.j). 37.~ ok:=true.boolean. 27.if (diferite>I )cout«"DIFERIT\n" .} Varianta Pascal program carte. Indicele de linie este (k-l)/n. 131 ... readln(a[i.n.. end.. semnificând numărul de concurenţi care au ştiut să răspundă la întrebarea i. type matrice=array[1. a[j][i]. n.i. val. for i:=l to n do for j:=l to m do begin write('dati numarul de pe linia '. 25. if ok then writeln('identic') else writeln('diferit'). Se compară cu n şi se află rezultatul. readln(val). end:. Analog se face şi pentru cel spre sud.. a[i][j]= Ji° '. . readln(n.

11.i++) if (strlen(x[i])==lmax) cout«x[i]«" ". Reţinem într-un vector titlurile cărţilor şi în altul. cout«"Introduceti numărul de cuvinte" . SIRURI DE CARACTERE 4. autorii carţilor. Parcurgem vectorul de cuvinte şi determinăm în variabila lmax lungimea celui mai lung cuvânt. end. for i:=l to n do readln(x[i])..integer.i<n.i.20] of string[20].i<n. int lmax.i<n. lmax=strlen(x[O]). cout«"Introduceti cuvintele ". Se parcurg într-un ciclu toate literele din alfabet şi pentru fiecare literă se parcurge textul şi se determină numărul de apariţii ale literei respective în text. writeln('Introduceti cuvintele '). for(i=O. pe poziţii corespunzătoare.3.i++) cin»x[i]. lmax:=length(x[l]). 9. for i:=2 to n do if length(x[i]»lmax then lmax:=length(x[i]). n.h> #include<string.h> maint) { char x[20] [20]. for(i=l . begin write('Introduceti nr de cuvinte ').' ').H.cin»n. Varianta C++ #include<iostream. cout«"Cuvintele de lungime maxima sunt:"«endl.i. Utilizăm doi vectori: unul care reţine denumirile produselor şi altul ce reţine preţurile aferente (produsul aflat pe poziţia i în vectorul produselor are preţul aflat pe poziţia i în 132 . readln. } 6.i++) if (strlen(x[i]»lmax) lmax=strlen(x[i]). Parcurgem alfabetul şi pentru fiecare literă din alfabet afişăm autorii care au iniţiala identică cu litera respectivă. for i:=l to n do if length(x[i])=lmax then write(x[i].lmax.readln(n). for(i= 1. writeln('Cuvintele de lungime maxima sunt').n. Varianta Pascal var x:array[1. apoi parcurgem din nou vectorul pentru a afişa cuvintele care au lungimea maximă(adică egală cu lmax).

get(sir. Analog obţinem lista ţărilor în ordinea alfabetică a capitalelor lor.separator). Varianta C++ #include -ciostream. 18.h» #include <stdlib.j .h» #include -cstring. 17. 22. cout«"n=".j++) /* parcurgem literele cuvantului si testam daca sunt in */. pestrtokrNl.cin»n.i<n. for(i=O.j<strlen(cuvj-I .i++) { strcpy(cuv. 133 .Il. /* ordine alfabetica */ if (cuv[j]>cuv[j+l]) k=O. /* presupunem ca literele cuvantului sunt in ordine alfabetica */ forG=O. while(p) { if (strspn(p. al doilea capitalele şi al treilea continentele corespunzătoare. cin. for(i=O. Se împarte textul în entităţi (entităţile sunt separate prin spaţii). } cout«"suma numerelor este: "«s.i<n. *p. int s=O.cuv[20].i++)cin»(x[i]). /* retinem in variabila cuv fiecare cuvant din vectorul de cuvinte*/ k=l. cout«"cuvintele cerute sunt:". Entităţile care pot fi convertite în numere vor fi adăugate.k.cifre[]="1234567890".vectorul preţurilor).x[i]).separator). Ordonăm alfabetic vectorul ce reţine continentele. p=strtok(sir.h» maint) { char x[50][20]. dar atunci când interschimbăm două componente ale vectorului vom interschimba şi componentele corespunzătoare (de pe aceleaşi poziţii) din ceilalţi doi vectori.Jz.h» # include -cstring.lOO).n. cout«"introduceti cuvintele ".separator[]=" ". după conversie. Utilizăm trei vectori: primul reţine denumirile ţărilor.cifre)==strlen(p» s+=atoi(p). Parcurgem simultan cei doi vectori şi în cazul în care denumirea unui produs conţine cuvântul "hartie" afişam preţul majorat. la suma valorilor numerice. Varianta C++ # include -ciostream. O entitate poate reprezenta un cuvânt sau un număr.h> mainO { char sir[lOO]. int i.

else if (s[i]>='A' && s[i]<='Z') a[i]=s[i]+2. else a[i]=s[i]. end. } 134 .exji].a[lOOO].byte.. end.i<strlen(s).get(s. writeln('introduceti cuvintele '). i. if ordo then write(cuv. cin. 23. writeln('cuvintele cerute sunt'). begin write('n='). int i.n. { retinem in variabila cuv fiecare cuvant din vectorul de cuvinte} ordo:=true.j. Varianta C++ #include <iostream. if (k) cout«cuv«" ": } Varianta Pascal var x:array[1. for(i=O. for i:=l to n do begin cuv.50] of string. cuv:string. cout«"Textul codificat:"«a. else if (s[i]=='Z') a[i]='B'. for i:=l to n do readln(x[i)).1000).h> #include<string.i++) if( s[i]=='Y') a[i]='A'.' '). {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.h> mainr) { char s[lOOO].readln(n). ordo:boolean.efalse.

begin write('Introduceti textul'). Fiecare element conţine câmpurile nume. Citim într-un ciclu toate datele elevilor. i. Ordonăm apoi vectorul de înregistrări în funcţie de media generală a elevilor. fiecare element având drept câmpuri lungimea şi lăţimea unui dreptunghi. Ordonăm vectorul după numărul total de absenţe şi îl afişăm. Creăm un vector cu elemente de tip înregistrare.4. Fie a=x+yi şi b=z+ti cele două numere complexe. end. *1. Pentru determinarea mediei generale a clasei calculăm suma mediilor şi împărţim la n. Utilizăm 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=. Pentru a determina dreptunghiul de arie maximă utilizăm formula ariael. 13.byte. Folosim un vector care păstrează punctajul fiecărui item. H.readln(s). 12.a:string. readln. Vectorul x va conţine elementele distincte din matrice împreună cu frecvenţele de apariţie. prenume. număr de absenţe şi media generală. 6.Varianta Pascal var s. numărul elevilor. 28. Într-un ciclu citim datele elevilor şi în acelaşi timp calculăm media la purtare folosind instrucţiunea CASE (respectiv SWITCH).a). Itemii la care a răspuns corect un elev îi citim mtr-un şir de caractere.J Z2 + t 2 4. ! ? . O entitate poate reprezenta numărul căutat doar dacă are lungimea de 4 caractere. Pentru a determina dreptunghiul cu diagonala cea mai mare. : )). Extragem fiecare item (fiecare componentă din şirul de caractere) şi luăm din vectorul punctajelor punctajul corespunzător. writeln('Textul codificat: '. 30. ÎNREGISTRĂRI 3. Definim un vector de elevi cu elemente de tip înregistrare. Pentru fiecare element din matrice se verifică dacă se găseşte în vector şi se 135 . caz în care se va face conversia către tipul întreg. Se împarte textul în entităţi (entităţile sunt separate prin spaţii sau semne de punctuaţie (. 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])). aplicăm algoritmul de maxim folosind formula de calcul a diagonalei : d 2=e +f . însumând punctajele. a:=".

h> void main(){ struct element{ double numar.frecventa).aux.nnmao-xţjţ. writeln('introduceti elementele matricii'). Varianta Pascal: type elementerecord numar:real. end. int n.p. aux:element. 136 .m.j].ep--I. end.20.}. k:=O. end.i.h» #include <conio.. begin write('introduceti numarul de linii si numarul de coloane '). n. end. for i:=l to n do for j:=l to m do begin p:=l.400] of element.k.j]). double a[20][20].i. var a:array[1.' '.m.numar:=a[i.frecventa) e1sebegin inc(k). iar în caz contrar se adaugă în vector şi se iniţializează frecvenţa cu 1. for i:=l to n do for j:=l to m do read(a[i.numar:5:2.j]<>x[p].L20]of real. frecventa: byte.numar then begin aux:=x[i].readln(n.m).j.măreşte frecvenţa în cazul în care s-a găsit.frecventa:«1. Varianta C++ #include -ciostream. x[j]:=aux.integer.j. for i:=l to k-I do for j:=i+1 to k do if xjij.. while (a[i. Se ordonează apoi vectorul crescător. x[k]. for i:=l to k do writeln(x[i]. x[i]:=xUl. x[k]. if p<=k then inc(x[p]. end.k. element x[400]. x:array[1.x[i).numar) and (p<=k) do p. int frecventa.p: cout«"Introduceti numarul de linii si numarul de coloane ".

for (i=O. Eliminăm elemente din vector astfel încât să avem baze distincte.numar«' '«x[i]. Varianta Pascal type putere-record baza. În primul. x[k]. La suma totală de plată se adaugă valoarea produsului (cantitatea c înmulţită cu preţul). iar în al treilea ciclu avem de calculat două distanţe: dintre primul şi al treailea punct şi dintre al doilea şi al treilea punct.x[i]=x[j].i++ )cout«x[i] .numar && p<=k) p++.i<n. în care fiecare element este o înregistrare care conţine litera corespunzătoare punctului şi coordonatele sale în plan.20]of putere.x[j]=aux.numar){ aux=x[i]. end. Preţul şi denumirea acestui produs se iau din vectorul de produse de pe poziţia j. var x:array[ 1. Creăm vectorul x de înregistrări. Creăm un vector de puncte.i<=k. cout«"Introduceti elementele matricii\n". Creăm un vector de produse. Înainte de eliminare adunăm exponenţii în elementul găsit. getcht)'} 15. în care fiecare element conţine baza şi exponentul puterii.j++) . b) Ca să obtinem un produs maxim trebuie ca toate fracţiile care formează produsul să fie supraunitaremumărătorul mai mare sau egal decât numitorul). 16. Dacă toate cele trei distanţe sunt egale.i++) for (j=O. for (i=O. în care fiecare element este o înregistrare cu câmpurile denumire şi preţ.exp.i<n.j<m. if (p<=k) x[p]. 137 . iar pentru cel de-al treilea ciclu parcurgem elementele vectorului de la punctul precedent +1 până la n. 17.i<k. parcurgem elementele vectorului de la 1 la n-2 pentru primul punct al triunghiului.j<k. atunci triunghiul respectiv este echilateral şi se pot afişa cele trei puncte care formează triunghiul.frecventa= 1.i++) for (j=O. c. La fiecare pas în ciclu citesc un indice al unui produs.numar=a[i][j]. k=O. corespunzătoare celor trei puncte ale triunghiului. Pentru a determina toate triunghiurile echilaterale avem nevoie de trei cicluri.numar>x[j].i++) for (j=i+l.byte. fie acesta j.frecventa«endl.j++){ p=l.} for (i=1 . x[k]. 19.frecventa++. cin»n»m.j++) cin»a[i][j]. if (x[i]. Pentru fiecare element verificăm dacă mai există unul cu aceeaşi bază. În al doilea ciclu se calculează distanţa dintre cele două puncte determinate. else { k++.. citim într-un ciclu indicii produselor cumpărate împreună cu cantităţi le respective şi afişăm câte o linie din factură.}} for (i=O. în al doilea ciclu parcurgem elementele de la punctul anterior + 1 pâna la Il- 1. while (a[i][j]!=x[p]. Pentru un client. În cazul în care nu există fracţii supraunitare se ia fracţia cea mai mare. şi o cantitate.j<m.

n=-1. while b-c-O do begin inc(n).exp.produs). produs. end. readlrub.exp=e.k. unsigned long produs.' A '. e: byte.baza.exp+x[j].baza=b.x[n]. end.' * ').exp. Varianta C++ #include <iostream. for i:=1 to n-I do write(x[i].i. produs:=1. while (b){ n++. n:=O. n.exp. int n.exp:=e.k. 138 .baza=x[j].i. x[n]. O marcheaza sfarsitul sirului'). x[n].j.j. cin»b»e. readln(b.x[i]. x[n].e).' = '.b.baza.h> #include <conio.e).}.h> void maintj] struct putere{ int baza. begin writeln('introduceti sirul de puteri.exp do produs:=produs*x[i]. for i:=1 to n do for j:=1 to x[i].exp.b.' A '. while j<=n do if x[i]. i:=l.e. for k:=j+1 to n do x[k-1]:=x[k]. end. cout«"Introduceti sirul de puteri. putere x[20].exp:=x[i].baza then begin x[i]. dec(n). while i<n do begin j :=i+1.longint. inc(i).baza:=b. Omarcheaza sfarsitul sirului". x[n]. end else inc(j).baza. write(x[n].

200] of elev. aux:elev. for (k=j+l. end. x:array[1. readln(media).i<n. with x[i] do begin readln(nume). var i.readln(n).j++) produs*=x[i].cin»b»e.m:byte. clasa:array[1. 31.i. for (i=O.k<n.. end.k++)x[k-l]=x[k].mediathen begin aux:=x[i]. writeln('clasele sunt'). media:real.i<n. writeln('elevii sunt:').exp«"*".readln(m).exp. while (j<n){ if (xţil.} produs=l.baza-exţjl. cout«"\b ="«produs. for (i=O. } n++.': ').n.l0] of string[3].baza. Parcurgem toate mănăstirile din cea de-a doua listă şi pe fiecare o căutăm în prima listă (presupunem că In' direcţia patrimoniu se găsesc toate mănăstirile deci vom gasi fiecare mănăstire în prima listă) apoi modificăm anul restaurării.i++) cout«x[i]. begin write('numarul de clase').i++) for (j=O. for i:=l to m do readln(clasa[i]). while (i-cn-I)] j=i+l. for i:=l to n do begin writeln('elevul '. n--.baza«"A"«x[i].j. getcht)'} 27.exp-exţjţ.pren:string[ 15].} else j++.exp. for i:=l to n-I do for j:=i+1 to n do if xţij. readln(pren). end. write('numarul elevilor').} i++. i=O. Varianta Pascal type eleverecord nume.baza)] xţiţ.mediacxţjj. 139 .j<x[il..

while j<=n do begin writeln(x[j].pren»x[i] . cout«"Elevii sunt". for (i=O.i<n-1.media«endl. end. eout«"Dati numarul de clase:".m.' '.h> #include <eonio.media<x[j]. cin»n. eout«"Numarul elevilor este:". for (i=O.media:6:2).nume«' '«x[j] . ehar clasa[1O][3].}} } 140 . x[i]:=x[j].pren[20]. double media.' '.j++) if (x[i].j<n.i++) for G=i+1.').i++) ein»clasa[i].nume» x[i].}. j+=m.} for (i=O.aux.i<m.} for (i=O. Varianta C++ #include <iostream.clasa[i].pren.x[j]=aux. x[j]:=aux.x[i]=x[j].i++){ eout«"clasa "«clasa[i]«":".media){ aux=x[i].i++){ cout«"Elevul "«i+1«" este: ": ein»x[i] . ein»m.h> #include <string.n.h> void maint)] struet elev { ehar nume[20]. for i:=l to m do begin writeln('clasa '.i<m. end.i<n. eout«"Clasele sunt". j:=i. j:=j+m. end.pren«' '«x[j].x[j].nume. end. while G<n){cout«x[j]. writeln.' .j. elev x[200].x[j]. j=i. int i.media.

incrucisata. Parcurgem într-un ciclu (până la întâlnirea marcaj ului de sfârşit de fişier) toate liniile fişierului: Pentru fiecare linie presupunem că elementele şirului sunt ordonate crescător. begin assign( f. Varianta Pascal: program poeme. {trecem peste liniile vide} inc(i). Înainte de a trece la linia următoare se verifică variabila booleană. În acelaşi timp vom număra de cîte ori apare în fişier şirul de caractere "@yahoo" pentru a afla câte adrese de e-mail sunt pe "yahoo".linie). dacă găsim o pereche de numere consecutive în care primul este mai mare decât al doilea. îl deschidem. Redenumim fişierul "de lucru" cu numele IN. apoi ştergem fişierul IN. {extrage ultimele trei caractere din vers} if i mod 2=0 then if s<>s2 then imperecheata. f:text.'poeme.TXT apoi afişăm conţinutul său. if (linie[length(linie)]='. deci variabila booleană devine falsă.CAPITOLUL III FIŞIERE TEXT 2. Utilizăm un fişier "de lucru" în care scriem textul transformat (prima literă din fiecare cuvânt o scriem cu literă mare). Definim un vector cu 10 elemente corespunzătoare celor zece cifre.l). 20. 16. înseamnă că şirul de pe această linie nu este ordonat crescător. txt'). initializând cu true o variabilă booleană. Într-o altă variabilă numărăm toate caracterele din fişier. Dacă aceasta are valoarea tTue atunci se afişează numărul de ordine al acestei linii.' sau '. Ştiind că orice adresă de e-mail conţine caracterul "@" numărăm toate apariţiile acestui caracter pentru a afla câte adrese de e-mail sunt în fişier. linie. imperecheata:=true.efalse.length(linie). 5.') then delete(linie.s2:string.imperecheata:boolean.etrue.length(linie)-2.s1. 141 .') or (linie[length(linie)]='.3). {care separa strofele} readln(f.TXT (acesta trebuie deschis la fiecare pas în ciclu pentru a adăuga conţinutul lui la toate fişierele). {sterge ultimul caracter daca este '. i:=O.« var i:longint.s. 12. Elementul de pe poziţia i reprezintă numărul de apariţii în fişier ale cifrei i. Într-un alt ciclu (până la întâlnirea marcajului de sfârşit de linie) citim câte un număr din fişier şi îl comparăm cu numărul precedent. 8.TXT. Iniţializăm cu Otot vectorul apoi parcurgem fişierul într-un ciclu şi pentru fiecare cifră găsită mărim cu 1 elementul din vector corespunzător cifrei. Într-un ciclu 'citim pe rând numele unui fişier. reset(f). incrucisata. apoi adăugăm conţinutului fişierului DOCUMENT. {numaram liniile pe care se afla versuri} while not eof(f) do begin while seekeoln(f) do readln(f).'} s:=copy(linie.

strcpy(s1.linie).incrucisata=1. 'iilinie[strlen(linie)]=='.s). int imperecheata=1. getchO. char c.eof()){ readln(f. apoi parcurgem al doilea fişier şi adăugăm în vectorul x doar acele nume care nu se află deja în fişier. linie[i]=O. Fie x vectorul în care vom obţine lista finală.s2[1O]. char sl [1O].h> #inelude <string. if (i%4==3I1i%4==0) if (strcmp(s1. 142 .4). if (linie[strlen(linie)]=='. if (i mod 4=3) ar (i mod 4=0) then if s-o-s 1 then incrucisata. i++.h> #include <conio. while ((c=f.p. end.eofO)linie[i++]=c. while (!strcmp(linie.*p. end. } void mainf)] clrscrt): unsigned long i=O.s)) imperecheata=O.efalse.s 1). if imperecheata then writeln('rima este imperecheata') else if incrucisata then writeln('rima este incrucisata') else writeln('altfel de rima').char *linie){ int i=O.s2)) incrucisata=O. strncpy(s.linie[100]. else if (incrucisata)cout«"Rima e incrucisata\n". while (!f. Mai întâi copiem în x toate numele din primul fişier.} 24. if(i%2==O) if (strcmp(sl. Elementele acestui vector reprezintă reuniunea celor două mulţimi de nume din fişierele date. s1:=s2.s[1O]. ')linie[strlen(linie)]=0. Varianta C++ #inelude <fstream. strcpy(s2. else cout«"Rima este altfel\n".getO)!='\n'&&!f.txt"). s2:=s.linie). ifstream f("poeme. p=&linie[strlen(linie)-3].} if (imperecheata)cout«"Rima e imperecheata\n".h> void readln(ifstream &f."\n"))readln(f.

n.'matrici. end. 1. while not eof(f) do begin inc(i).' '). ma[î]=O.out'). Varianta Pascal program matrici rare.j]). i:=O. if nrzero>n*m div 2 then begin for i:=l to n do begin for j:=l to m do write(g. if seekeoln(f) then "~o begin n:=i.j.g:text. writeln(g).10.nrzero.30.j:=O.geti). nrzero:=O.. i. 143 .h> #include <conio.txt"). end.h> ifstream f("f.rewrite(g).10] of integer. writeln(g) . while not eoln(f) do begin inctj).. read(f. înt ch. in functia citire care returneaza nr elementelor de pe linie daca acest numar e O => matricea cureanta s-a terminat de citit*/ #include <fstream.close(g).enrzeto--L.in'). f. if a[i.integer. nrzero. chef.j].a[i. assign(g. readln(f). begin assign(f. var a:array[ 1. close(f). end.'matrici. readln(f).et). Varianta C++ /* am citit din fisier eate o linie. int citire(int *ma){ int i=O.a[i. end.reset(f).m:=j.j]=O then nrzero. end.m. end.

Utilizăm algoritmul de interclasare a doi vectori.while (!f.eofO&&ch!=' '){ ma[i] *=10.i++) { for (j=O.i.j.} 35.} return i. această variabilă este diferită de O atunci elevul este corigent şi putem afişa la câte discipline este corigent. concatenând şirul de caractere 'parte' cu numărul corespunzător convertit Într-un şir de caractere şi cu şirul '. Pentru fiecare elev din fişier citim numele şi prenumele într-o variabilă de tip string. 36. 144 . cout«endl. La fiecare pas în ciclu construim numele fişierului Într-o variabilă de tip string. while (i=citire(matr[n++])m=i.} void maim)] clrscn). după care numărăm câţi candidaţi au punctajul mai mare decât el.m. 42. chef.getO. while (!f.txt şi trecem mai departe la următorul fişier.eofOH n=O. int Suma[lOO][lOO]. for (i=O. iar de pe linia următoare citim clasa şi mediile Într-un ciclu pâna la sfârşitul liniei. şi au un număr diferit de discipline). while(ch==' ')ch=f. Totodată numărăm Într-o altă variabilă mediile sub 5 şi dacă la ieşirea din ciclu.j<mmax.getf): while(ch !='\n' && !f. } getch(). for (i=O.gen). } i++.i++) for (j=O. Găsim întâi punctajul candidatului. 39.j<m. Deschidem apoi fişierul.i<nmax.j++) cout«Suma[i][j]«' '. if (m>mmax)mmax=m.i<l OO. adăugăm conţinutul lui la fişierul profesor.txt'. ch-ef.eofO&&ch!='\n'){ ma[i]=ch-'O'. Se vor căuta cuvintele comune tuturor liniilor fişierului. if (n>nmax)nmax=n. Parcurgem într-un ciclu toate fişierele de la 1 la n. n--. 41.} for (i=O.j<l OO.j++)Suma[i]UJ=O.mmax=O.i++)for (j=O.i<n. ma[i]+=ch-'O'. int n. int matr[lOO] [100].nmax=O.j++) Suma[i] UJ+=matr[i] UJ. cu deosebirea că preluăm datele din două fişiere. Înainte de a trece la un alt elev se afişează media generală a acestui elev. În acest ciclu calculăm suma numerelor reale reprezentând mediile pe discipline şi numărăm aceste medii (în fişier sunt elevi din clase diferite. Trebuie să interclasăm datele din cele două fişiere.m=O.

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
f»a[n].nume»a[n].cod;
n++;}
while( !f.eof());
char *p=new char[2000];
char cuv[20];
int indeO;
while (!g.eofO){
g»cuv;
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;
h«p;}

CAPITOLUL IV
LISTE ALOCATE STATIC
1. Considerăm nmax dimensiunea maximă a vectorului stivă şi vf poziţia vârfului 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" ;cin»opt;
switch(opt)
{
case 'A':if (vf==nmax) cout«"stiva plina"«endl;
else
{ cout«"introduceti un element ":
vf++;
cin»x[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--) cout«x[i)«" ";

147

break;
}
}
while (opt!='T');
}
4. Se asociază fiecărei tije o structură de date de tip stivă. Se introduc cele n elemente
(numerele asociate bilelor) în prima stivă. Apoi se mută pe rând câte un element în a doua
stivă, pană la întâlnirea elementului cu valoarea x. Acesta este eliminat din prima stivă,
după care se depun toate elementele din a doua stivă în prima.
5. Utilizăm trei structuri de date de tip stivă (stivele 1 si II sunt asociate celor două turnuri
iniţiale, iar stiva III e asociată noului turn ce trebuie format). Fie vfl, respectiv vf2 poziţiile
vârfurilor stivelor 1 si II. Comparăm elementele din vârfurile stivelor 1 şi II şi depunem în
cea de-a treia stivă elementul cu valoarea mai mică, eliminându-l din stiva din care l-am
preluat. Realizăm compararea elementelor din vârfurile stivelor până când una din stive
devine vidă, după care mutăm în stiva III elementele rămase î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";cin»nr;
vf'l-i-«;
xţvfl jenr;
cout«"Continuati?(din) ";cin»r;
}
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";cin»nr;
vf2++;
y[vf2]=nr;
cout«"Continuati?(d/n)";cin»r;
}
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--)cout«z[i]«" ";
}
10. Se utilizează o structurăde tip coadă; se parcurg elementele din coadă: cele cu culoarea
neagră se elimină şi celelalte se adauga din nou în coadă. Parcurgerea are loc atâta timp cât
mai există în coadă elemente cu culoarea neagră.

150

CAPITOLUL V
SUBPROGRAME
2. Fiecărui 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 decât un cub, cel cu latura cea mai mică, pe următoarele linii vom
pune câte două cuburi, în ordinea crescătoare 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:";
cin»nume;
cout«"Numarul de vocale din text e: "«functie(nume)«endl;
}

Il. Se va construi un alt număr, folosind cifrele primului în ordine inversă. Cifra unităţilor
se obţine din restul împărţirii la 1O, numărul se împarte la 10 şi cifra zecilor devine a
unităţilor.
12. Se va ţine seama şi de anii bisecţi, care sunt toţi anii divizibili cu 4, în afară de cei
divizibili cu 400.
18. Se va citi din fişier. Cuvintele sunt despărţite prin spaţii, frazele prin punct, iar aliniatele
prin tab.
21. Vom parcurge şirul şi dacă vom găsi valoarea vom ieşi din funcţie retumând 1
(adevărat). 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)) cout«i«" ";
}
void maint)
{
int n.x.y;
cout«"Dati n, apoi x si y:";

152

i. 't~ begin write('dati codul').cod:string).n. if (verif(cont. Se va parcurge şirul şi se vor verifica câte 3 valori alăturate.100] of string. for i=1 to n do begin write('contul: '). readln(n). end. 30. Varianta C++ #include <iostream.lcod))return 1. în cazul în care găsim două elemente care nu corespund vom ieşi. procedure verif(cont.cont)=O then writeln(cont). return O.readln(conturi[i]). Vom parcurge fiecare şir. cout«"Dati contul si codul:". write('dati numarul de conturi'). var conturi. for (char *i=cont. iar cea dea doua începând cu indicele n. end. afism. retumând O(false). Vom parcurge matricile pe linii. 36.cod.lcod=strlen(cod). for i=1 to n do verif(conturi[i]. begin if pos(cod. writeln('lista codurilor care trebuie modificate').x. Pentru a face funcţia mai eficientă. Dacă găsim un astfel de grup vom returna 1 iar în caz contrar O. end.y).array] 1. însă una de la indicele 1 la n.cod). Varianta Pascal program ex36. cod:string. 153 . } 28. verificând condiţia x[i-l]<xi. readln.codjjcout-oc''Codul apare in cont!\n". 33.i++) if (!strncmp(i. } void maintj] char cont[3l]..h> #include <string.cod[31].integer. Trebuie avut grijă să nu se plece de la primul element.i<=cont+(lcont-lcod).char cod[]) { int lcont=strlen(cont). cin»cont»cod. readln(cod). cin»n»x»y.h> //varianta c++ int verif(char cont[]. descrescător.

BACKTRACKING 2. begin valida:=TRUE. Varianta Pascal type stiva=ARRAY[1.20] of integer. b. a:ARRAY[ 1. function prim(x:integer):boolean.k. begin for i:=1 to n do write(a[st[i]]:3). n. begin prim:=true. var i:integer. for i:=2 to trunctsqrux) do if x mod i = O then begin prim. k:integer). care reprezintă numărul divizorilor. Se vor sorta şirurile în funcţie de valorile din şirul b. eliminând câte o cifră de la sfârşitul acestuia. else cout«"Codul nu apare in cont!\n". end. 154 . Fiecărui număr din şirul a îi va fi asociat un număr din alt şir. var i:integer. var st:stiva. i:=k-l . } 38. procedure validare(var valida:boolean. i:=x.end. var i:integer. begin if st[k]<n then begin inc(st[k]). CAPITOLUL VI TEHNICI DE PROGRAMARE VI. end. end.i : integer. are_solutie:=TRUE. st:stiva... var st : stiva. 41. are_solutie. if (101) and (prim(a[st[k]]) and prim(a[st[k-l]]) then valida:=false. end else are_solutie:=FALSE. Se aplică algoritmul BackTracking după schemă.20] of integer. procedure continuare(var are_solutie:boolean. procedure solutie.efalse.1. for i:=1 ta k-I do if st[k]=st[i] then begin valida:=FALSE. k:integer). end. Verificăm dacă numărul este divizibil cu 10. valida: boolean.

end else dec(k). end. { pe l .ev. }.n. if are_solutie then validare(valida. { if(st[k]<n) { st[k]=st[k]+1.readLn(a[i]).stiva &st). writeln.h> typedef int stiva[lOO] stiva st. int prim(int x).i.st[k]:=O. } void succesor(int &as. iex.'] = '). k:=l.k). while le-O do begin repeat continuarerare solutie. "~ Varianta C ++ #include<stdio. end. } 155 .a. until (not are_solutie) Of (are_solutie and valida). for (i=2.st. if are_solutie then if k=n then solutie . return p.k). for i:=l to n do begin Write('a['.i++) if (x%i==O) { p=O. readln(n). end.p. { st[k]=O.xl2. int as.int k). st[l]:=O. else begin inc(k). begin write('N='). } void init(int k.i.end.st.h> #include<math.stiva &st. int k. ase l . readln(n).

v3:='nuc'. if (as= =l)valid(ev.&a[i]) } k=1. } printf("nr este %d".init(k. Pe fiecare nivel al .scanf("%d" . scanf("%d". stivei se poate genera oricare din indicii 1. } while (!(!as= =1) \1 (as= =1) && (ev= =1)).------------------ else as=O.st). for(int I=1.st.i)..i + +) printf(" %d".arstri]]). v2:='păr'.2.-.i + +) if(st[k]==st[i]) ev=O. if« 101) && «prim(a[st[k]])==l) && (prim(a[st[k-1]])==l)) ev=O. Dimensiunea maximă a stivei este 15 fiindcă lotul conţine 60 de metri şi pomii trebuie plantaţi la o distanţă de cel puţin 4 metri unul de celălalt.i<=n.. if (as= =1) if (solutie (k)) { tipan) cont + + else k . printf("\n").&n). for(i= 1. } void valid(int &ev. while (le-O) { do ( succesor(as.I<=(k-1).i<=n..int k).k).st. } mainr) { int conteO. } void tiparO ( for(i=l. { eve l . } 5. dar condiţia ce trebuie îndeplinită este ca pe 156 .cont).3.i++) { printf("a[%d]=".k). printf("n=").stiva &st. Indicaţie: denumirile pomilor păstraţi-le într-un vector v cu componentele v1:= 'măr'.

var i:integer.stiva. if (k> 1) then if st[k] =st[k-1] then valida:=FALSE. end else are_solutie:=FALSE. v : arrayf I. end. k:integer).două nivele consecutive ale stivei să nu se genereze acelaşi indice. begin valida:=TRUE. La generarea solutiei se tine seama şi de condiţia ca numărul de meri să fie mai mare decât numărul de peri şi mai mare decât numărul de nuci. k:integer). 'c'. valida: boolean.k). Varianta Pascal type stiva=ARRA Y[ 1. writeln. begin for i:=l to n do write(v[st[i]]:3). adică pot să fie mai mulţi termeni în descompunere sau mai puţini.k : integer. var i:integer. fiindcă distanţa dintre aceştia trebuie să fie cel puţin 12 metri). Indicaţie: soluţia nu are aceeaşi lungime în toate cazurile. readln(n). şi dacă pe nivelul k st[k]=3 (adică pomul k este nuc.st.e l . 6. procedure solutie. end. begin if st[k]<3 then begin- inc(st[k)). Problema se va rezolva prin algoritmul BackTracking după schemă. aresolutie. În stivă se generează indicii vectorului în care se citesc numerele date. 7. st[1]:=O.B] of char. procedure validare(var valida:boolean. . procedure continuare(var are_solutie:boolean. st.'b'. v[2]:='b'. conditia este ca st[k]<> st[k-l] şi st[k] <> st[k-2].. begin write('N='). v[1]:='a'.20] of integer. k. n. var ststiva. Se foloseşte un vector în care se vor pune literele: 'a' . Inălţimea stivei în care se generează soluţia este stabilită în momentul în care suma elementelor ce compun stiva este egală cu suma M. var st : stiva. 157 . v[3]:='c'. are_solutie:=TRUE. while k>0 do begin repeat continuare(are_solutie. end.

v[2]="b".st.stiva &st. end. readln(n).int k). } void tipart) { for(i= 1.st[k]:=O. v [l]=" a". } mainO { int cont=O. cjar v[4]. { st[k]=O.ev. 158 . v[3]="c".i + +) printf("%d". } void valid(int &ev.stiva &st.stiva &st). until (not are_solutie) or (are_solutie and valida).&n). } else as=O.scanf("%d". Varianta C ++ #include<stdio.n.h> #include<math. printf("\n"). } void succesor(int &as. int as. if are_solutie then validare(valida. int k.int k).end else dec(k).i<=n.k).h> typedef int stiva[lOO] stiva st. { eve. end. void init(int k. { if(st[k]<3) { st[k]=st[k]+1. ase l . if are_solutie then if k=n then solutie else begin inc(k). printf("n=").l . if(st[k]==st[k-l]) ev=O.v[st[i]]).

Dacă pe nivelul k-I valoarea e 10 atunci la suma obţinută anterior se adună valoarea de pe nivelul k al stivei. Se folosesc notaţiile: lung care reprezintă lungimile segmentelor în care trebuie tăiată panglica. Într-o grupă se generează persoanele care nu se cunosc. 25.. k=l .. Se vor număra soluţiile (straturile) până când se ajunge la n şi generarea se opreşte. adică + sau . De fiecare dată când se găseşte o grupă se tipăreşte şi se numără într-un contor câte grupe sunt.n tipuri de flori cu valori 1. nr este numărul de soluţii. Stiva va avea dimensiunea Nri. lb. In stivă se vor genera toate florile dintr-un strat.. while (le-O) { do { succesorias.st. Fiecare grupă se generează în stivă.9 se generează în stivă. Begin 159 . 27.. Pentru un pas k se testează dacă k este par şi atunci este obligatoriu ca st[k] să fie 10 sau 11.st. 23.(fiindcă între 2 operanzi trebuie să fie un operator).k).. iar dacă pe nivelul k-I valoare reţinută este 11 atunci din suma anterioară se scade componenta de pe poziţia k. } printf("nr este %d". lb este lungimea totală a panglicii. iar semnele + şi . Varianta Pascal Program taie. nr. dimensiunea stivei variază de la grupă la grupă.k). Se codifică cele. if (as= =1) if (solutie (k)) { tipan) cont + + else k --. Numerele 1.cont): } ~ 22. S. Problema constă în tăierea unei panglici în bucăţi.st). Var 1: integer. ceea ce reprezintă câte variante de text trebuie să formuleze Ionel. Se va afişa câte grupe sunt. } while (!(!as= =1) II (as= =1) && (ev= =1)). Var lung.100] ofinteger.2. Se ajunge la soluţie dacă suma elementelor din stivă este 2. 1 :integer. Bun:boolean.sunt codificate cu valoarea 10 respectiv 11. Pentru pasul k cu k impar se testează dacă pe nivelul anterior(st[k-1]) s-a retinut valoarea 10 (pentru +) şi 11 (pentru . if (ase =l)valid(ev. st: alTay[1.. Condiţia ce trebuie îndeplinită este ca tipurile de flori dintr-un strat să fie v.2. Procedure tipar. st este stiva în care se generează soluţiile.). n.init(k.

end. for 1: = 1 ta s-I do write(st[I]. nr). lb. ' (pentru Ose termina): '). write('lungime segment'. nr. Varianta C++ #include<stdio. write(' solutia'.h> int lung. tai(lb. k+ 1) end. {int 1. readln(lb). 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]. s:=s-l. begin write('lungimea panglicii:'). repeat s:=s+l. writeln(st[s]. k= tipul de segment la care am ajuns} var 1: integer. '+' ).efalse until bun ar (lung[s]=O). int Bun.enr-s l .' *'. untillung[s]=O. s:=O. void tipari). nr. {lb-elungimea ramasa din bara. {nu sunt permise segmente de lungimi egale} repeat bun:=true. 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. '*'. lung[s]. lungei]. 1. if nr=Othen writeln(' nu exista nici o solutie!') else writeln('s-au gasit'. st[IOO].l). s. for 1:=1 to s-I do if lung[I]=lug[s] then bun. nr. lb ) end. procedure tai(lb. 160 .k:integer). nr:=O. '='. 'modalitati de taiere') end.S. readin(lung[s]).

nr). { printf("lungimea panglicii : "). incercam toate variantele pentru a determina //cate. scanf("%d". k+ 1) . if (nr==0) printf("\n nu exista nici o solutie!").lung[1]). nr=O. printf]" solutia %d".&lb). segmente de lungime lung[1] se pot taia if (k<= s) for (1== l.lb ).1<=(1b / lung[k]). maim). { IIlb==lungimea ramasa din bara. for (1 == 1. do { s==s+l.1++) { st[k]=1. else printf("\n s-au gasit %d modalitati de taiere". s==O. scanf("%d". else { //daca nu am depasit numarul de segmente date.nr).1<=s-] .k). } while( !«bun) II (lung[s]==O»). //nu sunt permise segmente de lungimi egale do { bun=l. } while (!(lung[s]==O». k== tipul de segment la care am ajuns int 1.st[s].' }.1++) printf("%d * %d +".&lung[s]).s). 161 . printf("lungime segment %d (pentru O se termina): ". printf("\n %d * %d == %d". //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).lung[s]. s=s-l. } void tai(int lb. tai(1b -1* lung[k]. for (1=1. tai(lb. nr==nr+ 1.1++) if( lung[I]===lug[s]) bun=O.I).1<==s-I. }.st[I].

În stivă se generează grupele de elevi. Se adună cifrele păstrate în stivă şi dacă suma lor este egală cu n atunci se tipăreşte stiva.. Cărţile din fiecare raft se generează în stivă.2. Max va fi un parametru transmis prin referinţa şi este actualizat la fiecare execuţie (iniţial el este 0. fiindcă numărul poate fi privit ca o succesiune de caractere.. 46. VI.. Algoritmul se termină când sunt generate cele 10 rafturi şi toate cărţile sunt aranjate. Pentru un pas k trebuie îndeplinită condiţia ca persoana generată pe nivelul k-I să cunoscă aceeaşi limbă cu persoana generată pe nivelul k. max) care determină cifra maximă. Într-o grupă se generează elevi pentru care media aritmetica a notelor fiecărui elev din grupă diferă cu mai puţin de un punct de media clasei. p : longint. altfel dacă vei] > max atunci max : = v[i]şi se auto-apelează maxim (i-l. deoarece elementele şirului sunt numere naturale).8. se opreşte generarea. acest lucru se poate face cu funcţia pos(subsir. Pentru fiecare persoană se cunoaşte numele şi cele două limbi vorbite de ea. Se vor număra soluţiile şi când se va ajunge la n astfel de buchete. 2. In lanţul de auto-apeluri i va trece prin poziţiile elementelor 9.. Function invers(n : longint): longint. Begin 162 . acestea se vor elimina din şirul celor existente iniţial astfel încât la generarea raftului următor să nu se aşeze o carte deja aranjată. pe un raft vor fi cărţi cu acelaşi autor. 39. Numerele întregi longint se reprezintă fiecare pe rând în baza 2. Numerele de înmatriculare existente se păstrează într-un vector de şiruri de caractere. Persoanele invitate la masă sunt reţinute într-un vector. Deoarece masa e rotundă atunci prima persoană generată trebuie să cunoscă o limbă de conversaţie cu persoana aflată pe ultimul nivel al stivei. Cu cifrele numărului dat se formează un vector şi se calculează valoarea maximă a vectorului. iar dacă valoarea întoarsă de pos este zero atunci subşirul nu este găsit în şir. 4. dar nu pot să pun în stivă decât un număr care să conţină iniţiala numelui şi iniţiala prenumelui celui interesat. Astfel de fiecare dată când în stivă se generază un număr se caută mai întâi dacă acesta are iniţiala numelui şi iniţiala prenumelui.. elevii ce o compun sunt eliminaţi din vectorul iniţial. dacă numărul este egal cu inversul său atunci el este simetric. RECURSIVITATE 3.1 (sunt maxim 9 elemente în vector fiindcă numărul este de maxim 9 cifre).30. Stiva va fi considerată cu dimensiunea m (numărul de flori ce compun un buchet). Pentru determinarea valorii maxime dintr-un vector se foloseşte o funcţie maxim(i. Fiecare raft are cel mult p cărţi. Dacă i=O se întrerup auto-apelurile şi funcţia dă ca rezultat valoarea lui max. max) pentru a trece la următorul element. Se poate folosi o procedură recursivă ce întoarce inversul numărului. Ele se generează în funcţie de autor. Varianta Pascal: Var n.2. nr. Pentru cărţile aranjate pe un raft. pentru ca la generarea altei grupe elevii selectaţi deja într-o grupă să nu figureze şi altă grupă. Cifrele numărului obţinut din codificarea din baza 10 în baza 2 se generează în stivă.. Numele elevilor şi notele lor sunt memorate într-un vector. 32. 5. 34. Se codifică cele cinci feluri de flori cu valorile 1. sir) care întoarce poziţia subşirului într-un sir. În stivă se generează numerele. După generarea unei grupe. 31.

9. p. adică două consecutive şi dacă există atunci se elimină şi procedeul continuă printr-un apel recursiv. invers :=0. nr. long invers(long n) { if (n== O) { p=l. return O. } } maint) { printf(" n = "). p=p*lO. begin Write(' n = '). else printf("\n NU E SIMETRIC").h> long n. } else { return (p*(n % 10) + invers(n 110)). If invers(n) = n Then Write('NUMAR SIMETRIC) Else Write('NU E SIMETRIC). End. p:=p*lO. ReadLn(n). Se caută în şirul s apariţia spaţiilor inutile. Varianta C++ #inc!ude<string:h> #inc!ude<iostream. } 5. astfel determinarea minimului nu provoacă greutăţi. end.If n = oThen begin p:=l. End. end Else begin invers := p*(n mod 10) + invers(n div 10). Pentru determinarea valorii maxime dintr-un vector se foloseşte indicaţia de la problema 3. scanf("%d". if (invers(n) == n) printf("\n NUMAR SIMETRIC").&n). 163 .

3. Nota: integer. Function max ( li.. X. readln(n). Nota Else Ifli<1s then begin M:= (1i+ls) div2. Varianta Pascal Program laureat. int ls) { int m. ls: integer):integer.100] of participant. 164 . nume) End. Nota then writeln( v[i]. End. n. Type participant = record Nume: string. End. Begin If li=ls then max:= v[li]. readln(v[i]. În procedura recursivă dacă nu s-a ajuns la sfârşitul fişierului se citeşte o matrice şi se însumează cu cea dată ca parametru variabil. Write ('nota participantului: '). A:= max (li. m). End. X:= max(l. If a>b then max. b:integer. int X. int nota[30]. int max (int li. b. n.ea Else max. nota). DIVIDE ET IMPERA 1. Var m. Se citeşte din fişier m şi n şi se apelează procedura recursivă ce va avea ca parametru o variabilă de tip matrice. i: integer. i.16. char nume[30] . Begin Write('n='). readln(v[i]. a.n). For i:=l ta n do Ifx= v[i]. nume). Var v: array[ 1. a. VI. For i:=l to n do begin Write('numele participantului: ').eb End. ls). Varianta C++ #include<stdio.h>. B:= max (m+ 1.

iar muchiile vor fi coridoare. &nume[i]). a) Încăperile cu cele mai multe coridoare de legătură.if (li==ls) return nota[li]. Soluţia va fi afişată de fiecare dată când numărul de elemente din soluţie este mai mare sau egal cu 3. în care se găsesc un număr maxim de cifre 1.(la aceeaşi situaţie ajungem şi dacă considerăm cărţile ca vârfuri). }.i++) if (X==nota[i]) printf("\n %s".i<=n. nume[i]). else if (li<ls) { m= (li+ls) /2. for(i=l . printf("\n nota participantului: "). 165 . 8. CAPITOLUL VII GRAFURI 2.I<=n. m).' X=max(l. Graful ce corespunde acestei probleme este un multigraf deoarece între doi elevi pot fi schimbate mai multe cărti . scanf("%d". c) Grupul de încăperi căutat corespunde noţiunii de clica a unui graf (un subgraf partial complet al grafului). Din datele citite din fişier se construieşte matricea de adiacenţă a grafului în care vârfurile vor reprezenta încăperi.&nota[i]). Mai mult. }. a= max(li.i++) { . b= max (m+l. for(i= 1. maini) { printf("n="). if (a>b) return a. scanf("%d". vor fi indicii acelor linii din matricea de adiacenţă. Un vârf va fi considerat valid în soluţie dacă are legături spre toate vârfurile deja alese. acest graf va fi un graf ponderat. 4. Vârfurile grafului vor reprezenta elevii. scanf("%s". Numărul minim de canale de transmisie va fi acel număr minim de culori cu care ar putea fi colorat graful astfel încât oricare două vârfuri (staţii) adiacente să fie colorate diferit. printf("\n numele participantului: "). else return b. . O cale simplă de rezolvare ar fi prin metoda backtracking: Se selectează în soluţie vârfuri ale grafului (de la 1 la n). ls). }. în care ponderea reprezintă numărul cărţii transmise.n). b) Încăperile în care peştera se înfundă vor fi cele care au un singur coridor. Acest număr corespunde noţiunii de număr cromatic al grafului.&n).

sol.e l to n[p] do if not este_in_sol(a[p. function prieteniInformatitp.pozitia curenta in solutie} var ii:byte. end. Planul unei expoziţii trebuie să fie un graf eulerian. end.Pentru simplificarea rezolvării.. {indice curent in sirul solutiilor} m:byte. 15. {verifica daca noul prieten este cu adevarat nou} var j:byte. 166 . for ii. f:text.i.sir. writeln. În care vârfurile grafului sunt împărţite în două mulţimi disjuncte de vârfuri (solicitanţii şi posturile). {sirul solutie. continand o insiruire de persoane } v:sir.sol:sir):boolean.etrue.. begin este_in_sol:=false. 18. {numarul de persoane} primul:byte. 21.ilinie:byte. {"zvonacul" . {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.7] ofbyte.byte):boolean.j. begin for j:=l to i do write(sol[j]:5). begin prietenijnforrnati. Varianta recursivă intuitivă: Varianta Pascal type sir=array[1. vom păstra informaţiile citite Într-un şir de tripleţi (sau trei şiruri). 29.ii].i:byte. for j:=l to i do if sol[j]=noul_p then este_in_sol:=true. var a: array[1.7] of sir. function este_in_sol(nouLp:byte. var j:byte. Este vorba de un graf bipartit.sol) then prieteni_informati:=false. {v[i] varful cozii i din a sau indicele curent din lista de prieteni ai lui i} n:sir. La primul subpunct se verifică dacă graful rezultat conform datelor de intrare este conex. {p ultimul elev ales in solutie.sol:sir). Pentru următorul subpunct trebuie determinat arborele parţial de cost minim.cel de la care pornesc zvonurile} k.i. rezolvarea intuitivă reducându-se la o problemă cu şiruri. {n[i] numarul de prieteni ai lui i} i: byte. i . procedure afisez(i:byte.

il adaug} sot[i]:=urmatorul. read(f. for j:=l to m do begin k:=O. 167 .k]).in').sol. end.v:sir). {pune in solutie pe pozitia i urmatorul copil care transmite zvonul v . zvon(i. {incerc si alt prieten} end.v). {urmatorul prieten al lui pa} inc(v[pa]).ilinie). zvon(i+Lsol.m). {persoana anterioara} if (v[pa]>n[pa]) then {daca am ajuns la sf.v).sol) then begin {daca urmatorul nu este inca in solutie.v[pa]]. begin assign(f.sol. {si generez in continuare} end. begin pa:=sol[i-l]. {ii citesc} end. unei liste de prieteni} begin if prietenUnformati(pa.'persoane. {citirea datelor din fisier si construirea maricii a in care linia j reprezinta lista de prieteni ai lui j } readln(f. end.{avanseaza varful cozii pe urmatorul prieten al lui pa} if not este_in_sol(urmatorul. reset(f). exit.i-l) then {si toti prietenii lui pa sunt deja in solutie} afisez(i-l.i.urmatorul:byte.a[j. end else begin urmatorul:=a[pa. procedure ZVON(i:byte.sol). read(f. n[j]:=k. while not eoln(f) do {atata timp cat mai sunt prieteni in lista lui j} begin inc(k). if ilinie<>j then begin {prima persoana in aceasta linie trebuie sa fie j apoi vor veni prietenii sai} writeln('date eronate').pozitiile curente ale indicilor din sirul de prieteni} var pa. {pastrez numarul de prieteni ai lui j in n[j]} readln(f).

Pentru a înţelege mai bine cine cu cine a jucat rescriem matricea asfel: 168 . {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. deci x[i] ia valori între 1 si m. În funcţia posibil verificăm doar ca x[i] să fie prietenul lui x[i-1] astfel ca zvonul să se poată propaga. 30. var j:byte. Begin Posibile-false. Var j:byte.i-1) then {si toti prietenii lui x[i-1] sunt deja in solutie} afisez(i-l. Lungimea soluţiei este variabilă. afişăm o soluţie dacă toţi vecinii ultimului elev din soluţie au aflat deja zvonul (deci se află în soluţie). {apel VARIANTA 1. end. VARIANTA2 s-ar apela din acelasi loc} readln. close (f). end.i-1. Optimizare: Vom pune în soluţie un elev numai dacă zvonul nu a ajuns încă la el. begin for j:=1 to m do begin if not este_in_sol(j. For j:=1 to n[x[i-1]] do If x[i]=a[x[i-1]. } Function posibil(i:byte):boolean.sol. end. {initializarea indicilor varf.sol) then x[i]:=j. {daca j nu a auzit deja zvonul} if posibilei) then if prietenUnformati(x[i-l. Rezolvare prin metoda backtracking Analiza problemei: În soluţie adăugăm persoane.} for j:=l to m do v[j]:=l.j] then posibil:=true. ZVON(2. sol[l]:=primul.readln(primul). End. {citirea "zvonacului'' } write(' Cine este cel de la care incepe zvonul sa circule? ').v).sol) else zvon(i+ 1). {Varianta de back:tracking recursiv pentru procedura ZVON} procedure ZVON (i:byte).

p:=O. virusat.i. reset(f).40] of byte. function puterea_Iui_2(n:byte):integer. . {daca n nu este putere a lui 2} end. end. while prod-cn do begin inc(p).40] of byte.integer. putem schematiza desfăşurarea campionatului astfel: Etapa 1 : A B C D E F G H \ / \ / \ / \ / Etapa2 : A D E H \ / \ / Etapa3 : A E A Observăm că finaliştii participă la toate cele 3 etape (8 = 2 3) Varianta Pascal Program Fisier. prod:byte. 1. etapa.j.. 169 . begin prod:=l. a:array[ 1.. var p:byte. nr_etapejucate:array[ 1.in'). 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 informaţiile din matricea de adiacenţă.. scoli:array[ 1. var f:text.40] of string]40].40.n:byte. p. begin assign(f. 'rezultate. prod:=prod*2. if prod=n then puterea_Iui_2:=p e1se puterea_1ui_2:=-1.

j]).Varianta Pascal prograrn teme. readln(t). 170 . for i:=l to n do begin for j:=l to n do read(f. end else begin {citirea scolilor si a matricii de adiacenta} for i:=l to n do readln(f. CAPITOLUL VIU ALOCAREA DINAMICĂ A MEMORIEI I. readln(etapa). end. end. for j:=l to n do nr_etapejucate[i]:=ncetapejucate[i]+a[i. {calculam puterea la care este ridicat 2 pentru a da n} p:=puterea_IuL2(n). end. uses crt.scoli[i]). readln. for i:=l to il do begin ncetapejucate[i]:=O.a[i. {Echipele finaliste sunt acele echipe care au jucat p-l etape} writeln(' Cele doua echipe finaliste sunt: '). {Echipe descalificate la o anumita etapa} write(' Pentru ce etapa doriti echipele descalificate? ').j].n). exit. {echipele descalificate vor fi cele ce au jucat un nr. {p reprezinta numarul total al etapelor competitiei} if p=-l then begin writeln('Numarul de echipe participante este gresit'). if nr_etapejucate[i]=p then writeln(scoli[i]). end. de etape egal cu etapa} for i:=l to n do if nr_etapejucate[i]=etapa then writeln(scoli[i]).readln(f.

if gasit then writelnr'Razvan a predat caietul') else writeln (Razvan nu a predat caietul'). while p-c-nil do if po.urm. begin llf_caiete:=O. end.enr caiete.type adr=Acaiet. procedure doua_teancuri_de_caiete. end else p:=pA.vf stiva azi. var nr caiete. readln(elev). begin vCstiva_azi:=nil. vf' stiva. begin p:=vCstiva. writelnt'pentru oprire tastati "?" '). var i:byte. c. var gasit:boolean. caiet=record nume:string[ 15]. procedure cautcaietul Iui razvan. p:=nil. vCstiva:=p. {elevii aduc caietele} writelnr'dati numele elevului care a predat primul caietul: '). end. while elev<>'?' do begin nr caiete. new(p). end.nume.' po. for i:=l to nrcaiete div 2 do begin 171 . pA.adr. var elev:string[15]. end. readln(elev).1.p. gasit:=false.urm:=vCstiva. urm:adr.numee'Razvan' then begin gasit:=true.byte. writelnf'urmatorul caiet: ').eelev. procedure eleviLaduc_caietele. vCstiva:=nil.

nr caieteeO. vCstiva=NULL. }ELEVI. end. end.p:=vCstiva. 172 . end. writeln('lista caietelor pentru astazi: '). writeln. VARIANTA C++ #include<iostream. p".h> typedef struct adr{ char nume[15]. end. void elevii aduccaietelet) { char elev[15]. begin p:=vf.urm.stiva). Ilelevii aduc caietele cout«"\ndati numele elevului care a predat primul caietul: ". elevii uduc.h> #include<string. int nrcaiete.h> #include<conio. readln. doua_teancuri_de_caiete. end. p:=p".*vCstiva_azi. if p=nil then writeln('lista vida').h> #include<alloc. begin clrscr. struct adr *urm.urm. writeln('lista caietelor pentru maine: '). afiseaza_Iista( vCstiva_azi).nume). procedure afiseaza_Iista( vf:adr). vCstiva_azi:=p. afiseazaIistatvf.caietele. vCstiva:=vCstiva".urm:=vCstiva_azi. while p-c-nil do begin write(' '. ELEVI *vCstiva.p".*p. cautcaietul Iuirazvan.

' {gasite l. p=(ELEVI*)mal1oc(sizeof(ELEVI)). } } void cautcaietul Iuijazvant) {int gasit. p=vCstiva. vCstiva=vCstiva->urm. if (p==NULL) cout«"\nlista vida". while (p!=NULL) if (strcmp(p-c-nume. p->urm=vCstiva_azi. 173 .i++) { p=vCstiva.} else p=p->urm. vCstiva_azi=NULL. } void doua_teancuri_de_caieteO { int i. if (gasit) cout«"\nRazvan a predat caietul". strcpy(p->nume. vCstiva_azi=p.i<=nccaietel2. cout«"\nurmatorul caiet: ". p-c-urmevfstiva. pep-c-urm. cout«"\n( pentru oprire tastati '1' )\n".elev). p=NULL. } cout«'\n'. cin»elev. cin»elev. gasit=O. vCstiva=p. while (strcmp(elev."?")!=O) { nr caiete--r. "Razvan")==O) . while (p!=NULL) { cout«" "«p->nume. for (i=l . } } void afiseaza_lista(ELEVI *vf) { p=vf.. else cout«"\nRazvan nu a predat caietul".

if prim=nil then begin new(prim). caut caietul Iui razvanî). 5. Pentru a păstra doar vocale distincte se parcurge la fiecare vocală găsită lista cu vocalele deja întâlnite. writeln('PACIENTUL '. end 174 . urm:adr.} void mainr) {clrscn).ultim:adr). if (scaun_ocupat[l ]='?')and(prim=nil) then begin scaun_ocupat:=num. num:string[15]. uses crt. scaun_ocupat:string[15].p:adr. prim" . prim". 9. end. type adr="pacient. Similar cu problema rezolvată 10. Pentru fiecare termen din prima listă (primul polinom) se caută corespondenţii lui în cea de-a doua listă.' A INTRAT DIRECT IN CABINET).urm:=nil. var optiune:char. afiseaza Iistatvfstiva). cout«"\nlista caietelor pentru astazi: ".ultim_pacient. pacient-record nume:string[15]. Similar pentru consoane.ultim_urgenta.nume. afiseazaIistarvf' stivaazi).' SE ASEAZA LA COADA').num.prim_urgenta. procedure sosire_pacient(var prim. prim_pacient. 10.enum.num. var nou:adr. readln(num). getcht). cout«"\nlista caietelor pentru maine: ". ultim:=prim. } 2. program stomatologie. douateancuri decaietet). end else begin writeln('PACIENTUL '. begin write('numele pacientului: '). elevii aduccaietelet).

end. 175 .' '). nouo. p:=pA. end. else begin new(nou). ultimo.eprimo. end. end. .scaun_ocupat. procedure intra_in_cabinet(var prim:adr). writeln('PACIENTUL '. end.urrn. end.eprimenume.' IESE DIN CABINET). begin if primenil then writeln(NU ASTEAPTA NIMENI LA ACEASTA COADA') else begin p:=prim. nouo.scaun_ocupat. prim.nume.urm. begin " if scaun_ocupat='?' then writeln('IN CABINET NU ERA NIMENI' ) else begin writeln('PACIENTUL '. writeln. ultim:=nou. end.urm.urm.enum.nume. var p:adr. dispose(p) .enil. procedure listare_pacienti(prim:adr). procedure eliberare_scaun.enou. p:=prim. var p:adr. begin scaunocupat.' INTRA IN CABINET). end. scaun_ocupat:='?'. end. while p-c-nil do begin writetp-. 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').

176 . end. end.*p. il' ((strcmp(scaun_ocupat.ultim_pacient). prim_urgenta:=nil. listare_pacienti(prim_pacient).end.'U -sosire urgenta'). 'L'ibegin writeln('URGENTE:'). struct pacient *urm.h> #inelude<string. optiune:=upcase(optiune). 'T':begin write('SFARSIT PROGRAM'). 'U':begin sosire_pacient(prim_urgenta.*prim_urgenta. write('dati optiunea dumneavoastra:'). writeln('E -eliberare scaun '. cin»num. end. readln. void sosire_pacient(PACIENT **prim. end.PACIENT **ultim) { PACIENT *nou.begin optiune:='*'. readln. PACIENT *prim_pacient. listare_pacienti(prim_urgenta)." ?")==O)&&(*prim==NULL» { strcpy( scaun.num). 'E':begin eliberare_scaun. scaun_ocupat:='?'. char optiune.#l0#13. writeln('PACIENTI:'). readln.h> #inelude<alloc. end.*ultim_pacient. prim_pacient:=nil.ultim_urgenta). }PACIENT. end. Varianta C++ #inc lude<iostream.scaun_ocupat[l5]. else writer'Ati tastat gresit').#lO#13.*ultim_urgenta. readln. cout«"\nPACIENTUL "«num«" A INTRAT DIRECT IN CABINET". end.h> #inelude<conio.ocupat.h> typedef struct pacient { char nume[15]. char num[l5]. readln.'L -listarea pacientilor de la rand'): writeln('T -terminarea programului'). readln(optiune). writeln('P -sosire pacient '. case optiune of 'P':begin sosire_pacient(prim_pacient. while optiune-o-T' do begin elrscr. cout«"\nnumele pacientului: ". readln.

strcpy(nou->nume. } void listare_pacienti(PACIENT *prim) { PACIENT *p. else cout«"\nNU MAI ASTEAPTA NIMENI LA COADA". *prim=(*prim)->urm. strcpy(scaun_ocupat. strcpy(scaun_ocupat. else { cout«"\nPACIENTUL "«num«" SE ASEAZA LA COADA". else { cout«"\nPACIENTUL "«scaun_ocupat«" IESE DIN CABINET". } else { nou=(PACIENT *)malloc(sizeof(PACIENT)). if (prim_urgenta!=NULL) intra_in_ cabinete&prim_ urgenta).(*prim)->nume). } void eliberare_scaun() { if (strcmp(scaun_ocupat. if (prim==NULL) cout«"\nNU ASTEAPTA NIMENI LA ACEASTA COADA". if (*prim==NULL) { *prim=(PACIENT *)malloc(sizeof(P ACIENT)). p=*prim. *ultim=*prim..num)." ?"). free(p). nou->urm=NULL. *ultim=nou. strcpy((*prim)->nume. (*prim)->urm=NULL. cout«"\nPACIENTUL "«scaun_ocupat«" INTRA IN CABINET"."?")==O) cout«"\nIN CABINET NU ERA NIMENI". } } void intra_in_cabinet(PACIENT **prim) { PACIENT *p. else if (prim_pacient!=NULL) intra_in_cabinet(&prim_pacient). (*ultim)->urm=nou.num). else { 177 .

cout«"\nP -sosire pacient \nU -sosire urgenta". cin»optiune. Se caută sportivul în listă apoi se numără câţi sportivi au săritura mai mare decât el. case 'U': sosire_pacient(&prim_urgenta. break. getcht). case 'E': eliberarescaum). În timp ce se crează lista iniţială se numără concurentele. getcht). Similar cu 10. while (optiune !='T') { clrscn). pep-e-urm.&ultim_pacient). case 'L':{ cout«"\nURGENTE:"."?"). default: cout«"\nAti tastat gresit". getcht). cout«"\nPACIENTI:". listare_pacienti(prim_urgenta). 22.} case 'T': cout«"\nSFARSIT PROGRAM". getclu): } } } 11. 178 . 15. 12-13. Se scrie pentru fiecare triplet ecuaţia dreptei care trece prin două dintre puncte şi se calculează dacă al treilea punct verifică ecuaţia.&ultim_urgenta). II optiuneeupperioptiune). while (p!=NULL) { cout«p->nume«" ". prim_pacient=NULL. Această adresă şi cea a primului element sunt adresele de început ale celor două liste căutate. strcpy(scaun_ocupat. se ordonează după înălţime. p=prim. getchrj. cout«"\ndati optiunea dumneavoastra:". break. getcht): break. switch (optiune){ case 'P': sosire_pacient(&prim_pacient. } cout«'\n'.break. prim_urgenta=NULL. Se caută elementul de la mijlocul listei şi se păstrează într-o variabilă adresa lui. listare_pacienti(prim_pacient). cout«"\nT -terminarea programului". } void mainO { optiune='*'. se afişează lista. break. cout«"\nE -eliberare scaun \nL -listarea pacientilor de la rand".

prec:adr2. pA.nrjepetari).cifra:=c.char.'3'. while (c=O) or (ce l ) do begin new(p). write('de eate ori se repeta? ').'5'.101.'2'.100.15]of char=('O'. Se va păstra fiecare cifră a numărului în câte o componentă a listei apoi se parcurg cele două liste de la ultimul element spre primul. writeln('cifra: ').p:adr2. readlmpo. pA. p_b16.10.. uses crt. p_b2 A. 1110.1001.'A'.'7'.prec:=nil.1100. u_b2:=p. if p_b2=nil then begin p_b2:=p.15]of word= (0. 179 . end. pA.'4'. '8'. const b2:array[0. readln(c). b16:array[0.'6'.'F'). end..'B '.urm:=p. . type adr2=Anumar2. program baza16.1.11 01. procedure creare_lista_baza2.'9'.1111).'E'..'D'.urm:=nil. end. end else begin u_b2 A.'l '.p rec:=u_b2. repeat write('urmatoarea cifra: '). begin write1n('tastati pe rand cifra urmata de numarul de repetari'). var p_b2. numar16=record cl o.. 30.111. 28-29. urm. readln(c). Fiecare cifră a rezultatului se păstrează în câte o componentă a listei rezultat.1010.11. adr16=Anumar16.110. u_b2:=p.1000. var c:byte. nr repetari:byte.u_b2. numar2=record cifra.'C'.1011.q:adrl6. writeln('pentru oprire tastati o cifra diferita de O sau 1'). urrn:adr16.

{ 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). plO:=l. c:=p". n:=p".c.c16:=b16[i] . while b2[i]<>aux do i:=i+ 1. { adaugare in stiva cu cifre in b 16 a ultimei cifre obtinute } new(q).n. { lista cu cifre in baza 2 se parcurge de la ultimul element spre primul} p:=u_b2. procedure creare numarbazalti.byte. end.prec. p_b16".until c<>u_b2".cifra. q". n:=n-1.cifra. p_b16:=q. end. aux:=c. aux:=aux+c*plO. i.while b2[i]<>aux do i:=i+ 1.cifra. 180 .em--I. n:=p". end. end. var m. i:=O. end else begin p lO:=p 10*10.plO.ncrepetari. c:=p". p:=p".urm:=p_b16. begin m:=O.aux:word.ncrepetari-1 . i:=O. end. plO:=l. aux:=p".cifra. while p-c-nil do begin while n-e-O do begin m.

struct numar16 *urm. p_b2:=nil. 1011. cout«"\npentru oprire tastati o cifra diferita de sau 1". '4'. creare_numar_baz~16. char bI6[16J={ 'O'.'1'.h> #include<iostream. p_b 16J\. end. qJ\. q:=p_b16. l100. creare_lista_baza2. begin p_b16:=nil.'F'}. '6'.'9'. while ((c==O) " (c==I)) { p=(adr2 *)malloc(sizeof(adr2)). cout«"\nde eate ori se repeta? ".h> int b2[16J={ 0.'3'. q:=qJ\.101.'2'.cl6:=b 16[i]. '8'.*q. adr16 *p_bI6.I101.h> #include<alloc.*u_b2.100. void creare_lista_baza20 {int c.}adr2. *p.urm:=p_b16.111O. writeln. end. while q-o-nil do begin write(qJ\.c16). adr2 *p_b2. typedef struct numar16 {char c16. circc-p-c-nr.'D'. Varianta C++ #include<conio.10.110. cout«"\ncifra:" . typedef struct numar2 {int cifra.nrrepetari: struct numar2 *urm. 111.urm.'E'.1001. p_b16:=q. procedure afisare_numacbaza16. begin writeln('numarul in baza 16 este:'). 'B'. p-c-cifraec. cin»c. end.'5'.1111}. afisare_numar_baza16. end.'7'.*prec.101 0. 11.}adr16.1. ° cout«"\ntastati pe rand eate o cifra urmata de numarul de repetari". 'A'.repetari: 181 .1000.'C'.

} else { u_b2->urm=p.i. II lista cu cifre in baza 2 se parcurge II de la ultimul element spre primul p=u_b2. p_b16=q. aux=aux+c*plO.n. auxec. 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. m=O. while (p!=NULL) { while (n !=O) { m++. p->prec=u_b2. cin»c. aux=p-»cifra. } do {cout«"\nurmatoarea cifra: ". } else { p10=plO*1O. u_b2=p. 182 . n=p->ncrepetari-l.aux. q->urm=p_b16. if (p_b2==NULL) {p_b2=p. p_b16->c16=b16[i].c. p10=1. cep-e-cifra.p->urm=NULL. } } void creare_numar_baza160 {int m. n--.} while (c==1. } p=p->prec.plO.while (b2[i] !=aux) i++. if (m%4==O) {q=(adr16*)mal1oc(sizeof(adr16)).1_b2->cifra). p_b2->prec=NULL. p10=1. u_b2=p. cep-e-cifra. i=O.

q=q->urm. } void afisare_numacbaza160 { cout«"\nnumarul in baza 16 este:". type sir = object n: word. p_b16=NULL. afisare_numar_baza160. CAPITOLUL IX PROGRAMARE ORIENTATĂ PE OBIECTE 4. } cout«'\n'. II adaugare in stiva cu cifre in b 16 a ultimei cifre obtinute q=(adr 16*)malloc(sizeof( adr16)). q=p_b16. } 33. ' void maint) { p_b2=NULL. creareIista bazazt). p_b16=q. creare_llumar_baza160. } .100] ofreal.. while (b2[i] !=aux) i=i+ 1. a:array[1. 36. constructor init. q->urm=p_b16. 37. Varianta Pascal program siruri. Inserare de elemente preluate dintr-o listă într-o altă listă deja ordonată astfel încât lista să rămână ordonată. function monoton:integer. 34. Unde este cazul se compară rezultatul din subarborele stâng cu cel din subarborele drept. while (q!=NULL) { cout«q->c16. } i=O. La fiecare subpunct se parcurge recursiv. Interclasarea a două liste. Pentru a crea arborele de sortare se porneşte de la arborele vid apoi fiecărui element i se caută locul parcurgând arborele de la rădăcină. 183 . p_b16->c16=b16[i]. .n=p->ncrepetari.

end. function max: real. if a[i]<a[i+1] then d:=false. 184 .ordon(tip_o:integer). ordonat: boolean.d:boolean. until ordonat end.monoton: integer. constructor sir. auxireal. procedure sir. var i:byte. i:integer. begin c:=true. end. a[i]:=a[i+1].': '). readln(a[i)). readln(n). procedure ordon (tip_o:integer). end. for i:= 1 to n-I do begin if a[i]>a[i+1] then c. for i:=1 to n-I do iftip_o * a[i]>tip_o * a[i+ 1] then begin aux:=a[i]. a[i+ 1]:=aux. end. ordonat:=false. function sir. begin write ('Introduceti dimensiunea sirului: ').efalse. function sir. function min: real. var c. var m:real. var i:integer. .i. begin repeat ordonat:=true. for i:= 1 to n do begin write ('Introduceti elementele de indice '. procedure afisare. function simetric: boolean. i:byte.init. d:=true. end. end.e-I else monoton:=O.if c then monoton:=1 else if d then rnonoton.max:real.

begin x. var i:integer.' if a[i]<m then m:=a[i]. begin writeln.efalse. var i: integer. var m:real.min:real. readln.simetric:boolean. x.afisare. writeln ('Maximul sirului este: '. if x. function sir. for i:=2 to n do if a[i]>m then m:=a[i].x.max). max.init. readln (tipordonare). procedure sir. min:=m. function sir. i:integer. begin m:=a[1]. writeln. if x. writeln('Sirul ordonat este: ').monoton=1 then writeln ('Sirul este crescator') else writeln ('Sirul nu este monoton'). for i:=1 to n do write (a[i]. x.min).monotone-I then writeln('Sirul este dscrescator') else if x. for i:=2 to n do . for i:=1 to n div 2 do if a[i)<>a[n-i+ 1] then simetric.ern. writeln ('Minimul sirului este: '.afisare. write ('Cum doriti sa ordonati sirul? Introduceti 1 pentru crescator si -1 pentru descrescator').. end. end. end. 185 .x.ordon(tipordonare). var x:sir. end. begin simetric:=true. ' '). tipordonare:integer.simetric then writeln ('Sirul este simetric') else writeln ('Sirul nu este simetrie').begin m:=a[1].

) if (c) return 1.h> II varianta c++ class sir { int n. double a[I00].end. cin»a[i]. double mint). void sir::initO {int i. int monotoni).d. for(i= 1. void afisare/). a[i]=a[i+1]. for(i=l . int simetricr). double aux.i++) {if (a[i]>a[i+1]) c=O.ordonat. } } int sir::monotonO {int c.i++) { cout«"introduceti elementul de indice"«i«":". Varianta C++ #include -cconio. } } while (ordonat==O). else return O. }. double rnaxt). else if (d) return -1.i. ) void sir::ordon(int tip_o) {int i. cout«"introduceti dimensiunea sirului". if (a[i]<a[i+ 1]) d=O. 186 .h> #include <iostream.i<=n-l .i<=n-l. for(i=I. cin»n. d=c=l.i++) if(tip_o*a[i]>tip_o*a[i+1]) {aux=a[i]. do { ordonat=l. a[i+ 1]=aux. public: void iniu). ordonat=O.i<=n. void ordon(int tip_o).

else if (x.. for (i=2.simetricr) { int i. } double sir.max()«"\n".} double sir. if (x. cout«"Cum doriti sa ordonati sirul? \nlntroduceti 1 pentru crescator si -1 pentru descrescator ". for(:î=2.i<=n.&im=O.i++ ) if (a[i]>m) meali]. int i. else cout«"\nsirul nu este simetric"«"\n". } int sir. else cout«"\nsirul nu este monoton\n".minO«"\n".monoton()==-1) cout«"\nsirul este descrescator"«"\n".i++) if(a[i] !=a[n-i+1]) .maxt) {double m.afisare().i<=n. cout«"\n". cin»tipordonare.i<=nJ2.monoton()==1) cout«"\nsirul este crescator"«"\n".i<=n. int tipordonare. cout«"maximul sirului este "«x. 187 . for(i=l . } void sir. cout«"sirul ordonat este"«"\n". x. return m.i++) cout«a[i]«" ". x.simetric()) cout«"\nsirul este simetric\n"...imim) {double m=a[l].iniu). return m. m=a[l].afisaret) {int i. x. if (x. } void mainO {sir x. cout«"minimul sirului este "«x. int i. return sim. cout«"\n". getcht).i++) if(a[i]<m) m=a[i]. for (i= 1.sim=1.ordon(tipordonare).

var j. var s:word.poz: byte ):longint. function num.suma. function num.init. function prim:boolean. put:longint. for i:=1 to poz-l do put:=put*lO.inserare(c. function num. type numeobject n:longint.prim:boolean. var i:byte. k. end. while m-o-Odo begin s:=s+m mod 10.word.ern div 10 end. end.m. m:longint.put:longint. m:=n.} 6. Varianta Pascal program numar. function num. suma:=s. end. end. begin 188 . end. gasit:boolean. function invers:longint. begin s:=O. inserare:=((n div put)*l0 +c)*put+n mod put.i:byte.poz: byte ):longint. constructor num. function suma:word. var i:longint. function eliminare(c:byte): longint. begin put:=l.eliminare(c:byte):longint. begin prim:=true. begin write('introduceti un numar de maxim 9 cifre'). m. for i:=2 to n div 2 do if n mod i = O then prim:=false. function inserare(c. readln(n). constructor init.

if m mod lO=c then begin gasit:=true.suma). repeat readln(c).a. writelnt'suma cifrelor numarului'. end. while k-o-O do begin m:=m*IO+k mod 10.inserare(c. writeln('numarul rezultat din eliminarea cifrei '.ek. repeat readln(c.'este '. var a:num. m:=mdiv 10.este prim').k:longint.n.a. until (c<=9) and(poz<=9). m:=O.n.a. eliminare. writeln/'inversul numarului " a. repeat gasit.' este " a. end.poz)).poz). m:=k.init.'in numarul'.'este '. function num. . i:=O. poz.poz:byte.invers: longint.invers). writelru'numarul rezultat in urma inserarii cifrei'. k:=n.c.a.n.k. c. end. end. var m.a. until not gasit.'este '.n. 189 . while m<>O do begin inc(i).efalse.' din numarul'. until c<=9. invers:=m. c. put:=l. writer'introduceti cifra si pozitia pe care vreti sa inserati'). writelnt'introduceti cifra pe care vreti s-a eliminati').prim then writelnţ'nr. end.. begin a.eliminare(c)). '#13#lOpe pozitia'. readln. forj:=l toi-Ido put:=put*] O. if a.- begin m:=O.a. end.n.a. if gasit then k:=(k div(put*)O))*put+k mod put.en. k:=k div 10.

long k. }. for (i= 1. int primt).int poz) {int i. ken. i=O. long m. public: void initr). return p.gasit. } long num: :eliminare(int c) {int j.int poz). while (m!=O) { s+=m% 10. int p=l. cin»n.h> #include <conio.m. } int num::sumaO {int s=O. long eliminare(int c).i++) put*=10.Varianta C++ #include <iostream. long inserare(int c.i<=n/2. do { gasit=O.i<=poz-l .h> //varianata c++ class num { public: long n.iniu) {cout«"\n"«"introduceti un numar de maxim 9 cifre". 190 . long put=l.put. } return s. m=rn/lO. } int num::primO {long i. return ((n/put)*1O+c)*put+n%put. for (i=2. m=k.i. int surna/). } long num::inserare(int c.i++) if (n%i==O) p=O. m=n. long inversr). void num: .

cout«"introduceti cifra si pozitia pe care vreti sa inserati ".j++) put*=lO.inserare(c.k=n. cout«"inversul numarului "«a. while (m!=O) { i++.n«" este" «a. if (gasit) k=(k/(put*lO»*put+k%put. k/=1O. cout «"numarul rezultat prin eliminarea cifrei "«c«"din numarul "«a.n«" este prim\n". getchr): } 7.poz)«"\n". 21.n«" este "«a. cout«"introduceti cifra pe care vreti s-o eliminati". while (k) {m=. } void maim) {num a. type utilizatorieobject 191 . 20. else cout«"\nnumarul "«a. } long num::inversO {long m=O. do cin»c»poz.poz. Varianta Pascal program internet.prim(» cout«"\nnumarul"«a. int c. return k. Numerele mari vor fi reprezentate cu ajutorul şirurilor. } return m.n«" este"«a. a. } while (gasit). m=O. while (c>9).inversO«"\n".j<=i-l . do cin»c. cout«"suma cifrelor este"«a. if (a.} put=l. Dintre toate se reţine cea cu valoarea maximă.inin). cout«"numarul rezultat in urma inserarii cifrei "«c«" \npe pozitia "«poz« "in numarul "«a.m*lO+k%lO. if(m%lO==c) {gasit=l.n«" nu este prim \n". Se va număra în şirul de relaţii toate relaţiile care au pe prima poziţie i. while ((c>9)&&(poz>9». for 0=1 . } m/=IO.sumaO«"\n".eliminare(c)«"\n".

readln end. end. x:real. var durata:real.plata(x:real):real. begin writer'introduceti numarul statiei'). begin a. repeat writer'introduceti ora deconectarii sub forma hh mm').ora-l )*60.min)+orad. var a:utilizatori.init. function plata(x:real):real.h> II varianta c++ class utilizatori { public: int ncst.init. writer'introduceti costul unei ore').orad:record ora.ora)or(arad. constructor init. writer'introduceti ora conectarii sub forma hh mm').ora)and (orad.ora then durata. readIn( orad. function utilizatori. plata:=durata*x/60.min:byte. end. begin if orad.} orac.a.min. oraeorac.orad.' este: '.oraeorac. orac.plata(x): 10:2).min>orac.ora.a. end. until (orad.word.h> #include <iostream. void iniu): double plata(double x). readln(orac. end.ora.eorad. struct o{ int ora.orac.ora>orac.rnin else durata:=(60-orac. nr st. writer'suma de plata la statia '.ora-orac.min+ (orad.min). readlnmrjst).min). constructor utilizatori.orad. 192 .min). readIn(x).min-orac.ncst. Varianta C++ #include <conio.

cout«"\n"«"introduceti ora conectarii sub forma hh mm". ora )&&( orad.ora»orac.min. cin»orac. do {cout«"\n"«"introduceti ora deconectarii sub forma hh mm".plata(x)«"\n". 193 . a.ora) durataeorad.min.inin).ncst«"este "«a.ora>orac . min)). if (orad. ciroc-nrjst. void utilizatori::initO { cout«" introduceti numarul statiei ".ora)II(orad. cout«"\n"«"suma de plata la statia "«a. } while (! (orad. double x.mire-orac.ora-orac. } void maini) {utilizatori a. Câştigătorul este cel cu gradul interior cel mai mare. cin»x. getcht).j) indică faptul că în competiţia lui i cu j a câştigat j.ora-I )*60.ora==orac. cout«"\n"«"introduceti costul unei ore ". ora==orac. Într-un graf turneu arcul (i. return durata*xJ60. cin»orad.min.ora»orad. } 30. else durata=(60-orac. }.min+(orad.min)+orad..min-orac. } double utilizatori::plata(double x) {double durata.

Manual de informatică-clasa a X-a. Pavel Florin Moraru. Ioana Cucu. 11. Mona Prună. Bazele informaticii (Grafuri şi elemente de combinatorică). Liviu Negrescu. 2002. Editura L&S Infomat. George Daniel Mateescu. 5. manual pentru clasa a XI-a. 2000. Aria curriculară Tehnologii. 1999. Bucureşti. Editura PRO GNOSIS. 7. Ministerul Educaţiei şi Cercetării . Mihai Oltean. 3. varianta Pascal. Tudor Sorin. Editura L&S Infomat. Editura Computer Libris Agora. Editura Agora. Editura Computer Libris Agora. George Daniel Mateescu. Gabriela Bălan. Emil Onea. 2000.Programe şcolare. BIBLIOGRAFIE 1. Editura Niculescu. 9. manual pentru clasa a X-a. Doina Rancea. Pavel Florin Moraru. Diana Gruiţă. Editura L&S Infomat. 6. 2. Dana Lica. Tudor Sorin. Editura Petrion. Proiectarea şi implementarea algoritmilor. Tudor Sorin. vo1. Cornelia Ivaşc. 1999. varianta C++. 1995. Limbajul C. 4. 10. 2000. Manual de informatică-clasa a IX-a. Manual de informatică-clasa a IX-a. Editura Petrion. 2000. 8. 2001. Otilia Sofron. Manual de informatică-clasa a IX-a. Manual de informatică-clasa a X-a. Informatică. Bazele programării în C++.6. 194 .

Din păcate. iar în partea a doua indicaţii de rezolvare şi soluţii pentru probfămele mai importante. Această îmbinare fericită face ca lucrarea să. dr. însuşirea acestei discipline presupune un mare număr de ore de practică în care să se formeze deprinderile de programator. presupune rezolvarea unui mare număr de probleme. subprograme. ca şi aplicarea corectă a tehnologiilor şi modelelor actuale legate de programare.şi atingă pe deplin scopul propus. programare orientată pe obiecte. care nu trebuie să lipsească de pe masa celor care doresc să-şi însuşească această fermecătoare meserie-programator de calculatoare. alocare dinamică. In prima parte se găsesc probleme propuse. Cartea cuprinde de două ori câte nouă capitole: structuri de control. tehnici de programare. ca şi în sprijinul celorlalte discipline din liceu au apărut şi apar mereu manuale alternative. grafuri. sau poate din fericire. Conţinutul cărţii reflectă pe de o parte bogata experienţă didactică a acelora dintre autori care sunt profesori. fişiere text. Trebuie remarcată marea varietate de probleme propuse şi bogăţia de stiluri şi de clase de probleme. Specialitatea "informatică" este una dintre cele mai solicitate în actualul context socio-economic. liste alocate static. In sprijinul ei. De asemenea trebuie remarcată originalitatea soluţiilor pe care autorii le sugerează pentru rezolvări. tipuri de date structurate. iar pe de altă parte aduc suflul nou şi prospeţimeatinereţii pentru acei dintre autori care sunt încă elevi sau studenţi. ' Autorii prezentei cărţi îşi propun ca obiectiv atingerea tocmai a acestui deziderat.univ. FlorianMirceaBoian ISBN 973-8335-75-2 . Prof. Practic tot ceea ce prevede actuala programă analitică pentru clasele de informatică din licee. Suntem astfel în faţa unei lucrări remarcabile. Arta programării.