17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

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) {

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!