Documente Academic
Documente Profesional
Documente Cultură
la practica de specialitate I
Scopul:
consolidarea cunoștințelor acumulate în procesul de instruire teoretică, precum și
utilizarea lor în practică, pregătirea specialiștilor calificați, gata să țină piept concurenței pe piața
forței de muncă.
Competențe specifice
CS1. Aplicarea metodelor de algoritmizare, de formalizare, de analiză, de sinteză și de
programare pentru soluționarea problemelor legate de prelucrarea automatizată a informației.
CS2. Translarea algoritmilor frecvent utilizați într-un limbaj de programare (Pascal, C++).
CS3. Formarea deprinderilor de interacțiune interpersonală și de lucru în grup;
În conformitate cu planul de învățământ, durata practicii este de 90 ore (12 zile, ultima zi
destinată susținerii practicii) și se finalizează cu prezentarea și susținerea portofoliului de
practică. Portofoliu (anexa) este evaluat și notat după sistemul general de evaluare (1 - 10) de
conducătorul practicii.
Cerințe:
se va studia, în detaliu, problema propusă de coordonatorul practicii și se va realiza un
program (în limbajul C++ și/sau Pascal) pentru aceasta problemă, punându-se accent pe
interfața cu utilizatorul (ferestre, meniuri, help etc.);
se va realiza un program care, în funcție de specificul unității, să realizeze controlul unui
proces sau gestiunea unei baze de date(de dimensiuni reduse);
fișierul sursă al programului împreună cu un set de date de test se vor salva pentru a fi
prezentate la susținerea practicii.
în portofoliu de practică se vor descrie: problema studiată, varianta de rezolvare (eventual
descrierea programelor existente), cerințele generale ale programului (necesarul de
memorie și timp) și documentațiile de utilizare;
Practica se va finaliza cu prezentarea unui raport asupra practicii și cu o demonstrație pe
calculator a produsului soft elaborat.
Fiecare student va întocmi agenda de practică tehnologică care va consemna:
numele și prenumele, anul de studii;
locul de desfășurare al practicii și perioada;
activitatea desfășurată în fiecare zi de practică, reieșind din sarcinile prevăzute în programa
analitică;
Conținuturi
Nr. Unități de conținut Nr. de ore
Introducere. Familiarizarea cu sarcina individuală de lucru în procesul
1 4
practicii de inițiere.
2 Elemente de programare modulară în limbajele: Pascal și C/C++. 12
Aplicații ale tehnicilor de programare utilizate în procesul de studiu în
3 24
baza limbajelor: Pascal și C++.
4 Elemente de programare orientată pe obiecte în baza limbajului C++ 24
5 Formarea deprinderilor de lucru în echipe. 16
6 Prezentarea raportului pentru practică 10
Total 90
Fișiere
1) Fișierul date.in conține 3 valori separate printr-un singur spațiu, care reprezintă vârsta,
înălțimea și genul unei persoane. Să se scrie un program care determină greutatea ideală a
unei persoane cunoscând înălțimea, vârsta și genul persoanei (f sau m). Formulele de calcul
sunt:
22) În fișierul date.in sunt scrise mai multe cuvinte, fiecare cuvânt este separat printr-un singur
spațiu. Elaborați un program prin intermediul căruia se va afișa la ecran conținutul
fișierului, cel mai lung cuvânt și cel mai scurt cuvânt.
23) Să se creeze un fișier care va conține informații (denumirea și prețul) la o listă de produse
alimentare.
a) Să se afișeze denumirea produselor cu cel mai mic preț;
b) Fiind dat un preț, să se afișeze denumirile produselor cu acest preț;
c) Să se afișeze lista produselor în ordinea lexicografică a denumirii lor;
d) Să se afișeze lista produselor în ordinea descrescătoare a prețurilor;
e) Să se păstreze lista ordonată în c) într-un alt fișier;
f) Să se insereze în fișierul creat în e) un nou produs dat respectând ordinea.
24) Să se creeze un fișier care va conține informații (numele, prenumele, anul nașterii, salariul,
sexul) despre angajații unei întreprinderi.
a) Să se afișeze lista angajaților de sex feminin;
b) Să se calculeze salariul mediu al unui angajat;
c) Să se afișeze lista persoanelor cu salariul mai mic decât cel mediu;
d) Fiind date numele și prenumele unui angajat, să se afișeze toată informația despre acest
angajat;
e) Să se păstreze în alt fișier conținutul fișierului original, în ordinea lexicografică a
numelui, prenumelui;
f) Să se creeze în fișierul creat în e) un nou angajat respectând ordinea.
25) Se dă un fișier text în care fiecare rând reprezintă 2 numere naturale separate printr-un
spațiu. Să se creeze un alt fișier, ce inserează între cele 2 numere ale fiecărui rând media
aritmetică a acestor numere.
Exemplu: Fișierul de intrare:
28 24
10 15
4 71
Fișierul de ieșire:
28 26 24
10 12,5 15
4 37,5 71
26) Se dă un fișier text în care fiecare rând conține cel mult 255 de caractere. Să se construiască
un alt fișier, care nu va conține rândurile de lungime maximală ale primului fișier.
27) Se dă un fișier text în care fiecare rând conține cel mult 255 de caractere. Să se afișeze
cuvântul (eventual cuvintele) care se repetă de cele mai multe ori.
28) a) Se dă un fișier text în care fiecare rând conține cel mult 255 de caractere și care reprezintă
un șir de numere naturale separate printr-un spațiu. Să se afișeze pentru fiecare rând textul
”DA” sau ”NU”, în funcție de faptul dacă șirul este sau nu ordonat crescător.
b) Se dă un fișier text în care fiecare rând conține cel mult 255 de caractere și care reprezintă
un șir de numere naturale separate printr-un spațiu. Să se afișeze pentru fiecare rând textul
”DA” sau ”NU”, în funcție de faptul dacă șirul este sau nu ordonat descrescător.
Subprograme
a) Numărul de cifre;
b) Numărul de cifre pare;
c) Numărul de cifre impare;
d) Suma cifrelor;
e) Cifra maximă;
f) Cifra minimă;
g) Media aritmetică a cifrelor;
h) Cifrele care se repetă de cel puțin două ori;
i) Cifrele numărului separate printr-un sigur spațiu;
j) Divizorii numărului;
k) Inversul numărului;
l) Mesajul ”PRIM”, dacă numărul este număr prim;
m) Cel mai mare număr posibil creat din aceste cifre.
7) De la tastatură se citesc două numere întregi. Elaborați un program cu funcții prin
intermediul căruia se va determina:
a) Suma numerelor;
b) Produsul numerelor;
c) Media aritmetică a numerelor;
d) Cel mai mare divizor comun;
e) Cel mai mic multiplu comun;
f) Numărul minim;
g) Numărul maxim;
h) Suma numerelor în formatul a+b=c, dacă a și b reprezintă numerele citite;
i) Produsul numerelor în formatul a*b=c, dacă a și b reprezintă numerele citite;
j) Toți divizorii comuni;
k) Cinci multipli comuni;
l) Cifrele care se conțin în ambele numere;
m) Cifrele care sunt în primul număr și nu sunt în al doilea număr;
n) Va afișa mesajul ”PRIETENE”, dacă numerele sunt prietene. Două numere se numesc
prietene, dacă numărul de divizori este același.
8) De la tastatură se citesc trei numere întregi. Elaborați un program cu funcții prin
intermediul căruia:
a) Suma numerelor;
b) Produsul numerelor;
c) Media aritmetică a numerelor;
d) Cel mai mare divizor comun;
e) Cel mai mic multiplu comun;
f) Numărul minim;
g) Numărul maxim.
10) Se consideră tipul de date timp (ora:min:sec). Elaborați un program prin intermediul căruia
se va crea câte o procedură pentru:
corespunzătoare laturii a.
16) Să se descrie o funcție care va returna valoarea true, dacă numărul natural dat este prim,
altfel – valoarea false. Utilizând funcția de mai sus, să se afișeze toți divizorii primi ai
numărului natural dat n.
17) Se dă un vector cu n (1<n<100) componente numere întregi. Să se afle:
a) cel mai mare divizor comun (CMMDC) al componentelor vectorului.
Indicație: CMMDC(𝑎1 , 𝑎2 , … , 𝑎𝑛 )=CMMDC(𝑎𝑛 , 𝐶𝑀𝑀𝐷𝐶(𝑎1 , 𝑎2 , … , 𝑎𝑛−1 ))
b) cel mai mic multiplu comun (CMMMC) al componentelor vectorului.
Indicație: CMMMC(𝑎1 , 𝑎2 , … , 𝑎𝑛 )=CMMMC𝑎𝑛 , 𝐶𝑀𝑀𝑀𝐶(𝑎1 , 𝑎2 , … , 𝑎𝑛−1 )
18) Să se definească o funcție care determină dacă un număr natural dat este pătrat perfect.
Utilizând această funcție, să se determine care dintre componentele unui vector dat de
numere naturale sunt pătrate perfecte.
19) Să se definească un subprogram care va efectua:
a) adunarea a două fracții;
b) înmulțirea a două fracții;
c) simplificarea unei fracții până la o fracție ireductibilă;
d) compararea a două fracții.
20) Să se definească un subprogram care va:
a) aduna două numere complexe;
b) înmulți două numere complexe;
c) împărți două numere complexe;
d) calcula modulul unui număr complex;
e) ridica la putere un număr complex.
21) Să se definească un subprogram care va:
a) aduna două matrice pătrate;
b) înmulți două matrice pătrate;
c) calcula transpusa unei matrice pătrate;
d) calcula inversa unei matrice pătrate.
22) Să se definească un subprogram care va:
a) aduna măsurile a două unghiuri (exprimate în grade, minute, secunde);
b) scădea măsurile a două unghiuri;
c) înmulți măsura unui unghi cu un număr natural;
d) împărți cu rest măsurile a două unghiuri;
e) compara măsurile a două unghiuri.
23) Să se definească un subprogram care va:
a) aduna două intervale de timp (exprimate în secunde, minute, ore, zile, săptămâni);
b) scădea două intervale de timp;
c) înmulți un interval de timp cu un număr natural;
d) împărți cu rest două intervale de timp;
e) compara două intervale de timp.
24) Să se definească un subprogram care va.
a) aduna o dată calendaristică (o dată calendaristică este exprimată de un triplet de forma
(zi, luna, an)) cu un număr de zile, rezultatul fiind o dată calendaristică;
b) aduna o dată calendaristică cu un număr de luni, rezultatul fiind o dată calendaristică;
c) scădea dintr-o dată calendaristică un număr de zile, rezultatul fiind o dată
calendaristică;
d) scădea dintr-o dată calendaristică un număr de luni, rezultatul fiind o dată
calendaristică;
e) scădea două date calendaristice, rezultatul fiind numărul de zile dintre aceste date.
25)
a) Să se scrie o funcție care va efectua adunarea a două numere naturale, al cărei rezultat
poate avea până la 255 de cifre.
b) Utilizând funcția din a), să se realizeze un program pentru înmulțirea unui număr
natural cu un număr mai mic decât 100, al cărei rezultat poate avea până la 255 de cifre.
26) Să se descrie o funcție care va efectua înmulțirea a două numere naturale, fiecare conținând
până la 100 de cifre.
27) Să se descrie o funcție care va efectua împărțirea (exactă sau cu rest) a unui număr ce
conține până la 255 de cifre la un număr mai mic decât 1000.
28) Să se efectueze adunarea, scăderea și înmulțirea a două numere date într-o bază dată,
diferită de 10. Rezultatul se va afișa în aceeași bază.
Indicație. Se pot utiliza două funcții: una pentru conversia în sistemul zecimal, alta – din
sistemul zecimal.
29) Se dă numărul natural n. Să se determine al n-lea termen din șirul Fibonacci:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
De exemplu, pentru n = 8 se va afișa 21.
30) Să se definească un program care va calcula derivata unui polinom de o nedeterminată.
Pentru reprezentarea polinomului să se utilizeze tipul string.
Exemplu: ‘3*x^4-12*x^3+125*x-39’ reprezintă polinomul 3𝑋 4 − 12𝑋 3 + 125𝑋 − 39.
31) Ipotezele lui Goldbach.
a) Să se reprezinte fiecare număr par mai mare sau egal cu 6 și mai mic decât 1000 ca
sumă a două numere prime impare.
Exemplu: 100 = 97 + 3 = 89 + 11 = 71 + 29 = ...
b) Să se reprezinte fiecare număr natural mai mare decât 1 și mai mic decât 1000 ca sumă
a cel mult trei numere prime.
32) Să se descrie o funcție care va efectua împărțirea cu rest a două numere naturale, fiecare
fiind compus din cel mult 255 de cifre.
33) Formulele lui Ramanujan.
Să se calculeze:
Să se compare rezultatul cu 3.
√
b) 8 − √8 + √8 − √8 − √8 + √8 − ⋯, unde semnele rădăcinilor se repetă în grup
34) Se dau numerele naturale b și n, unde 1<b<10. Să se definească un subprogram care va:
a) verifica dacă un număr dat este scris corect în sistemul de numerație cu baza b;
b) aduna două numere scrise în sistemul de numerație cu baza b;
c) scădea două numere scrise în sistemul de numerație cu baza b;
d) înmulți două numere scrise în sistemul de numerație cu baza b;
e) împărți două numere scrise în sistemul de numerație cu baza b;
f) transforma un număr din sistemul de numerație cu baza b în sistemul zecimal de
numerație;
g) transforma un număr din sistemul zecimal de numerație în sistemul de numerație cu
baza b.
35) Problema lui Fermat. Să se găsească un număr, astfel încât suma cubului numărului și
divizorilor proprii ai numărului să fie pătrat perfect.
36) Se dau coordonatele a n (3<n<50) puncte din plan. Definind o funcție care determină dacă
3 puncte sunt sau nu coliniare, să se determine dacă fiecare 3 din cele n puncte sunt
necoliniare.
37) Se consideră un tablou unidimensional. Elaborați un program cu funcții/proceduri prin
intermediul cărora:
a) De la tastatură se vor citi elementele tabloului;
b) Se vor afișa elementele tabloului la ecran;
c) Se vor sorta elementele crescător;
d) Se vor inversa elementele tabloului;
e) Va fi determinat elementul maximal;
f) Va fi determinat elementul minimal;
g) Se va determina numărul de elemente maximale;
h) Se va determina numărul de elemente minimale.
38) Se consideră două tablouri cu numere întregi, a și b. Elaborați un program utilizarea
funcțiilor/procedurilor prin intermediul cărora:
a) De la tastatură se citesc elementele tablourilor;
b) Se afișează la ecran elementele tablourilor;
c) Va determina suma elementelor fiecărui tablou;
d) Va determina diferența elementelor fiecărui tablou;
e) Va crea un nou tablou care va conține toate elementele tabloului a și b;
f) Va crea un nou tablou format doar din elementele comune ambelor tablouri.
39) Se consideră un tablou bidimensional cu numere întregi. Elaborați un program cu
funcții/proceduri prin intermediul cărora:
a) De la tastatură se vor citi elementele tabloului;
b) Se vor afișa elementele tabloului la ecran;
c) Va fi determinat elementul maximal;
d) Va fi determinat elementul minimal;
e) Se va determina numărul de elemente maximale;
f) Se va determina numărul de elemente minimale;
g) Se vor afișa sumele pe linii;
h) Se vor afișa sumele pe coloane;
i) Se vor sorta elementele crescător pe linii;
j) Se va determina suma elementelor de pe perimetrul tabloului.
40) Se consideră un șir de caractere. Elaborați un program cu funcții/proceduri, prin
intermediul căruia:
a) Se va determina dacă șirul este palindrom;
b) Se vor afișa doar vocalele din șir;
c) Se vor afișa doar cifrele din șir;
d) Se va determina numărul de cuvinte din șir;
e) Se vor sorta crescător elementele șirului;
f) Se va inversa șirul;
g) Se va determina cuvântul de lungime minimă;
h) Se va determina cuvântul de lungime maximă;
i) Se va inversa fiecare cuvânt din șir.
41) Elaborați un program prin intermediul căruia vor fi create proceduri pentru conversia
numerelor în șir de caractere și invers:
a) Procedură pentru transformarea șirului în număr întreg, dacă șirul conține doar cifre;
b) Procedură pentru transformarea unui număr întreg în șir;
c) Procedură pentru transformarea șirului în număr real, dacă șirul conține doar cifre și
caracterul punct;
d) Procedură pentru transformarea unui număr real în șir.
Recursia
2) Să se calculeze coeficienții binomiali 𝐶1𝑛 , 𝐶𝑛2 , 𝐶𝑛𝑛 obținuți în urma dezvoltării unui binom
la puterea n (n > 2), știind că are loc următoarea relație de recurență:
𝑛−𝑘+1
𝐶𝑛𝑘 = 𝐶𝑛𝑘−1 și 𝐶0𝑛 = 1, pentru orice 1 ≤ 𝑘 ≤ 𝑛.
𝑘
a, a b
CMMDC(a, b) cmmdc(a b, b), a b
cmmdc(a, b a), b a
10) Se cere de scris un program, varianta recursivă, pentru calculul șirului de numere
Fibonacci:1,1,2,3,5,8,...21.
11) Să se determine cel mai mare divizor comun a trei numere naturale. Să se scrie varianta
recursivă.
a, a b
CMMDC(a, b) cmmdc(a b, b), a b
cmmdc(a, b a), b a
12) Se cere de scris un program, varianta recursivă, care afișează la ecran suma primelor n
termeni ai șirului de numere: 1,5,9,13,17,...,4n-3,...
0, n 0
S ( n)
S (n 1) 4 * n 3
13) Este dat șirul de numere 1,6,11,16,21,…. Să se determine suma primelor n numere a
șirului dat. Să se scrie varianta recursivă.
1, n 0
S ( n)
5 * n 4 S (n 1)
14) Calcularea valorilor a două funcții f(x) și g(x). Să se alcătuiască un program utilizând
recursia indirectă pentru a calcula valorile funcțiilor
g ( x 1), x 1 f ( x) 1, x 0
f ( x) și g ( x)
x 2, x 1 x, x 0
15) Aplicând recursivitatea indirectă să se determine valorile funcțiilor
2, x 3
x
x 1
2
,x 0 2, x 0
x
a( x) b( x 2),3 x 6 , b( x) a( x) 5,0 x 5 , c( x) a( x 1),0 x 5 .
c( x 1), x 6 c(1) 1, x 5 b( x 1), x 5
16) Să se alcătuiască un program pentru calcularea funcției Ackerman:
n 1, m 0
Ack (m, n) Ack (m 1,1), n 0
Ack (m 1, Ack (m, n 1)), m, n 0
17) Sunt date 2 funcții:
2 2 1, x 5
x
4 5 x 3x 2, x 1
2
f ( x) x 2,5 x 8 și g ( x)
3, x 8 x x 5, x 1
2
De calculat:
a) Compoziția f(g(f(x)));
b) Compoziția g(f(g(x)));
c) Compoziția f(g(f(g(f(x))))).
18) Aplicând recursivitatea indirectă să se determine valorile funcțiilor:
𝑎, 𝑥 = 0 𝑏, 𝑥 = 0
𝐴𝑛 = {𝑎𝑛−1 + 𝑏𝑛−1 + 𝑐𝑛−1 , 𝑥 > 0 𝐵𝑛 = { 3 ,𝑥 > 0
√𝑎𝑛−1 ∗ 𝑏𝑛−1 ∗ 𝑐𝑛−1
3
𝑐, 𝑥 = 0
𝐶𝑛 = {
√𝑎𝑛−1 + 𝑏𝑛−1 + 𝑐𝑛−1 , 𝑥 > 0
19) Se dă numărul natural n, n<65000, și numărul natural b de o cifră. Să se scrie
reprezentarea numărului n în baza b. Să se scrie varianta recursivă.
20) Să se alcătuiască un program pentru calcularea funcției Hermite.
1, n 0
H (n, x) 2 x, n 1
2 x * H (n 1, x) 2(n 1) * H (n 2, x)), n 2
21) Să se alcătuiască un program pentru calcularea funcției Cebîșev.
1.n 0
T (n, x) 2 x, n 1
2 x * T (n 1, x) T (n 2, x), n 2
22) Să se alcătuiască un program pentru calcularea funcției Manna Pnueli.
x 1, x 12
F ( x)
F ( F ( x 2)), x 12
23) Să se alcătuiască un program recursiv pentru calcularea polinoamelor Legendre definite
prin relațiile:
1
𝐿0 (𝑥) = 1, 𝐿1 (𝑥) = 𝑖 [(2𝑖 − 1)𝑥𝐿𝑖−1 (𝑥) − (𝑖 − 1)𝐿𝑖−2 (𝑥)], unde i=2, …, n.
24) Se dă un număr natural n. Se cere să se elaboreze un program recursiv care ne va genera
toate partițiile numărului n.
Exemplu:
Țara 1 este vecină cu țările 2 și 4.
Țara 2 este vecină cu țările 1,3,4 și 5.
Țara 3 este vecină cu țările 2,4 și 5.
Țara 4 este vecină cu țările 2 și 5.
Țara 5 este vecină cu țările 2,3 și 4.
O soluție ar fi:
1 2 1 3 4
35) Se dă un labirint sub formă de matrice cu m linii și n coloane. Fiecare element al matricei
reprezintă o cameră a labirintului. Într-una din camere, de coordonate x și y se găsește un
om. Se cere să se găsească toate ieșirile din labirint.
1) Prin intermediul structurilor dinamice de date, creați tipul de date telefon cu câmpurile:
marca, culoare, anul fabricării, prețul. În baza acestui tip elaborați un program prin
intermediul căruia se va gestiona datele despre telefoanele mobile (minim 10 telefoane).
Citirea datelor se va efectua din fișier. Programul va conține un meniu cu următoarele
opțiuni:
a) Afișarea tuturor telefoanelor;
b) Afișarea celor mai noi telefoane;
c) Afișarea celor mai scumpe telefoane;
d) Căutarea telefoanelor după marcă;
e) Căutarea telefoanelor după preț, cu indicarea prețului minim și maxim;
f) Sortarea telefoanelor descrescător după anul fabricării;
g) Sortarea telefoanelor crescător după marcă;
h) Inserare datelor despre un telefon nou;
i) Excluderea unui telefon.
2) De la tastatură se citesc cuvinte. Să se creeze o listă simplu înlănțuită ordonată alfabetic,
care conține în celule cuvintele distincte și frecvența lor de apariție. Se va afișa conținutul
listei în ordine alfabetică
3) De la tastatură se citesc mai multe numere întregi. Să se creeze o listă ordonată crescător.
4) De la tastatură se citește numărul n și numele a n copii. Să se simuleze următorul joc: cei
n copii stau într-un cerc. Începând cu un anumit copil, se numără copiii în sensul acelor de
ceasornic. Fiecare al n-lea copil iese din cerc. Câștigă ultimul copil rămas în joc.
5) Se consideră un depou de locomotive cu o singură intrare și cu o singură linie de cale ferată,
care poate cuprinde oricâte locomotive. Să se scrie programul care realizează
dispecerizarea locomotivelor din depou. Programul prelucrează comenzi de intrare în
depou a unei locomotive, de ieșire din depou a unei locomotive și de afișare a
locomotivelor din depou.
6) De la tastatură se citesc cuvinte (șiruri de caractere). Să se scrie un program care creează
un arbore de căutare, care conține în noduri cuvintele și frecvența lor de apariție. Să se
afișeze apoi cuvintele în ordine lexicografică crescătoare și frecvența lor de apariție.
7) Informațiile pentru medicamentele unei farmacii sunt: nume medicament, preț, cantitate,
data primirii, data expirării. Evidenta medicamentelor se tine cu un program care are drept
structură de date un arbore de căutare după nume medicament. Să se scrie programul care
execută următoarele operații:
a) creează arborele de căutare;
b) caută un nod după câmpul nume medicament și actualizează câmpurile de informație;
c) tipărește medicamentele în ordine lexicografică;
d) elimină un nod identificat prin nume medicament;
e) creează un arbore de căutare cu medicamentele care au data de expirare mai veche
decât o dată specificată de la terminal.
8) Se consideră o listă unidirecțională câmpul informațional al fiecărei celule conține un
număr real. Scrieți un program care ar adăuga între oricare două celule vecine a listei
inițiale celule noi, câmpul informațional al cărora va fi media aritmetică a numerelor din
celulele vecine.
Ieșire: La ecran se afișează valorile câmpurilor informaționale ale celulelor listei
modificate.
9) Să se creeze o listă din 100 de numere aliatoare întregi.
a) Să se determine prin parcurgerea listei suma numerelor pozitive;
b) Să se afișeze numerele în ordinea inversă generării;
c) Să se afișeze numerele în ordinea generării.
10) Utilizând o stivă, să se afișeze descompunerea zecimală a unui număr întreg dat n.
Exemplu: pentru n=-345 se va afișa n=-3*10^2+4*10+5
11) Să se creeze o listă ce va conține numele, vârsta și telefonul a 10 persoane.
a) Să se afișeze la ecran primele 5 persoane din listă;
b) Să se afișeze la ecran persoanele de pe pozițiile pare din listă;
c) Să se afișeze la ecran persoanele cu vârsta mai mare de 20 de ani;
d) Să se determine poziția în listă a persoanei cu numele dat.
12) Pentru fiecare student dintr-o grupă se știe numele și 3 note la o sesiune
a) Să se creeze lista studenților în ordinea lexicografică a numelui;
b) Să se creeze lista studenților în ordinea descrescătoare a notei medii;
c) Să se creeze lista studenților cu nota medie mai mare decât 5 în ordinea lexicografică
a numelui;
d) Să se elimine restanțierii din lista creată în b).
13) Se citesc de la tastatură două șiruri de numere întregi mai mici decât 1000 până când se
citește un alt fel de număr și se formează două liste-mulțimi.
a) Să se afișeze mulțimile;
b) Să se afișeze reuniunea și intersecția mulțimilor din a).
14) Se citesc de la tastatură două șiruri de numere întregi. Sfârșitul fiecărui șir este marcat prin
prezența pe poziția i a numărului i.
a) Să se formeze al treilea șir format din elementele primelor două șiruri;
b) Să se ordoneze crescător elementele șirului al treilea.
15) Se dă un fișier text.
a) Să se formeze lista cuvintelor din text în ordinea alfabetică;
b) Să se calculeze numărul cuvintelor de lungime maximală.
16) Se consideră o listă de cuvinte. Să se scrie un subprogram:
a) pentru inserarea unui cuvânt la începutul listei;
b) pentru inserarea unui cuvânt la sfârșitul listei;
c) pentru verificarea existenței unui cuvânt în listă;
d) pentru ștergerea unui cuvânt din listă.
17) Să se genereze 2 liste de numere întregi
a) Să se creeze a treia listă formată din numerele care se întâlnesc doar în una dintre
primele două liste;
b) Să se creeze a treia listă concatenând primele două liste și ordonând crescător
componentele ei.
18) Se dau două liste de numere întregi
a) Să se scrie un subprogram care verifică dacă listele sunt egale;
b) Să se scrie un subprogram care verifică dacă o listă se conține în alta;
c) Să se scrie o funcție care returnează numărul de componente comune ale listelor.
19) Funcția OFS(v) returnează numărul de octeți ce reprezintă adresa variabilei v, relativ de
segmentul în care se află ea. Se dă o matrice de numere întregi. Să se arate că elementele
matricei A(m, n) se scriu în memorie în ordinea:
a11, a12, ..., a1n, a22, ..., a2n, ..., amn
20) Se dă un fișier text. Să se afișeze ”răsturnatul” conținutului fișierului.
21) Se dă o listă de numere întregi. Să se scrie un subprogram care din lista dată formează două
liste: una formată din numerele negative, alta – din celelalte numere.
22) Un polinom de o singură nedeterminată se poate reprezenta printr-o listă, unde fiecare
celulă a listei este un monom al polinomului. Să se realizeze un algoritm ce efectuează:
a) adunarea a două polinoame;
b) scăderea a două polinoame;
c) înmulțirea a două polinoame.
23) Un număr natural mare poate fi reprezentat printr-o listă, unde fiecare celulă a listei conține
o cifră a numărului. Să se realizeze un algoritm care va efectua:
a) adunarea a două numere naturale mari date;
b) scăderea a două numere naturale mari date;
c) înmulțirea a două numere naturale mari date.
24) Să se realizeze un algoritm care va efectua înmulțirea a două polinoame de mai multe
nedeterminate. Polinoamele se vor citi din fișiere text.
25) Din fișierul date.in se citește un număr natural k și apoi de pe a doua linie numere întregi.
Construiți o listă liniară simplu înlănțuită care să conțină numerele întregi citite în ordinea
din fișier.
Permutați lista cu k poziții spre stânga și afișați valorile din listă.
Indicație: se vor scrie și folosi funcții pentru adăugarea unei valori la sfârșitul listei și
pentru ștergerea primului nod al listei și vor fi folosite pentru permutarea cerută.
Exemplu:
date.in
3
1 2 3 4
date.out
4123
26)
a) Să se creeze o LLDI care să memoreze numere întregi citite dintr-un fișier text;
b) Să se scrie o funcție care primește ca parametru adresa primului nod al listei și o
afișează în ambele sensuri;
c) Să se scrie o funcție care primește ca parametru adresa p a unui nod și un număr natural
x și adaugă după nodul indicat de p un nod care să conțină valoarea x;
d) Să se scrie o funcție care primește ca parametru adresa p a unui nod și șterge nodul
indicat de p;
e) Folosind funcțiile de punctele b), c) și d) să se adauge după nodul al doilea un nod cu
informația 7, să se șteargă al treilea nod și apoi primul nod și să se afișeze lista în
ambele sensuri după fiecare dintre aceste operații.
27) Să se creeze o listă liniară dublu înlănțuită cu noduri care să conțină:
- câmpul info număr întreg de maxim 4 cifre;
- câmpurile prec și urm care să conțină informații de legătură spre nodul anterior,
respectiv următor din listă.
a) Să se afișeze lista în ambele sensuri;
b) Să se șteargă toate nodurile din lista cu excepția primului și a ultimului nod.
28)
a) Să se creeze o listă liniară simplu înlănțuită care să memoreze următoarele informații
despre elevii unei clase formată din n elevi:
- numele (șir de maxim 20 de caractere)
- prenumele (șir de maxim 20 de caractere)
- 3 note într-un vector cu 3 componente reale
b) Să se afișeze numele, prenumele și media fiecărui elev;
c) Să se scrie o funcție care calculează și returnează media clasei.
29) Se consideră o listă liniară dublu înlănțuită în ale cărei noduri sunt memorate cifre. Să se
scrie o funcție care primește ca parametru adresa primului nod al listei și verifică dacă
numărul care se compune din cifrele memorate în listă în ordine este sau nu palindrom.
Arbori Binari
1) Se citește un arbore cu n vârfuri dat prin vectorul TATA.
a) Să se afișeze muchiile arborelui; 2
b) Să se construiască și să se afișeze matricea de adiacență a
arborelui. 1 3
Exemplu: Pentru vectorul TATA 2 0 2 1 3 se vor afișa
muchiile [1,2] [2,3] [1,4] [3,5] și matricea de adiacență:
4 5
01010
10100
01001
10000
00100
2) Se citește un arbore cu n vârfuri dat prin vectorul muchiilor și apoi se citește vârful
rădăcină. Să se construiască și să se afișeze vectorul TATA.
Exemplu: Pentru un arbore cu 5 noduri, cu muchiile [1,2] [2,3] [1,4] [3,5] și rădăcina 2 se
obține vectorul TATA 2 0 2 1 3
2
1 3
4 5
3) Se citește un arbore cu n vârfuri dat prin vectorul muchiilor și apoi se citește vârful
rădăcină. Să se calculeze și să se afișeze numărul de niveluri ale arborelui.
Exemplu: Pentru un arbore cu 5 noduri și muchiile [1,2] [2,3] [1,4] [3,5] numărul de
2
niveluri este 3.
1 3
4 5
4) Se citește un arbore cu n vârfuri dat prin vectorul TATA.
a) Să se afișeze gradele vârfurilor;
b) Să se afișeze pentru fiecare vârf nivelul pe care se află (numerotarea nivelelor începe
de la 0-rădăcina).
1 3
4 5
5) Se citește un graf neorientat cu n vârfuri și m muchii etichetate prin costuri (ponderi)
pozitive. Graful este dat prin vectorul muchiilor. Se cere să se determine un arbore parțial
de cost minim (are suma costurilor muchiilor sale minimă).
6) Din fișierul date.in se citește un număr natural n reprezentând numărul de vârfuri ale unui
arbore binar și apoi vectorii S și D pentru descendenții fiecărui nod din arbore.
a) Să se parcurgă arborele în preordine, inordine și postordine;
b) Să se parcurgă arborele pe nivele;
c) Să se calculeze și să se afișeze înălțimea arborelui.
Exemplu:
date.in
7
2400700
3560000
Se va afișa:
Preordine: 1 2 4 5 7 3 6
Inordine: 4 2 7 5 1 3 6
Postordine: 4 7 5 2 6 3 1
Pe nivele: 1 2 3 4 5 6 7
Adâncimea: 3
7) Arbore parțial de cost minim (cu algoritmul lui Kruskal).
Exemplu:
date.in 351
58 451
123 date.out
132 341
154 351
143 132
236 123
341 *soluția nu este unică
8) Arbore parțial de cost minim (cu algoritmul lui Prim).
Exemplu:
date.in 351
58 451
123 date.out
132 132
154 341
143 351
236 123
341 *soluția nu este unică
9) Se dă un arbore prin vectorul de tip TATA. Calculați și afișați distanța dintre oricare două
vârfuri ale arborelui sub forma unei matrici.
Distanța dintre două vârfuri este egală cu lungimea lanțului care le unește.
Exemplu:
date.in
6
202131
date.out
012131
101222
210313
123042
321404
123240
10) Se citește un număr natural n. Construiți un arbore cu proprietatea că fiecare vârf are
numărul de descendenți direcți cu 1 mai mare decât nivelul pe care se află. Excepție fac
frunzele și nodul pentru care se termină cele n vârfuri.
Astfel, rădăcina (aflată pe nivelul 0) are un singur descendent direct, vârful de pe nivelul
1 are 2, cele de pe nivelul 2 au câte trei, etc.
Arborele va fi reprezentat prin vectorul legăturilor de tip TATA.
Exemplu:
n=15
Vectorul TATA:
012233344455556
11) Se dă un arbore binar cu n noduri prin vectorii de descendenți S și D. Afișați vectorii T și
P (reprezentarea cu legături ascendente de tip TATA și respectiv poziția descendentului:
-1 pentru stânga, 1 pentru dreapta).
Exemplu:
date.in 00
12 00
23 00
45 0 12
06 00
78 date.out
09 0 1 1 2 2 3 4 4 5 6 6 11 (T)
10 11 0 -1 1 -1 1 1 -1 1 1 -1 1 1 (P)
00
12) Se dă un arbore binar cu n noduri prin vectorii de descendenți S și D. Afișați pe rânduri
separate:
- frunzele arborelui;
- vârfurile cu un singur descendent direct;
- vârfurile cu doi descendenți direcți.
Exemplu:
date.in 00
12 00
23 0 12
45 00
06 date.out
78 frunzele: 7 8 9 10 12
09 vârfurile cu un singur descendent: 3
10 11 5 11
00 vârfurile cu doi descendenți: 1 2 4 6
00
13) Se dă un arbore cu n vârfuri având muchiile etichetate cu costuri numere naturale.
Calculați costul între oricare două vârfuri ale arborelui.
Exemplu:
date.in date.out
5 (n) 0 4 5 10 11
1 2 4 (i j cost) 40967
135 5 9 0 15 16
246 10 6 15 0 1
451 11 7 16 1 0
14) Se citește un vector A cu n elemente numere întregi. Plasați indicii 1,2...n într-un arbore
binar astfel încât în urma parcurgerii în inordine a acestuia să se afișeze vectorul A sortat
crescător. Arborele binar va fi reprezentat prin vectorii S și D.
Exemplu:
n=7
A=3 4 1 2 9 0 6
Vectorii S și D rezultați sunt:
S=3 0 6 0 7 0 0
D=2 5 4 0 0 0 0
iar vectorul A sortat:
A=0 1 2 3 4 6 9
15) Se dă o expresie aritmetică în forma poloneză prefixată. Expresia este formată din
operatorii + - / * %, iar operanzii sunt dintr-un singur caracter.
Construiți arborele binar asociat expresiei citite și afișați expresia în forma normală
(infixată).
Exemplu:
/-+*5314+27
în forma normală este (((5*3)+1)-4)/(2+7)
16) Se dă un arbore binar cu n vârfuri prin vectorii S și D. Stabiliți dacă este plin, sau
complet, sau nici unul dintre cazuri.
Exemple:
7 6
23 23
45 45
56 60
00 00
00 00
00 00
00 complet
plin
17) Se dă un număr natural n. Construiți un arbore binar complet cu vârfurile 1,2...n astfel
încât în urma parcurgerii pe nivele să fie afișate valorile 1,2...n.
Se vor afișă vectorii S și D.
Exemplu:
n=8
S=2 4 6 8 0 0 0 0 0
D=3 5 7 9 0 0 0 0 0
18) Se dă un arbore cu n noduri prin vectorul de referințe de tip TATA. Să se determine dacă
arborele poate fi reprezentat ca un lanț.
Exemple:
n=6
T=0 1 1 2 3 2 răspunsul este nu
n=6
t=0 1 1 2 3 5 răspunsul este da
19) Se dau doi arbori cu rădăcină prin doi vectori de tip TATA. Determinați dacă cei doi
arbori cu rădăcină reprezintă același arbore (diferă doar în urma alegerii rădăcinilor
diferite)
Exemplu:
date.in
5
01122
31022
date.out
da
20) În fișierul date.in se dă un arbore binar cu n vârfuri (cel mult 1000) prin vectorii S și D
(pentru fiecare vârf se precizează fiul stâng și apoi cel drept). Să se calculeze și să se
afișeze pentru fiecare vârf v numărul de vârfuri din subarborele care îl are pe v ca
rădăcină.
Exemplu:
date.in 3
6 2
35 1
06 6
00 1
12 1
00
00
date.out
21) În fișierul date.in se dă un arbore binar cu n vârfuri (cel mult 1000) prin vectorii S și D
(pentru fiecare vârf se precizează fiul stâng și apoi cel drept). Să se calculeze și să se
afișeze numărul de nivele ale arborelui și apoi câte vârfuri se află pe fiecare nivel.
Exemplu:
date.in
6
35
06
00
12
00
00
date.out
3
123
22) Se dă un arbore cu n vârfuri (cel mult 99) prin vectorul TATA. Folosind algoritmul
asemănător cu algoritmul Roy-Floyd, determinați și afișați cel mai lung lanț elementar
din arborele citit.
Exemplu:
date.in
8
20252537
date.out
452378
23) Într-o firma sunt n angajați, numerotați de la 1 la n, fiecare angajat având un singur șef
direct, cu excepția directorului, care nu are șef. Ierarhia firmei este dată printr-un vector
de tip TATA. Fiecare angajat al firmei are un salariu dat printr-un număr natural.
Angajații și șeful sunt recompensați astfel: câștigul fiecărui salariat este egal cu salariul
său la care se adaugă media aritmetică a câștigurilor subordonaților săi direcți. Media
aritmetică se rotunjește prin adaos la un număr întreg (de exemplu 5.33 se rotunjește la
6). Angajații care nu au subordonați direcți câștigă doar salariul.
Calculați care este câștigul directorului firmei.
Exemplu:
date.in
8 (numărul de angajați)
4 3 0 3 2 1 2 1 (vectorul TATA)
2 6 4 3 7 3 1 5 (salariul fiecărui angajat)
date.out
14
24) Se dau în fișierul date.in numerele n, p și q unde n este numărul de noduri ale unui arbore
iar p și q sunt noduri din arbore. Apoi se citește vectorul TATA prin care este reprezentat
arborele. Afișați lanțul elementar de la vârful p la vârful q.
Exemplu:
date.in
725
4170771
date.out
2175
25) Să se citească de la tastatură n numere naturale, care se adaugă, pe măsură ce se citesc,
într-o stivă implementată dinamic, apoi să se adauge aceste numere într-un arbore binar
de căutare de unde se vor lista: toate numerele din arbore în preordine, în ordine și în
postordine, toate numerele divizibile cu un număr furnizat de la tastatură, toate pătratele
perfecte și să se calculeze media lor aritmetică.
26) Să se implementeze un arbore unde fiecare nod are maxim 3 copii, aranjați după
următoarea regulă:
- numărul nodului copilului din stânga este mai mic decât jumătate din numărul
nodului rădăcină;
- numărul nodului copilului din mijloc este cuprins între numărul nodului rădăcină
împărțit la 2 și numărul nodului rădăcină;
- numărul nodului copilului din dreapta este mai mare decât numărul nodului rădăcină.
După crearea arborelui de mai sus să se listeze în postordine, în ordine și în preordine
vectorii de parcurgere ai arborelui.
27) Evidenta articolelor dintr-un magazin se tine într-un arbore binar de căutare cu stocurile
articolelor și printr-un arbore binar de căutare cu tranzacțiile efectuate (intrări și ieșiri din
magazin). Pentru fiecare nod din arborele stoc se reține: cod articol (un număr întreg
cuprins între 100 și 999), denumire articol (un text alfabetic și numeric), unitatea de
măsură, un șir de 2 caractere (bc, kg, ml, mp, mc, t, l), preț, cantitate iar pentru fiecare
nod din arborele cu tranzacții se reține: cod tranzacție (1 - intrare articole în gestiune, 2 -
ieșire articole din gestiune (vânzări)), cod articol (un număr întreg cuprins între 100 și
999), denumire articol (un text alfabetic și numeric), unitatea de măsură, un șir de 2
caractere (bc, kg, ml, mp, mc, t, l), preț, cantitate. Gestiunea articolelor din magazin se
ține printr-un meniu de comenzi de forma:
i → intrare articole în magazin;
e → ieșire articole din magazin (vânzări) ;
s → operarea tranzacțiilor în arborele cu stocuri (stoc articol = stoc inițial + intrări
– ieșiri) ;
1 → lista intrărilor în magazin (fizic și valoric);
2 → lista ieșirilor din magazin (vânzările fizice și valorice);
0 → lista stocurilor finale din magazin (fizice și valorice);
d → ștergerea din arborele de stocuri a articolelor care au stocurile epuizate
(zero).
Observație: Pentru toate informațiile tastate se vor face validările necesare.
28) Să se creeze un arbore de căutare pentru n numere complexe, în care fiecare nod va
conține ca informație utilă partea reală și partea imaginară a unui număr complex de
forma x + iy.
- să se parcurgă în postordine, în ordine și în preordine arborele binar creat listându-se
numerele complexe, conjugatele acestora, și modulele lor
- să se listeze numerele complexe care au partea reală nulă
- să se listeze numerele complexe care au partea imaginară nulă
- utilizând o funcție, să se șteargă din arbore numerele complexe care au partea reală și
partea imaginară egală și apoi să se listeze din nou numerele complexe ramase.
29) Elaborați un program care construiește arborele genealogic propriu pe parcursul a trei sau
patru generații. Nodul-rădăcină conține numele, prenumele și anul nașterii, iar nodurile
descendente conțin datele respective despre părinți.
30) Scrieți o funcție recursivă care returnează numărul nodurilor unui arbore binar.
Transcrieți această funcție într-o formă nerecursivă.
Tehnica Trierii
1) Se consideră numerele naturale din mulțimea {1, 2, 3, ..., n}. Să se determine toate
elementele acestei mulțimi, pentru care suma cifrelor este egală cu un număr dat m.
2) Se consideră numerele naturale din mulțimea {1, 2, 3, ..., n}, n<100000, n se citește din
fișier. Să se determine toate elementele acestei mulțimi, pentru care suma cifrelor este un
număr impar, divizibil cu trei;
3) Fișierul date.in conține mai multe caractere, să se afișeze cea mai lungă secvență de
caractere identice. Dacă sunt mai multe secvențe, se va afișa prima.
Exemplu: Date de intrare: aabsssdadaaab; Date de ieșire: sss.
4) Se consideră numerele naturale din mulțimea {1, 2, 3, ..., n}, n<100000, n se citește din
fișier. Să se determine toate elementele acestei mulțimi, pentru care suma cifrelor este
divizibilă cu a și cu b, a și b se citesc din fișier.
5) Se consideră mulțimea P={P1,P2,...,Pn} formată din n puncte (2≤n≤30) pe un plan
euclidian. Fișierul date.in conține pe prima linie numărul n, care reprezintă numărul de
puncte din plan pe liniile următoare se regăsesc coordonatele punctelor. Fiecare punct Pj
este definit prin coordonatele sale xj, yj . Elaborați un program care afișează la ecran
coordonatele punctelor Pa, Pb distanța dintre care este maximă. Distanța dintre punctele
Pj, Pm se calculează cu ajutorul formulei:
6) Pe o suprafață plană sunt mai multe puncte, date prin coordonatele lor. Fișierul date.in,
care pe prima linie conține numărul de puncte din plan, iar pe următoarele linii sunt scrise
coordonatele punctelor. Elaborați un program prin intermediul căruia se va determina
numărul maximal de triunghiuri care pot fi formate din aceste puncte cu condiția că:
a) Triunghiurile formate nu se intersectează;
b) Triunghiurile formate sunt înscrise;
c) Triunghiurile formate au un vârf comun.
5 2
10 3
25 4
50 5
Elaborați un program care determină suma minimă S care ar putea să fie în pușculiță.
9) Elaborați un program care determină câte puncte cu coordonate întregi se conțin într-o
sferă de raza R cu centrul în originea sistemului de coordonate. Se consideră că R este un
număr natural, 1≤R≤30. Distanța d dintre un punct cu coordonatele (x, y, z) și originea
sistemului de coordonate se determină după formula: 𝑑 = √𝑥 2 + 𝑦 2 + 𝑧 2 .
Tehnica Greedy
1 Robotul
2
Intrare Ieșire
3
Elaborați un program care, cunoscând planul hrubelor, deplasează robotul prin încăperile
subterane, de la intrarea în hrube la ieșire. Colecția de vinuri fiind foarte bogată, nu se
cere vizitarea obligatorie a tuturor încăperilor subterane.
Datele de intrare: Planul hrubelor este desenat pe o foaie de hârtie liniată în pătrățele.
Pătrățelele hașurate reprezintă obstacolele, iar cele nehașurate - spațiile libere. Pătrățelele
de pe perimetrul planului, cu excepția celor de intrare sau ieșire, sunt hașurate prin
definiție. În formă numerică planul hrubelor este redat prin tabloul A cu m linii și n
coloane. Elementele A[i,j] ale acestui tablou au următoarea semnificație: 0 - spațiu liber;
1 - obstacol; 2 - intrarea în hrube; 3 - ieșirea din hrube. Inițial, robotul se află în pătrățelul
pentru care A[i,j]=2. Fișierul date.in conține pe prima linie numerele m, n separate prin
spațiu. Pe următoarele m linii se conțin câte n numere A[i,j] separate prin spațiu.
Datele de ieșire: Fișierul date.out va conține pe fiecare linie câte una din instrucțiunile
SUS, JOS, DREAPTA, STÂNGA scrise în ordinea executării lor de către robot.
Restricții: 5 ≤ m, n ≤ 100. Timpul de execuție nu va depăși 3 secunde.
Exemplu:
date.in date.out
7 9 SUS
1 1 1 1 1 1 1 1 DREAPTA
1 1 0 0 1 0 0 0 DREAPTA
0 1 1 0 1 0 0 1 DREAPTA
0 1 1 1 0 0 0 1 DREAPTA
0 0 0 1 1 0 1 0 SUS
1 0 1 0 1 1 0 0 SUS
0 0 0 1 0 1 1 2 DREAPTA
1 1 1 1 1 3 1 DREAPTA
JOS
JOS
JOS
Indicații: La fiecare pas selectați din mulțimea {SUS, JOS, DREAPTA, STÂNGA} câte
o instrucțiune în așa fel, încât robotul să se deplaseze numai de-a lungul unui perete.
8) Fiind dată o tablă de șah de dimensiunea n x n și un cal în colțul stânga sus al acesteia, se
cere să se deplaseze calul pe tablă astfel încât să treacă o singură dată prin fiecare pătrat
al tablei. Soluția va fi afișată ca o matrice n x n în care sunt numerotate săriturile calului.
Exemplu:
date.in
5
30 40 20 25 60
date.out
86.00
34125
10) Submulțimi. Se consideră o mulțime având n elemente numere întregi. Să se determine o
submulțime de sumă maximă a acesteia.
Date de intrare: Prima linie a fișierului de intrare date.in conține numărul n, iar pe
următoarea linie se află cele n numere întregi, separate prin câte un spațiu.
Date de ieșire: Fișierul de ieșire date.out va conține o singură linie pe care se vor afla
numerele din submulțimea de sumă maximă, separate prin câte un spațiu.
Restricții și precizări:
- 1 ≤ n ≤ 1000
- Dacă problema are mai multe soluții, în fișier se va scrie una singură.
Exemplu:
date.in
3 6 0 2 7 –3
date.out
3627
11) Stații. Patronul unei companii private de transport în comun a primit de la primăria
orașului aprobarea de a putea folosi o parte din stațiile Regiei Locale de Transport în
Comun. Stațiile disponibile sunt situate de-a lungul arterei principale a orașului. El se
hotărăște să introducă o cursă rapidă care să străbată orașul, de la un capăt la celălalt, pe
artera principală. Pentru început se ocupă de stațiile situate de aceeași parte a drumului.
Patronul are o dilemă: dacă opririle vor fi prea dese, atunci străbaterea orașului va dura
prea mult și va plictisi călătorii, iar dacă stațiile sunt prea rare, călătorii vor fi prea putini.
De aceea, criteriile după care patronul stabilește stațiile în care va opri cursa rapidă sunt:
- Între două stații alăturate să fie cel puțin x metri.
- Numărul total de stații să fie maxim.
Exemplu:
date.in
10 60
100 50 25 25 50 10 10 80 20
date.out
5
12589
12) Cutii. Al Bundy este în dificultate! Are n + 1 cutii de pantofi și n perechi de pantofi
identificate prin valorile 1, 2, ..., n (n perechi sunt așezate în n cutii, iar o cutie este
liberă). Dar, din păcate, pantofii nu se află la locurile lor. Până să vină Gary (șefa lui),
Bundy trebuie să potrivească pantofii în cutii. Dar pentru că Gary poate să apară în orice
clipă și Bundy nu vrea să fie prins că nu își face treaba cum trebuie, aranjarea pantofilor
trebuie făcută rapid și în așa fel încât să nu trezească bănuieli; prin urmare, dacă scoate o
pereche de pantofi dintr-o cutie, trebuie să o pună imediat în cutia liberă. Ajutați-l pe Al
Bundy să aranjeze pantofii la locurile lor printr-un număr minim de mutări.
Date de intrare: Prima linie a fișierului de intrare date.in conține numărul n de cutii.
Linia a doua conține n + 1 numere distincte, separate prin câte un spațiu, reprezentând
dispunerea inițială a perechilor de pantofi în cutiile numerotate de la 1 la n + 1. Printre
cele n + 1 numere unul singur are valoarea 0 și corespunde cutiei goale. Linia a treia
conține n + 1 numere separate prin câte un spațiu, reprezentând configurația finală cerută,
în care valoarea 0 se află pe poziția căruia îi corespunde cutia goală.
Date de ieșire: Fișierul de ieșire date.out va conține pe prima linie un număr întreg k,
reprezentând numărul minim de mutări.
Restricții și precizări:
- 1 < n < 100.
Exemplu:
date.in
4
34102
40213
date.out
4
Explicații:
Mutarea 1: perechea 1 se mută din cutia 3 în cutia 4
Mutarea 2: perechea 2 se mută din cutia 5 în cutia 3
Mutarea 3: perechea 3 se mută din cutia 1 în cutia 5
Mutarea 4: perechea 4 se mută din cutia 2 în cutia 1
13) Subșiruri. Se dă un șir de n numere întregi. Să se descompună acest șir în număr minim
de subșiruri strict crescătoare, astfel încât numerele lor de ordine (din șirul dat) să fie
ordonate crescător în subșirurile formate.
Date de intrare: Prima linie a fișierului de intrare date.in conține numărul n, reprezentând
numărul de elemente din șir. Următoarea linie conține cele n numere întregi, separate prin
câte un spațiu.
Date de ieșire: Fișierul de ieșire date.out va conține pe prima linie un număr întreg k,
reprezentând numărul minim de subșiruri care se pot forma. Pe următoarele k linii vor fi
descrise subșirurile crescătoare. Un subșir va fi precizat prin numerele de ordine ale
elementelor din șirul inițial, despărțite prin câte un spațiu.
Restricții și precizări:
- 1 ≤ n ≤ 10000;
- elementele șirului sunt numere cuprinse în intervalul [0, 40000].
Exemplu:
date.in
10
2316837957
date.out
3
12458
367
9 10
Explicație:
Se pot forma 3 subșiruri crescătoare:
2, 3, 6, 8, 9
1, 3, 7
5, 7
14) Medici. O asociație caritabilă asigură consultații medicale gratuite pentru cei fără
posibilități materiale. Există un singur cabinet dotat cu aparatură medicală. Din acest
motiv la un moment dat un singur medic poate face consultații. Asociația apelează la n
medici de diverse specialități, care își oferă benevol serviciile. Fiecare prezintă un singur
interval [si, fi] de-a lungul aceleiași zile, în care este disponibil. Ajutați asociația să
realizeze o planificare a consultațiilor în cabinet, astfel încât numărul de medici să fie
maxim.
Date de intrare: Prima linie a fișierului de intrare date.in conține numărul n al medicilor.
A doua și a treia linie conțin orele de început și respectiv orele de sfârșit, corespunzătoare
celor n medici (numere întregi). Numerele sunt separate prin câte un spațiu.
Date de ieșire: Fișierul de ieșire date.out va conține pe prima linie un număr k,
reprezentând numărul maxim de medici care se pot selecta, astfel încât să fie îndeplinită
condiția din enunț. A doua linie va conține k numere care vor reprezenta indicii medicilor
selectați.
Restricții și precizări:
- 1 ≤ n ≤ 1000;
- 1 ≤ fi < si ≤ 1000, pentru i = 1, 2, ..., n.
Exemplu:
date.in
2 6 20 4
3 8 23 7
date.out
3
143
15) O întreprindere care fabrică produse alimentare (unt, marmeladă, ulei, etc.) dispune de
suma S pentru fabricarea anumitor produse. Se știe că există n produse care pot fi
fabricate și pentru fiecare produs se cunoaște costul obținerii unui kg (litru) din produsul
respectiv, precum și prețul de vânzare a unui kg (litru) din produsul respectiv. Scrieți un
program care determină ce produse pot să fie fabricate de întreprindere și în ce cantitate,
astfel încât să se obțină o sumă maximă la vânzarea lor.
16) Codul Gray. Pentru primele 8 numere naturale, în tabelul de mai jos, observați numărul
scris în baza 10, în binar și în codul Gray. După cum puteți observa, codul Gray se
caracterizează prin faptul că reprezentarea a două numere consecutive diferă exact cu o
poziție binară.
Număr În cod binar În cod Gray
0 000 000
1 001 001
2 010 011
3 011 010
4 100 110
5 101 111
6 110 101
7 111 100
Fiind dat un număr natural în binar, b1b2...bn, scrieți un subprogram care convertește
numărul în cod Gray, g1g2...gn, după următorul algoritm:
g1=b1;
gk=(bk+bk-1) modulo 2; pentru k=2,3,...,n.
Exemplu:
n=5, în binar avem 101, iar în Gray avem: 1(1+0) (0+1)=111.
n=7, în binar avem 111, iar în Gray avem: 1(1+1) (1+1)=100.
Observați faptul că soluția se construiește bit cu bit, ceea ce justifică includerea
acestei probleme în tehnica Greedy.
17) Fiind dat un număr natural în cod Gray, g1g2...gn, scrieți o funcție care convertește
numărul în binar b1b2...bn după următorul algoritm:
b1=g1;
bk=(gk+bk-1) modulo 2; pentru k=2,3,...n
Exemplu:
n=5, în Gray avem 111, iar în binar avem: 1(1+1) (1+0)=101.
n=7, în Gray avem 100, iar în binar avem: 1(0+1) (0+1)=111.
18) Scrieți un program care afișează codurile Gray ale primelor numere naturale citite.
19) Se consideră o mulțime X cu n elemente. Să se elaboreze un algoritm eficient și să se
scrie un program pentru generarea șirului tuturor submulțimilor lui X, A1,A2,...,Ai+1 astfel
încât Ai+1 să se obțină din Ai, prin adăugarea sau scoaterea unui element.
20) Problema colorării hărților. Sunt date N țări, precizându-se relațiile de vecinătate. Se
cere să se determine o posibilitate de colorare a hărții (cu cele N țări), astfel încât să nu
existe țări vecine colorate la fel.
21) Turiști. O agenție de turism montan are n ghizi capabili să însoțească grupurile de turiști
străini în drumeții montane. Toate drumețiile care se organizează durează exact m zile.
Un ghid poate să însoțească într-o drumeție un singur grup, el fiind nedisponibil pentru
alte grupuri în acea perioadă. La agenție se adună p solicitări înainte de începerea
sezonului. Fiecare din cele p grupuri solicitante specifică data la care dorește să înceapă
drumeția. Ajutați directorul agenției să aleagă numărul maxim de grupuri care vor putea
fi însoțite de ghizi pe parcursul unui an întreg. În plus, el a hotărât că dacă există solicitări
care au data de început d în timpul sezonului și s-ar putea desfășura în totalitate doar dacă
se depășește ultima zi a sezonului, se prelungește sezonul cu zilele necesare.
Date de intrare: Prima linie a fișierului de intrare date.in conține numerele k, n, m și p,
despărțite prin câte un spațiu (k reprezintă numărul zilelor din sezon, n este numărul
ghizilor, m reprezintă durata drumețiilor, iar p reprezintă numărul solicitărilor). Pe
următoarea linie sunt scrise datele di (i = 1, 2, ..., p) pe care grupurile le-au scris pe
solicitări.
Date de ieșire: Fișierul de ieșire date.out conține un număr întreg care reprezintă numărul
maxim de solicitări rezolvate.
Restricții și precizări:
- 1 ≤ n ≤ 100;
- 1 ≤ m ≤ 14;
- 1 ≤ p ≤ 1000;
- 1 ≤ k ≤ 365;
- 1 ≤ di ≤ k (i = 1, 2, ..., p).
Exemplu:
date.in
20 2 5 8
8 2 10 10 4 9 6 19
date.out
5
Explicații:
Exemplul poate corespunde următoarei situații:
- primul ghid rezolvă solicitările care încep în zilele 2, 8 și 19
- al doilea ghid rezolvă solicitările care încep în zilele 4 și 9
Tehnica Reluării
1) Labirintul. Se consideră planul unui labirint desenat pe o foaie de hârtie liniate în
pătrățele. Pătrățelele hașurate reprezintă obstacolele, iar cele nehașurate - camerele și
coridoarele labirintului. În memoria calculatorului planul labirintului, este redat prin
matricea A=||aij||n*m 1≤n, m≤30, unde aij= 1, dacă pătrățelul este hașurat, aij=0, în caz
contrar. Călătorul se poate deplasa dintr-un pătrățel nehașurat numai atunci când ele au o
latură comună. Elaborați un program care găsește, dacă există, un drum din pătrățelul B
în pătrățelul C
1 2 3 ... j ... m
2 B
3
...
... C
Numim partiție a unui număr natural nenul n o mulțime de numere naturale nenule {p1,
p2, …, pk} care îndeplinesc condiția p1+p2+ …+pk = n.
Exemplu: pentru n = 4 programul va afișa:
4 = 1+1+1+1
4 = 1+1+2
4 = 1+3
4 = 2+2
4=4
12) Se dă o permutare a primelor n numere naturale. Se cer toate permutările care se pot
obține din aceasta încât nici o succesiune de două numere, existentă în permutarea
inițială, să nu mai existe în noile permutări.
13) Se cer toate soluțiile de așezare în linie a m câini și n pisici astfel încât să nu existe o
pisică așezată între doi câini.
14) Anagrame. Se citește un cuvânt cu n litere . Se cere să se tipărească toate anagramele
cuvântului citit. Se poate folosi algoritmul pentru generarea permutărilor.
15) Se dau primele n numere naturale. Dispunem de un algoritm de generare a combinărilor
de n elemente luate câte p pentru ele. Se consideră un vector cu n componente șiruri de
caractere, unde, fiecare șir reprezintă numele unei persoane. Cum adaptați algoritmul de
care dispuneți pentru a obține combinările de n persoane luate câte p?
16) Se citesc n numere naturale distincte. Se cere o submulțime cu p elemente astfel încât
suma elementelor sale să fie maximă în raport cu toate submulțimile cu același număr de
elemente.
17) Să se determine 5 numere de câte n cifre, fiecare cifră putând fi 1 sau 2, astfel încât
oricare dintre aceste 5 numere să coincidă exact în m poziții și să nu existe o poziție în
care să apară aceeași cifră în toate cele 5 numere.
18) Fiind dat un număr natural pozitiv n, se cere să se producă la ieșire toate descompunerile
sale ca sumă de numere prime.
19) Attila și regele. Un cal și un rege se află pe o tablă de șah. Unele câmpuri sunt “arse”,
pozițiile lor fiind cunoscute. Calul nu poate călca pe câmpuri “arse“, iar orice mișcare a
calului face ca respectivul câmp să devină “ars“. Să se afle dacă există o succesiune de
mutări permise (cu restricțiile de mai sus), prin care salul să poată ajunge la rege și să
revină la poziția inițială. Poziția inițială a calului, precum și poziția regelui sunt
considerate “nearse“.
20) Se dau n puncte în plan prin coordonatele lor. Se cer toate soluțiile de unire a acestor
puncte prin exact p drepte, astfel încât mulțimea punctelor de intersecție ale acestor
drepte să fie inclusă în mulțimea celor n puncte.
21) Găsiți toate soluțiile naturale ale ecuației 3x+y+4xz=100.
22) Să se ordoneze în toate modurile posibile elementele mulțimii {1,2,…,n} astfel încât
numerele i, i+1, …, i+k să fie unul după celălalt și în această ordine (i=1,i+k≤ n).
23) Se consideră o mulțime de n elemente și un număr natural k nenul. Să se calculeze câte
submulțimi cu k elemente satisfac, pe rând, condițiile de mai jos și să se afișeze aceste
mulțimi.
a) Conțin p obiecte date;
b) Nu conțin nici unul din q obiecte date;
c) Conțin exact un obiect dat, dar nu conțin un altul;
d) Conțin exact un obiect din p obiecte date;
e) Conțin cel puțin un obiect din p obiecte date;
f) Conțin r obiecte din p obiecte date, dar nu conțin alte q obiecte date;
24) Se dă un număr natural par n. Să se determine toate șirurile de n paranteze care se închid
corect.
Exemplu: pentru n=6: ((( ))), (() ()), () () (), () (()), (()) ()
25) Se dau n puncte albe și n puncte negre în plan, de coordinate întregi. Fiecare punct alb se
unește cu câte un punct negru, astfel încât din fiecare punct, fie el alb sau negru, pleacă
exact un segment. Să se determine o astfel de configurație de segmente astfel încât
oricare două segmente să nu se intersecteze. Se citesc n perechi de coordonate
corespunzând punctelor negre.
26) Să se genereze toate permutările de n cu proprietatea că oricare ar fi 2≤i≤n, există 1≤j≤i
astfel încât |v(i)-v(j)|=1.
Exemplu:
36 poate fi descompus ca:
2*2*3*3
2*2*9
2*18
3*3*4
.....
36) Se consideră mulțimea B={b1, b2,..., bn} formată în primele n litere ale alfabetului latin.
Elaborați un program bazat pe metoda reluării care generează toate submulțimile Bi= Bi
⊆B, formate exact din q litere.
Determinați numărul minim de culori m necesare pentru a colora harta. Evident, se cere
ca oricare două țări vecine să fie colorate diferit
38) Generarea combinărilor. Să se genereze combinări din n elemente luate câte m.
n!
Numărul combinărilor a n elemente luate câte m este calculată cu formula: Cnm = m!(n−m)!
39) Generarea produsului cartezian. Se consideră n mulțimi A1, A2, ... , An de forma
{1,2..,An}. Să se genereze produsul cartezian al acestor mulțimi.
Am considerat mulțimile de forma {1,2..,An} pentru a simplifica problema, în special la
partea de citire si afișare, algoritmul de generare rămânând nemodificat.
Identificăm următoarele particularități și condiții:
a) Fiecare element Xk din vectorul soluție aparține unei mulțimi {1,2..,Ak}. Aici este o
diferență fată de algoritmii anteriori în care fiecare element din soluție era luat din
aceeași mulțime și trebuie să avem grijă la acest fapt când scriem programul.
b) Nu există condiții între elementele vectorului soluție.
c) Obținem soluția când s-au generat n valori.
40) Generarea submulțimilor unei mulțimi. Generarea submulțimilor unei mulțimi A cu n
elemente se poate face cu ajutorul algoritmului de generare a combinărilor, apelându-le
repetat cu valorile 1, 2, ..., n pentru a genera submulțimile cu un element, apoi cele cu
două elemente, apoi cu 3 elemente etc.
Această modalitate de rezolvare este și mai complicată și mai puțin eficientă decât
următoarea, care se bazează pe generarea produsului cartezian {0,1}n. Această a doua
metodă este eficientă deoarece generează 2n soluții, adică exact atâtea câte submulțimi
are o mulțime cu n elemente.
Așadar, generăm toate combinațiile de lungime n cu valorile 0 și 1. Pentru fiecare
combinație parcurgem soluția X și afișăm elementele din mulțimea A cărora le corespund
valori 1 în X. Astfel, pentru combinația 001011 vom afișa elementele de pe pozițiile 3, 5
și 6 din mulțimea inițială.
Aranjamente și combinări
1) Să se genereze și să se numere toate numerele formate din p cifre distincte având cifrele
ordonate crescător.
2) Să se genereze și să se numere toate permutările mulțimii {1,2,3,...,n} care încep cu
valoarea 1.
3) Să se genereze și să se numere toate permutările mulțimii {1,2,3,...,n} care au
proprietatea că oricare două elemente alăturate au paritate diferită.
5) Generarea permutărilor. Fie dat numărul natural n. Să se genereze toate permutările din
n elemente a mulțimii A={1,2,3,… .. . ,n}.
Indicație: Se numesc permutări ale unei mulțimi A cu n elemente toate mulțimile
ordonate care se pot forma cu cele n elemente ale lui A. Pentru n ∈ N*, avem Pn =
1*2*3*...*n=n!
6) Generarea aranjamentelor. Să se genereze aranjamentele din n luate câte k a mulțimii
A={1,2,… n}.
𝑛!
𝐴𝑚
𝑛 = 𝑛(𝑛 − 1) … (𝑛 − 𝑚 + 1) = ,𝑛 ≥ 𝑚
(𝑛 − 𝑚)!
7) Să se genereze și să se numere toate submulțimile de câte p elemente ale mulțimii
{1,2,3,...,n}.
8) Se citește un număr natural n și un număr natural p mai mic decât n. Să se descompună n
în toate modurile ca sumă de p numere naturale.
9) Să se genereze toate numerele formate din 5 cifre impare distincte.
10) Se citește un cuvânt format doar din litere mici distincte. Să se genereze anagramele lui.
11) Se citește un număr natural n și apoi o mulțime cu n elemente numere naturale. Folosind
interschimbări de elemente generați și afișați permutările mulțimii citite.
1) Se citește a≥1, număr real. Se cere să se scrie o funcție care calculează ln(a) cu 3
zecimale exacte. Nu este permisă utilizarea funcției logaritmice ale limbajului.
2) Se citește un număr real x∈(-10000, 10000). Să se afișeze partea fracționară.
12) Se citește un număr real x. Să se calculeze radical de ordinul 3 din x folosind un algoritm
de tip Divide et impera.
13) Se citește un vector cu n elemente numere naturale. Să se determine elementul minim din
vector folosind divide et impera.
14) Folosind metoda divide et impera, scrieți o funcție care să determine dacă un tablou cu
elemente întregi este ordonat crescător.
15) Se citește un vector cu n elemente numere naturale. Să se calculeze suma elementelor
vectorului folosind divide et impera.
16) Se citesc două numere, n și x, n natural și x real pozitiv. Fără a folosi funcția pow,
extrageți cu 3 zecimale exacte radicalul de ordinul n din x.
17) Scrieți o funcție care să determine elementul minim și elementul maxim dintr-un tablou
cu elemente întregi folosind metoda divide et impera.
18) Să se rezolve ecuația 𝑥 3 + 𝑥 − 1 = 0 pe intervalul [0,1] folosind metoda divide et
impera.
19) Se citește un vector cu n elemente numere naturale. Să se calculeze CMMDC al
elementelor vectorului folosind divide et impera.
20) Se dă un vector sortat crescător (v[1..n]) ce conține valori reale distincte și o valoare x. Să
se găsească la ce poziție apare x în vectorul dat.
21) Se dă un șir neordonat S cu n - 1 numere distincte, selectate dintre cele n numere de
la 0 la n - 1. Toate sunt numere întregi, reprezentate pe 32 de biți. Folosind
metoda getBit(int i, int j) care întoarce al j-lea bit din reprezentarea binară a lui S[i],
determinați numărul lipsă.
Exemplu:
a) pentru șirul {0 1 9 4 5 7 6 8 2} lipsește numărul 3
b) getBit(7,3) întoarce al treilea bit din S[7]. S[7] este 8, în binar: 1000, deci bit-ul 3
este 1.
c) La un prim pas, se observă că bitul 3 este 0 pentru doar 7 numere din șir, deși între
0 și 9 sunt 8 numere care ar trebui să aibă bitul 3 egal cu 0, respectiv numerele de
la 0 la 7. Prin urmare, la primul pas ne dăm seama că numărul căutat este între 0 și
7.
22) Statistici de ordine. Se dă un vector de numere întregi neordonate. Scriind o funcție de
partiționare, folosiți Divide et Impera pentru:
a) a determina a k-lea element ca mărime din vector;
b) a sorta vectorii prin QuickSort.
Exemplu: pentru vectorul {0 1 2 4 5 7 6 8 9}, al 3-lea element ca ordine este 2, iar vectorul
sortat este {0 1 2 4 5 6 7 8 9}
23) Se dă un șir S de n numere întregi. Să se determine câte inversiuni sunt în șirul dat. Numim
inversiune o pereche de indici 1<=i<j<=n astfel încât S[i] > S[j].
Exemplu: în șirul {0 1 9 4 5 7 6 8 2} sunt 12 inversiuni.
24) Calculați subsecvența de sumă maximă pentru un vector A de n numere reale folosind o
abordare de tip desparte și stăpânește.
Exemplu: pentru 0.25 algoritmul poate da orice valoare între 0.499 și 0.501 inclusiv.
Tehnica Programării Dinamice
1) Dintr-un element ai,j al unei matrici An,n se poate ajunge în elementele ai+1,j, ai+1,j+1, ai+1,j-
1. Știind că fiecare element al matricei reține un număr natural, se cere un drum care
îndeplinește condițiile problemei și unește un element de pe linia 1 cu unul de pe linia n
astfel încât suma numerelor reținute de elementele pe unde trece drumul să fie maximă.
3 1 3
Exemplu: pentru n=3 și matricea 𝐴 = (4 1 2), drumul este a1,1, a2,1, a3,2, iar suma
3 7 1
este 3+4+7=14.
2) Problema diligenței. Un comis-voiajor are de făcut o călătorie cu diligența între două
orașe din vestul sălbatic. Călătoria cu diligența se desfășoară în n etape. În fiecare etapă
diligența merge, fără întrerupere, între două orașe. După o etapă diligența este schimbată,
iar comis-voiajorul decide în care oraș va merge în etapa următoare. Se știe că în fiecare
etapă, cu excepția ultimei etape, se poate ajunge în unul din cele k orașe. Se cunoaște
orașul de start, S și cel final, F (în ultima etapă se ajunge în orașul F). Pentru orice etapă
se cunosc toate distanțele între orașele care sunt puncte de pornire și cele care sunt puncte
de destinație.
S F
k orașe
Etapa 1 Etapa 2 Etapa n
Se cere să se decidă care sunt orașele destinație pentru o anumită etapă, astfel încât
lungimea totală a drumului, care trebuie afișată, să fie minimă.
3) Lucrare de control. Mai multor elevi li se cere să pună într-o anumită ordine un număr de
n<200 cuvinte formate numai din litere mici – ordinea exprimă faptul că aceste cuvinte se
succed după o anumită logică.
Exemplu: platon kant marx stalin havel.
Logica succesiunii constă în faptul că fiecare cuvânt poate fi definit folosind numai
cuvintele anterioare.
Fiecare elev îi transmite profesorului succesiunea de cuvinte care i se pare logică. Sarcina
profesorului constă în a acorda fiecărui elev una dintre notele 1, 2, 3, ..., n,
corespunzătoare numărului de cuvinte așezate într-o succesiune corectă. Pentru exemplul
1 avem următoarele note:
marx stalin kant platon havel 3
havel marx stalin kant platon 2
havel stalin marx kant platon 1
4) Un patron de gogoșărie a cumpărat un calculator și dorește să învețe să lucreze pe el.
Pentru aceasta va umple un raft de cărți dintr-o anumită serie. Raftul are lungimea L cm
(L este număr natural). Seria dispune de n titluri 1, 2, ..., n cu grosimile de n1, n2, ..., nn
cm (numere naturale).
Să se selecteze titlurile pe care le va cumpăra patronul astfel încât raftul să fie umplut
complet (suma grosimilor cărților cumpărate să fie egală cu lungimea raftului) și numărul
cărților achiziționate să fie maxim.
5) Mere-Pere. Se consideră n camere distincte, situate una după alta, astfel încât din camera
i (i∈{1, 2, …, n-1}) se poate trece doar în camera i+1. În fiecare cameră se găsesc mere
și pere în cantități cunoscute (bucăți).
O persoană cu un rucsac suficient de încăpător, inițial gol, pornește din camera 1, trece
prin camerele 2, 3, ..., n și iese. La intrarea în fiecare cameră descarcă rucsacul, și
încarcă, fie toate merele, fie toate perele din camera respectivă, după care trece în camera
următoare. Se presupune că pentru fiecare fruct transportat între două camere, persoana
consumă o calorie. Ce fel de fructe trebuie să încarce persoana în rucsac astfel încât după
parcurgerea celor n camere să consume un număr minim de calorii și care este acest
număr.
6) Se citesc n, număr natural, și n numere naturale. Se cere să se afișeze cea mai mare sumă
care se poate forma cu numere dintre cele n (fiecare număr poate participa o singură dată
la calculul sumei) și care se divide cu n. Afișați, de asemenea, și numerele care alcătuiesc
suma.
7) Problema care urmează prezintă o modalitate de compactare a unui fișier oarecare (de
date, executabil, etc.). După cum se știe, fișierul este reținut pe suport ca o succesiune de
0 și 1. Noi dispunem de un set de m secvențe de 0 și 1 din care nu lipsesc secvența care îl
conține numai pe 0 și secvența care îl conține numai pe 1. Se cere să găsim o
descompunere a șirului de 0 și 1 care alcătuiește fișierul într-un număr de minim de
secvențe din cele m. Dacă rezolvăm această problemă, putem înlocui secvența cu o adresă
și în acest fel fișierul va deveni o succesiune de adrese (în cazul existenței unor secvențe
lungi se realizează economia de suport).
Exemplu: Pentru m=6, secvențele sunt:
1. 0
2. 1
3. 0 0 1
4. 1 0 0
5. 1 1 1
6. 1 0 1
Fișierul este: 100111001
Se folosesc secvențele 4 5 și 3.
8) Pentru un triunghi ABC, cu vârfurile de coordonate întregi, definim costul său ca fiind
minimul ariilor dreptunghiurilor cu laturile paralele cu axele de coordonate care au pe
laturi vârfurile unui triunghi. De exemplu, cu vârfurile de coordonate (1,0), (5,0), (0,3)
costul atașat este egal cu 15. Fie un poligon convex, cu coordonatele vârfurilor numere
întregi. Numim triangularizare a poligonului o partiționare a sa ale cărui vârfuri sunt
vârfuri ale poligonului dat. Numim costul unei triangularizări ca fiind suma costurilor
triunghiurilor componente. Problema constă în realizarea unei triangularizări de cost
minim.
9) O tablă de șah se citește ca o matrice n x n în care pozițiile libere au valoarea 0, iar
piesele sunt marcate prin valoarea 1.
Pe prima linie pe coloana j se află un pion. Să se determine drumul pe care poate ajunge
pionul pe ultima linie luând un număr maxim de piese. Poziția inițială a pionului se
consideră liberă.
Pionul aflat în poziția i, j se poate deplasa astfel:
- în poziția i+1, j dacă e liberă
- în poziția i+1, j-1 dacă e piesă în această poziție
- în poziția i+1, j+1 dacă e piesă în această poziție
Exemplu:
53
0000
01010
01111
00011
01011
Drumul optim este:
13
22
33
44
55
Pe acest drum pionul ia 4 piese.
10) În fișierul date.in se află pe prima linie un număr natural n cel mult 20 000, iar pe liniile
următoare o matrice pătratică de dimensiune n care conține doar elemente 0 și 1.
Să se determine cel mai mare pătrat care conține doar valori 1. Se vor afișa în fișierul text
date.out următoarele valori separate prin spațiu: latura pătratului, linia și coloana colțului
stânga sus al pătratului. Dacă exista mai multe astfel de pătrate se va afișa doar cel mai de
sus.
Exemplu:
5
11000
11101
11111
11100
10111
Se afișează 3 2 1
11) Se dau n(n+1)/2 numere naturale aranjate într-un triunghi format din elementele de sub și
de pe diagonala unei matrici pătratice de ordin n.
Se calculează sume pornind din elementul de pe prima linie prin deplasări în vecinii de
sub și din dreapta. Găsiți suma maximă care se poate calcula astfel și care sunt valorile
din care se obține suma maximă.
Exemplu:
n=4
2
35
634
5614
suma maximă este 17
și se obține din valorile 2 3 6 6
12) Se citește o matrice pătratică de ordin n formată din numere naturale.
Se calculează sume pornind de pe prima linie prin deplasări în vecinii de sub și din
dreapta. Găsiți suma maximă care se poate calcula astfel și care sunt valorile din care se
obține suma maximă.
Exemplu:
n=4
7158
3561
6348
5614
suma maximă este 23
și se obține din valorile 5 6 8 4
13) Se citește o matrice pătratică de ordin n formată din numere naturale.
Se calculează sume pornind de pe prima linie prin deplasări pe linia următoare în unul
dintre cei 3 vecini de pe aceeași coloană sau de pe cele 2 alăturate. Găsiți suma maximă
care se poate calcula astfel și care sunt valorile din care se obține suma maximă.
Exemplu:
n=4
8158
3561
6348
5614
suma maxima este 26
și se obține din valorile 8 6 8 4
14) Un păianjen a țesut o pânză de formă dreptunghiulară formată din n linii orizontale și m
linii verticale.
Calculați în câte moduri poate el merge din colțul stânga-sus în colțul dreapta-jos făcând
un număr minim de pași. (n+m-2)
Exemple:
pentru n=3 și m=3 există 6 moduri
pentru n=1 și m=5 există un singur mod
1 1 1
1 2 3
1 3 6
n=3 și
m=3
15) Se citește un număr natural n și apoi un vector cu n elemente numere întregi. Determinați
secvența din vector care are suma elementelor maximă.
Exemplu:
n=9
-2 1 -3 3 -1 4 -6 2 3
secvența de sumă maximă este 3 -1 4 și are suma 6
16) Subșir crescător maximal. Se citește un număr n și apoi un șir de n numere întregi. Găsiți
cel mai lung subșir al șirului citit care are proprietatea că elementele sunt în ordine
crescătoare.
Dacă există mai multe subșiruri de lungime maximă se va afișa unul dintre ele.
Exemplu:
date.in
9
423052698
date.out
23569
17) Clădirea Finanțelor publice este formată din birouri dispuse într-un dreptunghi cu n x m
elemente. Între două birouri se poate trece dacă sunt alăturate pe linie sau pe coloană.
Pentru fiecare birou se cunoaște valoarea taxei care trebuie plătită în acel birou (valoare
naturală). Un contribuabil intră în clădire prin biroul 1,1 și trebuie să o părăsească prin
biroul n, m. Calculați suma minimă a taxelor pe care le poate plăti contribuabilul de la
intrare până la ieșirea din clădire.
Exemplu:
n=4, m=3, dispunerea birourilor și taxa din fiecare:
372
643
631
622
Valoarea minimă pe care o poate plăti contribuabilul este 18 (corespunde parcurgerii
birourilor cu taxele: 3 7 2 3 1 2)
18) O livadă este împărțită în n x m zone. În fiecare zonă crește câte un pom. Din fiecare pom
cade pe jos o cantitate de fructe. În zona stânga-sus se află un arici care vrea să ajungă în
zona dreapta-jos. Ariciul se poate deplasa doar pe două direcții: în jos sau spre dreapta.
Determinați cantitatea maximă de fructe pe care le poate aduna ariciul prin deplasarea din
poziția inițială în cea dorită.
Citirea se face din fișierul date.in care conține pe prima linie dimensiunile livezii, adică n
și m, și apoi cantitatea de fructe din fiecare dintre cele n x m zone.
Afișarea cantității maxime de fructe se va face în fișierul date.out.
Exemplu:
date.in
33
041
011
101
date.out
7
19) Din fișierul date.in se citește un număr natural n (n<=300) și apoi un șir cu n elemente
numere naturale cu cel mult 9 cifre fiecare.
Calculați și afișați în fișierul date.out numărul de subșiruri strict crescătoare care se pot
forma în șirul citit.
Exemplu:
date.in
5
12342
date.out
17
Explicație: subșirurile strict crescătoare sunt:
1 13 123
2 14 124
3 12 134
4 23 234
2 24 1234
12 34
20) Se dă o matrice pătratică de ordin n care conține numere naturale și care are liniile și
coloanele numerotate de la 1 la n. Se citește apoi un număr natural m și n perechi de poziții
din matrice de forma (i1, j1) și (i2,j2) astfel încât i1 să fie mai mic decât i2 și j1 să fie mai mic
decât j2.
Calculați și afișați pentru fiecare pereche de poziții suma elementelor din matrice aflate în
submatricea care are colțul stânga-sus în (i1,j1) și coltul dreapta-jos în (i2,j2).
Exemplu:
date.in
3
121
361
136
3
2233
2133
1113
date.out
16 20 4
21) Problema Rucsacului. Un camion poate transporta T tone de mobilă. Există n piese de
mobilă, fiecare caracterizată de greutatea G[i] și de valoarea V[i] adusă de transportarea sa.
Să se decidă ce piese de mobilă vor fi transportate pentru a aduce o valoare maximă (soluție
optimă).
Exemplu:
Fie cantitatea maximă admisă T = 10, și un număr de piese de mobilă din care putem alege
egal cu 6. Piesele de mobilă sunt descrise de perechi de forma (greutate, valoare), după cum
urmează: (3, 7), (3, 4), (1, 2), (1, 9), (2, 4), (1, 5).
Profitul maxim pe care îl putem obține este 29 și acesta se realizează dacă vom transporta
obiectele de mobilier cu indecșii 1, 2, 4, 5 și 6.
22) Parantezarea unei expresii booleene. Se dă o expresie booleană exprimată prin șirurile “true”,
“false”, “and”, “or”, “xor” . Numărați modurile în care se pot așeza paranteze astfel încât
rezultatul să fie “true”.
Exemplu: pentru expresia: true and false xor true
există două modalități de parantezare, astfel încât rezultatul să fie “true”:
((true and false) xor true)
sau
true and (false xor true))
23) Suma în triunghi. Să considerăm un triunghi format din n linii (1<n≤100), fiecare linie
conținând numere întregi din domeniul [1,99], ca în exemplul următor:
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Problema constă în scrierea unui program care să determine cea mai mare sumă de numere
aflate pe un drum între numărul de pe prima linie și un număr de pe ultima linie. Fiecare
număr din acest drum este situat sub precedentul, la stânga sau la dreapta acestuia.
24) Submatrice pătratică maximală. Dându-se o matrice binară cu m linii și n coloane,
determinați o submatrice pătratică de dimensiune maximă care are toate elementele egale cu
1. De exemplu, fie matricea binară următoare:
0 1 1 0 1
1 1 0 1 0
0 1 1 1 0
1 1 1 1 0
1 1 1 1 1
Submatricea pătratică de dimensiune maximă care are toate elementele egale cu 1 este:
1 1 1
1 1 1
1 1 1
25) Dreptunghiuri. În timpul orei de matematică, Bianca nu este atentă și începe să deseneze N
dreptunghiuri pe caiet. La un moment dat, își pune următoarea întrebare: Care este numărul
maxim K de dreptunghiuri, pe care poate să le aleagă, astfel încât primul să încapă în al
doilea, al doilea în al treilea,...., al k-1-lea în al k-lea? Pentru că nu știe răspunsul la această
întrebare, îl roagă pe prietenul ei Ștefan să o ajute. Ștefan se gândește puțin și găsește un
algoritm prin care să rezolve problema Biancăi și să afle numărul maxim. Găsiți și voi
algoritmul lui Ștefan.
Se dau N dreptunghiuri pentru care se știe lungimea L și lățimea l. Se cere să răspundeți la
întrebarea Biancăi. Se consideră că un dreptunghi D1 cu lungimea L1 și lățimea l1 încape în
alt dreptunghi D2 cu L2 și l2 dacă L1<L2 și l1<l2.
Date de intrare: Fișierul de intrare date.in conține pe prima linie numărul N de
dreptunghiuri. Următoarele N linii conțin 2 numere întregi ce reprezintă lungimea L și
lățimea l fiecărui dreptunghi.
Date de ieșire: În fișierul de ieșire date.out se va afișa pe primul rând numărul maxim K de
dreptunghiuri ce pot fi alese astfel încât primul să intre în al doilea, al doilea în al treilea,....,
al k-1-lea în al k-lea.
Exemplu:
date.in
7
26 12
14 17
83
18 14
52
20 17
16 2
date.out
4
26) Se consideră un arbore cu n noduri numerotate de la 1 la n. Se știe că rădăcina arborelui este
nodul 1. Fiecare nod i are asociat un număr natural nenul vi. Să se determine suma maximă
care se poate obține alegând în mod convenabil o submulțime de noduri, astfel încât dacă
este ales un nod i, în submulțime nu poate fi nici nodul tată al lui i, nici eventualii fii ai lui i.
Date de intrare: Fișierul de intrare date.in conține pe prima linie numărul n. Pe a doua linie,
separate prin câte un spațiu, se află numerele naturale t1,t2,...,tn, în care ti reprezintă nodul
tată al nodului i. Pentru că 1 este rădăcina arborelui, atunci întotdeauna t1=0. Pe a treia linie,
separate prin câte un spațiu, se află numerele naturale v1,v2,...,vn, unde vi este valoarea
asociată nodului i.
Date de ieșire: Fișierul de ieșire date.out va conține pe prima linie un singur număr natural
reprezentând suma maximă posibilă.
Restricții:
- 3 <= n <= 100 000
- 1 <= vi <= 1000
Exemplu:
date.in
5
01133
34453
date.out
12
Explicații:
Arborele are 5 noduri. Nodurile 2 și 3 au ca nod tată pe 1, iar nodurile 4 și 5 au ca tată pe 3.
Nodul 1 are asociată valoarea 3, nodurile 2 și 3 au asociată valoarea 4, nodul 4 are asociată
valoarea 5, iar nodul 5 are valoarea 3 asociată.
Obținem suma maximă 12 dacă se aleg nodurile 2, 4, 5: v2+v4+v5=4+5+3=12.
27) În timpul liber Algorel și Gigel născocesc tot felul de jocuri. Ultima lor invenție în domeniu
este foarte ciudată: Gigel desenează un arbore cu N noduri numerotate de la 1 la N pe o foaie
de hârtie, apoi tot el alege o secvență S de numere întregi, nu neapărat distincte, din
intervalul [1, N] și îl lasă pe prietenul său Algorel să aleagă poziția de start în această secvență.
Cei doi mută alternativ, fiecare mutare constând în alegerea unei poziții din S. Numărul de
puncte obținute în urma fiecărei mutări este egal cu valoarea secvenței în poziția aleasă.
Punctajul final al fiecărui jucător este suma punctelor obținute în urma mutărilor efectuate de
el.
Din poziția i se poate muta în poziția j dacă și numai dacă:
- i<j
- Si este strămoș al nodului Sj sau Sj este strămoș al nodului Si. Spunem că un
nod x este strămoș pentru un nod y dacă x este situat pe drumul între rădăcina arborelui
și y în arborele desenat de Gigel.
De când au inventat jocul Algorel vrea să știe care este diferența maximă dintre punctajul său
și cel al lui Gigel pe care o poate obține pentru fiecare poziție de start.
Fiind date structura arborelui și secvența aleasă de Gigel scrieți un program care determină
informațiile dorite de Algorel știind că Gigel joacă perfect.
Date de intrare: Prima linie a fișierului date.in conține două numere întregi, N și M,
reprezentând numărul de noduri din arbore și respectiv lungimea secvenței S. Următoarea linie
conține N–1 numere ce descriu structura arborelui: numărul de pe poziția i (cu i între 1 și N–
1) este “tatăl” nodului i+1. Nodul 1 este întotdeauna rădăcina arborelui. Următoarea linie
conține M numere întregi din intervalul [1, N] reprezentând secvența S. Valorile scrise pe
aceeași linie sunt separate prin spații.
Date de ieșire: Fișierul date.out va conține M linii, pe linia i aflându-se un întreg reprezentând
diferența maximă de punctaj pe care o poate obține Algorel dacă începe jocul din poziția i a
secvenței S.
Restricții:
- 1 <= N <= 50 000
- 1 <= M <= 50 000
- Rădăcina arborelui este întotdeauna nodul 1
- Un nod este strămoș și pentru el însuși
- Dacă un jucător poate muta este obligat să o facă.
Exemplu:
date.in
45
411
41231
date.out
3
-1
1
2
1
28) Se consideră o arborescentă (arbore cu rădăcină) formată din N noduri, numerotate de
la 1 la N. Nodul 1 este considerat rădăcină. Scrieți un program care să determine numărul
minim de arce care trebuie eliminate pentru a obține un subarbore cu P noduri. Subarborele
obținut nu trebuie să conțină neapărat nodul 1.
Date de intrare: Fișierul de intrare date.in conține pe prima linie numerele naturale N și P,
separate printr-un spațiu.
Următoarele N - 1 linii conțin fiecare câte două numere I și J, cuprinse între 1 și N, separate
printr-un spațiu, cu semnificația că nodul J este descendent direct al nodului I (există arc de
la I la J).
Date de ieșire: În fișierul de ieșire date.out va conține o singură linie pe care se va scrie
numărul natural X reprezentând numărul de arce eliminate (minim posibil).
Restricții:
- 1<=P<=N<=150
- 0<=X<=N-1
Exemplu:
date.in
11 6
12
26
27
28
13
14
49
4 10
4 11
15
date.out
2
Explicație:
De exemplu, se elimină arcele 1 5 și 1 4.
Aceasta nu este singura soluție (de exemplu, s-ar putea elimina și arcele 1 5 și 1 2).
12) Realizați un program care citește dintr-un fișier text n numere complexe si calculează
produsul lor.
13) Să se implementeze o clasă Grupa ce reține studenții dintr-o grupă. Clasa va avea metode
pentru salvarea respectiv încărcarea grupei într-un/dintr-un fișier.
14) Să se realizeze un program C++ ce realizează concatenarea mai multor fișiere text al căror
nume se preiau în linia de comandă. Se vor utiliza stream-uri.
15) Sa se implementeze clasa Matrice utilizând template-uri reprezentată sub formă liniară ale
cărei elemente pot fi numere întregi, reale. Să se supraîncarce operatorii: +,-,*,citire
(>>),afișare (<<).
16) Sa se implementeze clasa Multime ale cărei elemente pot fi de orice tip. Supraîncărcați
operatorii: +(reuniune), -(diferența), *(intersecție).
17) Implementați clasa ArboreBinar ce implementează noțiunea de arbore binar ale cărui noduri
pot fi de orice tip: numere întregi, reale, obiecte. Clasa va conține metodele:
- creare arbore
- parcurgere în inordine
- parcurgere în postordine
- parcurgere în preordine
18) Implementați clasa ArboreOarecare ce implementează noțiunea de arbore oarecare ale cărui
noduri pot fi de orice tip: numere întregi, reale, obiecte. Clasa va conține metodele:
- creare arbore
- parcurgere în preordine
- parcurgere în postordine
- parcurgere în inordine
19) Sa se implementeze clasa Coada ale cărei elemente pot fi de orice tip. Clasa va conține
metodele:
- Creare coada
- Afișare coada
- Inserare în coadă
- Eliminare din coadă
20) Să se creeze clasa NumarRațional, care permite lucrul cu numere raționale de forma x=p/q,
ce cuprinde:
a) Două date membru p și q de tip întreg
b) Constructori ce permit declarații ca: NumarRational a, a(2,5)
c) Destructor
d) Metode de adunare, înmulțire, împărțire a două numere raționale
e) Metodă de simplificare a unui număr rațional cu cel mai mare divizor comun dintre p
și q
f) Metodă de amplificare a unui număr rațional cu un număr natural transmis prin
parametru
Scrieți un program care citește două numere raționale și tipărește suma, produsul, câtul
acestora, precum și verificarea unui număr rațional dacă este ireductibil, în caz contrar să se
simplifice numărul ca să devină ireductibil. Să se implementeze algoritmul care aduce două
fracții la același numitor comun.
21) Să se creeze clasa NumarComplex, care permite lucrul cu numere complexe de forma
z=a+bi, ce cuprinde:
a) Două date membru a, b de tip float
b) Constructori ce permit declarații ca: NumarComplex z, z(2) (ce reține numărul
z=2+0i, z1.2, -7.5)
c) Destructor
d) Metode de adunare, scădere, înmulțire, împărțire a două numere complexe
Scrieți un program care citește două numere complexe și tipărește suma, diferența, produsul,
câtul lor.
22) Să se creeze clasa NumarNatural, ce cuprinde:
a) Dată membru x, întreg
b) Următoarele metode:
a. Numărul de cifre zecimale ale lui x
b. Reprezentarea în baza 2 a lui x
c. Inversul (oglinditul) său
d. Proprietatea de primalitate a lui x
c) Constructori ce permit declarații ca: NumarNatural n, n(213)…
d) Destructor
Scrieți un program care citește un număr natural și care afișează numărul de cifre ale
numărului reprezentat în baza 2, verifică dacă este palindrom și afișează mesajul ”E PRIM”
dacă numărul nu are divizori în afară de 1 și el însuși, sau mesajul ”NU E PRIM”, în caz
contrar.
23) Câmpul n1 - un număr întreg. Câmpul n2 – număr real nenul. Creați metoda power() – va
returna numărul n2 la puterea n1.
24) Câmpul n1 - un număr întreg, Câmpul n2 – număr real. Creați metoda întreg() - care va
returna partea întreagă a fracției n1/n2. Metoda trebuie să verifice inegalitatea numitorului cu
zero.
25) Câmpul n1 - un număr real pozitiv (prețul bunurilor). Câmpul n2 – număr întreg pozitiv
(numărul de bunuri). Creați metoda cost() – va returna numărul ce reprezintă valoarea totală
a bunurilor.
26) Câmpul n1 - un număr real (suma depozitul în lei). Câmpul n2 – număr real (procentul
anual). Creați metoda valoare(int) – va returna suma de bani împreună cu calcularea
dobânzii timp de 1, 2, 3, 4 ani.
27) Câmpul n1 - un număr întreg pozitiv (numărul de ore). Câmpul n2 – un număr întreg pozitiv
(numărul de minute). Creați metoda secunde() – va returna numărul total al secundelor
scrise în cele două câmpuri.
28) Câmpul n1 - un număr real (coordonata x). Câmpul n2 – număr real (coordonata y). Creați
metoda distanta() – va returna distanța de la punctul (0,0) la punctul cu coordonatele (n1,
n2).
29) Câmpul n1 - un număr întreg pozitiv (calorii la 100g). Câmpul n2 – număr real (greutatea
produsului în kilograme). Creați metoda calorii() – va returna numărul de calorii ale
produsului.
A. În calitate de clasă de bază se va crea clasa triad.
Date: trei numere reale;
Metode: constructorul cu/fără parametri, citire și afișare.
30) Creați clasa triunghi, derivata clasei triad. Pentru clasa triunghi vor fi implementate metode
pentru determinare a suprafeței, a perimetrului și o metodă prin intermediul căreia se va
verifica dacă datele introduse pot fi lungimile laturilor unui triunghi. De la tastatură se citesc
datele despre n triunghiuri. Elaborați un program prin intermediul căruia, la ecran se vor
afișa datele despre toate triunghiurile, triunghiul cu suprafață maximă și triunghiul cu
perimetru maxim.
31) Creați clasa paralelogram, derivata clasei triad. Pentru clasa paralelogram vor fi
implementate metodele de determinare a suprafeței și a perimetrului. De la tastatură se citesc
datele despre n paralelograme. Elaborați un program prin intermediul căruia la ecran se vor
afișa datele despre toate figurile, paralelogramul cu suprafață maximă, paralelogramul cu
perimetru maxim.
B. În calitate de clasă de bază se va crea clasa persoana.
Date: nume, prenume, anul, cnp (codul personal de 13 cifre);
Metode: citire, afișare, vârsta.
32) Creați clasa Salariat, derivata clasei persoana. Pentru clasa salariat vor fi adăugate:
Date: numărul de ore lucrate, plata pentru o oră, anul angajării;
Metode: vor fi redefinite metodele de citire și afișare, salariu. Salariul va fi determinat
conform formulei: nr_ore*plata.
De la tastatură se citesc datele despre n salariați. Elaborați un program prin intermediul
căruia la ecran se vor afișa datele despre toți salariații, salariatul cel mai tânăr și salariatul cu
salariu maxim.
33) Creați clasa Student, derivata clasei persoana. Pentru clasa student vor fi adăugate:
Date: media notelor curente, grupa;
Metode: vor fi redefinite metodele de citire și afișare, bursa. Bursa va fi determinată
conform formulei: media*75 lei, dacă media este mai mare decât 7.5, în caz contrar va fi 0.
De la tastatură se citesc datele despre n studenți. Elaborați un program prin intermediul
căruia la ecran se vor afișa datele despre toți studenții, studentul cel mai tânăr, studentul cu
bursa maximă.
34) Să se definească o clasă punct cu 2 câmpuri x și y pentru coordonatele unui punct în plan.
- Să se scrie constructori de inițializare si de copiere pentru clasa punct.
- Să se scrie metode pentru citirea și afișarea variabilelor de tip punct.
- Să se creeze o clasă triunghi formată din 3 puncte în plan.
- Să se scrie constructori pentru clasa triunghi.
- Să se scrie metode pentru citirea și afișarea obiectelor de tipul triunghi.
- Să se scrie metode pentru calculul perimetrului și a ariei unui triunghi.
35) Creați obiectul cerc.
Date: lungimea razei;
Metode: citire, afișare, inițializare, determinarea lungimii discului, a suprafeței și a
diametrului.
Se vor introduce datele despre două cercuri și se vor afișa datele despre cercul cu suprafața
maximă și cercul cu lungimea discului minimală.
36) Creați obiectul trapez_isoscel.
Date: baza mare, baza mică, înălțimea;
Metode: citire, afișare, inițializare, determinare a perimetrului și ariei.
Se vor introduce datele despre două trapeze și se va afișa trapezul cu suprafața maximă și
trapezul cu perimetrul minim.
37) Creați obiectul paralelogram.
Date: lungimile laturilor și înălțimea;
Metode: citire, afișare, inițializare, determinare a perimetrului și ariei.
Se vor introduce datele despre două paralelograme și se vor afișa datele despre
paralelogramul cu suprafața maximă și paralelogramul cu perimetrul minim.
A. În calitate de clasă de bază se va crea clasa triad.
Date: trei numere reale;
Metode: constructorul cu/fără parametri, citire și afișare.
38) Creați clasa trapez_isoscel, derivata clasei triad. Pentru clasa trapez_isoscel vor fi
implementate metodele de determinare a suprafeței și a perimetrului. De la tastatură se citesc
datele despre n trapeze isoscele. Elaborați un program prin intermediul căruia la ecran se vor
afișa datele despre toate figurile, trapezul cu suprafață maximă, trapezul cu perimetru
maxim.
39) Creați clasa prismă (baza este dreptunghi), derivata clasei triad. Pentru clasa prismă vor fi
implementate metodele de determinare a suprafeței totale, laterale și de determinare a
volumului. De la tastatură se citesc datele despre n prisme. Elaborați un program prin
intermediul căruia, la ecran se vor afișa datele despre toate prismele, prisma cu suprafață
maximă, prisma cu volumul maxim.
40) Creați clasa piramidă (baza este dreptunghi), derivata clasei triad. Pentru clasa piramidă vor
fi implementate metodele de determinare a suprafeței totale, laterale și de determinare a
volumului. De la tastatură se citesc datele despre n piramide. Elaborați un program prin
intermediul căruia, la ecran se vor afișa datele despre toate piramidele, piramida cu suprafață
maximă, piramida cu volumul maxim.
41) Se consideră drept bază clasa dreptunghi. În baza acestei clase să se derive clasele piramidă
și prismă. Să se implementeze polimorfismul pentru metodele: citire, afișare, suprafața și
volum. De la tastatură se citește numărul de figuri. Elaborați un program care va permite :
a) citirea figurilor de la tastatură;
b) afișarea acestora;
c) afișarea figurilor sub formă de piramidă;
d) afișarea figurilor sub formă de prismă;
e) afișarea figurii cu suprafață maximă;
f) afișarea figurii cu volum maxim;
g) afișarea volumului total al figurilor;
h) afișarea suprafeței totale a figurilor;
i) sortarea figurilor în ordine descrescătoare suprafeței.
42) Se consideră drept bază clasa paralelogram. În baza acestei clase se derive clasele piramidă
și prismă. Să se implementeze polimorfismul pentru metodele: citire, afișare, suprafața și
volum. De la tastatură se citește numărul de figuri. Elaborați un program care va permite:
a) citirea figurilor de la tastatură;
b) afișarea acestora;
c) afișarea figurilor sub formă de piramidă;
d) afișarea figurilor sub formă de prismă;
e) afișarea figurii cu suprafață maximă;
f) afișarea figurii cu volum maxim;
g) afișarea volumului total al figurilor;
h) afișarea suprafeței totale a figurilor;
i) sortarea figurilor în ordine descrescătoare suprafeței.
43) Se consideră drept bază clasa cerc. În baza acestei clase se derivă clasele con și cilindru. Să
se implementeze polimorfismul pentru metodele: citire, afișare, suprafața și volum. De la
tastatură se citește numărul de figuri. Elaborați un program care va permite:
a) citirea figurilor de la tastatură;
b) afișarea acestora;
c) afișarea figurilor sub formă de con;
d) afișarea figurilor sub formă de cilindru;
e) afișarea figurii cu suprafață maximă;
f) afișarea figurii cu volum maxim;
g) afișarea volumului total al figurilor;
h) afișarea suprafeței totale a figurilor;
i) sortarea figurilor în ordine descrescătoare suprafeței.
44) Implementați o clasă numită vector utilă pentru operațiile cu tablourile de numere întregi,
având ca date membru un tablou de numere întregi (int elem[20]) și numărul efectiv de
elemente ale acestuia (int n). Includeți în clasă metode corespunzătoare pentru citirea unui
vector de la tastatură, înmulțirea tuturor elementelor cu un scalar, adăugarea unui nou
element în vector, eliminarea unui element din vector și afișarea respectivului vector. În
exteriorul clasei definiți o funcție pentru adunarea a 2 elemente de tip vector.
45) Implementați o clasă numită vector utilă pentru operațiile cu tablourile de numere întregi,
având ca date membru un tablou de numere întregi (int elem[20]) și numărul efectiv de
elemente ale acestuia (int n). Includeți în clasă metode corespunzătoare pentru citirea unui
vector de la tastatură, adăugarea unui nou element în vector, eliminarea unui element din
vector și afișarea respectivului vector.
46) Să se implementeze clasa mulțime care permite manipularea mulțimilor de numere. Clasa
conține un constructor cu parametri și metode pentru realizarea operațiilor de reuniune și
intersecție a 2 mulțimi
47) Să se definească clasa matrice și să se implementeze o funcție friend care realizează
adunarea a 2 matrici;
48) Să se implementeze clasa carte cu atributele autor si ISBN derivată din clasa publicație care
are atributele nume și număr de pagini.
49) Să se implementeze o clasă dreptunghi definită prin colțurile stânga-sus și dreapta-jos,
derivată din clasa Point care conține coordonatele unui punct.
50) Să se implementeze clasa număr_rațional care sa conțină ca atribute numitorul și
numărătorul. Clasa conține un constructor cu parametri și metode pentru adunare, scădere,
înmulțire
51) Implementați o clasă care calculează suma elementelor de pe fiecare coloană și le introduce
într-un vector.
52) Să se implementeze clasa automobil cu atributele culoare, nr. uși, marca, derivată din clasa
mașina cu atributele nr. roți și greutate.
53) Să se implementeze într-o clasă matrice o metodă care calculează suma elementelor de sub
diagonala principală și o introduce într-un atribut membru.
54) Să se implementeze clasa student având ca atribute nume, prenume, nota1, nota2, și ca
metode un constructor cu parametri, funcții de acces pentru toate atributele și o metodă care
determină nota maximă.
55) Pornind de la clasa de baza persoana (nume, vârsta, constructor cu parametri), să se
implementeze clasa derivata medic (specializare, constructor, funcția de acces și funcția de
afișare atribute).
56) Să se implementeze clasa dreptunghi (lungime, lățime, constructor implicit, constructor cu
parametri). Definiți funcția friend pentru calculul ariei și perimetrului.
57) Pornind de la clasa punct (x, y, constructor, funcția acces, metoda pentru distanță) rezultă
clasa dreptunghi. Construiți o funcție friend pentru clasa dreptunghi care verifică dacă
dreptunghiul e pătratic.
1) Realizați o aplicație Magazin*, prin intermediul căruia vor fi gestionate telefoanele mobile
ale unui magazin. Despre un telefon se cunosc următoarele date: marca, anul ediției,
culoarea, prețul, termenul de garanței, tipul camerei video etc.
2) Realizați o aplicație Hoteluri*, prin intermediul căruia vor fi administrate hotelurile dintr-o
țară. Despre un hotel se cunosc următoarele date: nume hotel, adresa, numărul de stele,
numărul de odăi (camere), costurile minim și maxim pentru o cameră etc.
3) Realizați o aplicație Salon Auto* prin intermediul căruia vor fi gestionate automobilele
dintr-un salon auto. Despre un automobil se cunosc următoarele date: marca, anul ediției,
culoarea, prețul, capacitatea motorului, consumul la 100 km etc.
4) Realizați o aplicație de lucru cu Teste Grilă*,
Un test grilă este format dintr-un număr variabil de itemi. Un item constă într-o întrebare pentru
care se oferă exact patru variante de răspuns, dintre care doar un singur răspuns este corect.
Când se generează un test grilă, se aleg în mod aleatoriu itemi distincți din lista itemilor
disponibili, numărul acestora fiind prestabilit (dar fără a depăși 100). La rezolvarea unui test
grilă, pentru evaluare vom considera că toți itemii din test au aceeași pondere pentru calculul
punctajului la test. La evaluare trebuie să se afișeze punctajul total obținut la test, dar și
feedback punctual pentru fiecare item. Feedbackul poate fi doar Corect/ Incorect sau puteți afișa
un feedback mai elaborat, specific itemului respectiv (pentru itemii care au asociat un feedback
constructiv).
5) Realizați o aplicație pentru jocul de Blackjack*
Blackjack, cunoscut și sub numele de 21, este unul dintre cele mai populare jocuri. de cărți de
cazino din lume. Regulile jocului pot fi consultate pe Internet .
o evidenta împrumuturilor (un împrumut este identificat prin cota cărții împrumutate,
codul cititorului care a împrumutat cartea, data la care a avut loc împrumutul și data
la care a fost restituită cartea împrumutată) ; aplicația trebuie să permită realizarea
unui împrumut, restituirea unei cărți, vizualizarea tuturor împrumuturilor restante
(cărțile pentru care termenul de predare a fost depășit, împreună cu datele cititorilor
care au împrumutat aceste cărți), vizualizarea tuturor împrumuturilor unui cititor,
vizualizarea tuturor cititorilor care au împrumutat o anumită carte etc.
Într-o dată membră statică veți reține numărul de zile pentru care poate fi împrumutată o
carte (același pentru toate cărțile și pentru toți cititorii).
8) Realizați o aplicație Programare la Dentist*
CATEDRA INFORMATICĂ
Practica de specialitate I
(Times New Roman, 18pt, bold, interval 1.0, centrat)
Autor:
Elevul(a) gr. INF 11512 G,
învățământ cu frecvență la zi,
Ion POPESCU
____________________
(semnătura)
(Times New Roman, 12pt)
Conducător de practică:
profesor, gr. didactic I,
Galina LUNCAȘU
____________________
(semnătura)
(Times New Roman, 14pt)
Chişinău, 2017
(Times New Roman, 14pt, bold, centrat)
2. Cuprinsul
CUPRINSUL
I. AGENDA ..............................................................................................................................3
II. PROBLEMELE REZOLVATE
2.1. Modulul 1 (denumirea din conținuturi)..............................................................................4
Problema 1......................................................................................................................5
Problema 2......................................................................................................................7
......................
2.2. Modulul 2 (denumirea din conținuturi)..............................................................................24
Problema 1.....................................................................................................................25
Problema 2.....................................................................................................................27
......................
III. CONCLUZII ....................................................................................................................40
IV. BIBLIOGRAFIE...............................................................................................................42
V. ANEXE.................................................................................................................................43
5. Concluzii
- Analiza succintă, rezumativă a rezultatelor obținute, atât în cadrul studierii problemelor
teoretice, cât și a materialului experimental realizat și aprecierea acestor rezultate. Se vor
menționa modalitățile și nivelul de realizare a obiectivelor formulate;
- Reflectarea opiniilor și a contribuției personale în studierea și soluționarea problemei
(problemelor) abordate, a elementelor noi de investigare și tratare a problemei respective,
se va efectua generalizarea experiențelor, se vor formula recomandări și propuneri de
utilizare practică etc.