Documente Academic
Documente Profesional
Documente Cultură
tip_returnat nume_functie(lista_tipuri_argumente);
Exemplu:
int val_max(int,int);
Funcții
Sintaxa definitie functie = se defineste continutul functiei, respective
blocul de instructiuni care descriu prelucrarea datelor
tip_returnat nume_functie(lista_argumente)
{
bloc de instrunctiuni
}
Exemplu:
int val_max(int a,int b)
{
if(a>b)
return a;
return b;
}
Funcții
. . . . . .
. . . nume_functie(lista_argumente_REALE)...
. . . . . .
Exemplu:
int main()
{
int n1 = 6, n2 = 9;
cout << val_max(n1,n2);
return 0;
}
Funcții
Functii de tip void = funcții care NU returneaza o valoare
= tipul returnat este void.
Corpul functiei poate sa nu contina instructiune de return.
Daca se doreste iesirea fortata din functie, atunci se da
instructiunea return fara argument.
Sintaxa:
void nume_functie(lista_argumente)
Exemplu:
int val_max(int a,int b) int main()
{ {
if(a>b) int n1=6, n2=9;
return a; cout<<val_max(n1,n2);
return b; return 0;
} }
STIVA program
Exemplu:
int factorial(n)
{
if (n)
return n*factorial(n-1);
return 1;
}
Observatii: Recursivitatea se utilizeaza in aplicatii diverse:
- implementarea tehnicii „divide et impera”
- inversarea ordinii de parcurgere
Funcții. Valori implicite pentru argumentele unei functii
Valori implicite pentru argumentele unei functii.
Sintaxa:
tip_returnat nume_fct(tip1 v1, tip2 v2=val2, tip3 v3=val3)
{
. . . . . .
}
nume_fct(w1,w2);// v1=w1,v2=w2,v3=val3
// NU se poate v1=w1,v2=val2,v3=w2
nume_fct(w1); v1=w1,v2=val2,v3=val3
Funcții. Valori implicite pentru argumentele unei functii
Exemplu:
dist2pct(5,10); // pct 1D
dist2pct(1,2,5,9); //pct 2D
dist2pct(1,2,3,5,6,7); pct 3D
Funcții. Pointeri la functii
Pointeri la functii
Se utilizeaza atunci cand sunt mai multe functii similare (ac. tip returnat
ac. lista de arg) si se doreste apelarea lor “generalizata” printr-un
mecanism de selectie, fara a schimba sintaxa (numele) de apel.
Funcții. Pointeri la functii
Exemplu 1:
int main()
{ int op=2;
float (*pfct)(float,float); //definire
switch op
{ case 1: pfct=adun; //atribuire val; initializare
break;
case 2: pfct=inm;
break;
}
cout<<“rezultat=”<<pfct(3,5)<<endl; // apel
}
Funcții. Pointeri la functii
Funcții. Pointeri la functii
Exemplu 2: Calculul integralei functiilor:
#include <math.h>
double sinxp();
double trapez(double a,double b,int n,double(*f)())
{ double h,s;
int i;
h=(b-a)/n;
for(s=0.0,i=1;i<n;i++)
s+=(*f)(a+i*h);
s+=((*f)(a)+(*f)(b))/2.0;
s*=h;
return s;
}
Funcții. Pointeri la functii
int main()
{ int n=N;
double In,I2n,vabs;
In=trapez(a,b,n,sinxp);
do { n*=2;
I2n=trapez(a,b,n,sinxp);
if((vabs=In-I2n)<0) vabs=-vabs;
In=I2n;
} while(vabs > eps);
printf(“%6.2lf\n”, I2n);
}
Funcții. Pointeri la functii
void g()
{ extern int fct(int);
fct(“abc”); // EROARE nu exista ac. fct
}
Funcții. Supraincarcarea functii
Diferentierea functiilor supraincarcate la apel
int main()
{ int a=1,b=3;
float c=1.2;
double d=2.3,e=4.5;
char t=‘a’;
a=fct(a,b); // fct(int,int)
a=fct(d,e); // fct(double,double),tip a
// nu conteaza
a=fct(c,d); // fct(double,double)
// float -> double
a=fct(t,b); // fct(int,int)
// char -> int
a=fct(t,d); // TEMA
a=fct(a,d); // TEMA
} // Tema: similar cu 3 param, apel fct(int,int,double)
Funcții. Lansarea in executie a unei aplicatii
Lansarea in executie a unei aplicatii
nume_aplicatie
int main ()
{ . . . .
Funcții. Lansarea in executie a unei aplicatii
2. Lansarea cu parametrii: