Documente Academic
Documente Profesional
Documente Cultură
Cuprins Pagina
Recapitulare 24
1
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții
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.
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.
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.
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.
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:
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.
segmentul corespunzător
variabilelor globale
codului executabil
1) Tipul variabilei
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
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.
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);
8
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții
Obs: această funcţie este utilă în scrierea unui număr complex z = x+iy cu x, y∈ R, sub formă
e x ex
Funcţia sinh – calculează funcţia sinus hiperbolic sh(x): R R, sh(x)=
2
forma: double sinh(double x);
e x ex
Funcţia cosh – calculează funcţia cosinus hiperbolic ch(x): R R, ch(x)=
2
forma: double cosh(double x);
e x ex
Funcţia tanh – calculează funcţia tangent hiperbolic tanh(x): R R, th(x)= x
e ex
forma: double tanh(double x);
9
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții
Funcţia log 10– calculează funcţia lg(x): R*+ R, unde lg(x)= log10(x)
forma: double log10(double x);
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<<’ ‘;
}
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:
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
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:
#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
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:
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
17
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții
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
a) cin>>f1(x,y);
b) cout<<f1(f1(1, 2), 3);
c) cin>>f1(‘1’, ‘2’);
d) cout<<f1(f1(1), 2);
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
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.
19
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții
a. 1 + rand() % (50 – 25 + 1)
b. 50 + rand() % (50 – 25 + 1)
c. 25 + rand() % (50 – 25 + 1)
d. 25 + rand() % (50 – 25 - 1)
a. double Aria()
b. double Aria
c. double Aria();
d. double Aria;
20
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții
21
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții
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
24
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Programare în C/C++ : funcții
Bibliografie:
25
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii