Sunteți pe pagina 1din 5

Functii n C++

Functia=

o secvent de instructiuni creia i s-a dat o denumire si care este chemat s


se execute prin intermediul acelei denumiri.

Exemplu:
Fara functie
#include <iostream.h>

Cu functie
#include <iostream.h>

int main() {

void Afisari()

cout<<Maria<<endl;

cout<<Maria<<endl;

cout<<Dan;

cout<<Dan;

return 0;

int main() {
Afisari(); // apelul functiei
return 0;
}
// functia main spunem ca este apelant

Clasificare :
1. Functii fara tip ncep cu cuvantul void
2. Functii cu tip:

ncep cu tipul rezultatului pe care l furnizeaza apelantului

pentru intoarcerea rezultatului ctre apelant este necesar s contina


instructiunea

return rezultat;

Exemplu :
#include <iostream.h>
int calcul() {
return

12+13 ;

}
int main() {
cout<<calcul() ;
return 0;
}

Variabile locale i variabile globale


ntrebri
Unde se declara ?
Efectele declaratiei

Variabila Locala
n interiorul unei functii
Locatia sa este accesibila doar n
interiorul functiei respective ( se
disloc la iesirea din executie a
functiei )
Se initializeaza la alocare cu valoare
aleatoare de tipul su
Cnd
alege Cnd este vorba despre o variabila
programatorul
auxiliara
pentru
secventa
de
aceasta varianta ?
instructiuni din functie
Exemplu :
#include <iostream.h>
int n, x[20]; // globale
void citire_vector() {
cin>>n;
int i; // locala functiei citire_vector
for(i=1;i<=n;i++) cin>>x[i];
}
void afisare_vector() {
int i; // locala functiei afisare_vector
for(i=1;i<=n;i++) cout<<x[i]<< ;
}
int

maxim() {
int i , max=x[1]; // locale functiei maxim
for(i=2; i<=n;i++)
if (x[i]>max) max=x[i];
return max;

}
int main() {
citire_vector();
afisare_vector();
cout<<endl<<maximul pe vector=<<maxim();
return 0;
}

Variabila Globala
n antetul programului
Locatia sa este accesibila din
orice functie a programului
Se initializeaza la alocare cu
valoarea nul a tipului su
Cnd
mai multe functii
trebuie
sa
prelucreze
respectiva variabila

Parametrii
Clasificare
1. Parametru formal =variabila care se declara n paranteza ce urmeaz
functiei, la descrierea functiei.

dup numele

Rolul su este tot de variabil

local.

Tipuri de parametrii formali :


a.

parametru formal constant la intrarea in executie a functiei se initializeaz cu o


valoare transmis de ctre apelantul functiei

b. parametru formal referinta la intrarea in executie a functiei se initializeaz cu o


adres de RAM a unei variabile din apelant.
2. Parametru real / actual / efectiv =valoarea cu care se initializeaz un parametru formal
constant respectiv variabila cu a crei adres se
initializeaza un parametru formal referint.
Exemple :
1.
#include <iostream.h>
int suma_cifre( long n ) {
int s=0;
while (n) {
s=s+n%10;
n/=10;
}
return s;
}
void afisare_produs( long n, long m ) {
cout<<suma_cifre(n)*suma_cifre(m)<<endl;
}
int main() {
long a,b,c,d;
cin>>a>>b>>c>>d;
afisare_produs(a,b);
afisare_produs(c,d);
return 0;
}

Functionare :
-

functia main apeleaz functia afisare_produs si i transmite valoarea variabilei a si


valoarea variabilei b. Aceste valori se atribuie, pozitional, parametrilor formali din
functia apelat, numiti n si m.

functia afisare_produs apeleaz

functia

suma_cifre

si i transmite valoarea

variabilei n. Aceasta se atribuie variabilei n care este parametru formal n functia


apelat. Functia apelat ntoarce apelantului

rezultatul secventei de instructiuni,

adica valoarea s.
-

functia afisare_produs apeleaz

functia

suma_cifre

si i transmite valoarea

variabilei m. Aceasta se atribuie variabilei n care este parametru formal n functia


apelat. Functia apelat ntoarce apelantului rezultatul secventei de instructiuni,
adica valoarea s.
-

Totul se petrece similar pentru al doilea apel din main: se transmit valorile
variabilelor c si d.

2.
#include <iostream.h>
void

calcule( long n, int &s , int &nr ) {


do {
s=s+n%10; nr++;
n/=10;

while (n);
}
int main() {
long n,m;
cin>>n>>m;
int s=0,

nr=0;

calcule( n, s, nr );
cout<<pentru <<n<<suma cifre=<<s<< numar cifre=<<nr<<endl;
s=nr=0;
calcule( m, s, nr );
cout<<pentru <<m<<suma cifre=<<s<< numar cifre=<<nr<<endl;
return 0;
}

ATENTIE :

orice parametru formal tablou ( vector, matrice, sir de caractere ) este

automat considerat parametru referint


-

nu trebuie sa ii atasam semnul &

se initializeaza cu adresa de RAM a unei variabile similare, din apelant.

Exemplu :
#include <iostream.h>
void

citire_vector( int &n,

int x[] ) {

cin>>n;
int i;
for(i=1;i<=n;i++) cin>>x[i];
}
void ordonare_crescatoare( int n, int x[] ) {
int i,j,aux;
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
if (x[i]>x[j]) { aux=a[i]; x[i]=x[j]; x[j]=aux; }
}
void afisare_vector( int n, int x[] ) {
int i;
for(i=1;i<=n;i++) cout<<x[i]<< ;
cout<<endl;
}
int main() {
int n1, a[50], n2, b[100];
citire_vector(n1, a );

ordonare_crescatoare( n1, a ); afisare_vector( n1, a );

citire_vector(n2, b );

ordonare_crescatoare( n2, b ); afisare_vector( n2, b );

return 0;
}

Observatie :
La intrarea in executie a unei functii acesteia i se aloc o zona de RAM, ntr-o parte
special de memorie care se numete STIV. Acolo se aloc toate variabilele localeinclusiv parametrii formali. La finalul execuiei respectivei funcii, nivelul de STIV care s-a
alocat pentru ea se golete ( toate variabilele sale locale dispar ).
Variabilele globale se aloc ntr-o alt zon de RAM numit zon de date. Aceasta se
golete doar la finalul execuiei programului.