Documente Academic
Documente Profesional
Documente Cultură
TEMA:
Funcii. Transmiterea parametrilor tablou. Transmiterea argumentelor
ctre funcia main. Funcii cu parametri implicii. Funcii cu numr variabil
de parametri. Funcii predefinite. Suprancrcarea funciilor.
NOIUNI TEORETICE
1. Transmiterea parametrilor tablou
n situaia n care este necesar transmiterea unor informaii (opiuni, date iniiale, etc) ctre
un program la lansarea n execuie a acestuia, informaiile vor fi transmise ca parametri ctre
funcia main. Pentru a putea transmite parametrii (n vederea unei prelucrri ulterioare a
acestora), trebuie inclus headerul stdarg.h, iar prototipul funciei main are forma:
main (int argc, char *argv[ ], char *env[ ])
Spre deosebire de limbajul C, n limbajul C++ se pot face iniializri ale parametrilor formali.
Parametrii formali iniializai se numesc parametri implicii. La apelul funciilor cu parametri
implicii, unui parametru implicit, poate s-i corespund sau nu, un parametru efectiv. Dac
la apel nu i corespunde un parametru efectiv, atunci parametrul formal va primi valoarea prin
care a fost iniializat (valoarea implicit). Dac la apel i corespunde un parametru efectiv,
parametrul formal va fi iniializat cu valoarea acestuia, negijndu-se astfel valoarea implicit a
parametrului formal.
n limbajele C i C++ se pot defini funcii cu un numr variabil de parametri. Parametrii care
trebuie s fie prezeni la orice apel al funciei se numesc parametri fici, ceilali se numesc
parametri variabili. n antetul unei funcii cu numr variabil de parametri, parametrii fici
ocup primele poziii din list, iar prezena parametrilor variabili se indic prin trei puncte
care se scriu dup ultimul parametru fix al funciei. Prototipul unei funcii cu numr variabil
de parametri este:
<tip_ret> <nume_funct>(<lista_decl_par_formal_ficsi>, . . . );
Funciile predefinite cu numr variabil de parametri sunt, de obicei, funcii de bibliotec (ex:
printf, scanf). Pentru a-i defini propriile funcii cu numr variabil de parametri,
utilizatorul trebuie s foloseasc macrouri speciale, care permit accesul la parametrii variabili
i se gsesc n headerul stdarg.h.
5. Funcii predefinite
Orice mediu de programare este prevzut cu una sau mai multe biblioteci de funcii
predefinite. Orice bibliotec este format din:
fiierele header (conine prototipurile funciilor, declaraiile de variabile);
biblioteca (arhiva) propriu-zis (conine definiii de funcii).
Pentru ca funciile predefinite s poat fi utilizate ntr-un program, fiierele header n care se
gsesc prototipurile acestora trebuie incluse printr-o directiv preprocesor (exemplu
#include <stdio.h>). Deasemenea, utilizatorul i poate crea propriile headere. Pentru a
putea utiliza funciile din headerele proprii, utilizatorul trebuie s includ aceste headere n
programul apelant (exemplu #include "my_header.h").
Pentru funciile predefinite, au fost create fiiere header orientate pe anumite numite tipuri de
aplicaii. De exemplu, funciile matematice se gsesc n headerul <math.h>. Headerul
<stdlib.h> conine funcii standard, headerul <values.h> definete o serie de constante
simbolice (exemplu MAXINT, MAXLONG) care reprezint, n principal, valorile maxime i
minime ale diferitelor tipuri de date, etc.
6. Suprancrcarea funciilor
Limbajul C++ ofer posibilitatea de suprancrcare a numelui unei funcii (pe scurt,
suprancrcarea funciilor), ceea ce conduce la utilizarea unor funcii cu acelai nume, care
execut prelucrri diferite. Prototipurile unei funcii suprancrcate trebuie s difere ntre ele
prin numrul i/sau tipul parametrilor formali i/sau prin tipul valorii returnate. Selecia
funciei se realizeaz n momentul compilrii.
Autor: Diana tefnescu 2
REFERAT DE LABORATOR Nr. 10 (din 14) 2010
PROBLEME REZOLVATE
9. S se afle elementul minim dintr-un vector de maxim 10 elemente. Se vor scrie dou
funcii: de citire a elementelor vectorului i de aflare a elementului minim:
#include <iostream.h>
int min_tab(int a[], int nr_elem)
{int elm=a[0];
for (int ind=0; ind<nr_elem; ind++)
if (elm>=a[ind]) elm=a[ind];
return elm; }
main()
{int a[10]; int i,j,n; cout<<"n="; cin>>n;
citireVector(a,n);
int min=min_tab(a,n); cout<<"Elem. min:"<<min<<'\n'; }
#include <iostream.h>
void citireVector(int *b, int nr_el)
{ for (int ind=0; ind<nr_el; ind++){
cout<<"Elem "<<ind+1<<"="; cin>>*(b+ind);}
}
main()
{
int a[10]; int i,j,n; cout<<"n="; cin>>n;
citireVector(a, n);
int min=min_tab(a,n);
cout<<"Elem. min:"<<min<<'\n'; }
10. Fie o matrice de maxim 10 linii i 10 coloane, ale crei elemente se introduc de la
tastatur. S se implementeze dou funcii care afieaz matricea i calculeaz elementul
minim din matrice.
#include <iostream.h>
int min_tab(int a[][10], int nr_lin, int nr_col)
{int elm=a[0][0];
for (int il=0; il<nr_lin; il++)
for (int ic=0; ic<nr_col; ic++)
if (elm>=a[il][ic]) elm=a[il][ic];
return elm;
}
main()
{int mat[10][10];int i, j, M, N;cout<<"Nr. linii:"; cin>>M;
cout<<"Nr. coloane:"; cin>>N;
for (i=0; i<M; i++)
for (j=0; j<N; j++)
{ cout<<"mat["<<i<<","<<j<<"]="; cin>>mat[i][j];}
afisare(mat, M, N);
int min=min_tab(mat, M, N);
cout<<"Elem. min:"<<min<<'\n'; }
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <process.h>
argc--;
for(index = 1;index < argc;index++)
printf("%s ",argv[index]); /*afiarea cuv. 2, 3, , n-1 (fr cel care
conine caract. de comparare) din ntrebare */
c = getch(); printf("%c\n",c);
if (islower(c)) c = toupper(c);
point = argv[argc]; code = 0; index = 0;
do { next_char = *(point + index);
if (islower(next_char)) next_char = toupper(next_char);
if(next_char == c) code = index + 1;
index++;
} while (*(point + index)); /* NULL */
Return code; /* returnarea codului de eroare */ }
13. S se scrie urmtorul program, n care funcia afisare are un numr variabil de
parametri.
#include <iostream.h>
#include <stdarg.h>
void afisare(int, ...);//prototip functie cu nr. variabil de parametri
main()
{int i = 5;int pv_unu = 1, pv_doi = 2;
afisare(pv_unu, i); /* Param.fix=1 Parametrii variabili sunt 5 */
afisare(3,i,i+pv_doi,i+pv_unu);/*Param.fix=3 Parametrii var. sunt 5 7 6 */
afisare(pv_doi, 70, 300); /* Param.fix=2 Parametrii variabili sunt 70 300 */ }
cout<<"Param.fix="<<nr<<'\n';
va_start(param_pt,nr); // Apel macro setup
cout << "Parametrii variabili sunt ";
for (int i = 0 ; i < nr ; i++)
cout << va_arg(param_pt,int) << " "; // Extragere parametru
cout << "\n";
va_end(param_pt); /* Inchidere macro*/
}
14. S se rearanjeze elementele unei matrici de ntregi astfel nct s fie ordonate cresctor
att pe linii, ct i pe coloane.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void citire(int a[][10], int m, int n)
{for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
cout<<"a["<<i<<","<<j<<"]=";cin>>a[i][j];}
}
main()
{int A[10][10],n,m; int i,j;cout<<"Nr. linii="; cin>>m;
cout<<"Nr. coloane="; cin>>n;
citire(A,m,n);cout<<"Matricea initiala:\n";afisare(A,m,n);
for(i=0;i<m;i++) ord(A,m,n,1,i);
for(j=0;j<n;j++) ord(A,m,n,2,j);
cout<<"Matricea obtinuta:\n";afisare(A,m,n);getch();
}
1. Fie n natural, citit de la tastatur (n<100). S se determine toate tripletele de numere (x, y,
z) mai mici dect n, care sunt numere pitagorice (ndeplinesc relaia x 2 + y 2 = z 2 ).
Numerele fiecrui triplet vor fi afiate n ordine cresctoare, pe cte o linie a ecranului.
2. S se calculeze valorile urmtoarelor expresii (n natural, citit de la tastatura), folosind o
funcie care calculeaz termenul general.
1. E(n)=1*(1+2)*(1+2+3)* . . . *(1+2+3+. . . +n)
2. E(n)=1*2 - 2*4 + 3*6 - 4*8 + . . . +(-1) n *n*2*n
3. S se creeze o bibliotec de funcii pentru lucrul cu matrici, care s conin funciile
utilizate frecvent (citirea elementelor, afisarea matricii, adunare a dou matrici, etc). S se
foloseasc aceast bibliotec.
4. S se creeze o bibliotec de funcii pentru lucrul cu vectori, care s conin funciile
utilizate frecvent. S se foloseasc aceast bibliotec.
5. S se scrie un program care genereaz toate numerele palindrom, mai mici dect o valoare
dat, LIM. Un numr palindrom are cifrele simetrice egale (prima cu ultima, a doua cu
penultima, etc). Se va folosi o funcie care testeaz dac un numr este palindrom.
6. Fie matricea C (NXN), N<=10, ale crei elemente sunt date de relaia:
j
j! + sin(kx) , dac i<j
k =0
i
C i, j = x , dac i=j