Funcții în C++. Ce sunt subprogramele
Ce sunt funcțiile în C++?
Funcțiile sunt instrumente ale limbajului C++ (dar nu numai) care permit împărțirea unui cod în mai multe secvențe unitare. Funcțiile pot avea două roluri importante:
- Să împartă codul în unități ușor de urmărit pentru om (util în special în cazul programelor complexe, unde lucrează mai multe persoane);
- Să evite repetarea unei secvențe de cod în mai multe locuri.
Exemplu
Să luăm următorul program, care citește un număr natural și care calculează numărul de divizori al oglinditului său.
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int ogl = 0;
while(n != 0) {
int cif = n % 10;
ogl = ogl * 10; ogl += cif;
n /= 10;
}
int nrdiv = 0;
for(int i = 1; i * i <= ogl; i++) {
if(ogl % i == 0) {
nrdiv++;
if(i != ogl / i) {
nrdiv++;
}
}
}
cout << nrdiv;
return 0;
}
Programul funcționează corect, însă codul poate fi cam greu de înțeles. Trebuie să analizăm cu atenție codul pentru a înțelege exact de unde până unde se calculează oglinditul și de unde până unde se calculează numărul de divizori. Aceste două calcule s-ar putea îngloba în două funcții separate, transformând codul într-unul mai logic:
#include <iostream>
using namespace std;
int ogl(int n) {
int rasp = 0;
while(n != 0) {
int cif = n % 10;
rasp = rasp * 10; rasp += cif;
n /= 10;
}
return rasp;
}
int nrdiv(int n) {
int nr = 0;
for(int i = 1; i * i <= n; i++) {
if(n % i == 0) {
nr++;
if(i != n / i) {
nr++;
}
}
}
return nr;
}
int main()
{
int n;
cin >> n;
int oglindit = ogl(n);
cout << nrdiv(oglindit);
return 0;
}
În acest caz, în main
, codul este mult mai intuitiv: calculăm oglinditul
într-o variabilă oglinidit
, și afișăm pe ecran numărul său de divizori.
Cum se construiește o funcție
O funcție este alcătuită din mai multe părți.
Antetul funcției
Toate funcțiile au un antet, care arată cam așa:
tip numeFunctie(tip param1, tip param2, …)
Și care ne oferă următoarele informații:
- ce tip de funcție este (
int
,bool
,char
, …, sau chiarvoid
); - cum se numește funcția (asemănător cu un nume de variabilă, care ne ajută să apelăm funcția mai târziu în programul nostru);
- care sunt parametrii funcției:
- parametrii funcției precizează care sunt valorile care se prelucrează în funcție;
- vom vorbi mai încolo despre importanța acestora.
Spre exemplu, următorul antet ar fi unul reprezentativ pentru calcularea sumei a două numere:
int suma(int a, int b)
Mai exact, funcția se numește suma
, are doi parametri numere întregi (a
și
b
— iar pentru fiecare în parte trebuie să specificăm tipul lor, deoarece
acestea nu trebuie să fie ambele de același tip). De asemenea, funcția ar
trebui să ne furnizeze suma numerelor, reprezentată tot printr-un int
.
Corpul funcției
Corpul funcției reprezintă un set de instrucțiuni, delimitate de acolade
({}
), care precizează pașii care trebuie executați.
Orice variabilă declarată în funcție — inclusiv variabilele din parametri —
sunt variabile locale și temporare, adică chiar dacă le vom modifica
valorile între timp, acestea nu vor afecta valorile inițiale ale variabilelor
din main
.
Rezultatul funcției pe care noi vrem să îl furnizăm se poate face cu
instrucțiunea return rezultat;
, unde rezultat
reprezintă valoarea ca
rezultat. Tipul de date al variabilei rezultat trebuie să fie totunul cu tipul
funcției.
Atenție: După ce se apelează return
într-o funcție, toate celelalte
operații de după nu se mai execută.
Spre exemplu, pentru o funcție care calculează suma a două numere, vom compune astfel funcția:
int suma(int a, int b) {
int r = a + b;
return r;
}
Sau, direct:
int suma(int a, int b) {
return a + b;
}
Apelarea funcției
Pentru a apela o funcție, trebuie să menționăm numele funcției, iar între
paranteze, să completăm parametrii dați. Spre exemplu, în int main
, am putea
scrie:
int n = 3;
cout << suma(n, 4); //Afișează suma dintre n și 4, adică 7
Observăm că putem să furnizăm ca parametri atât variabile (n
), cât și valori
efectiv (4
). Un alt aspect important este faptul că dacă am fi modificat în
funcție valoarea primului parametru (care a luat valoarea lui n
), n
-ul
nu și-ar fi modificat valoarea.
Funcții cu parametri vectori (tablouri unidimensionale) în C++
Pe lângă variabile, putem să oferim ca parametru tablouri (vectori sau matrici). Iată un cod în C++ care calculează suma numerelor unui vector:
int sumaVector(int n, int a[]) {
int sum = 0;
for(int i = 1; i <= n; i++)
sum += a[i];
return sum;
}
Atenție: spre deosebire de variabile, dacă vectorul din parametru se modifică în timpul funcției, atunci și vectorul inițial furnizat se modifică. Acest lucru se datorează faptului că un vector este defapt un pointer.
Putem extinde ideea vectorilor și în 2D, oferind ca parametru matrici.
Valori prestabilite pentru parametri
Dacă avem o funcție cu o listă de parametri, putem să specificăm o valoare
implicită pentru acestea, în cazul în care nu se furnizează niciuna. Spre
exemplu, următoarea funcție calculează suma numerelor a
și b
, dar dacă b
nu este furnizat, se face suma dintre a
și 0
(adică se returnează a
):
int suma(int a, int b = 0) {
return a + b;
}
Atenție: Este greșit să furnizăm o valoare prestabilită pentru un parametru, iar pentru parametrii de după să nu dăm nicio valoare. Următorul antet al unei funcții din C++ va da o eroare:
int sumaGresit(int a = 0, int b)
Parametrii prin referință. Funcții de tipul void
Am stabilit că furnizând o variabilă ca parametru într-o funcție, valoarea
variabilei nu se modifică. Cu toate acestea, putem să specificăm explicit
faptul că am vrea să fie modificată valoarea variabilei, folosind &
(and):
int functie(int &a) {
a = 0;
return a;
}
Funcția de mai sus, spre exemplu, îi dă variabilei a
valoarea 0
și o
returnează.
De obicei, funcțiile care modifică valoarea variabilei nu returnează nimic. O
funcție care nu returnează nimic se numește funcție de tipul void
(despre
care am vorbit în această lecție).
Spre exemplu, o funcție care interschimbă valorile a două variabile arată așa:
void interschimbare(int &a, int &b) { //Este de tipul void, deoarece nu se returnează nimic
int aux = a;
a = b;
b = aux;
}
Probleme propuse
Setul de probleme 213 nu a fost găsit.
Alte resurse sau bibliografie
DS
Autorul acestei lecții
Dominic Satnoianu
Această lecție a fost redactată de către Dominic Satnoianu.
© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.
Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.
Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.
Cuprinsul lecției
Ce sunt funcțiile în C++?ExempluCum se construiește o funcțieAntetul funcțieiCorpul funcțieiApelarea funcțieiFuncții cu parametri vectori (tablouri unidimensionale) în C++Valori prestabilite pentru parametriParametrii prin referință. Funcții de tipul voidProbleme propuseAlte resurse sau bibliografieCreează-ți un cont InfoAs și primești…
- Acces la sute de lecții de calitate, cu animații și exerciții
- Acces la peste 800 de probleme de informatică
- Indicații și rezolvări pentru fiecare problemă
- Totul 100% gratuit!
Comentarii 0