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

Subprograme (functii si proceduri, parametri, tipuri)

Pe scurt

Subprogramele sunt blocuri de cod reutilizabil care îndeplinesc o sarcină specifică, fiind esențiale pentru modularizare și evitarea replicării codului. În C/C++, există funcții (care returnează o valoare) și proceduri (implementate ca funcții de tip void, care nu returnează nimic). Parametrii pot fi transmiși prin valoare (copie) sau prin referință (pointeri/referințe), iar înțelegerea acestor concepte este crucială pentru Bacalaureat.

Ce sunt subprogramele și de ce sunt importante

Subprogramele reprezintă blocuri de cod reutilizabil care îndeplinesc o sarcină specifică. În programare, ele sunt esențiale pentru modularizare, evitând replicarea codului și facilitând întreținerea.

Tipuri de subprograme în C/C++

În limbajul C/C++ (utilizat frecvent la Bacalaureat), distingem două tipuri principale: funcții și proceduri.

  • O funcție returnează o valoare printr-un tip de date specificat (de exemplu, int, float, char).
  • O procedură (implementată ca funcție de tip void) nu returnează nicio valoare.

Parametrii subprogramelor

Parametrii sunt variabile locale care permit transferul datelor între programul principal și subprogram. Aceștia pot fi:

  • Prin valoare (transmitere prin copie): modificările locale nu afectează variabila originală.
  • Prin referință (folosind pointeri sau referințe în C++): modificările se reflectă asupra variabilei originale, deoarece se lucrează cu adresa acesteia.

Tipuri de subprograme după parametri

  1. Funcții cu parametri: int suma(int a, int b) returnează suma.
  2. Funcții fără parametri: int getNumber() citește de la tastatură.
  3. Proceduri: void afisare(int x) afișează valoarea.

Concepte importante pentru Bacalaureat

La Bacalaureat, elevii trebuie să înțeleagă

  • Cum se declară subprogramele (prototip sau definiție)
  • Cum se apelează subprogramele
  • Cum se transmit parametrii
  • Diferența dintre parametrii actuali (cei din apel) și parametrii formali (cei din definiție)
  • Subprogramele pot fi recursive (se autoapelează) sau iterative
  • O temă avansată este supraîncărcarea funcțiilor (overloading) în C++, unde mai multe funcții au același nume dar parametri diferiți

Aplicații practice

În practică, subprogramele sunt folosite pentru

  • Operații matematice
  • Prelucrare de șiruri
  • Sortare
  • Căutare

Greșeli comune

  • Uitarea instrucțiunii return în funcții, ceea ce produce valori impredictibile
  • La transmiterea prin valoare, modificările din subprogram nu se văd în apelant, ceea ce duce la erori logice

Exemple

Exemplul 1 (Funcție cu parametri prin valoare): Să se scrie o funcție care primește două numere întregi și returnează maximul dintre ele. În C: int max(int a, int b) { if (a > b) return a; else return b; } Apel: int m = max(10, 20); Rezultat: m = 20. Se observă că parametrii a și b sunt copii ale valorilor 10 și 20; modificarea lor în funcție nu afectează variabilele din program.

Exemplul 2 (Procedură cu parametri prin referință): Să se scrie o procedură care interschimbă valorile a două variabile întregi. În C: void swap(int *x, int *y) { int temp = *x; *x = *y; *y = temp; } Apel: int a=3, b=7; swap(&a, &b); // acum a=7, b=3. Se folosesc pointeri pentru a modifica direct variabilele originale.

Exemplul 3 (Funcție recursivă): Să se calculeze factorialul unui număr n folosind o funcție recursivă. În C: long factorial(int n) { if (n == 0) return 1; else return n * factorial(n-1); } Apel: long rez = factorial(5); Rezultat: 120. Explicație: funcția se autoapelează până la cazul de bază (n=0), apoi se întoarce calculând produsul.

Concepte cheie

  • Subprogram (funcție/procedură)
  • Parametru formal vs actual
  • Transmitere prin valoare vs referință
  • Tipul returnat (void, int, float etc.)
  • Prototipul funcției
  • Apelul funcției
  • Recursivitate
  • Supraîncărcare (overloading) în C++

Verifică-te!

  1. Care este diferența principală între 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 și este modificat în interiorul subprogramului?
  3. Ce este un parametru formal și cum se deosebește de un parametru actual?

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