Teorie
Subprogramele sunt blocuri de cod care îndeplinesc o anumită sarcină și care pot fi apelate ori de câte ori este nevoie. Ele ajută la structurarea programelor și la evitarea repetiției de cod.
1. Subprograme fără tip (void) – nu întorc niciun rezultat, execută doar instrucțiuni.
void salut() {
cout << "Buna ziua!";
}
2. Subprograme cu tip – întorc o valoare (int, double, char etc.) către apelant prin instrucțiunea return.
int patrat(int x) {
return x * x;
}
3. Parametri formali și reali – parametrii formali sunt cei definiți în antetul subprogramului, iar parametrii reali sunt valorile transmise la apel.
4. Parametri de intrare și de intrare-ieșire – implicit, parametrii se transmit prin valoare (doar ca intrare).
Dacă adăugăm & în fața parametrului, acesta devine parametru de intrare-ieșire: modificările făcute în subprogram se reflectă și în programul apelant.
void dubleaza(int &x) {
x = x * 2;
}
5. Variabile globale și variabile locale – • Variabilele globale sunt declarate în afara oricărui subprogram și pot fi folosite peste tot. • Variabilele locale sunt declarate în interiorul unui subprogram și există doar pe durata execuției lui. • Dacă o variabilă are același nume și global și local, atunci în interiorul subprogramului se folosește variabila locală (cea globală este „umbrită”).
Exemple
Exemplul 1: Scrieți un subprogram salut() care afișează „Bună ziua!” și apelați-l din main.
void salut() {
cout << "Bună ziua!";
}
int main() {
salut();
}
Exemplul 2: Scrieți un subprogram suma(int a, int b) care returnează suma celor două numere.
int suma(int a, int b) {
return a + b;
}
int main() {
cout << suma(5, 7);
}
Exemplul 3: Scrieți un subprogram dubleaza(int &x) care dublează valoarea transmisă prin referință.
void dubleaza(int &x) {
x = x * 2;
}
int main() {
int n = 10;
dubleaza(n);
cout << n; // afișează 20
}
Exemplul 4: Folosiți o variabilă globală x și o variabilă locală x în subprogram pentru a arăta diferența.
int x = 100; // variabilă globală
void test() {
int x = 50; // variabilă locală
cout << x; // afișează 50
}
int main() {
test();
cout << x; // afișează 100
}
Exemplul 5: Scrieți un subprogram maxim(int a, int b) care returnează valoarea mai mare dintre cele două.
int maxim(int a, int b) {
if (a > b) return a;
else return b;
}
int main() {
cout << maxim(10, 7); // afișează 10
}
Exerciții propuse
-
a) Scrieți funcția rotst care primește un număr natural x (≤ 9 cifre) și returnează numărul obținut prin rotirea cifrelor spre stânga.
Exemplu: x = 12345 → rotst(x) = 23451
b) Scrieți un program care citește x și k și afișează primele k rotiri succesive.
Exemplu: x = 123, k = 3 → 231, 312, 123 -
a) Scrieți funcția sumcom care primește doi parametri naturali x și y (< 1 000 000) și returnează suma cifrelor comune (fiecare cifră se numără o singură dată).
Exemplu: x = 2485, y = 587 → cifre comune = {5, 8} → sumcom = 13
b) Scrieți un program care citește n numere și afișează perechea cu cea mai mare sumă a cifrelor comune.
Exemplu: numere: 24, 58, 842 → perechea (24, 842) → sumă = 6 -
a) Scrieți funcția nrzero care returnează numărul de zerouri dintr-un număr natural x.
Exemplu: x = 10020 → nrzero = 3
b) Scrieți un program care citește n numere și afișează numărul cu cele mai multe zerouri.
Exemplu: numere: 102, 2005, 9000 → rezultat: 9000 -
a) Scrieți funcția cifrmax care returnează cifra maximă dintr-un număr natural x.
Exemplu: x = 28539 → cifrmax = 9
b) Scrieți un program care afișează numerele a căror cifră maximă este 9.
Exemplu: numere: 129, 378, 904 → se afișează: 129, 904 -
a) Scrieți funcția palin care verifică dacă un număr natural x este palindrom.
Exemplu: x = 1221 → palin(x) = adevărat
b) Scrieți un program care afișează palindromul de valoare maximă sau mesajul „NU EXISTA” dacă nu există niciunul.
Exemplu: numere: 121, 50, 787 → rezultat: 787 -
a) Scrieți funcția sumcif care returnează suma cifrelor impare ale unui număr.
Exemplu: x = 58231 → cifre impare = 5, 3, 1 → sumcif = 9
b) Scrieți un program care afișează numărul cu cea mai mică sumă a cifrelor impare.
Exemplu: numere: 53, 82, 711 → rezultat: 82 (nu are cifre impare → sumă = 0) -
a) Scrieți funcția primpoz care returnează poziția primului număr prim dintr-un vector (indexare de la 1).
Exemplu: v = [8, 10, 15, 7, 12] → primpoz = 4
b) Scrieți un program care elimină toate numerele înaintea primului număr prim dintr-un vector.
Exemplu: v = [6, 9, 4, 11, 3] → rezultat: [11, 3] -
a) Scrieți funcția egal care verifică dacă doi parametri x și y au același număr de cifre pare.
Exemplu: x = 2486 → 4 cifre pare; y = 3028 → 3 cifre pare → egal = fals
b) Scrieți un program care afișează câte perechi de numere au aceeași cantitate de cifre pare.
Exemplu: numere: 24, 30, 82 → perechi egale: (24, 82) -
a) Scrieți funcția difcif care returnează diferența dintre cifra maximă și cifra minimă a unui număr.
Exemplu: x = 2854 → max = 8, min = 2 → difcif = 6
b) Scrieți un program care afișează numerele cu diferența minimă.
Exemplu: numere: 248, 901, 333 → rezultat: 333 (diferență = 0) -
a) Scrieți funcția frecv care calculează frecvența fiecărei cifre a unui număr.
Exemplu: x = 120122 → frecvențe: 0→1, 1→3, 2→2
b) Scrieți un program care determină cifra care apare cel mai rar într-un set de numere.
Exemplu: numere: 12, 340, 551 → cifra cea mai rară: 3 sau 4 (apar o singură dată) -
a) Scrieți funcția sterge5 care elimină toate cifrele 5 dintr-un număr.
Exemplu a): 15253 → 123
b) Scrieți un program care calculează suma numerelor după eliminarea cifrei 5.
Exemplu b): Numere: 152, 506, 45 → după eliminare: 12, 06, 4 → sumă = 22 -
a) Scrieți funcția succ care înlocuiește fiecare cifră cu cifra succesoare.
Exemplu a): 289 → 390
b) Scrieți un program care aplică funcția fiecărui număr dintr-un vector.
Exemplu b): Vector: [12, 57] → [23, 68] -
a) Scrieți funcția suma_vector care returnează suma elementelor pare dintr-un vector.
Exemplu a): [1, 4, 7, 10] → sumă = 14
b) Scrieți un program care afișează suma elementelor pare.
Exemplu b): Pentru vectorul [2, 9, 8, 11] → sumă = 10 -
a) Scrieți funcția max_matrice care returnează valoarea maximă dintr-o matrice.
Exemplu a): [[2, 5], [9, 1]] → max = 9
b) Scrieți un program care afișează valoarea maximă a unei matrice.
Exemplu b): Pentru matricea [[3, 4], [7, 2]] → afișează 7 -
a) Scrieți funcția palindrom_str care verifică dacă un șir este palindrom.
Exemplu a): "level" → adevărat
b) Scrieți un program care afișează toate șirurile palindrom dintr-o listă.
Exemplu b): ["ana", "carte", "level"] → afișează: ana, level -
a) Scrieți funcția cel_mai_bun pentru un vector de structuri Student (nume, vârstă, nota) care returnează studentul cu nota maximă.
Exemplu a): [{Ana, 16, 9}, {Paul, 17, 10}] → Paul
b) Scrieți un program care afișează studentul cu nota maximă.
Exemplu b): Pentru lista: {Mara–8}, {Ioan–10}, {Luca–9} → afișează Ioan -
a) Scrieți funcția transpusa care returnează matricea transpusă.
Exemplu a): [[1, 2], [3, 4]] → [[1, 3], [2, 4]]
b) Scrieți un program care afișează matricea transpusă.
Exemplu b): Pentru matricea [[5, 6], [7, 8]] → afișează [[5, 7], [6, 8]] -
a) Scrieți subprogramul distanta pentru structura Punct care calculează distanța euclidiană.
Exemplu a): P1(0,0), P2(3,4) → distanță = 5
b) Scrieți un program care afișează perechea de puncte cu distanța maximă.
Exemplu b): Puncte: (0,0), (3,4), (10,0) → perechea maximă: (0,0) și (10,0) -
a) Scrieți subprogramul cea_mai_lunga pentru structura Carte (titlu, autor, nr_pag) care returnează cartea cu cele mai multe pagini.
Exemplu a): {"A", 150}, {"B", 300} → "B"
b) Scrieți un program care afișează titlul cărții cu cele mai multe pagini.
Exemplu b): Lista: "Ion" (500p), "Baltagul" (200p) → afișează "Ion" -
a) Scrieți subprogramul suma_diagonala pentru structura Matrice care returnează suma elementelor de pe diagonala principală.
Exemplu a): [[2, 1], [5, 3]] → sumă = 5
b) Scrieți un program care afișează suma diagonalei principale.
Exemplu b): Pentru matricea [[7, 2], [4, 9]] → sumă = 16 - a) Scrieți subprogramul majorare pentru structura Angajat (nume, salariu, vechime) care aplică majorarea de 10% pentru vechime ≥5 ani.
Exemplu a): Angajat: {Ion, 3000, 6} → salariu final = 3300
b) Scrieți un program care afișează salariul după majorare.
Exemplu b): Pentru angajații {Ana–2000–3}, {Mihai–4000–7} → afișează: 2000, 4400 - a) Scrieți subprogramul media_student pentru structura Student (nume, note, nr_note) care calculează media notelor.
Exemplu a): Note: [10, 9, 8] → media = 9
b) Scrieți un program care afișează studentul cu media cea mai mare.
Exemplu b): Studenți: Ana(9), Mihai(7), Ioana(9.67) → afișează: Ioana - a) Scrieți subprogramul max_linie care returnează valoarea maximă dintr-o linie a unei matrice.
Exemplu a): Linia [3, 7, 2] → max = 7
b) Scrieți un program care afișează valorile maxime pentru fiecare linie.
Exemplu b): Matrice: [[1,4,2],[9,3,7],[5,8,6]] → afișează: 4, 9, 8 - a) Scrieți subprogramul numar_egale care returnează câte elemente din matrice sunt egale cu un număr dat.
Exemplu a): Matrice: [[1,2],[2,2]] cu x=2 → apare de 3 ori
b) Scrieți un program care afișează rezultatul.
Exemplu b): Pentru matricea [[1,2,3],[2,2,4]] și x=2 → afișează: 3 - a) Scrieți subprogramul sum_diagonale care calculează suma elementelor de pe diagonala principală și secundară.
Exemplu a): [[1,2,3],[4,5,6],[7,8,9]] → principale = 15, secundare = 15
b) Scrieți un program care afișează suma ambelor diagonale.
Exemplu b): Pentru matricea [[2,1],[3,4]] → principale=6, secundare=4 - a) Scrieți subprogramul rotire_matrice care rotește o matrice pătratică 90° în sensul acelor de ceasornic.
Exemplu a): [[1,2,3],[4,5,6],[7,8,9]] → [[7,4,1],[8,5,2],[9,6,3]]
b) Scrieți un program care afișează matricea rotită.
Exemplu b): Pentru [[2,4],[6,8]] → [[6,2],[8,4]] - a) Scrieți subprogramul linie_max_sum care returnează indicele liniei cu suma maximă.
Exemplu a): Linie [5, 5, 1] → sumă = 11
b) Scrieți un program care afișează indicele liniei cu suma maximă.
Exemplu b): Matrice [[1,2,3],[9,1,1],[4,4,4]] → afișează: 2 - a) Scrieți subprogramul matrice_sym care verifică dacă o matrice pătratică este simetrică.
Exemplu a): [[1,2],[2,1]] → simetrică
b) Scrieți un program care afișează dacă matricea este simetrică.
Exemplu b): Pentru [[1,0,3],[0,5,6],[3,6,9]] → afișează: Simetrică - a) Scrieți subprogramul nr_vocale care returnează numărul de vocale dintr-un șir.
Exemplu a): "programare" → 5 vocale
b) Scrieți un program care afișează șirul cu cele mai multe vocale.
Exemplu b): ["ana", "coada", "onomatopee"] → afișează: "onomatopee" - a) Scrieți subprogramul palindrom_cuvinte care returnează numărul de cuvinte palindrom dintr-un șir.
Exemplu a): "ana are apa" → 2 palindroame: ana, apa
b) Scrieți un program care afișează numărul de cuvinte palindrom pentru fiecare șir.
Exemplu b): Pentru ["ana are mere", "level kayak sun"] → afișează: 1, 2 -
a) Scrieți subprogramul cuvant_lung_max care returnează cel mai lung cuvânt dintr-un șir.
Exemplu a): "Ana are mere" → "mere"
b) Scrieți un program care afișează cel mai lung cuvânt din fiecare șir.
Exemplu b): ["Ana are mere", "Eu învăț programare"] → afișează: "mere", "programare" -
a) Scrieți subprogramul invers_vector care inversează un vector.
Exemplu a): [1, 2, 3, 4] → [4, 3, 2, 1]
b) Scrieți un program care afișează vectorul inversat.
Exemplu b): Pentru vectorul [7, 9, 0] → afișează [0, 9, 7] -
a) Scrieți subprogramul nr_consoane care returnează numărul de consoane dintr-un șir.
Exemplu a): "programare" → 6
b) Scrieți un program care afișează șirul cu cele mai multe consoane.
Exemplu b): ["ana", "programare", "clasa"] → afișează "programare" -
a) Scrieți subprogramul sum_diag_secundara care returnează suma elementelor de pe diagonala secundară.
Exemplu a): [[1, 2], [3, 4]] → sumă = 2 + 3 = 5
b) Scrieți un program care afișează suma diagonalei secundare.
Exemplu b): Pentru matricea [[7, 1, 2], [4, 5, 6], [9, 3, 8]] → sumă = 2 + 5 + 9 = 16 -
a) Scrieți subprogramul concat_str care concatenează două șiruri cu spațiu între ele.
Exemplu a): "Ana", "are" → "Ana are"
b) Scrieți un program care afișează concatenările.
Exemplu b): ("mere", "roșii") → "mere roșii" -
a) Scrieți subprogramul produs_vectori care returnează vectorul produs componentă cu componentă.
Exemplu a): [1, 3, 5], [2, 4, 6] → [2, 12, 30]
b) Scrieți un program care afișează vectorul rezultat.
Exemplu b): [7, 2], [3, 5] → [21, 10] -
a) Scrieți subprogramul distanta3D pentru structura Punct3D care calculează distanța dintre două puncte în spațiu.
Exemplu a): P1(0,0,0), P2(1,2,2) → distanță = 3
b) Scrieți un program care afișează perechea de puncte cu distanța maximă.
Exemplu b): (0,0,0), (1,1,1), (5,0,0) → pereche maximă: (0,0,0) și (5,0,0) -
a) Scrieți subprogramul schimba_vocale care înlocuiește vocalele cu '*'.
Exemplu a): "programare" → "pr*gr*m*r*"
b) Scrieți un program care afișează șirurile transformate.
Exemplu b): ["Ana", "mere"] → ["*n*", "m*r*"] -
a) Scrieți subprogramul nr_poz_max care returnează poziția elementului maxim dintr-o matrice.
Exemplu a): [[1, 7], [4, 3]] → poziție = (0,1)
b) Scrieți un program care afișează poziția elementului maxim.
Exemplu b): [[9, 2], [1, 5]] → poziție = (0,0) -
a) Scrieți subprogramul interschimb care interschimbă caracterele de pe poziții impare ale două șiruri.
Exemplu a): "abc", "xyz" → după interschimb: "ayc", "xbz"
b) Scrieți un program care afișează rezultatul interschimbului.
Exemplu b): "mare", "luna" → "lare", "muna" - a) Scrieți subprogramul nr_cuv_max care returnează lungimea celui mai lung cuvânt dintr-un șir.
Exemplu a): "Ana are mere" → 4
b) Scrieți un program care afișează lungimea celui mai lung cuvânt.
Exemplu b): ["Ana are mere", "Eu învăț programare"] → afișează: 4, 10 - a) Scrieți subprogramul rotate_vector care rotește un vector spre dreapta cu k poziții.
Exemplu a): [1, 2, 3, 4, 5], k=2 → [4, 5, 1, 2, 3]
b) Scrieți un program care afișează vectorul rezultat.
Exemplu b): [7, 8, 9], k=1 → [9, 7, 8] - a) Scrieți subprogramul medie_diagonale care calculează media elementelor de pe diagonalele unei matrice.
Exemplu a): [[1,2,3],[4,5,6],[7,8,9]] → principală=5, secundară=5 → medie = 5
b) Scrieți un program care afișează media diagonalei.
Exemplu b): [[2,1],[3,4]] → media diagonalei principale = (2+4)/2 = 3 - a) Scrieți subprogramul nota_mediu pentru structura Student care calculează media notelor.
Exemplu a): Student: [10,9,8] → media = 9
b) Scrieți un program care afișează studentul cu media maximă.
Exemplu b): Studenți: Ana(9), Mihai(7), Ioana(9.67) → afișează: Ioana - a) Scrieți subprogramul palindrom_matrix care verifică dacă fiecare rând al unei matrice este palindrom.
Exemplu a): [[1,2,1],[3,4,3]] → adevărat
b) Scrieți un program care afișează rezultatul.
Exemplu b): [[1,2,1],[3,4,5]] → afișează: Fals - a) Scrieți subprogramul sum_prime_matrix care returnează suma elementelor prime dintr-o matrice.
Exemplu a): [[2,4],[5,6]] → suma = 2 + 5 = 7
b) Scrieți un program care afișează suma elementelor prime.
Exemplu b): [[1,3],[7,9]] → afișează: 10 - a) Scrieți subprogramul intersectie_vectori care returnează elementele comune dintre doi vectori.
Exemplu a): [1,2,3], [2,3,4] → [2,3]
b) Scrieți un program care afișează vectorul rezultat.
Exemplu b): [7,8,9], [5,8,10] → [8] - a) Scrieți subprogramul nr_vocale_consoane care returnează numărul de vocale și consoane.
Exemplu a): "programare" → vocale = 5, consoane = 6
b) Scrieți un program care afișează vocalele și consoanele fiecărui șir.
Exemplu b): ["Ana", "Mihai"] → Ana: 2,1; Mihai: 3,2 - a) Scrieți subprogramul swap_max_min_matrix care interschimbă elementele maxim și minim dintr-o matrice.
Exemplu a): [[1,2],[3,4]] → [[4,2],[3,1]]
b) Scrieți un program care afișează matricea modificată.
Exemplu b): [[5,7],[2,6]] → [[6,7],[2,5]] - a) Scrieți subprogramul carti_lungi care returnează cărțile cu mai mult de 300 pagini.
Exemplu a): {"Ion", 500}, {"Baltagul", 200} → "Ion"
b) Scrieți un program care afișează cărțile lungi.
Exemplu b): Lista: {"Cartea1", 350}, {"Cartea2", 280} → afișează: "Cartea1" - a) Scrieți subprogramul max_diag_diff care calculează diferența dintre diagonalele principală și secundară.
Exemplu a): [[1,2,3],[4,5,6],[7,8,9]] → diagonala principală = 1+5+9=15, secundară = 3+5+7=15 → diferență = 0
b) Scrieți un program care afișează rezultatul.
Exemplu b): [[2,1],[3,4]] → diagonala principală = 2+4=6, secundară=1+3=4 → diferență = 2 - a) Scrieți subprogramul rotire_cuvinte care rotește cuvintele unui șir spre stânga.
Exemplu a): "Ana are mere" → "are mere Ana"
b) Scrieți un program care afișează rezultatul.
Exemplu b): ["Eu învăț programare"] → "învăț programare Eu" - a) Scrieți subprogramul sort_vector_par care sortează separat elementele pare și impare.
Exemplu a): [5,2,7,4] → [2,4,5,7]
b) Scrieți un program care afișează vectorul rezultat.
Exemplu b): [8,3,6,1] → [6,8,1,3] - a) Scrieți subprogramul bonus pentru structura Angajat (salariu, vechime) care aplică bonus 5% pentru vechime ≥3 ani.
Exemplu a): {Salariu=2000, Vechime=4} → 2100
b) Scrieți un program care afișează salariile după bonus.
Exemplu b): {2000,3}, {1500,2} → afișează: 2100, 1500 - a) Scrieți subprogramul contor_caractere care returnează frecvența caracterelor dintr-un șir.
Exemplu a): "ana" → {'a':2, 'n':1}
b) Scrieți un program care afișează vectorul frecvențelor.
Exemplu b): ["ana", "mere"] → {'a':2,'n':1}, {'m':1,'e':2,'r':1} - a) Scrieți subprogramul sort_matrice_linii care sortează fiecare linie a unei matrice.
Exemplu a): [[3,1],[2,4]] → [[1,3],[2,4]]
b) Scrieți un program care afișează matricea sortată.
Exemplu b): [[5,2,8],[1,4,3]] → [[2,5,8],[1,3,4]] - a) Scrieți subprogramul vector_dublu care returnează elementele duplicate dintr-un vector.
Exemplu a): [1,2,3,2,4,1] → [1,2]
b) Scrieți un program care afișează elementele duplicate.
Exemplu b): [5,5,6,7,7] → [5,7] - a) Scrieți subprogramul transforma_matrice care înlocuiește fiecare element cu diferența față de media matricei.
Exemplu a): [[2,4],[6,8]] → media = 5 → [[-3,-1],[1,3]]
b) Scrieți un program care afișează matricea modificată.
Exemplu b): [[1,3],[5,7]] → media=4 → [[-3,-1],[1,3]] - a) Scrieți subprogramul concat_palindrom care concatenează două șiruri doar dacă rezultatul este palindrom.
Exemplu a): "ana", "ana" → "anaana"
b) Scrieți un program care afișează rezultatul.
Exemplu b): "abc","cba" → "abccba"; "abc","def" → nu se afișează - a) Scrieți subprogramul vector_cifre care primește un număr și returnează un vector cu cifrele lui.
Exemplu a): 152 → [1,5,2]
b) Scrieți un program care afișează cifrele unui număr citit folosind vector_cifre.
Exemplu b): Număr: 407 → afișează [4,0,7] - a) Scrieți subprogramul sum_max_min care primește un vector și returnează suma elementului maxim cu cel minim.
Exemplu a): [3,5,1,7] → 1+7=8
b) Scrieți un program care citește un vector și afișează suma folosind sum_max_min.
Exemplu b): [10,4,6] → afișează: 14 - a) Scrieți subprogramul rotire_matrice care primește o matrice pătratică și returnează matricea rotită 90° spre dreapta.
Exemplu a): [[1,2],[3,4]] → [[3,1],[4,2]]
b) Scrieți un program care citește matricea și afișează rezultatul folosind rotire_matrice.
Exemplu b): [[5,6],[7,8]] → afișează [[7,5],[8,6]] - a) Scrieți subprogramul nr_prime_vector care primește un vector și returnează numărul de elemente prime.
Exemplu a): [1,2,3,4,5] → 3 (2,3,5)
b) Scrieți un program care citește un vector și afișează numărul elementelor prime folosind nr_prime_vector.
Exemplu b): [4,6,7,11] → afișează: 2