Sunteți pe pagina 1din 4

Subprograme in limbajul C ( functii )

Necesitatea utilizarii functiilor

a. Modularizarea programelor
 Pentru rezolvarea unei probleme complexe se poate descompune problema in
subprogram relative independente pentru fiecare subproblema scriinduse cate un
modul de program ( subprogram )
 Ex. Se citeste de la tastaturaun tablou unidimensional cu n elemente numere intregi.
Sa se ordoneze elementele tabloului iar apo isa se afiseze elementele ordonate.
Azeasta problema poate fi impartita in 3 subprograme:
- Citirea datelor
- Sortarea elementelor tabloului
- Afisarea elementelor tabloului
b. Reutilizarea codului
 Se dau 2 numere naturale a, b. se cere sa se calculeze suma oglinditelor celor doua
numere
Pentru rezolvarea acestei probleme trebuie sa scriem 2 secvente de program
aproape identice care sa calculeze oglinditele numerelor. In acest caz se poate scrie
un subprogram care determina oglinditul pentru un numar oarecare, subo=program
care va fi apelat de 2 ori. Aceste functii pot fi de 2 tipuri:
I. Functii ce returneaza o valoare
= functii care calculeaza ( determina ) un rezultat pornind de la anumite date de
intrare. Acest rezultat este returnat de functie. In acest caz, functia va fi apelata
ca operant intro expresie. Valoarea operandului in ecpresie fiind de fapt valoarea
returnata de functie.
Ex. Suma oglinditelor 2 numere

int oglindit (int x) { antetr functie

int ogl=0;
while (x) {
ogl=ogl*10+x%10;
x/=10; corp functie
}
Return ogl;
}
Int main () {
Int a, b;
Cin>>a>>b;
Cout<<oglindit (a)+oglindit (b);
Return 0;
}

Int= tipul de rezultat returnat


( int x ) = parametrul functiei

oglindit (a)+oglindit (b) = apelul functiei

II. Functii care nu returneaza o valoare


= functii ( subprograme ) care indeplinesc o darcina, sau fac anumite prelucrari si
nu returneaza un rezultat. Aceste functii se apeleaza intro instructiune de sine
statatoare, nu intro expresie
Ex. Se citeste un vector cu n elemente. Se ordoneaza si afiseaza elementele
vectorului
Void citire ( int v[], int &n ) {
Int I;
For( int i=1; i<=n; i++ )
Cin>>v[i];
}

Void afisare ( int v[], int n) {

For(int i=1; i<=n; i++ )

Cout<<v[i]<< ” ”;

Cout<<endl;

Void sortare ( int v[], int n ) {

For( int i=1; i<=n; i++ )

For( int j=i+1; j<=n; j++ )

If( v[i] > v[j] {

Aux = v[i];

V[i] = v[j];

V[j] = aux;

Int main ( ) {

Int a [100], n;

Citire ( a, n );

Sortare (a, n); apel functie

Afisare (a, n);


Return 0;

Void = functia nu returneaza o valoare

Declararea si definirea unei functii

Pentru a puteaapela o functie in cadrul unui program, eat ren=buie in prealabil defiinita dau
declarata. Definirea unei functii inseamna scrierea ei in intregime ( antet si corp ). Declararea
unei functii inseamna sai anuntam existenta, in acest caz se scried oar antetul functiei urmat de
“;”. Aceasta instructiune declarativase mai numeste si prototipul functiei;

Sintaxa de definire a unei functii

Tip nume ( lista_declaratii_parametrii_formali ) { antet

Declaratii variabile locale

Instructiuni corp

Tip= tipul rezultatului returnat de functie

Daca functia nu returneaza un rezultat, atunci s eutilizeaza ‘void’

Nume = numele functiei

lista_declaratii_parametrii_formali = una / mai multe declaratii de parametrii formali separate


prin ‘ , ’

Daca functia nu are parametrii, atunci se scriu ‘ () ’ fara a scrie nimic intre ele

Parametrii unei functii constituie o interfata prin intermediul careia functia comunica cu
exteriorul ( primeste si furnizeaza rezultatele )

In corpul unei functii poate sa apara instructiunea ‘ return ’ in una din urnatoarele doua forme:

- return expresie;

- return;

Effect = se evalueaza expresia si se incheie executia functiei returnand in exterior valoarea


functiei

Daca expresia lipseste atunci functia nu returneaza nimic

Revenirea dintro functie sau incheierea executiei functiei se face :

- la intalnirea cu ‘ return ’

- la intalnirea cu ‘ } ’
Apelul functiilor

Se poate realiza:

- printro instructiune de apel ( ex. Citire (a, n); )

- ca operant intro expresie ( ex. Oglindit (a) + oglindit (b) )

Sintaxa generala de apel

Nume ( lista parametrii actuali / efectivi )

La apelul unei functii valorile parametrilor actuali sunt atribuite in ordine parametilor formali
corespunzatori

In programele scrise la clasa parametrii actuali pot corespunde cu parametrii actuali ca numar, ordine si
tip ( sa fie posibila conversia implicita de tip )

S-ar putea să vă placă și