Documente Academic
Documente Profesional
Documente Cultură
Miki PDF
Miki PDF
Introducere
1. Noiunea de subprogram
Un program scris n limbajul C/C++ este un ansamblu de funcii, fiecare dintre acestea
efectund o activitate bine definit. Doar una dintre aceste funcii este rdcin sau funcie
principal - adic nu poate lipsi i executarea programului ncepe automat cu ea. Aceasta se
numete main.
1
3. Clasificarea subprogramelor
Declaraia conine antetul funciei i informeaz compilatorul asupra tipului, numelui funciei i
a listei parametrilor formali (n care se poate indica tipul parametrilor formali i numele
acestora). Declaraiile de funcii se numesc prototipuri, i sunt constituite din antetul funciei.
tip_returnat nume_funcie (lista tipuri parametri formali); //prototip
2
Definiia conine antetul funciei i corpul acesteia. Nu este admis definirea unei funcii n
corpul altei funcii.
Tip_returnat Reprezint tipul rezultatului calculat i returnat de funcie sau tipul void (niciun
rezultat!!) . O funcie returneaz cel mult un rezultat.
Tipul rezultatului returnat poate fi orice tip de date cu excepia masivelor
(vectori, matrice, etc...). n cazul acesta se va utiliza tipul struct pentru a crea
un nou tip de date ce include masivele. Noul tip poate fi un tip_returnat.
Dac dorim ca funcia s returneze mai multe rezultate, putem utiliza variabile
globale, tipul struct sau parametri transmii prin referin (adres) care s
memoreze aceste rezultate i s le furnizeze modulului apelant
Dac tipul rezultatului este diferit de void, corpul funciei trebuie s conin cel
puin o instruciune return.
return expresie;
Tipul expresiei calculat i returnat de funcie trebuie s fie de acelai tip cu
tip_returnat sau poate fi un tip convertibil implicit la tipul rezultatului.
Nume_funcie Un identificator ce reprezint numele dat funciei de ctre cel ce o definete,
pentru a o putea apela.
Lista parametrilor Reprezint o list de declaraii de parametri formali, separai prin virgul:
formali tip_parametru1 nume_parametru1,..., tip_parametruN nume_parametruN
Aceast list poate s fie i vid.
Instruciune Poate conine declaraii de variabile (variabile locale) i instruciuni propriu-zise.
compus
3
4
Lecia 2.
Sistemul de operare aloc fiecrui program trei zone distincte n memoria intern n care se gsesc
memorate variabilele programului.
3. Durata de via
Reprezint timpul n care variabila respectiv arealocat spaiul n memoria intern. Astfel avem:
Durata static variabila are alocat spaiu n tot timpul execuiei programului (Global)
Durata local variabila are alocat spaiu n timpul n care se execut instruciunile blocului
respectiv (Local)
Durat dinamic alocarea i dezalocarea spaiului necesar variabilei respective se face de
ctre programator prin operatori sau funcii speciale.
4. Tipul variabilei
5
Variabile globale:
Se declar n afara corpului oricrei funcii.
Pot fi utilizate de toate funciile care urmeaz n textul surs declaraiei variabilei respective.
La declarare, variabilele globale sunt iniializate implicit cu 0.
Atributele variabilelor globale sunt:
1. Clasa de memorare segmentul de date.
2. Durata de via a variabilelor globale este static. Ele au spaiul de memorie rezervat n tot
timpul execuiei programului.
3. Vizibilitatea n cazul n care declaraiile acestora sunt naintea tuturor funciilor, ele sunt
vizibile la nivelul ntregului program (fiier). Dac anumite funcii se afl plasate naintea
declaraiilor acestor variabile, atunci ele sunt vizibile doar pentru funciile care sunt plasate
dup aceste declaraii.
6
Variabile locale:
Sunt declarate n corpul funciilor.
Variabilele declarate n corpul funciei main() sunt locale
Atributele variabilelor locale sunt:
1. Clasa de memorare a variabilelor locale este, implicit, segmentul de stiv.
Exist posibilitatea ca acestea s fie alocate void test ()
n registrele microprocesorului, caz n care { int a=1;}
declaraia lor trebuie precedat de cuvntul int main()
{ register int b=4; return 0;}
cheie register:
2. Durata de via a variabilelor locale este local. Triesc atta timp ct dureaz executarea
funciei sau blocului n care au fost definite.
3. Vizibilitatea.
Vizibilitatea variabilelor locale este la nivelul #include <iostream>
blocului n care au fost declarate. using namespace std;
int a;
void F()
{ int a=2;
{int a=1; cout<<a<<endl;}
cout<<a<<endl;}
int main()
{a=3; F();cout<<a; return 0;}
7
8
Lecia 3. Apelul subprogramelor.
nume_funcie (lista_parametrilor_efectivi);
Parametrii efectivi trebuie s corespund cu cei formali ca ordine i tip.
9
O alt posibilitate de a apela o funcie este aceea n care apelul funciei constituie operandul
unei expresii (apelul functiei intervine intr-o expresie). Acest lucru este posibil doar n cazul n
care funcia returneaz o valoare, folosit n calculul expresiei (doar pentru functiile cu tip).
Se utilizeaz atunci cnd suntem interesai ca subprogramul s lucreze cu acea valoare, dar, n
prelucrare, nu ne intereseaz ca parametrul efectiv (cel din blocul apelant) s rein valoarea
modificat n subprogram.
#include <iostream>
using namespace std; Var.locale Ecran
void test(int n) n_main n_test
{ n++; cout<<n<<endl;} 1 2 2 (n_F)
10
int main() 1 (n_main)
{int n=1;
test(n); cout<<n<<endl;
return 0;}
#include<iostream>
using namespace std; Var.locale Ecran
void test(int n) apel_main n_test
{cout<<n<<endl;} test(3); 3 3 (n_test)
int main() test(3+4*5); 23 23 (n_test)
{ test(3); test(3+4*5);
return 0;}
PRECIZRI.
Se pot transmite prin valoare prin intermediul parametrilor efectivi:
valori reinute de variabile
valori constante
expresii (acestea pot conine i apeluri de funcii) caz n care mai nti se evalueaz
expresia i apoi se transmite valoarea rezultat
Transmiterea prin valoare a #include <iostream>
tablourilor (MASIVELOR) permite ca using namespace std;
int n;
funciile s ntoarc noile valori ale
acestora (care au fost atribuite n void citeste (int x[10])
funcii). Numele masivelor sunt de { cin>>n;
fapt pointeri ctre componentele lor. for (int i=1; i<=n;i++) cin>>x[i];
La transmiterea numelui unui tablou }
ca parametru efectiv, se transmite
de fapt adresa de nceput a tabloului int main()
{ int a[10];
citeste(a);
for(int i=1; i<=n;i++) cout<<a[i]<<" ";
return 0;
}
11
Transmiterea parametrilor prin referin
Se utilizeaz atunci cnd ne intereseaz ca la revenirea din subprogram variabila
transmis s rein valoarea stabilit n timpul execuiei programului i nu valoarea de la
apel.
Subprogramul reine n stiv adresele acestor variabilei.
int main()
{ int a[10],n;
citeste(a,n);
for(int i=1; i<=n;i++) cout<<a[i]<<" ";
return 0;
}
12
13
S se scrie o funcie care calculeaz cel mai mare divizor
comun pentru dou numere naturale nenule (utiliznd algoritmul lui Euclid).
14