Documente Academic
Documente Profesional
Documente Cultură
ro
Exerciţii programare
Structuri de control
1. Structuri Simple
1.1. De atribuire / 1.2. De intrare / 1.3. De ieşire / 1.4. Condiţia (întrebarea, testul)
Is1 - Metoda paharelor. Să se interschimbe conţinutul a două variabile a şi b.
Is2 - Se dă temperatura în grade Celsius, să se afişeze în grade Farenheit. F = (C+32) * 1,8.
Is3 - Se dau lungimea şi lăţimea, să se calculeze aria şi perimetrul dreptunghiului.
2. Structuri Decizionale
2.1. Alternativa
2.2. De selecţie
Ids1 - Se citeşte de la un număr, în funcţie de el să se afişeze luna corespunzătoare (1=ianuarie, 2=februarie etc)
Ids2 - Se citeşte de la un număr, în funcţie de el să se afişeze ziua corespunzătoare (1=luni, 2=marţi etc)
Ids3 - Se citeşte de la tastatură o notă, în funcţie de ea să se afişeze un calificativ (FBine / Bine / Mediu / Slab / FSlab)
3. Structuri Repetitive
3.1. Cu test iniţial 3.2. Cu test final 3.3. Cu contor
-1-
www.compendium.ro
Exerciţii cu un număr
N15 - Să se afle cmmdc a două numere a şi b (Algoritmul lui Nicomede. Algoritmul lui Euclid)
N16 - Să se afişeze dacă a şi b sunt prime între ele
N17 - Să se afle cmmmc a două numere a şi b
N21 - Să se verifice dacă un număr real are cifre după virgulă şi să se afişeze partea zecimală
N22 - Să se verifice dacă un număr este pătrat perfect
N23 - Să se determine cel mai mare pătrat perfect mai mic decât x
-2-
www.compendium.ro
Alte exerciţii
Na1 - Să se verifice dacă numărul are cifrele ordonate crescător (exem: 1459; verificare pt 1859)
Na2 - Să se afişeze de căte ori apare cifra k în număr
Na3 - Să se elimine cifrele impare din număr
Na4 - Să se afişeze dacă numărul conţine numai cifre pare
Na5 - Să se afişeze dacă numărul conţine numai cifre identice
Na6 - Să se calculeze ∑ k*(k+1)
Na7 - Să se calculeze 1+x+x2+x3+...+xn
Na8 - Să se calculeze suma armonică (exem: pentru 1859, suma este 1*9 + 2*5 + 3*8 + 4*1)
Na9 - Să se calculeze cifra de control a lui x (suma sumei cifrelor până când rămâne o singură cifră)
(Numarul destinului: suma cifrelor care formează data de naştere, până când rămâne o singură cifră)
Se citeşte de la tastatură un număr întreg x. Să se verifice dacă x este
superprim - daca el este prim si toate prefixele sale sunt de asemeni prime (de exemplu: 313, 2339)
aproape prim - este produs de două numere prime
perfect - suma divizorilor săi (exceptând numărul însuşi) este egală cu numărul dat
supraperfect - suma divizorilor săi (exceptând numărul însuşi) este mai mare decât numărul dat
imperfect - suma divizorilor săi (exceptând numărul însuşi) este mai mică decât numărul dat
Să se verifice dacă două numere sunt în echer (au acelaşi număr de cifre, iar suma cifrelor de pe aceeaşi poziţie este 9).
-3-
www.compendium.ro
Vectori
V12 - Să se afle maximul şi minimul elementelor (şi poziţia unde se găseşte acesta)
V13 - Să se afişeze toate poziţiile unde se găseşte maximul
V14 - Să se afişeze prima poziţie unde se găseşte maximul
V15 - Să se afişeze ultima poziţie unde se găseşte maximul
V16 - Să se afişeze primele 3 poziţii unde se găseşte maximul
V17 - Să se afişeze a doua poziţie unde se găseşte maximul
V18 - Să se afle maximul şi minimul elementelor pare/impare
Vectorul frecvenţelor
VFr1 - Se dă un număr, să se păstreze într-un vector de câte ori apare fiecare cifră (exem: 738753)
VFr2 - Să se afişeze cel mai mare număr format din cifrele numărului luate o singură dată (8753)
VFr3 - Să se afişeze cel mai mare număr format din cifrele numărului luate de câte ori apar (877533)
VFr4 - Să se afişeze cel mai mic număr format din cifrele numărului luate o singură dată (3578)
VFr5 - Să se afişeze cel mai mic număr format din cifrele numărului luate de câte ori apar (335778)
Verificare pentru 27052600
-4-
www.compendium.ro
Metode de ordonare
VO-1 - Metoda prin interschimbare (SimpleSort)
VO-2 - Metoda bulelor (BubbleSort)
VO-3 - Metoda prin aflare minim (SelectionSort)
VO-4 - Indexare (CountSort) (Intr-un alt vector pe poziţie corespunzatoare se stochează numărul de elemente mai mici
decât cel curent. Exemplu: Dacă V=(7,4,9,2,6), vectorul Z=(3,1,4,0,2) (deoarece 7 mai mare decât trei elem din V))
VO-5 - Metoda prin insertie (InsertionSort) (Să se citească de la tastatură elementele vectorului şi să se introducă în vector
pe poziţia necesară a.i. vectorul să fie ordonat după citirea fiecarui nou element.)
VO-6 - Metoda rapida (QuickSort)
Exerciţii ordonare
VO-7 - Să se ordoneze elementele din vector după ultima cifră a fiecarui element
VO-8 - Să se ordoneze elementele din vector după prima cifră a fiecarui element
VO-9 - Să se ordoneze elementele pare din vector, cele impare ramanand neschimbate
VO-10 - Să se numere câte [comparatii / interschimbari] se execută la [ metoda prin interschimbare / metoda bulelor ]
VO-11 - Să se afişeze numărul maxim de comparatii care se execută la [ metoda prin interschimbare / metoda bulelor ]
Exerciţii diverse
VB1 - Să se afişeze elementele din vector care apar o singură dată
VB2 - Să se afişeze elementele din vector care apar de două ori
VB3 - Să se afişeze cele mai mari două valori
VB4 - Să se afişeze cea mai mare valoare care se repetă
VB5 - Să se afle cmmdc al elementelor vectorului
-5-
www.compendium.ro
Lucru cu 2 vectori
Se dau doi vectori (a şi b) de dimensiune n.
VD1 - Să se creeze un alt vector care să conţină suma elementelor pe linie a celor doi vectori (c[i]=a[i]+b[i])
VD2 - Să se calculeze produsul cartezian al celor doi vectori (c[i]=a[i]*b[i])
VD3 - Să se calculeze produsul scalar al celor doi vectori: <a,b>=suma(a[i]*b[i])
(Norma calculată în funcţie de produsul scalar: ||v||=sqrt(<v,v>) )
VD4 - Să se afişeze dacă cei doi vectori sunt ortogonali (adică produsul lor scalar este zero)
Matrici
Ma1 - Să se citească de la tastatură o matrice cu m linii şi n coloane, m şi n citite tot de la tastatură
Ma2 - Să se afişeze matricea (trecând pe randul urmator după fiecare linie afisata)
Ma3 - Să se afişeze elementele matricei facându-se parcurgere pe linie, pornind din fiecare colt al matricei
Ma4 - Să se afişeze elementele matricei facându-se parcurgere pe coloană, pornind din fiecare colt al matricei
Mb1 - Să se calculeze suma elementelor de pe diagonala principală (urma unei matrici pătratice)
Mb2 - Să se calculeze suma elementelor de pe diagonala secundară
MT5 - Să se calculeze suma elementelor din matrice, mai puţin triunghiul inferior diagonalelor
MT6 - Să se calculeze suma elementelor benzii diagonal principală de rază 2 a matricei
MD1 - Să se afişeze liniile/coloanele care au toate elementele numere pare / impare / prime / pătrate perfecte
MD2 - Să se ordoneze elementele de pe diagonala principală / secundară
MD3 - Să se calculeze produsul cartezian între linia i şi coloana i şi rezultatul să se stocheze într-un vector
MD4 - Să se afişeze dacă vreun element de pe diagonala principală este mai mare decât suma celorlalte elemente din linie
MD5 - Să se afişeze dacă fiecare element de pe diagonala principală este mai mare decât suma celorlalte elemente din linie
MD6 - Se dă o matrice pătratică, să se afişeze dacă e un pătrat magic. (Suma pe fiecare linie este egală cu suma pe fiecare
coloană şi cu suma pe fiecare diagonală)
MD7 - Să se afişeze maximul minimelor liniilor
Matrici rare
MR1 - Să se calculeze gradul de umplere al unei matrici
MR2 - Să se convertească o matrice în format de memorare cu trei vectori
MR3 - Să se convertească matrice rară memorată în trei vectori într-o matrice normală. Se dau dimensiunile matricei.
MR4 - Să se afişeze o matrice rară memorată în vectori
MR5 - Să se transpună o matrice rară
-7-
www.compendium.ro
MR6 - Să se adune două matrici rare
MR7 - Să se normalizeze o matrice rară (eliminarea elementelor nule din vectorul de valori)
Matricea de permutare - are un singur 1 pe fiecare linie şi pe fiecare coloană, în rest, valori nule. Se stochează în vectori
index_linii sau index_coloane.
Matricea triunghiulară - are elemente nenule pe şi deasupra diagonalei principale şi nule dedesupt.
Se dă o matrice şi un vector
MV1 - Să se treacă elementele de pe linia k într-un vector
MV2 - Primele n*n elemente din vector (care are t elemente) să se treacă într-o matrice pătratică
MV3 - Să se calculeze produsul dintre matrice şi vector
MV4 - Să se determine dacă fiecare linie a unei matrici este proportională sau nu cu un vector
MV5 - Să se determine liniile pentru care produsul elementelor este mai mic decât produsul elementelor vectorului obtinut
prin reducerea dimensiunii vectorului dat la indicii liniilor
S5 - Să se afişeze de câte ori apare în şir caracterul ‘a’ / un caracter citit de la tastatură
S6 - Să se afişeze câte majuscule / litere mici / cifre conţine şirul
S7 - Să se afişeze câte cuvinte conţine şirul
S8 - Să se transforme în majusculă fiecare primă literă a unui cuvant
S9 - Să se afişeze câte lungimile cuvintelor din şir
S10 - Să se afişeze cuvintele din şir
S11 - *** Să se salveze cuvintele din şir într-un vector de şiruri
S17 - *** - Să se citească de la tastatură caractere şi, într-un vector, să se stocheze primele p paranteze drepte citite. Să se
verifice dacă şirul este corect, adică:
1/ numărul de paranteze deschise este egal cu numărul de paranteze închise;
2/ orice paranteză închisă are în stânga ei un număr mai mare de paranteze deschise decât închise.
Să se afişeze câţi muguri sunt în vector (un mugur e o paranteză deschisă urmată de una închisă). Să se afişeze şirul cu o
culoare, iar mugurii să fie afişaţi cu altă culoare.
-8-
www.compendium.ro
A5 - Să se realizeze o structură de tip elev, conţinând câmpurile: numar_matricol, nume, prenume, data_nastere, ultimul
câmp fiind declarat ca o structură separată având câmpurile zi, luna, an.
A6 - Să se declare un vector v de 10 elemente de tip elev şi să se citească şi să afişeze valorile din primul element.
Să se afişeze primul caracter din numele celui de al doilea elev.
Să se afişeze primul caracter al fiecărui nume din vectorul de elevi.
A7 - Să se realizeze o structură de tip student, conţinând câmpurile: numar_matricol, nume, prenume, notele la 20 de
materii şi să se afişeze nota la a doua materie.
A8 - Să se realizeze o structură prin care se pot crea trei variabile care să rezolve soluţia pentru c.x=a.x+b.x; c.y=a.y+b.y;
Fişiere
Fişiere text
F1 - Un fişier text conţine mai multe numere. Să se citească numerele din fişier şi să se afişeze suma şi media lor.
F2 - Un fişier text conţine pe prima linie valoarea n, iar pe a doua linie n numere. Să se citească numerele şi să se scrie
ordonate crescător în alt fişier.
Fişiere cu tip
FT1 - Se dă un vector de tip persoană, să se ordoneze după nume
FT2 - Să se realizeze un program de gestiune [a unei agende telefonice / al unui top muzical / al unor facturi]
Operaţii de bază: Introducere / Afişare / Modificare / Ştergere / Căutare
Recursivitate
R1 - Se citeşte de la tastatură un număr (n). Să se calculeze n factorial.
R2 - Să se calculeze aranjamente de n luate câte k, A(n,k)
R3 - Să se calculeze combinări de n luate câte k, C(n,k)
R4 - Să se calculeze combinări de n luate câte k după relaţiile: C(n,k) = ((n-k+1)/k) * C(n,k-1) şi C(n,0)=1
-9-
www.compendium.ro
C(n,k) = n! / ( k! * (n-k)! ) C(3,2) = ab, ac, bc
A(n,k) = n! / (n-k)! A(3,2) = ab, ba, ac, ca, bc, cb
P(n) = n! P(3) = abc, acb, bac, bca, cab, cba
R6 - Să se calculeze 1+2+3+4+5...+n
R7 - Să se calculeze 1-2+3-4+5...+n
Algoritmi
Divide et impera ("D&i")
D1 - Se dă un vector v şi un număr x, să se afişeze dacă x există sau nu în vector folosind căutarea binară (spargere în
două a vectorului ordonat)
D2 - Se dă un vector, să se afle maximul sau folosind algoritmul "D&i" (aflare maxim pt.fiecare jumătate, apoi pt.fiecare
jumătate din jumătate, şamd)
Backtracking
B1 - Se dă un număr x, să se afişeze P(x) = permutari de x (Exemplu pt. x=3: 123, 132, 213, 231, 312, 321)
B2 - Se dau n şi k, să se afişeze combinari de n luate câte k
B3 - Se dau n şi k, să se afişeze aranjamente de n luate câte k
B4 - Se dau valorile monedelor, se dă o sumă, să se afişeze varianta de plată a sumei în numărul minim de monede
B5 - Problema damelor: Să se aşeze n dame pe o tablă de şah de dimensiune n*n fără ca acestea să se atace între ele
B6 - Problema sariturii calului: Să se afişeze poziţiile pe care poate sări un cal pe o tablă de sah de dimensiune n*n astfel
încât să sară o singură dată pe toate pătrăţelele
B7 - Problema colorării hărţilor
B8 - Problema canibalilor şi a misionarilor
Greedy
G1 - Problema cu utilitatea economică
G2 - Problema continuă a rucsacului
G3 - Problema discretă a rucsacului
G4 - Se dau distanţele intermediare între benzinăriile dintre două localitaţi, se ştie capacitatea rezervorului maşinii şi
consumul ei la suta de km. Să se stabilească drumul cu cele mai puţine opriri pentru alimentare.
- 10 -
www.compendium.ro
Liste
Inserări
Li1 - Se dă o listă, să se insereze un nod la sfârşitul ei
Li2 - Să se insereze un nod într-o listă simplu-înlănţuită într-o poziţie introdusă de la tastatură
Li3 - Să se creeze dinamic o listă dublu-înlănţuită (se citesc numere până se introduce valoarea 0)
Li4 - Să se insereze 0 după fiecare număr par
Ştergeri
LS1 - Să se şteargă dintr-o listă simplu-înlănţuită nodul de pe poziţia k
LS2 - Să se şteargă primul element dintr-o lsi (funcţia să returneze adresa actualului prim element)
LS3 - Să se şteargă toate elementele pare dintr-o lsi
LS4 - Să se şteargă elementele pare de la începutul unei lsi, până se întalneşte un număr impar
Alte exerciţii
LA1 - Să se ordoneze o lsi / o ldi
- 11 -
www.compendium.ro
Grafuri
Gi1 - Se dau de la tastatură numărul de noduri şi arcele, să se stocheze graful într-o matrice de adiacenţă
Se dau de la tastatură numărul de noduri, numărul de arce şi arcele
Gi2 - Să se stocheze graful într-o matricea de adiacenţă
Gi3 - Să se stocheze graful în liste de adiacenţă
Gi4 - Să se stocheze graful într-un fişier text
Se dau cele trei forme de stocare ale unui graf (matrice de adiacenţă, liste de adiacenţă, fişier text)
Gi5 - Se dă fişierul text, să se creeze matricea de adiacenţă
Gi6 - Se dă matricea de adiacenţă, să se creeze fişierul text
Gi7 - Se dă matricea de adiacenţă, să se creeze listele de adiacenţă
Gi8 - Se dă fişierul text, să se creeze listele de adiacenţă
Gi9 - Se dau listele de adiacenţă, să se creeze matricea de adiacenţă
Gi10 - Se dau listele de adiacenţă, să se creeze fişierul text
- 12 -
www.compendium.ro
Arbori
(def: graf conex şi fără cicluri)
- Noţiuni: câte muchii are, taţi, descendenţi direcţi (fii), descendenţi, rădăcină, frunze, înălţime,
pădure (un graf în care fiecare componentă conexă a sa este arbore)
- Metode de reprezentare: vectorul “tată”
- Ordinul sau gradul arborelui este valoarea maximă luată de gradul unui nod al arborelui.
Arbori binari
(def: arbore în care fiecare nod are maxim doi fii)
- Metode de reprezentare: vectorii “stânga” şi “dreapta”
- Parcurgera arborilor binari: svd (inordine), sdv (postordine), vsd (preordine - în adâncime)
Arbore binar de căutare
Arbore ternar, arbore n-nar
Clase şi obiecte
- metode (=variabile), proprietăţi (=funcţii)
- constructor, destructor
- încapsularea (public, privat, protected - funcţii set şi get), polimorfismul (exem: arie, perimetru, volum), moştenirea
(exem: persoana - student, maşină - tir, număr real - număr complex)
- static (exem: număr obiecte din clasa persoane), abstract, virtual, override (supraîncărcare)
- 13 -
www.compendium.ro
START
gasit = false
i=1
NU DA
i <= n
NU gasit = DA NU DA
true x = v[i]
STOP
i = i+1
- 14 -