Sunteți pe pagina 1din 21

...

.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
.
......
Fundamentele programrii
Curs 10
ef lucr.dr.ing. GENGE Bla
Universitatea Petru Maior, Departamentul de Informatic
Trgu Mure, Romnia
bela.genge@ing.upm.ro
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Pointeri la pointeri
Pointeri care adreseaz ali pointeri
.
Exemplu
..
......
int n = 10;
int* p1 = NULL;
int** p2 = &p1;
*p2 = &n;
**p2 = 0;
cout << &p2;
cout << p2;
cout << *p2;
cout << **p2;
cout << n;
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Exerciii
S se aloce i dealoce dinamic memorie pentru o matrice de NxM
ntregi. Matricea este folosit pentru citiri de la tastatur.
S se citeasc N iruri de caractere de la tastatur. Memoria va
alocat dinamic printr-un pointer ctre un tablou de pointeri. S se
elibereze memoria ocupat n nal.
S se elimine (dealoce memorie) pentru ultimul ir de
caractere/ultima linie dintr-o matrice.
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Funcii
Noiunea de funcie este fundamental n limbajul C
Execuia unui program poate organizat ca o ierarhie de apeluri de
funcie
Punctul de pornire: funcia main()
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Elemente necesare utilizrii funciilor
Prototipul
Deniia
Apelul
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Prototipul
Asigur declararea unei funcii - necesar nainte de utilizare
Declararea prototipului permite plasarea n cod a apelului unei funcii
nainte de denirea acesteia
De regul prototipurile sunt incluse la nceputul unui ier surs C,
nainte de denirea oricrei funcii
Prototipul ANSI-C include:
tip_returnat nume_funcie(list_tipuri_param);
Denumirea parametrilor este opional
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Prototipul - exemple
.
Exemple
..
......
void mesaj(void);
int suma(int, int);
int produsul(int a, int b);
int suma(int n, int v[100]);
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Deniia
Poate aprea o singur dat n program
Deniia include: antetul i corpul funciei
Sintaxa de denire ANSI-C:
tip_returnat nume_funcie(list_param)
{declaraii_variabile
instruciuni
}
Atenie! Prototipul trebuie s coincid cu antetul din deniie
Lista de parametri formali - prototip i antet
Lista de parametrii actuali - apel
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Deniia - exemple
.
Exemplul1
..
......
void mesaj(void){
printf("Limbajul C\n");
}
.
Exemplul2
..
......
int suma(int a, int b){
return (a+b);
}
.
Exemplul3
..
......
int produsul(int a, int b){
int c;
c = a*b;
return c;
}
.
Exemplul4
..
......
int suma(int n, int v[100]){
int s = 0;
for ( int i = 0 ; i < n ; ++i )
s += v[i];
return s;
}
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Apelul
Funciile sunt denite la adrese xe de memorie
Clasa de memorie implicit asociat este extern
Rezult c pot accesate att din modulul curent ct i din alte
module (e.g., modul = DLL)
Pentru limitarea vizibilitii doar la modulul curent se scrie la deniie
naintea tipului returnat static
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Apelul
Un apel este o expresie format din numele funciei urmat de o
pereche de paranteze ntre care se specic lista parametrilor actuali
Parametrii trebuie s corespund ca numr i tip listei parametrilor
formali
Sintaxa:
nume_funcie(list_param_actuali);
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Apelul - exemple
.
Exemple
..
......
mesaj();
int s = suma(12,13);
int a = 10, b = 15;
printf("Produsul este: %d\n", produsul(a,b));
int n, v[100];
std::cout << suma(n, v);
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Transferul parametrilor
Problema: citirea a dou numere n i m de la tastatur ntr-o funcie
i vizibilitatea valorilor la revenire din apel
Transferul prin valoare sau prin referin
Transmiterea prin valoare: modicrile aduse parametrilor au efect doar
n interiorul funciei
Transmiterea prin referin: se transmite o adres, modicrile asupra
datelor de la adresa respectiv sunt vizibile i din afara funciei
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Transferul parametrilor
Problema: citirea a dou numere n i m de la tastatur ntr-o funcie
i vizibilitatea valorilor la revenire din apel
Transferul prin valoare sau prin referin
Transmiterea prin valoare: modicrile aduse parametrilor au efect doar
n interiorul funciei
Transmiterea prin referin: se transmite o adres, modicrile asupra
datelor de la adresa respectiv sunt vizibile i din afara funciei
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Transferul parametrilor
Problema: citirea a dou numere n i m de la tastatur ntr-o funcie
i vizibilitatea valorilor la revenire din apel
Transferul prin valoare sau prin referin
Transmiterea prin valoare: modicrile aduse parametrilor au efect doar
n interiorul funciei
Transmiterea prin referin: se transmite o adres, modicrile asupra
datelor de la adresa respectiv sunt vizibile i din afara funciei
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Transferul parametrilor
Problema: citirea a dou numere n i m de la tastatur ntr-o funcie
i vizibilitatea valorilor la revenire din apel
Transferul prin valoare sau prin referin
Transmiterea prin valoare: modicrile aduse parametrilor au efect doar
n interiorul funciei
Transmiterea prin referin: se transmite o adres, modicrile asupra
datelor de la adresa respectiv sunt vizibile i din afara funciei
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Transferul parametrilor
Recapitulare: stack i heap
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Transferul parametrilor
Problema: citirea a dou numere n i m de la tastatur ntr-o funcie
i vizibilitatea valorilor la revenire din apel
Soluia:
Parametri actuali: adrese de variabile
Parametri formali: pointeri
Reamintire scanf()
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Problema
S se scrie prototipul, deniia i apelul unei funcii pentru citirea unui
vector de numere ntregi de la tastatur (datele citite s e vizibile n
afara funciei)
1. Funcia NU va aloca dinamic memoria
2. Funcia VA aloca dinamic memoria
S se implementeze i funcia pentru dealocarea memoriei
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Problema
S se scrie prototipul, deniia i apelul unei funcii pentru citirea unei
matrici de numere ntregi nxm de la tastatur (datele citite s e
vizibile n afara funciei) - funcia va aloca dinamic memoria
S se implementeze i funcia pentru dealocarea memoriei
ef lucr.dr.ing. GENGE Bla Fundamentele programrii
...
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
...
.
.
.
..
.
.
.
..
.
.
.
..
Variabile locale i globale
Variabilele declarate n corpul unei funcii sunt variabile locale
Cele declarate n afara corpului sunt variabile globale
Aplicaiile trebuie s limiteze numrul variabilelor globale pentru
limitarea accesrilor accidentale - datele s e ncapsulate, acces
restricionat
Variabile statice locale
Variabile statice globale
ef lucr.dr.ing. GENGE Bla Fundamentele programrii

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