Documente Academic
Documente Profesional
Documente Cultură
1. Introducere
Subprogramele sunt pri ale unui program, identificabile prin nume, care se pot activa
la cerere prin intermediul acestor nume.Prezena subprogramelor implic funcionarea
n strns legtur a dou noiuni: definiia unui subprogram i apelul unui
subprogram.Definiia unui subprogram reprezint de fapt descrierea unui proces de
calcul cu ajutorul variabilelor virtuale (parametri formali) iar apelul unui subprogram nu
este altceva dect execuia procesului de calcul pentru cazuri concrete (cu ajutorul
parametrilor reali, (efectivi, actuali) ).
O funcie care returneaz o valoare poate fi apelat fie printr-o instruciune de apel simpl
(cazul funciilor care nu returneaz valori) i n plus poate fi apelat ca operand al unei expresii.
n cazul n care funcia se apelaz print-o instruciune de apel simpl, rezultatul funciei se
pierde.
Instruciunea return
are formatele:
return ;
return expresie ;
Exemplu:
#include<iostream.h>
void test(int n)
{
n++;
cout<<n<<endl; tiprete n=8
}
void main()
{
int n=7;
test(n);
cout<<n<<endl; tiprete n=7
}
Parametrul n este transmis prin valoare. n funcia main() acest parametru este iniializat
cu valoarea 7. Cnd apelm funcia test(), se rezerv spaiu pe stiv, spaiu care are
numele parametrului formal (n acest caz, tot n) i care este iniializat cu valoarea
memorat de variabila n a programului principal. Altfel spus, pe stiv se copie valoarea
parametrului efectiv de apel. n funcie, variabila n (care este local acestei funcii) este
incrementat i devine 8, valoare care va fi tiprit. La ieirea din funcie, variabila n din
stiv se pierde, adic nu mai are spaiu alocat, prin urmare valoarea 8 este pierdut. n
main() se tiprete valoarea variabilei n (local acesteia) care are valoarea 7.
Se observ c, n momentul apelului funciei test(), pe stiv sunt alocate dou variabile
cu acelai nume n. Prima variabil este variabila local funciei main() care se salveaz
pe stiv n momentul apelului pentru a putea reface contextul funciei main() dup
ncheierea apelului. A doua variabil este parametrul formal tip valoare n, vizibil numai
n funcia test() i iniializat n momentul apelului cu valoarea 7. Indiferent ce valori
primete acest n n corpul funciei test(), dup ncheierea execuiei acestei funcii,
spaiul su este de alocat din stiv, adic variabila respectiv este distrus. Din acest
motiv, dup execuia funciei test(), coninutul stivei este cel din dreapta. Se reface
contextul din care s-a lansat apelul funciei test(), adic se recupereaz din stiv
valoarea variabilei locale n=7 i adresa de revenire, adic adresa instruciunii cout.
b) Expresii. n acest caz, parametrii efectivi sunt expresii, care pot conine i funcii i
care mai nti se evalueaz. Exemplu:
#include<iostream.h>
#include<math.h>
void test(int n)
{
cout<<n<<endl;
}
void main()
{
test(5); se va tipri 5
test(7+(int)sqrt(45)); se va tipri 13
}
n funcie se creeaz o variabil numit n, reinut pe stiv, care la primul apel va primi
valoarea 5 i la al doilea apel valoarea 13.
La ieirea din funcie coninutul acestei variabile se pierde.
Transmiterea parametrilor prin valoare se utilizeaz cnd nu dorim ca subprogramul
apelat s poat modifica parametrii efectivi de apel. Acesta este modul implicit de
transmitere a parametrilor n limbajul C. Dac nu ar exista dect transmiterea prin
valoare, ar fi imposibil s modificm valoarea anumitor valori care sunt declarate n
blocul apelator.
Exemplul 7.1
1. include <iostream> APEL PRIN VALOARE