Documente Academic
Documente Profesional
Documente Cultură
Functii in C/CPP
Gandim functia ca o procedura, un subprogram. Functiile vor fi apelate din main() sau din alta functie apelata
din main().
Deci programele sunt o ierarhie de apeluri de functii, baza acestei ierarhii fiind functia main()
Pentru a lucra cu functiile trebuie sa stim cum se definesc, cum se declara si cum se apeleaza
1. Definirea functiei
Definitia unei functii consta in:
a. Un antet care contine
Tipul rezultatului intors de functie -> ce tip are valoarea calculata de functie
Numele functiei -> ca sa o putem folosi (sau sa o putem “apela”); regulile pentru nume sunt aceleasi
ca pentru numele variabilelor
Lista parametrilor (formali) -> ce argumente are functia si ce tip are fiecare argument/parametru
b. Blocul de instructiuni
{
instructiuni...
}
adica:
tip_valoare_returnata Nume_Functie (tip_param1 nume_param1, tip_param2 nume_param2, ...)
{
declaratii_variabile_locale
instructiuni...
return valoare_returnata;
}
Deci ce este in dreapta numelui functiei intre paranteze este input-ul functiei ->ce bagam in ea iar ce este in
stanga este output-ul functiei -> ce scoatem din ea.
Se spune parametri formali deoarece ei descriu in mod formal operatiile la care vor fi supuse datele ce vor fi
transmise de programul apelant la executie.
Obs importanta: o functie poate intoarce NUMAI o singura valoare (sau poate executa niste operatii si nu
returneaza nimic: void nume_functie()
informeaza compilatorul de existenta functiei si formatul acesteia adica specifica numele, tipul rezultatului
intors, si lista parametrilor. Declaratia unei functii este de tipul:
Definitia unei functii poate sa se gaseasca oriunde, nu neaparat inaintea apelului, posibil si in alte fisiere;
compilatorul trebuie insa sa verifice validitatea apelului functiei, de aceea inaintea oricarui apel este necesar
ca sa apara cel putin declaratia functiei.
Uzual declaratiile se fac la inceputul programului, inainte de functia main() si definitiile functiilor se scriu la
sfarsit, dupa main() sau chiar in alte fisiere. Daca functiile (definitiile) se scriu la inceput, inainte de main()
declaratiile nu mai sunt necesare -->este un exemplu mai incolo.
3. Apelul functiilor
deci:
Parametrii actuali trebuie sa corespunda ca numar, ordine si tip cu parametrii formali
codul este echivalent, exemplu de apelare a unei functii ca operand intr-o expresie
#include <iostream> #include <iostream>
using namespace std; using namespace std;
Acelasi program de mai sus dar definitia functiei este dupa apel; avem nevoie de declaratia functiei (nu uitam
punct si virgula dupa declaratie):
#include <iostream> int suma(int x, int y )
using namespace std; {
int sum;
int suma(int, int ); //declaratia functiei inainte de sum=x+y;
apel return sum;
}
int main()
{
int a=10, b=20, c;
c=suma(a,b);
cout<<"suma este: "<<c;
return 0;
}
//programul se continua in dreapta tabelului
Ex: apelul unei functii din main()
Recomandare: evitati pe cat se poate interactiunile cu utilizatorul (adica cin>>, cout<< in interiorul functiilor
definite.
Amazing: :-)
In CPP pot exista mai multe functii cu acelasi nume daca difera intre ele fie prin numarul, fie prin tipul
parametrilor:
Acest lucru se numeste Function Overloading <-> supraincarcarea functiilor
In ex urmator avem 3 functii sum():
Compilatorul identifica ce functie sa foloseasca dupa numarul si tipul parametrilor. Atentie, fie numarul, fie
tipul parametrilor trebuie sa difere altfel obtinem eroare.
Vom invata ulterior cum utilizeaza functiile memoria. In principiu in memorie se creeaza o zona alocata functiei
si care se sterge cand functia se termina. Zona se numeste stiva - stack.
Sa ne imaginam memoria programului ca un teanc de farfurii- o stiva de farfurii. Apelez o functie=adaug o
farfurie la stiva. Se termina executia functiei->scot farfuria din stiva.
Obs: pot lucra cu stiva de farfurii numai la partea de sus si ultima farfurie pusa va fi prima farfurie scoasa.
Mecanismul se numeste LIFO (Last In First Out)
:-)))))
#include<iostream> #include<iostream>
#include<fstream> #include<fstream>
// functia verifica daca un numar introdus este par // functia verifica daca un numar introdus este prim
using namespace std; using namespace std;