MeditatiiDirect.ro Logo
MeditatiiDirect.ro
Educație la un click distanță
MeditatiiMateriiAdmitereTutorialePregatire BACSubiecte BACVariante BACBlog
InformaticăliceuClasa 9mediu

Subprograme (Funcții) în C++ - Ghid Complet

Învață să creezi și să folosești funcții în C++: declarare, parametri, transmitere prin valoare și referință. Tutorial complet pentru BAC și admitere.

3 luni în urmă
0 vizualizări
45 minute

Subprograme (Funcții) în C++ - Ghid Complet

Definiție

Un subprogram (sau funcție) este o secvență de instrucțiuni cu un nume, care poate fi apelată de mai multe ori din programul principal sau din alte subprograme.

Avantaje:

  • •Reutilizare - scriem codul o singură dată, îl folosim de mai multe ori
  • •Modularitate - programul este împărțit în părți mai mici, ușor de înțeles
  • •Întreținere - modificările se fac într-un singur loc

Teorie

Structura unei funcții

1tip_returnat nume_functie(parametri) {
2    // corpul funcției
3    return valoare;  // dacă tip_returnat != void
4}

Tipuri de funcții

  1. •Funcții care returnează valoare (tip: int, double, char, etc.)
  2. •Proceduri (tip: void) - nu returnează nimic

Transmiterea parametrilor

  1. •Prin valoare - se transmite o copie (modificările NU afectează originalul)
  2. •Prin referință - se transmite adresa (modificările AFECTEAZĂ originalul)

Exemple C++ Compilabile

Exemplul 1: Funcție simplă - calculul ariei

1#include <iostream>
2using namespace std;
3
4// Declarația funcției
5double ariePatrat(double latura) {
6    return latura * latura;
7}
8
9double arieDreptunghi(double lungime, double latime) {
10    return lungime * latime;
11}
12
13int main() {
14    double l;
15    cout << "Introduceti latura patratului: ";
16    cin >> l;
17    cout << "Aria patratului: " << ariePatrat(l) << endl;
18    
19    double lung, lat;
20    cout << "Introduceti lungimea si latimea: ";
21    cin >> lung >> lat;
22    cout << "Aria dreptunghiului: " << arieDreptunghi(lung, lat) << endl;
23    
24    return 0;
25}

Exemplul 2: Funcție void (procedură)

1#include <iostream>
2using namespace std;
3
4// Procedură - nu returnează nimic
5void afiseazaSalut(int de_cate_ori) {
6    for (int i = 0; i < de_cate_ori; i++) {
7        cout << "Salut!" << endl;
8    }
9}
10
11int main() {
12    afiseazaSalut(3);
13    return 0;
14}

Exemplul 3: Transmitere prin valoare vs. referință

1#include <iostream>
2using namespace std;
3
4// Transmitere prin VALOARE - x este o copie
5void incrementeazaValoare(int x) {
6    x = x + 1;
7    cout << "In functie: x = " << x << endl;
8}
9
10// Transmitere prin REFERINȚĂ - x este originalul
11void incrementeazaReferinta(int &x) {
12    x = x + 1;
13    cout << "In functie: x = " << x << endl;
14}
15
16int main() {
17    int a = 10;
18    
19    cout << "Inainte: a = " << a << endl;
20    incrementeazaValoare(a);
21    cout << "Dupa transmitere prin valoare: a = " << a << endl;
22    // a ramane 10!
23    
24    cout << endl;
25    
26    cout << "Inainte: a = " << a << endl;
27    incrementeazaReferinta(a);
28    cout << "Dupa transmitere prin referinta: a = " << a << endl;
29    // a devine 11!
30    
31    return 0;
32}

Exemplul 4: Funcție pentru verificare primalitate

1#include <iostream>
2using namespace std;
3
4int estePrim(int n) {
5    if (n < 2) return 0;
6    if (n == 2) return 1;
7    if (n % 2 == 0) return 0;
8    
9    for (int d = 3; d * d <= n; d = d + 2) {
10        if (n % d == 0)
11            return 0;
12    }
13    return 1;
14}
15
16int main() {
17    int x;
18    cout << "Introduceti un numar: ";
19    cin >> x;
20    
21    if (estePrim(x))
22        cout << x << " este PRIM" << endl;
23    else
24        cout << x << " NU este prim" << endl;
25    
26    return 0;
27}

Exemplul 5: Funcție cu vectori (transmitere prin referință implicită)

1#include <iostream>
2using namespace std;
3
4// Vectorii se transmit ÎNTOTDEAUNA prin referință!
5void citireVector(int v[], int &n) {
6    cout << "Numar de elemente: ";
7    cin >> n;
8    for (int i = 0; i < n; i++) {
9        cin >> v[i];
10    }
11}
12
13void afisareVector(int v[], int n) {
14    for (int i = 0; i < n; i++) {
15        cout << v[i] << " ";
16    }
17    cout << endl;
18}
19
20int sumaVector(int v[], int n) {
21    int s = 0;
22    for (int i = 0; i < n; i++) {
23        s = s + v[i];
24    }
25    return s;
26}
27
28int main() {
29    int a[100], n;
30    
31    citireVector(a, n);
32    cout << "Vectorul: ";
33    afisareVector(a, n);
34    cout << "Suma: " << sumaVector(a, n) << endl;
35    
36    return 0;
37}

Exemplul 6: CMMDC și CMMMC

1#include <iostream>
2using namespace std;
3
4int cmmdc(int a, int b) {
5    while (b != 0) {
6        int r = a % b;
7        a = b;
8        b = r;
9    }
10    return a;
11}
12
13int cmmmc(int a, int b) {
14    return (a / cmmdc(a, b)) * b;
15}
16
17int main() {
18    int x, y;
19    cout << "Introduceti doua numere: ";
20    cin >> x >> y;
21    
22    cout << "CMMDC(" << x << ", " << y << ") = " << cmmdc(x, y) << endl;
23    cout << "CMMMC(" << x << ", " << y << ") = " << cmmmc(x, y) << endl;
24    
25    return 0;
26}

Exemplul 7: Interschimbarea a două valori

1#include <iostream>
2using namespace std;
3
4// OBLIGATORIU prin referință pentru a modifica valorile!
5void interschimba(int &a, int &b) {
6    int temp = a;
7    a = b;
8    b = temp;
9}
10
11int main() {
12    int x = 5, y = 10;
13    
14    cout << "Inainte: x = " << x << ", y = " << y << endl;
15    interschimba(x, y);
16    cout << "Dupa: x = " << x << ", y = " << y << endl;
17    
18    return 0;
19}

Greșeli Frecvente

1. Uitarea return-ului

1// GREȘIT - funcția trebuie să returneze ceva
2int suma(int a, int b) {
3    int s = a + b;
4    // lipsește return s;
5}
6
7// CORECT
8int suma(int a, int b) {
9    return a + b;
10}

2. Transmitere prin valoare când vrem să modificăm

1// GREȘIT - x nu se modifică în main
2void modifica(int x) {
3    x = 100;
4}
5
6// CORECT - folosim referință
7void modifica(int &x) {
8    x = 100;
9}

3. Confuzia la declararea parametrilor vector

1// GREȘIT - nu punem dimensiunea în declarație
2void functie(int v[100], int n) { }
3
4// CORECT - [] gol sau cu dimensiune maximă
5void functie(int v[], int n) { }

4. Apelarea funcției fără paranteze

1int rezultat = suma;      // GREȘIT - returnează adresa funcției
2int rezultat = suma();    // GREȘIT - lipsesc parametrii
3int rezultat = suma(3, 5); // CORECT

Exerciții Tip PBInfo

Exercițiul 1 - Factorial

Scrieți o funcție care calculează factorialul unui număr.

Exercițiul 2 - Număr palindrom

Scrieți o funcție care verifică dacă un număr este palindrom.

Exercițiul 3 - Sortare vector

Scrieți o funcție care sortează un vector crescător.

Exercițiul 4 - Cifra de control

Scrieți o funcție care calculează cifra de control (suma repetată a cifrelor până obținem o singură cifră).

Exercițiul 5 - Numere prietene

Scrieți funcții pentru a verifica dacă două numere sunt prietene (fiecare este egal cu suma divizorilor proprii ai celuilalt).

Tutorialul te-a ajutat?

Dacă ai nevoie de ajutor personalizat, găsește un profesor calificat pentru meditații

MeditatiiDirect.ro Logo
MeditatiiDirect.ro

Platforma educationala din Romania pentru meditatii particulare. Profesori verificati, recenzii reale, inscriere gratuita.

Cauta sau publica anunturi gratuit pentru toate materiile scolare.

Meditatii

  • Meditatii
  • Meditatii Matematica
  • Meditatii Informatica
  • Meditatii Romana
  • Meditatii Engleza
  • Anunturi Meditatii
  • Meditatii Online
  • Ore Online
  • Meditatii BAC
  • Meditatii Bucuresti
  • Meditatii Cluj-Napoca
  • Meditatii Timisoara
  • Meditatii Iasi
  • Meditatii Fizica
  • Meditatii Chimie
  • Meditatii Biologie

Materii Populare

  • Matematică
  • Limba Română
  • Limba Engleză
  • Informatică
  • Fizică
  • Toate Materiile →

Platforma

  • Cum functioneaza
  • Pentru elevi si parinti
  • Pentru profesori
  • Intrebari frecvente
  • Despre noi
  • Publica anunt gratuit

Resurse

  • Profesor Particular
  • Pregatire BAC
  • Admitere Facultate
  • Universitati Romania
  • Facultati Medicina
  • Facultati Informatica
  • Facultati Politehnica
  • Facultati Drept
  • Facultati Economice
  • Facultati Psihologie
  • Grile UPB
  • Grile Medicina
  • Grile Auto 2026
  • Variante BAC 2026
  • Simulare BAC 2026
  • Subiecte BAC
  • Subiecte Admitere
  • Titularizare 2025
  • Tutoriale
  • Blog educational
  • Ore Online
  • Profesori Online
  • Contact

MeditatiiDirect.ro este o platforma educationala din Romania unde gasesti meditatii si profesori particulari verificati pentru matematica, limba romana, engleza, informatica, fizica, chimie si alte materii. Disponibil in Bucuresti, Cluj-Napoca, Timisoara, Iasi si toata Romania, inclusiv meditatii online. Publica sau gaseste anunturi meditatii gratuit, programeaza ore online cu profesori verificati, cauta un profesor particular sau incepe meditatii BAC si admiterea la facultate.

© 2026 MeditatiiDirect. Toate drepturile rezervate.