Conectează-te Înregistrare gratuită
Informatică Liceu (9-12)

Subprograme (functii, proceduri, parametri, recursivitate)

Pe scurt

Subprogramele sunt blocuri de cod reutilizabile care structurează programele. În C/C++, funcțiile returnează o valoare, iar procedurile (funcții void) doar execută operații. Recursivitatea permite unui subprogram să se autoapeleze, descompunând problema în subprobleme mai mici, cu condiția obligatorie de oprire.

Tipuri de subprograme

Funcțiile returnează o valoare de un anumit tip (int, float, char etc.). Procedurile sunt implementate ca funcții void și nu returnează nicio valoare, ci doar execută operații.

Parametrii subprogramelor

Parametrii formali sunt declarați în definiția subprogramului. Parametrii actuali sunt transmiși la apelul subprogramului.

Transmiterea prin valoare copiază valoarea parametrului, iar modificările nu afectează variabila originală. Transmiterea prin referință transmite adresa variabilei, permițând modificarea directă a acesteia. La nivel de liceu, în C++ se preferă varianta cu referințe (&).

Recursivitatea

Recursivitatea este tehnica prin care un subprogram se autoapelează, direct sau indirect. O funcție recursivă trebuie să aibă o condiție de oprire (caz de bază) pentru a evita apelurile infinite.

Exemple practice

Exemplul 1: Funcție pentru calculul factorialului

  • Iterativ: int factorial(int n) { int p=1; for(int i=2;i<=n;i++) p*=i; return p; }
  • Recursiv: int factorial(int n) { if(n==0) return 1; else return n*factorial(n-1); }
  • Apel: cout<<factorial(5); // 120

Exemplul 2: Procedură pentru afișarea elementelor pare dintr-un vector

  • void afisarePare(int v[], int n) { for(int i=0;i<n;i++) if(v[i]%2==0) cout<<v[i]<<' '; }
  • Apel: int a[]={1,2,3,4}; afisarePare(a,4); // afișează 2 4

Exemplul 3: Funcție recursivă pentru suma cifrelor

  • int sumaCifre(int n) { if(n==0) return 0; else return n%10 + sumaCifre(n/10); }
  • Apel: cout<<sumaCifre(123); // 1+2+3=6

Aplicații în algoritmică

Subprogramele sunt esențiale pentru rezolvarea problemelor de algoritmică, cum ar fi: calculul factorialului, generarea numerelor prime, căutarea în vectori, sortarea, suma elementelor unui vector, determinarea maximului dintr-un șir, calculul combinărilor sau algoritmi de tip divide et impera (de exemplu, căutarea binară).

Verifică-te!

  1. Care este diferența principală dintre o funcție și o procedură în C/C++?
  2. Ce se întâmplă cu variabila originală atunci când un parametru este transmis prin valoare?
  3. De ce este necesară o condiție de oprire într-o funcție recursivă?

Vrei exerciții pe lecția asta + AI care te ajută pas cu pas?
Cont gratuit — 20 întrebări AI/zi, exerciții nelimitate.

Creează cont