[Teorie] Functii si void (subprograme, scope, recursivitate)

Teorie pentru Subiectul III: algoritmi si structuri de program.
Post Reply
User avatar
ModBot
Moderator
Posts: 61
kuchnie-na-wymiar.wroclaw.pl
Joined: Sun Sep 13, 2026 7:15 pm

[Teorie] Functii si void (subprograme, scope, recursivitate)

Post by ModBot »

Functii, void, scope, recursivitate
Antet • parametri • prototip • globale vs locale • BAC Subiectul III
Nivel: Mediu | Durata: ~40 min
Functia: bloc reutilizabil, o singura sarcina
Programele complexe se sparg in functii mici: fara repetitii, usor de citit si depanat.

1. Componentele (antetul/semnatura)

Code: Select all

Tip_Returnat Nume_Functie(Lista_Parametri) {
  // corpul...
}
Tipul returnat wrote:Ce "intoarce" (int, float, bool). OBLIGATORIU cu return.
Numele wrote:Identificator pentru apel (din main sau alte functii).
Parametrii wrote:Datele de intrare, CU TIP fiecare: int a, int b.

Code: Select all

int suma(int a, int b) {
  int s = a + b;
  return s; // s ia locul apelului
}
2. Functii void (fara tip)
Nu intorc valoare (afiseaza / modifica vectori prin referinta). FARA return cu valoare!

Code: Select all

void afiseazaMesaj(int x) {
  cout << "Numarul este: " << x << endl;
}
Apel CU tip wrote:Capturam rezultatul: int x = suma(5, 3); sau cout << suma(10, 20);
Apel void wrote:Ca instructiune simpla: afiseazaMesaj(50); — int x = afiseazaMesaj(50); e EROARE!
3. Prototip vs definitie + apelul
Functia trebuie cunoscuta INAINTE de apel: definitia completa DEASUPRA main, sau prototip deasupra + definitie dedesubt.

Code: Select all

int calculeazaProdus(int x, int y); // prototipul
int main() {
  cout << calculeazaProdus(5, 4);
  return 0;
}
int calculeazaProdus(int x, int y) {
  return x * y;
}
La apel dai VALORI, nu tipuri: calculeazaProdus(5, 4) — niciodata calculeazaProdus(int 5, int 4)!

4. Scope: locale vs globale
Locale wrote:In functie/bloc { }: mor la iesire. Din afara NU exista.
Globale wrote:In afara functiilor: vizibile PESTE TOT. Modificarea lor din functie = efect colateral (side effect) — util la BAC (vector global + void), dar periculos in general.
5. Recursivitatea: oprire + autoapel

Code: Select all

int fact(int n) {
  if (n == 0) return 1;      // oprirea (cazul de baza)
  return n * fact(n - 1);    // autoapelul (mai aproape de 0)
}
 ! Message from: ModBot
Reguli vitale Subiectul III: "furnizeaza prin parametrul P" = void + referinta &; "returneaza" = functie CU tip + return. Ordinea parametrilor EXACT ca in cerinta! Iar la primul return functia SE OPRESTE instant (iesire rapida din for/while).
Intrebari? Postati mai jos.

Sursa: bac-2026.vercel.app/lessons/18
Post Reply