f

Bazele programării

Subprograme si functii

Functii, proceduri, parametri, transmitere prin valoare si referinta in C++.

Capitole Formule Teste Calculator Grafic

Ce este un subprogram

Un subprogram este o secvență de instrucțiuni cu nume propriu, apelabilă din orice punct al programului. Reduce duplicarea codului și crește lizibilitatea.

Tipuri:

  • Funcție — returnează o valoare (return)
  • Procedură — nu returnează valoare (tip void)

Funcții în C++

tip_returnat numeFunctie(parametri) {
    // corp
    return valoare;
}

Exemplu — cmmdc:

int cmmdc(int a, int b) {
    while (b != 0) {
        int r = a % b;
        a = b;
        b = r;
    }
    return a;
}

int main() {
    cout << cmmdc(12, 8);  // 4
}

Proceduri (void)

void afiseaza(int n) {
    cout << "Valoarea este: " << n << "\n";
}

Parametri: valoare vs. referinta

Prin valoare — funcția primește o copie; originalul nu se modifică:

void dublare(int x) {
    x = x * 2;  // nu afectează variabila din main
}

Prin referinta (&) — funcția lucrează direct cu variabila originală:

void dublare(int &x) {
    x = x * 2;  // modifică variabila din main
}

Folosește referinta când vrei să modifici variabila sau să transmiți tablouri mari eficient.


Variabile locale vs. globale

int global = 10;  // vizibil în tot programul

void functie() {
    int local = 5;  // vizibil doar în această funcție
}

Prototip de funcție

Dacă funcția e definită după main, trebuie declarată înainte:

int cmmdc(int a, int b);  // prototip

int main() {
    cout << cmmdc(12, 8);
}

int cmmdc(int a, int b) {
    // definitia
}

Exemplu complet: verificare număr prim

bool estePrim(int n) {
    if (n < 2) return false;
    for (int i = 2; i * i <= n; i++)
        if (n % i == 0) return false;
    return true;
}

int main() {
    int n;
    cin >> n;
    if (estePrim(n)) cout << "prim";
    else cout << "nu e prim";
}

La examen

  • Tablourile se transmit implicit prin referinta (fără &)
  • Funcțiile pot apela alte funcții (inclusiv pe ele însele — recursivitate)
  • Dacă subiectul cere să „scrieți o funcție care…”, respectă exact signatura cerută (tip, nume, parametri)