Subprograme în C++

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

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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
  6. 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)

  7. 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]

  8. 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)

  9. 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)

  10. 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ă)
  11. 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

  12. 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]

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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]]

  18. 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)

  19. 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"

  20. 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
  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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]]

  27. 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

  28. 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ă

  29. 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"

  30. 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
  31. 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"

  32. 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]

  33. 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"

  34. 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

  35. 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"

  36. 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]

  37. 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)

  38. 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*"]

  39. 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)

  40. 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"
  41. 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

  42. 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]

  43. 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

  44. 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

  45. 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

  46. 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

  47. 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]

  48. 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

  49. 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]]

  50. 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"

  51. 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
  52. 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"

  53. 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]

  54. 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

  55. 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}

  56. 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]]

  57. 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]

  58. 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]]

  59. 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ă

  60. 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]

  61. 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

  62. 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]]

  63. 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

Reclame Google AdSense

Flux de știri