Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
O functie de un tip diferit de void este apelatã prin folosirea ei ca operand <strong>în</strong>tr-o<br />
expresie. Exemple:<br />
z=sqrt(x)+ sqrt(y);<br />
printf ("%lf \n", sqrt(x));<br />
comb = fact(n) / ( fact(k) * fact(n-k)); // combinari<br />
y = atan (tan(x)); // functie in functie<br />
In <strong>limbajul</strong> C este uzual ca o functie sã raporteze prin rezultatul ei (numãr <strong>în</strong>treg)<br />
modul de terminare (normal/cu eroare) sau numãrul de valori citite/scrise (la functiile<br />
de intrare-iesire). Uneori acest rezultat este ignorat iar functia cu rezultat este apelatã<br />
ca o functie void. Exemple:<br />
scanf ("%d",&n); // rezultatul lui scanf este 1<br />
getchar(); // rezultatul este caracterul citit<br />
gets(adr); // rezultatul este adresa "adr"<br />
Argumentele folosite la apelul functiei se numesc argumente efective si pot fi orice<br />
expresii (constante, functii etc.). Argumentele efective trebuie sã corespundã ca numãr<br />
si ca ordine (ca semnificatie) cu argumentele formale (cu exceptia unor functii cu<br />
numãr variabil de argumente). Exemplu de functie unde ordinea argumentelor este<br />
importantã:<br />
// calculul unui unghi dintr-un triunghi<br />
double unghi (double a, double b, double c) {<br />
return acos ((b*b+c*c-a*a) / (2.*b*c)); // unghiul A<br />
}<br />
// utilizari<br />
ua = unghi (a,b,c); ub=unghi (b,c,a); uc = unghi (c,c,b);<br />
Este posibil ca tipul unui argument efectiv sã difere de tipul argumentului formal<br />
corespunzãtor, cu conditia ca tipurile sã fie "compatibile" la atribuire. Conversia de tip<br />
(<strong>în</strong>tre numere sau pointeri) se face automat, la fel ca si la atribuire. Exemple:<br />
x=sqrt(2); // arg. formal "double", arg.efectiv "int"<br />
y=pow(2,3); // arg. formale de tip "double"<br />
Deci o functie cu argument formal de un tip numeric (de ex. int) poate fi apelatã cu<br />
argumente efective de orice tip numeric (inclusiv long, float, double, long double).<br />
Conversia automatã nu se face si pentru argumente vectori de numere, iar conversia<br />
explicitã de tip conduce la erori de interpretare. Exemplu:<br />
// suma elemente vector de intregi<br />
float suma ( float a[ ], int n) {