Sunteți pe pagina 1din 4

Cateva elemente despre

Functii in C/CPP

Programele pot fi:


 monolitice toate instructiunile se gasesc in main()
 modulare folosim functii (proceduri) – „spargem” programul in module-> ne gandim la avantaje: sunt
programe care au mii de linii si la care trebuie sa lucreze echipe de programatori sau asa cum ai
observat, sunt lucruri care se repeta si ni are rost sa le scrii din nou

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

2. Declararea functiei (se mai numeste si propotip)

informeaza compilatorul de existenta functiei si formatul acesteia adica specifica numele, tipul rezultatului
intors, si lista parametrilor. Declaratia unei functii este de tipul:

tip_valoare_returnata Nume_Functie (tip_param1 nume_param1, tip_param2 nume_param2, ...);

obs: dupa antet avem „ ; ” la declarare


obs: numele parametrilor poate lipsi; obligatoriu este a specifica tipul parametrilor
ex: int f1(int, int);
ex: void afiseaza() (nu intoarce rezultat, nu are nici parametri)

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

Cum folosim functia adica. Apelul se poate realiza in 2 moduri:


a. printr-o instructiune de apel
b. ca operand intr-o expresie

a. are forma: nume(lista_parametri_actuali);


nume -> numele functiei
lista_parametri_actuali -> parametrii functiei in ordinea din defintie, separati prin virgula, (pot fi si expresii)
b. are forma: nume(lista_parametri_actuali) --->fara punct si virgula
si se gaseste intr-o expresie, pe post de operand

La apel, valorile parametrilor actuali sunt atribuite, in ordine, parametrilor formali

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;

int suma(int x, int y) int suma(int x, int y)


{ {
return x+y; int sum;
} sum=x+y;
int main() return sum;
{ }
int a=10, b=20; int main()
cout<<"suma este: "<<suma(a,b); {
return 0; int a=10, b=20, c;
} c=suma(a,b);
cout<<"suma este: "<<c;
return 0;
}
obs: codul de sus ->definita functiei precede apelul, nu e nevoie de declaratie

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

# include<iostream> Cum lucreaza programul?


using namespace std; (toate programele incep de la functia main() deci si acesta)

void display() pas 1. se executa linia 1 – se declara o variabila intreaga a si se


{ initializeaza cu 10
a cout<<"Hello world! ";
b return; pas 2. se ajunge la linia 2 care este un apel la functia display().
} Deci se executa linia a care afiseaza mesajul Hello world pe ecran
int main()
{ pas 3. se executa linia b -> return care transfera executia pe
1 int a=10; prima linie dupa apelul functiei adica linia 3
2 display();
pas 4. se executa linia 3 care afiseaza mesajul „Astazi ai luat...”
3 cout<<"Astazi ai luat nota "<<a;
4 return 0;
pas 5. se executa linia 4 -> return ->se incheie functia 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():

# include<iostream> int sum(int a,int b,int c) //suma de 3 intregi


using namespace std; {
return a+b+c;
int sum(int a,int b) //suma de 2 intregi }
{ //compilatorul identifica ce functie sa foloseasca
return a+b; dupa
} //numarul si tipul parametrilor

float sum(float a,float b) //suma de 2 nr reale int main()


{ {
return a+b; int x=10,y=5,z=3;
} float q=12.5,w=4.4;
cout<<sum(x,y)<<endl;
cout<<sum(q,w)<<endl;
cout<<sum(x,y,z)<<endl;
return 0;
}

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;

bool nr_par(int nr) bool nr_prim(int nr)


{ {
if(nr%2==0) for(int i=2;i*i<nr;i++)
return true; if(nr%i==0)
return false; { break;
} return false;
int main() }
{ else
int numar; return true;
cout<<"Dati un numar:"; }
cin>>numar; int main()
if(nr_par(numar)) {
cout<<"Nr par"; int numar;
else cout<<"Dati un numar:";
cout<<"Nr impar"; cin>>numar;
return 0; if(nr_prim(numar))
} cout<<"Nr prim";
else
cout<<"Nu este prim";
return 0;

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

  • Lectia 2
    Lectia 2
    Document8 pagini
    Lectia 2
    Daniela Stratulat
    Încă nu există evaluări
  • Lab 2
    Lab 2
    Document5 pagini
    Lab 2
    Daniel Popa
    Încă nu există evaluări
  • 000 Subprograme Teorie
    000 Subprograme Teorie
    Document12 pagini
    000 Subprograme Teorie
    ppprof
    Încă nu există evaluări
  • L07 Functii
    L07 Functii
    Document6 pagini
    L07 Functii
    Stefan Grecu
    Încă nu există evaluări
  • Functii În Limbajul C 2019-2020
    Functii În Limbajul C 2019-2020
    Document10 pagini
    Functii În Limbajul C 2019-2020
    Didic Victor
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document4 pagini
    Lab 1
    Daniel Popa
    Încă nu există evaluări
  • Subprograme
    Subprograme
    Document12 pagini
    Subprograme
    Andrei Haiduc
    Încă nu există evaluări
  • SUBPROGRAME
    SUBPROGRAME
    Document24 pagini
    SUBPROGRAME
    cristian sovaila
    Încă nu există evaluări
  • C++2012 Lab6
    C++2012 Lab6
    Document10 pagini
    C++2012 Lab6
    Elena Bujor
    Încă nu există evaluări
  • TehniciProgramare Cursuri
    TehniciProgramare Cursuri
    Document169 pagini
    TehniciProgramare Cursuri
    Madalina Elena
    Încă nu există evaluări
  • Subprograme in Limbajul C
    Subprograme in Limbajul C
    Document4 pagini
    Subprograme in Limbajul C
    Sofia Cacior
    Încă nu există evaluări
  • SUBPROGRAME
    SUBPROGRAME
    Document2 pagini
    SUBPROGRAME
    GHEORGHIŢA VASILE
    Încă nu există evaluări
  • PCLP I Curs 6 Ghita D
    PCLP I Curs 6 Ghita D
    Document30 pagini
    PCLP I Curs 6 Ghita D
    Dublea Bogdan
    Încă nu există evaluări
  • Diferente Intre C Si C++ PDF
    Diferente Intre C Si C++ PDF
    Document4 pagini
    Diferente Intre C Si C++ PDF
    RazvanTugui
    Încă nu există evaluări
  • Cap 2. Subprograme
    Cap 2. Subprograme
    Document17 pagini
    Cap 2. Subprograme
    bblondd
    Încă nu există evaluări
  • Lectia 3
    Lectia 3
    Document12 pagini
    Lectia 3
    Daniela Stratulat
    Încă nu există evaluări
  • Fisa Simpla
    Fisa Simpla
    Document5 pagini
    Fisa Simpla
    FLORENTINA OPREA
    100% (1)
  • Grile Subprograme1
    Grile Subprograme1
    Document7 pagini
    Grile Subprograme1
    tresttia_tresttia
    Încă nu există evaluări
  • Griles
    Griles
    Document7 pagini
    Griles
    PadurariuTeofil
    Încă nu există evaluări
  • Laborator 9 PDF
    Laborator 9 PDF
    Document8 pagini
    Laborator 9 PDF
    Denis Minjineanu
    Încă nu există evaluări
  • Lectia 1
    Lectia 1
    Document9 pagini
    Lectia 1
    Daniela Stratulat
    Încă nu există evaluări
  • Test10subprograme 2015-2016
    Test10subprograme 2015-2016
    Document3 pagini
    Test10subprograme 2015-2016
    Lucas Gamer
    Încă nu există evaluări
  • Grile Subprograme1
    Grile Subprograme1
    Document6 pagini
    Grile Subprograme1
    Bogdanila C
    Încă nu există evaluări
  • Grila Subprograme
    Grila Subprograme
    Document7 pagini
    Grila Subprograme
    Pascariu Madalina Andreea
    Încă nu există evaluări
  • Raspunsuri
    Raspunsuri
    Document26 pagini
    Raspunsuri
    Balto Sebastian
    Încă nu există evaluări
  • Laborator Nr. 9 POO
    Laborator Nr. 9 POO
    Document8 pagini
    Laborator Nr. 9 POO
    Cata Florea
    Încă nu există evaluări
  • Modulul 4 PDF
    Modulul 4 PDF
    Document11 pagini
    Modulul 4 PDF
    Alex Cusmin
    Încă nu există evaluări
  • Functii
    Functii
    Document24 pagini
    Functii
    alexa
    Încă nu există evaluări
  • 4 Subprograme
    4 Subprograme
    Document9 pagini
    4 Subprograme
    Deny Denisa
    Încă nu există evaluări
  • Functii C
    Functii C
    Document10 pagini
    Functii C
    Rareş Tanasache
    Încă nu există evaluări
  • Funcţii Operand
    Funcţii Operand
    Document11 pagini
    Funcţii Operand
    Cristina
    Încă nu există evaluări
  • Curs 1 Informatica, An 1, Semestrul 2
    Curs 1 Informatica, An 1, Semestrul 2
    Document49 pagini
    Curs 1 Informatica, An 1, Semestrul 2
    Ana
    Încă nu există evaluări
  • C2 Poo Acs
    C2 Poo Acs
    Document47 pagini
    C2 Poo Acs
    Vlad Raducan
    Încă nu există evaluări
  • Subprograme
    Subprograme
    Document17 pagini
    Subprograme
    Diaconu Adina
    Încă nu există evaluări
  • Lab 3
    Lab 3
    Document13 pagini
    Lab 3
    Витёк Мужичёк
    100% (1)
  • Curs FP 6
    Curs FP 6
    Document9 pagini
    Curs FP 6
    Ramona Bajan
    Încă nu există evaluări
  • Subprograme 11
    Subprograme 11
    Document2 pagini
    Subprograme 11
    GHEORGHIŢA VASILE
    Încă nu există evaluări
  • Lab 1expresii Si Operatori
    Lab 1expresii Si Operatori
    Document8 pagini
    Lab 1expresii Si Operatori
    l3utzu1
    Încă nu există evaluări
  • Lab Functii C
    Lab Functii C
    Document9 pagini
    Lab Functii C
    Lorena Lorena
    Încă nu există evaluări
  • Laborator 3
    Laborator 3
    Document17 pagini
    Laborator 3
    DorelDjj
    Încă nu există evaluări
  • Supraincarcarea Operatorilor
    Supraincarcarea Operatorilor
    Document6 pagini
    Supraincarcarea Operatorilor
    ccordea
    Încă nu există evaluări
  • Kis Alexandru Lab 11
    Kis Alexandru Lab 11
    Document8 pagini
    Kis Alexandru Lab 11
    Sabine Crihan
    Încă nu există evaluări
  • Functii Si Variabile in C Si C++
    Functii Si Variabile in C Si C++
    Document11 pagini
    Functii Si Variabile in C Si C++
    Croitoru Diana
    Încă nu există evaluări
  • Lab 7
    Lab 7
    Document8 pagini
    Lab 7
    Ion Popescu
    Încă nu există evaluări
  • Laborator 1 - PDF
    Laborator 1 - PDF
    Document10 pagini
    Laborator 1 - PDF
    Mircea
    Încă nu există evaluări
  • Functii - Fisa - 1
    Functii - Fisa - 1
    Document3 pagini
    Functii - Fisa - 1
    Anonymous Mc3g9N0Fqu
    Încă nu există evaluări
  • Proiect Informatica C++
    Proiect Informatica C++
    Document25 pagini
    Proiect Informatica C++
    Alex Stoica
    Încă nu există evaluări
  • Curs 1 Informatica
    Curs 1 Informatica
    Document43 pagini
    Curs 1 Informatica
    Gherghel Musat Daniel Emil
    Încă nu există evaluări
  • Test Subprograme
    Test Subprograme
    Document2 pagini
    Test Subprograme
    Ronela Crihan
    Încă nu există evaluări
  • Proiect Info Partea 2
    Proiect Info Partea 2
    Document15 pagini
    Proiect Info Partea 2
    Alex Stoica
    Încă nu există evaluări
  • Exrecursiv
    Exrecursiv
    Document5 pagini
    Exrecursiv
    beatricec.2004
    Încă nu există evaluări
  • Laborator 1 POO PDF
    Laborator 1 POO PDF
    Document6 pagini
    Laborator 1 POO PDF
    kanamechan27
    Încă nu există evaluări
  • SubprogrameC 0
    SubprogrameC 0
    Document15 pagini
    SubprogrameC 0
    Dana-Marciana Jebelean
    Încă nu există evaluări
  • Recapitulare C++ Baza
    Recapitulare C++ Baza
    Document34 pagini
    Recapitulare C++ Baza
    Dragos Vlad
    Încă nu există evaluări
  • Kis Alexandru Lab 5
    Kis Alexandru Lab 5
    Document10 pagini
    Kis Alexandru Lab 5
    Sabine Crihan
    100% (1)
  • Examen Programare Orientata Pe Obiecte
    Examen Programare Orientata Pe Obiecte
    Document3 pagini
    Examen Programare Orientata Pe Obiecte
    Husker Dou
    Încă nu există evaluări
  • Curs 5
    Curs 5
    Document59 pagini
    Curs 5
    Lumy Patza
    Încă nu există evaluări