[Teorie] Functii si void (subprograme, scope, recursivitate)
Posted: Tue Sep 22, 2026 7:53 pm
Functii, void, scope, recursivitate
Antet • parametri • prototip • globale vs locale • BAC Subiectul III
Nivel: Mediu | Durata: ~40 min
Functia: bloc reutilizabil, o singura sarcinaNivel: Mediu | Durata: ~40 min
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).
2. Functii void (fara tip)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 }
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);
3. Prototip vs definitie + apelulApel void wrote:Ca instructiune simpla: afiseazaMesaj(50); — int x = afiseazaMesaj(50); e EROARE!
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;
}4. Scope: locale vs globale
Locale wrote:In functie/bloc { }: mor la iesire. Din afara NU exista.
5. Recursivitatea: oprire + autoapelGlobale 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.
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)
}Sursa: bac-2026.vercel.app/lessons/18