Sunteți pe pagina 1din 25

Programare în C/C++ : funcții

Unitatea de învățare nr. 13

PROGRAMAREA PROCEDURALĂ, FUNCŢII ŞI REVENIREA DIN ELE

Cuprins Pagina

Obiectivele unității de învățare nr. 13 2


13.1 Funcții: noțiuni teoretice 2

13.2 Variabile globale și variabile locale 5

13.3 Funcții predefinite: funcții matematice implementate în C++ 8

13.4 Exemple și aplicații ce utilizează funcții 11

Lucrare de verificare – unitatea de învățare nr. 13 20

Răspunsuri și comentarii la întrebările din testele de autoevaluare 22

Recapitulare 24

Bibliografie – unitatea de învățare nr. 13 25

1
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

OBIECTIVELE unității de învățare nr. 13

Principalele obiective ale Unității de învățare nr. 13 sunt:

 Familiarizarea cu noțiunile de subprogram, funcție, prototip,


definire și declarare a unei funcții, variabile globale și locale.

 Scrierea unor programe C++ simple, utilizând funcții.

13.1. Funcții: noțiuni teoretice

Definiţie: Un subprogram este o secvenţă de instrucţiuni care rezolvă o anumită sarcină şi care
poate fi descrisă separat. Ea poate fi repetată în cadrul unui program de un număr de ori şi
executată numai în funcţie de anumite condiţii.

Subprogramele în limbajul C++ se numesc funcţii.


Un program scris în limbajul C/C++ este un ansamblu de funcţii, fiecare dintre acestea
efectuând o activitate bine definită.
De exemplu, calculul factorialului este o procedură matematică des întâlnită. Scriind acest calcul
ca o funcție, poate fi apelat ulterior în orice program în care este necesar calculul factorial.
Acesta este un exemplu de ceea ce se cheamă reutilizare a software-ului.

Obs: funcţia main( ) este tot un subprogram şi se execută prima.

Avantaje: modularizarea problemei (descompunerea în subprobleme)


reutilizarea unei sevenţe de instrucţiuni de mai multe ori în diferite contexte
economie de memorie
depanarea şi actualizarea programului se face mai uşor

Clasificare: în funcţie de modul de definire create de utilizator


predefinite(Ex: pow, log, abs, etc)
în funcţie de valoarea returnată returnează o valoare în punctul de apel la
revenirea din ele
nu returnează o valoare în punctul de apel
2
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

la revenirea din ele, deci nu au valoare de


retur; ele returnează rezultatul prin
intermediul parametrilor

Funcţiile comunică prin argumente: ele primesc ca parametri (argumente) datele de intrare,
efectuează prelucrările descrise în corpul funcţiei asupra acestora şi pot returna o valoare
(rezultatul, datele de ieşire). De fapt, o funcție în programare are aceleași proprietăți ca funcția
matematică: primește anumite valori de intrare ca parametrii, pe care îi prelucrează printr-o serie
de operații și generează la ieșire o valoare rezultat. În funcție de valorile de intrare, funcția va
genera diferite rezultate.

În limbajul C/C++ se utilizează definiţii şi declaraţii de funcţii.

Definiţia funcţiei (cuprinde antetul şi corpul funcţiei):

tip nume (lista parametrii formali) antetul funcţiei


{ declaraţii variabile locale
instrucţiuni corpul funcţiei secţiune declarativă
[return[expresie];] secţiune executabilă
}

tip – este tipul funcţiei. Dacă funcţia nu întoarce nici o valoare, în locul său se specifică void.

Dacă tip ≠ void, deci funcţia întoarce o valoare prin numele său, corpul funcţiei trebuie să
conţină obligatoriu instrucţiunea return expresie; expresia de la return este chiar valoarea
returnată de funcţie şi trebuie să aibă acelaşi tip cu tipul returnat de funcţie.

nume – este un identificator (numele funcţiei).

lista parametrii formali – enumerare ce conţine tipul şi numele fiecărui parametru cu care
funcţia lucrează formal; ei nu reprezintă valori concrete; se concretizează la execuţie, prin
apelurile funcţiei.

declaraţii variabile locale


implementează algoritmul de calcul al funcţiei
instrucţiuni
3
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

return[expresie] – se foloseşte dacă funcţia întoarce o valoare. La execuţie, la întâlnirea acestei


instrucţiuni, se revine în funcţia apelantă.

Obs: 1) În C++ nu se pot defini funcţii imbricate, adică definirea unei funcţii în corpul altei
funcţii.
2) De obicei, orice funcţie se apelează după ce a fost definită. Dacă definirea se face după
apel, înaintea apelului trebuie să existe declaraţia funcţiei (prototipul funcţiei).

Declaraţia funcţiei (cuprinde antetul funcţiei) şi informează compilatorul asupra tipului, numelui
funcţiei şi a listei parametrilor formali. Declaraţiile funcţiilor se numesc prototipuri şi sunt
constituite din antetul funcţiei:

tip identificator (lista parametrii formali);

Apelul funcţiei: se realizează printr-o instrucţiune de apel de forma:

identificator (lista parametrii efectivi);

La apel, se atribuie parametrilor formali valorile parametrilor efectivi, după care se


execută instrucţiunile din corpul funcţiei. La revenirea din funcţie, controlul este redat funcţiei
apelante, şi execuţia continuă cu instrucţiunea următoare instrucţiunii de apel, din funcţia
apelantă.

Parametrii declaraţi în antetul unei funcţii sunt numiţi formali, pentru a sublinia faptul
că ei nu reprezintă valori concrete, ci numai ţin locul acestora pentru a putea exprima procesul de
calcul realizat prin funcţie. Ei se concretizează la execuţie prin apelurile funcţiei.

Parametrii folosiţi la apelul unei funcţii sunt parametri reali, efectivi, concreţi, iar
valorile lor vor fi atribuite parametrilor formali, la execuţie.
Utilizarea parametrilor formali la implementarea funcţiilor şi atribuirea de valori concrete
pentru ei, la execuţie, reprezintă un prim nivel de abstractizare în programare - abstractizare prin
parametrii. Acest mod de programare se numeşte programare procedurală .

4
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

Obs: 1) în cazul în care funcţia returnează o valoare, apelul funcţiei poate constitui un
operand într-o expresie (apelul funcţiei intervine într-o expresie)
2) între parametrii formali şi cei efectivi(actuali) trebuie să existe o bijecţie care să
păstreze ordinea şi tipul.
3) parametrii actuali trebuie să fie variabile declarate sau constante.
4) lista parametrilor formali este vidă atunci când nu se face schimb de informaţie cu
restul programului sau când acest schimb se face cu ajutorul variabilelor globale.

13.2. Variabile globale și variabile locale

Conceptual, memoria alocată unui program este împărţită în patru segmente:

segmentul de memorie stivă

segmentul memoriei heap


segmentul corespunzător

segmentul corespunzător
variabilelor globale
codului executabil

De asemenea, variabilele pot fi memorate într-un anumit registru al microprocesorului –


caz în care timpul de acces la aceste variabile este foarte mic.

■ segmentul corespunzător codului executabil - conţine biţii corespunzători


instrucţiunilor programului şi funcţiile de bibliotecă ce sunt adăugate programului.

■ segmentul corespunzător variabilelor globale - segment de date statice, folosit pentru


stocarea variabilelor globale.

■ segmentul de memorie stivă - păstrează variabilele locale şi parametrii unei funcţii.


La fiecare apel al unei funcţii, variabilele sale locale şi parametrii săi sunt depuse în
memoria stivă.
La ieşirea din funcţie, aceste variabile şi parametri sunt eliminaţi din stivă.
5
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

■ segmentul memoriei heap - disponibilă programelor de aplicaţii în timpul execuţiei


acestora folosind anumitefuncţii ce permit ca unui program să i se aloce memorie exact atunci
când este nevoie în timpul execuţiei programului.

În general, o variabilă se caracterizează prin 4 atribute:

1) Tipul variabilei

2) Clasa de memorare – locul unde este memorată variabila respectivă

3) Vizibilitatea la nivel de bloc (instrucţiune compusă)


liniile textului sursă la nivelul întregului program
din care variabila
la nivel de clasă (în programarea orientată obiect)
poate fi accesată

4) Durata de viaţă statică - are alocat spaţiu în tot timpul execuţiei programului

timpul în care locală - are alocat spaţiu în timpul în care se execută instrucţiunile
variabila respectivă blocului respectiv
are alocat spaţiu în
memoria internă dinamică - alocarea şi dezalocarea spaţiului necesar variabilei
respective se face de către programator (prin operatori sau
funcţii speciale)

Astfel, în C++ , în funcţie de atributele pe care le au, variabilele pot fi împărţite în:
- locale
- globale
- dinamice

Variabile

globale locale
- Se declară în afara corpului oricărei funcţii - Se declară în corpul funcţiilor: în orice
- Atribute: bloc (instrucţiune compusă) a acestora
1) clasa de memorare: segmentul de date - Atribute:
2) vizibilitatea: pot fi utilizate de toate funcţiile 1) clasa de memorare: segmentul de stivă
care urmează în textul sursă declaraţiei 2) vizibilitatea: la nivelul blocului la care au
variabilei respective fost declarate
3) durata de viaţă: statică 3) durata de viaţă: atâta timp cât durează
execuţia blocului respectiv

6
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

Exemplul următor foloseşte variabila cu numele Exemplul următor ilustrează faptul că


după
nr. Fiind accesibilă din oricare din 2 funcţii fiecare apel, variabilele locale sunt
prezente în program, valoarea variabilei globale dezactivate:
nr este schimbată pe rând din ambele funcţii:
#include<iostream.h>
void f ( )
{
# include<iostream.h> int a=3,b=a;
int nr =10; cout<<a<<” “<<b<<endl;
void f1 (void) a++;b++;
{ }
cout<<”nr=”<<nr; main ( )
nr*=2; f( ); //3 3
} f( ); //3 3
void f2 (void) }
{
cout<<”nr=”<<nr;
nr+=2; Exemplul următor ilustrează faptul că
dome-
} niul de vizibilitate al unei variabile locale
void main (void) este blocul în care se găseşte declaraţia sa:
{
cout<<”nr=”<<nr; //10 # include<iostream.h>
nr ++; void f ( )
f1(); //11 {
f2 ( ); //22 int a=1,b=a;
cout<<”nr=”<<nr; //24 cout<<a<<” “<<b<<endl;
} {
int a=2,b=a;
cout<<a<<” “<<b<<endl;
{
int a=3,b=a;
cout<<a<<” “<<b<<endl;
}
cout<<a<<” “<<b<<endl;
}
cout<<a<<” “<<b<<endl;
}
void main( )
se va afişa: 1 1
{
2 2
f( ); 3 3
2 2
}
1 1

Obs: 1) În blocuri diferite se pot declara variabile cu acelaşi nume.

7
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

2) Dacă o variabilă locală are acelaşi nume cu o variabilă globală, atunci se va lua în
considerare declararea cea mai apropiată de locul utilizării.

13.3. Funcții predefinite: funcții matematice implementate în C++

În matematică, definirea unei funcţii presupune definirea domeniului de definiţie, al


codomeniului şi a legii de corespondenţă pentru funcţia respectivă. În C++ o astfel de definiţie se
realizează prin definirea prototipului funcţiei respective.

Exemplu de prototip: int f (int, float);

(codomeniul) rezultatul numele parametrii (domeniul de definiţie)


întors funcţiei funcţiei

Funcţiile sunt apelate cu un număr de parametrii efectivi. Parametrii de apel ai unei


funcţii şi tipul ei (natura rezultatului întors) sunt conţinuţi de prototipul funcţiei respective.
Prototipurile funcţiilor din acelaşi domeniu se găsesc grupate într-un fişier header.
Astfel, pentru folosirea funcţiilor matematice, trebuie inclus în fişierul sursă al programului
fişierul math.h.

Funcţia abs - întoarce |x| (modulul lui x).


forma: int abs(int x);

Funcţia fabs - întoarce |x| (modulul lui x), unde x este un număr real.
forma: double fabs(double x);

Funcţia labs - întoarce |x| (modulul lui x), unde x este un întreg lung
forma: long int labs(long int x);

Funcţia sin – calculează valoarea funcţiei sin(x): R [-1,1]


forma: double sin(double x);

Funcţia cos – calculează valoarea funcţiei cos(x): R [-1,1]


forma: double cos(double x);

8
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

Funcţia tan – calculează valoarea funcţiei tg(x): R \ { k*π+ π /2 | k ∈Z ] R


forma: double tan(double x);

Funcţia acos – calculează valoarea funcţiei arccos(x): [-1,1] [0, π]


forma: double acos(double x);

Funcţia asin – calculează valoarea funcţiei arcsin(x): [-1,1] [0, π]


forma: double asin(double x);
Funcţia atan – calculează valoarea funcţiei arctg(x): R [-π /2, π /2 ]
forma: double atan(double x);

Funcţia atan2 – calculează valoarea funcţiei arctg(y/x): R [-π, π ]


forma: double atan2(double y, double x);

Obs: această funcţie este utilă în scrierea unui număr complex z = x+iy cu x, y∈ R, sub formă

trigonometrică: z = ρ (cosФ+isinФ), unde ρ = x 2  y 2 , tgФ = y/x Ф = arctg(y/x).

e x  ex
Funcţia sinh – calculează funcţia sinus hiperbolic sh(x): R R, sh(x)=
2
forma: double sinh(double x);

e x  ex
Funcţia cosh – calculează funcţia cosinus hiperbolic ch(x): R R, ch(x)=
2
forma: double cosh(double x);

e x  ex
Funcţia tanh – calculează funcţia tangent hiperbolic tanh(x): R R, th(x)= x
e  ex
forma: double tanh(double x);

Funcţia floor – calculează valoarea rotunjită (în minus) a lui x


forma: double floor(double x);

Funcţia ceil – calculează valoarea rotunjită (în plus) a lui x

9
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

forma: double ceil(double x);

Funcţia exp – calculează funcţia ex : R R* +


forma: double exp(double x);

Funcţia log – calculează funcţia ln(x): R*+ R, unde ln(x)= loge(x)


forma: double log(double x);

Funcţia log 10– calculează funcţia lg(x): R*+ R, unde lg(x)= log10(x)
forma: double log10(double x);

Funcţia pow – calculează xy


forma: double pow(double x, double y);

Generarea numerelor aleatoare

Aceste funcţii au prototipurile în stdlib.h.

Funcţia rand – generează un număr aleator întreg cuprins între 0 şi 32767


forma: int rand(void);

Setarea generatorului de numere aleatoare cu un număr aleator se face cu funcţia randomize:


forma: void randomize(void);

Setarea generatorului de numere aleatoare într-un anumit punct se face cu funcţia srand:
forma: void srand (unsigned n);
Apelul funcţiei srand cu valoarea 1 duce la reiniţializarea generatorului.

Ex 1): Programul următor tipăreşte 10 numere aleatoare întregi cuprinse între 0 şi 99:
#include <iostream.h>
#include <stdlib.h>
main( )
{
int i;
10
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

randomize( );
for (i=0;i<10;i++) cout<<rand( ) % 100<<’ ‘;
}
Obs: Dacă în program înlocuim randomize() cu srand(n), pentru valoarea fixată a lui n, la rulări
succesive ale programului, seria celor 10 numere va fi întotdeauna aceeaşi.

Ex 2): Programul următor tipăreşte 10 numere aleatoare cuprinse între două valori întregi citite:
#include <iostream.h>
#include <stdlib.h>
main( )
{
int a,b,i;
cout<<”a=”; cin>>a; cout<<”b=”; cin>>b;
randomize( );
for (i=0;i<10;i++) cout<<rand( ) % (b-a)+a<<’ ‘;
}

13.4. Exemple și aplicații ce utilizează funcții

1. Definiţi o funcţie care să calculeze, pentru un număr întreg „nr” suma cuburilor
numerelor întregi dintre 1 şi n.

Răspuns:

int f1(int nr)


{
int i, suma = 0;
for (i = 1; i <= nr; i++)
suma += pow(i,3);
return suma;
}

2. Se citeşte n şi un vector v cu n numere naturale. Se cere ultima cifră a numărului


v[1]+v[2]+…+v[n].

11
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

Răspuns:

#include<iostream.h>
int n, v[100];
void citire ( )
{
cin>>n;
int i;
for (i=1;i<=n;i++)
cin>>v[i];
}
int suma ( )
{
int i, nr=0;
for (i=1;i<=n;i++)
nr=nr+v[i];
return nr;
}
int cifra (int n)
{
int c;
c=n%10;
return c;
}
void main ( )
{
citire ( );
int x = suma ( );
cout<<cifra(x);
}

3. Exemplu de funcţie care calculează ipotenuza unui triunghi dreptunghic, funcţia având
ca parametri lungimile catetelor triunghiului:

12
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

double ipotenuza(double cateta1, double cateta2)


{
return sqrt(cateta 1* cateta 1 + cateta 2* cateta 2);
}

4. Funcţia „triunghi” definită mai jos produce o afişare de forma :


1
12
123
1234
………………….
1 2 3 4 5 …………………….n

void triunghi (int n);


{
for (int i= 0; i < n; i++)
{
for (int numar = 1; numar <= i+1; numar++)
cout << numar << " ";
cout << endl;
}
}

5. Funcţia „suma” definită mai jos are ca parametru un număr întreg n şi returnează: 0,
dacă n <= 0, iar dacă n > 0 valoarea returnată va fi 1 +2 + ….+ n.

int suma(int n)
{
int i, s=0;
for (i=1; i<=n; i++)
s += i;
return s;
}

13
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

6. Definiţi o funcţie care să calculeze, pentru două numere întregi date, inf şi sup, suma
numerelor întregi dintre ele (inclusiv cele două numere).

Răspuns:

int f1 (int inf, int sup)


{
int i, suma = 0;
if (inf <= sup)
for (i = inf; i <= sup; ++i)
suma+= i;
else
for (i = inf; i >= sup; --i)
suma += i;
return suma;
}

7. Care va fi rezultatul rulării următorului program?

#include <iostream.h>
#include <conio.h>
void afisare1(int[][3]);
void afisare2(int[][3]);
main()
{
int a[3][3], i, j;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
a[i][j] = (i+1)*(j+2);
afisare1(a);
cout << endl;
afisare2(a);
getchar();
}
14
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

void afisare1(int b[][3])


{
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++)
cout << b[i][j] << " ";
cout << endl;
}
}
void afisare2(int b[][3])
{
for (int i=2; i>=0; i--)
{
for (int j=2; j>=0; j--)
cout << b[i][j] << " ";
cout << endl;
}
}

Răspuns:
234
468
6 9 12

12 9 6
864
432

15
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

Test de autoevaluare 1

1. Într-un program C++, toate funcţiile (în afara funcţiei „main”) sunt
executate:

a) Înaintea execuţiei funcţiei „main”


b) După încheierea execuţiei funcţiei „main”
c) Niciodată
d) Atunci când sunt apelate de către alte funcţii

2. Se consideră prototipul funcţiei următoare:


int functie(double& a1, double& a2);

a) Funcția poate modifica argumentele transmise atât pentru a1 cât și pentru a2


b) Funcția nu poate modifica argumentele transmise nici pentru a1 și nici pentru a2
c) Funcția poate modifica numai argumentul transmis pentru a1
d) Funcția poate modifica numai argumentul transmis pentru a2

3. Completaţi cu răspunsul corect:


Variabilele………………pot fi modificate în interiorul oricărei funcţii

a) actuale b) formale c) globale d) locale

4. Fiind date cele două funcţii: „spatiu” şi „stea” definite mai jos, care dintre
următoarele secvenţe de cod va produce o afişare de forma:
*****
****
***
**
*

void spatiu(int k)
{
for (int i=1; i<=k; i++)

16
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

cout << " ";


}
void stea(int k)
{
for (int i=1; i<=k; i++)
cout << "*";
cout << endl;
}

a) for (int i=1; i<=5; i++)


{
spatiu(i-1);
stea(5-i);
}

b) for (int i=1; i<=5; i++)


{
spatiu(i-2);
stea(6-i);
}

c) for (int i=1; i<=5; i++)


{
spatiu(i-1);
stea(6-i);
}

d) for (int i=1; i<=5; i++)


{
spatiu(i);
stea(5-i);
}

17
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

5. Se consideră prototipul funcţiei: double f1(int, int, int);


Care dintre instrucţiunile de mai jos este corectă?

a) cout<<f1(7, f1(14, 23));


b) cout<<f1(test(7, 14), 23);
c) cout<<f1(14, 23));
d) cout<<f1(7, 14, 23);

6. Care va fi valoarea returnată de funcţia f1 definită mai jos:

int f1(int a, int b)


{
return (a>b) ? a : b;
}

a) Suma numerelor a + b.
b) Diferenţa numerelor a - b.
c) Valoarea minimă dintre numerele a şi b
d) Valoarea maximă dintre numerele a şi b

7. Se consideră prototipul funcţiei: int f1(int, int);


Care dintre instrucţiunile de mai jos este corectă?

a) cin>>f1(x,y);
b) cout<<f1(f1(1, 2), 3);
c) cin>>f1(‘1’, ‘2’);
d) cout<<f1(f1(1), 2);

8. Pentru funcţia definită mai jos, care va fi valoarea expresiei f1(6.3)?

int f1( float v )


{
if (v > 5.0)
return 5 * int(v);

18
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

else
return 0;
}

a) 30 b) 30.0 c) 31.5 d) 0

9. În C++ definiţiile funcţiilor nu pot fi imbricate, adică definiţia unei funcţii


nu poate fi inclusă în corpul altei funcţii.

a) adevărat b) fals

10. Definiţi o funcţie care să calculeze, pentru un număr întreg „nr” cel mai
mic număr întreg n pentru care este îndeplinită relaţia: 1+2+3+. . . +n ≥ nr.

11. Să se afişeze toate numerele prime dintre a şi b.

19
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

Lucrare de verificare la Unitatea de învățare nr. 13

1. Să se scrie o funcţie care simplifică o fracţie şi o alta care calculează


suma a două fracţii.
Să se calculeze suma a n fracţii, afişând rezultatul sub formă de fracţie
ireductibilă.

2. Care dintre următoarele expresii va genera un număr întreg aleator din


intervalul [25,50]?

a. 1 + rand() % (50 – 25 + 1)
b. 50 + rand() % (50 – 25 + 1)
c. 25 + rand() % (50 – 25 + 1)
d. 25 + rand() % (50 – 25 - 1)

3. Care dintre următoarele variante reprezintă un antet de funcție corect


pentru funcția Aria? Funcția returnează un număr real de tipul double și
nu are parametrii formali.

a. double Aria()
b. double Aria
c. double Aria();
d. double Aria;

4. Antetul funcției conține _____________________ .


a. tipul valorii returnate de către funcție (dacă există)
b. numele funcției
c. parametrii formali ai funcției (dacă există)
xy  ( x  y ) 2

20
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

d. toate variantele de mai sus

5. Care dintre următoarele variante reprezintă un antet de funcție corect


pentru funcția taxe, care are primul parametru un număr întreg, iar al
doilea parametru un număr real? Functia returnează un număr real.
a. taxe(int procent, double rata);
b. double taxe (int procent, double rata);
c. double taxe (double procent, int rata)
d. double taxe (int procent, double rata)

6. Realizați unui program care la rulare simulează aruncarea unei perechi


de zaruri (obișnuite - cu șase fețe).

7. Scrieți o funcție care să primească trei parametri întregi; numărul de


ore, numărul de minute, și numărul de secunde și returnează numărul
total de secunde.

8. Ce va produce la rulare următorul program?


#include<iostream.h>
int a,b;
void functie()
{
int a=4, b=3;
cout <<a<<" "<<b<<endl;
}
void main()
{
a=2; b=4;
cout <<a<<" "<<b<<endl;
functie();
cout <<a<<" "<<b<<endl;
}

21
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

Răspunsuri și comentarii la întrebările din testele de autoevaluare

1. d)

2. a)

3. c)

4. c)

5. d)

6. c)

7. b)

8. a)

9. a)

10.
int f1 (int nr)
{
int n = 1, suma = 1;
while (suma < nr)
suma += ++n;
return n;
}

11.
Varianta 1:
#include<iostream.h>
int a, b;
void nrprim (int n)

22
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

{
int b=1, d=2;
while (d<=n-1)
{
if(n%d= =0)b=0;
d++;
};
if (b= =1) cout<<n<<” “;
}
void main ( )
{
int a, b, x;
cin>>a>>b;
for (x=a+1;x<b;x++)
nrprim (x);
}

Varianta 2:
#include <iostream.h>
#include <conio.h>
#include <math.h>
int a, b;
int prim (int x)
{
int bb=1, d;
for(d=2;d<=x-1;d++)
if (x%d==0)bb=0;
return bb;
}
main ( )
{
int i;
cin>>a>>b;

23
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

for (i=a+1;i<b;i++)
if (prim(i)==1) cout<<i<<" ";
getch();
}

Recapitulare

Un program scris în limbajul C/C++ este un ansamblu de funcţii, fiecare


dintre acestea efectuând o activitate bine definită.
Funcţiile comunică prin argumente: ele primesc ca parametri (argumente)
datele de intrare, efectuează prelucrările descrise în corpul funcţiei asupra
acestora şi pot returna o valoare (rezultatul, datele de ieşire).
Definiţia funcţiei cuprinde antetul şi corpul funcţiei:
- antetul funcţiei (declarația) informează compilatorul asupra tipului, numelui
funcţiei şi a listei parametrilor formali.
- corpul funcției implementează algoritmul de calcul al funcţiei.
La apelul unei funcții, se atribuie parametrilor formali valorile parametrilor
efectivi, după care se execută instrucţiunile din corpul funcţiei.
La revenirea din funcţie, controlul este redat funcţiei apelante, şi execuţia
continuă cu instrucţiunea următoare instrucţiunii de apel, din funcţia apelantă.
Utilizarea parametrilor formali la implementarea funcţiilor şi atribuirea de
valori concrete pentru ei, la execuţie, reprezintă un prim nivel de abstractizare
în programare - abstractizare prin parametrii. Acest mod de programare se
numeşte programare procedurală.
În C++ , în funcţie de atributele pe care le au, variabilele pot fi împărţite în:
locale, globale și dinamice.

24
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții

Bibliografie:

1. Dinu, S., Pomazan, C. ”Programarea Caclulatoarelor”, Ed. Nautica, 2013.


2. Malik, D.S. ”Introduction to C++ programming”, Ed. Cengage South-
Western, 2009.
3. Chaudhary, H.H. ”Head First C++ Programming”, Ed. CreateSpace O-D
Publishing LLC, 2014.
4. Zak, D. ”An Introduction to Programming with C++”, Ed. Cengage Learning,
2016.
5. Farrell, J. ”Programming Logic and Design”, Ed. Cengage Learning, 2012.
6. Horasanli M. A. ” Programming with C++”, Ed. Zambak Publishing, 2006.

25
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii

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