3. Ce sunt subprogramele(func iile
ț )
în C++ (dar nu numai) ?
• 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
ț .
5. Cum se construie te o func ie?
ș ț
1. Antetul func iei
ț
Toate func iile au un antet, care arată cam a a
ț ș :
i care ne oferă următoarele informa ii
Ș ț :
o Ce tip de func ie este(int, bool, char, void)
ț ;
o Cum se nume te func ia
ș ț ;
o Parametrii func iei.
ț
Exemplu reprezentativ al antet-lui:
6. Cum se construie te o func ie?
ș ț
2. 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().
Pentru o func ie care calculează suma a două numere, vom crea func ia astfel
ț ț :
Sau, direct:
7. Cum se construie te o func ie?
ș ț
2. 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().
Pentru o func ie care calculează suma a două numere, vom crea func ia astfel
ț ț :
Sau, direct:
Aten ie:
ț După ce se apelează return într-o func ie, toate celelalte opera ii de
ț ț
după nu se mai execută.
8. Cum se construie te o func ie?
ș ț
3. Apelarea func iei
ț
Pentru a apela o func ie(subprogram), trebuie să men ionăm numele func iei, iar
ț ț ț
între paranteze, so completăm parametrii da i. Spre exemplu,
ț în int main() am putea scrie:
9. Func ii cu parametri vectori(tablouri
ț
unidimensionale)
Pe lângă variabile, putem să oferim ca parametru tablouri(vectori sau matrici). Exemplu ce
calculează suma numerelor unui vector:
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.
10. 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):
În C++, este important ca parametrii care au valori prestabilite să fie plasa i la sfâr itul listei de
ț ș
parametri. Dacă un parametru are o valoare implicită i un alt parametru nu are, acest lucru va duce la
ș
eroare.
11. Parametri prin referin ă. Func ii de tipul
ț ț void
În mod normal, atunci când transmit o variabilă ca parametru într-o func ie, valoarea variabilei
ț
nu este modificată în afara func iei. Totu i, dacă dorim să
ț ș modificăm valoarea variabilei în interiorul
func iei, putem să folosim simbolul
ț & pentru a transmite parametrul prin referin ă
ț .
Func iile care modifică valorile parametrilor nu returnează nimic. Aceste func ii sunt de tipul
ț ț void
(adică nu au un tip de returnare, deoarece nu returnează niciun rezultat). De exemplu, o func ie care
ț
interschimbă valorile a două variabile ar putea arăta astfel:
Func ia
ț interschimbare prime te două variabile prin referin ă (a i b) i le schimbă între ele.
ș ț ș ș
Această func ie nu returnează nimic, pentru că scopul ei este doar să modifice valorile celor două
ț
variabile.
13. Modularizarea unui program prin intermediul subprogramelor
Să se scrie un program care pentru un număr citit de la tastatură va determina daca e număr prim,
perfect, va face suma divizorilor i va tipări pătratul lui.
ș
14. Modularizarea unui program prin intermediul subprogramelor
Să se scrie un program care pentru un număr citit de la tastatură va determina daca e număr prim,
perfect, va face suma divizorilor i va tipări pătratul lui.
ș
15. Modularizarea unui program prin intermediul subprogramelor
Să se scrie un program care pentru un număr citit de la tastatură va determina daca e număr prim,
perfect, va face suma divizorilor i va tipări pătratul lui.
ș
Rezultatul
compilării
16. Modulul Sumad:
- subprogram de tip func ie;
ț
- - parametri de intrare:
numărul de tip întreg - x;
- parametri de ie ire: nu are;
ș
- scopul subprogramului:
calcularea sumei divizorilor unui
număr i returnarea lui ca
ș
rezultat al func iei (tip intreg).
ț
Modulul Prim:
- subprogram de tip func ie;
ț
- - parametri de intrare: numărul (tip
intreg) - x;
- - parametri de ie ire: nu are;
ș
- - scopul subprogramului: verificarea
daca un număr este prim sau nu i
ș
returnarea ca
rezultat al func iei valoarea 0 dacă este
ț
prim i 1 dacă nu este prim.
ș
Modulul Perfect:
- subprogram de tip procedura;
- parametri de intrare: numarul (tip
intreg) - , suma divizorilor (tip intreg)
- sum;
- - parametri de ie ire: o variabilă a
ș
cărei valoare va fi 0 dacă este perfect
sau 1 dacă
numărul nu este perfect - rez;
- scopul subprogramului: compararea
numărului cu suma divizorilor săi i
ș
atribuirea
unei valori corespunzătoare parametrului
de ie ire.
ș
18. Ce va afi a următorul program?
ș
Rezultatul compilării
19. Problema 1
Oglinditul unui număr natural este numărul format
prin inversarea ordinii cifrelor sale. Spre exemplu, oglinditul
lui 123 este 321, iar oglinditul lui 10000 este 1.
Cerin ă
ț
Să se scrie o func ie care să ia ca parametru un număr
ț
natural n i să returneze oglinditul său.
ș
Detalii spre implementare
o Numele func iei este oglindit
ț ;
o Func ia acceptă un parametru număr întreg, n
ț ;
o Func ia returnează un număr întreg, reprezentând valoarea
ț
cerută.
Problema 2
Cerin ă
ț
Să se scrie o func ie care să ia ca parametru
ț
un număr natural n i să returneze suma 1+2+3+4+...+
ș
n.
Detalii spre implementare
o Numele func iei este suma_gauss
ț ;
o Func ia acceptă un parametru număr întreg, n
ț ;
o Func ia returnează un număr întreg, reprezentând
ț
valoarea cerută.