Capitolul 1.7. Functii

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 1.7. Functii

Mesaj  zooky la data de Mier Mar 18, 2009 12:47 am

In C o functie este echivalenta cu o subrutina sau cu o functie din FORTRAN sau cu o procedura din PL/1 sau PASCAL, etc. O functie reprezinta un mod convenabil de a incapsula anumite calcule intr-o cutie neagra care poate fi apoi folosita fara sa ne mai pese de ce se afla inauntru. Functiile sint singura modalitate de a face fata la complexitatea potentiala a programelor mari. Cu functii scrise asa cum trebuie, este posibil sa ignoram "cum" este facuta o anumita treaba; ne este suficient sa stim "ce" anumita treaba este facuta. Limbajul C este proiectat pentru a face folosirea lor usoara, convenabila si eficienta; veti observa adesea o functie lunga numai de citeva rinduri, apelata o singura data, numai fiindca ea clarifica anumite portiuni de cod.

Pina acum am folosit numai functii ca printf, getchar si putchar, care au fost scrise de altii pentru noi; este momentul sa ne scriem si noi propriile noastre functii. Deoarece limbajul C nu poseda un operator de xponentiere ca ** din FORTRAN sau PL/1, vom ilustra mecanismul de definire de functii scriind o functie putere "power(m,n)" care va ridica un intreg la o putere intreaga pozitiva in n. Adica, valoarea lui power(2,5) este 32. Desigur ca aceasta functie nu realizeaza toata treaba lui ** deoarece minuieste numai puteri pozitive ale intregilor mici, dar cel mai bine,este bine sa aprofundam un lucru la un moment dat.
Iata acum functia "power" si un program principal care o foloseste, asa ca puteti vedea deodata intreaga structura.

main() /* testeaza functia power */
{
int i;
for (i = 0; i < 10; ++i)
printf ('%d %d %d\n', i, power(2,i), power(-3,i));
}
power(x,n) /* ridica pe x la puterea a n-a ; n > 0 */
int x, n;
{
int i, p;
p = 1;
for (i = 1, i <= n; ++i)
p = p * x;
return(p);
}

Orice functie are o aceeasi forma:

nume (lista de argumente, daca exista)
declaratii de argumente, daca exista
{
declaratii
instructiuni
}

Functiile pot apare in orice ordine si intr-un fisier sursa sau in doua. Bineinteles, daca sursa apare in doua fisiere, veti avea mai multe de spus la compilare si incarcare decit daca e un singur fisier dar asta este o problema a sistemului de operare si nu un atribut al limbajului. Pentru moment vom presupune ca ambele functii se gasesc intr-un acelasi fisier, asa ca ceea ce ati invatat despre executia programelor C nu se modifica.Functia "power" este apelata de doua ori in linia

printf("%d %d %d\n", i, power(2,i), power(-3,i));

Fiecare apel trimite doua argumente lui power, care de fiecare data returneaza un intreg care trebuie formatat si tiparit. Intro expresie power(2,i) este un intreg, la fel ca si 2 si i. (Nu toate functiile produc o valoare intreaga; vom vedea aceasta in Capitolul 4). In "power" argumentele trebuie sa fie declarate corespunzator cu tipul lor cunoscut. Aceasta este facuta de linia

int x,n;

care urmeaza liniei cu numele functiei. Declaratiile de argumente urmeaza sa se situeze intre lista de argumente si acolada stinga deschisa {; fiecare declaratie se termina cu punct si virgula. Numele folosite de power pentru argumentele sale sint pur locale lui power si nu sint accesibile nici unei alte functii: alte rutine pot folosi aceleasi nume fara nici un conflict.
Aceasta este adevarat si pentru variabilele i si p: i din power (nu este legat prin nimic) nu are nici o legatura cu i din main.
Valoarea pe care power o calculeaza este returnata in main prin instructiunea "return", care este la fel ca in PL/1 . Orice expresie poate apare intre paranteze. O functie nu trebuie sa returneze o valoare; o instructiune "return" fara nici o expresie cauzeaza transferul controlului, dar nu o valoare utila, spre apelant, asa cum face "iesirea dupa sfirsit" a unei functii prin atingerea parantezei drepte terminatoare.

Exercitiul 1.13. Scrieti un program care sa converteasca intrarea in litere mici, folosind o functie lower(c) care returneaza pe c, daca c nu este o litera, si valoarea "litera mica a lui c", daca c este o litera.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum