Transferul parametrilor intre subprograme Recapitulare l l ce
Transferul parametrilor intre subprograme
Recapitulare l l ce este un subprogram? Care sunt elementele unui subprogram? -ce inseamna modul apelant si modul apelat? -care sunt parametri formali si parametri actuali? -cum se scrie antetul unei functii?
Transferul parametrilor este o tehnica folosita pentru schimbul de date intre module. Exista doua metode de transfer: - prin valoare - prin referinta.
Transferul prin valoare -se foloseste in general numai pentru transmiterea datelor de intrare catre subprogram adica pentru parametri de intrare. -in momentul apelarii subprogramului o copie a valorii parametrului este incarcata in stiva. -parametrul transmis prin valoare este vazut in subprogram ca variabila locala cu valoarea transmisa de modulul apelant prin parametrul actual din apel. -modificarea valorii parametrului nu se reflecta in modulul apelant. -parametri se numesc parametri valoare Exemplu: void suma(int a, int b)
Transferul prin referinta -se foloseste in general pentru parametri de intrare-iesire sau parametri de iesire. -in momentul apelarii subprogramului in stiva se incarca adresa de memorie la care se gaseste valoarea parametrului. Astfel subprogramul va lucra direct in zona de memorie in care se gaseste data. -orice modificare a valorii acestui parametru facuta in subprogram se va reflecta si in modulul apelant. -parametrii pentru care se foloseste transferul prin referinta sunt precedati de operatorul adresa de m emorie &. -Se numesc parametri variabila Exemplu: void medie(int a, int b, float &m) unde a, b sunt transmise prin valoare iar m prin referinta
Transferul parametrilor Parametri actuali corespunzatori parametrilor valoare pot fi: constante, expresii, variabile de memorie, adrese ale unor variabile. Exemplu: suma(3, 4); suma(a, b); suma(a*b, c*d); l Prametri actuali corespunzatori parametrilor variabila pot fi doar variabile de memorie. l Exemplu: l medie(a, b, m); l
STUDIU DE CAZ l Interschimbarea valorii a doua variabile: #include<iostream. h> void interschimb (int a, int b) {int aux; aux=a; a=b; b=aux; } void main() {int x, y; cout<<“x=”; cin>>x; cout<<“y=”; cin>>y; interschimb(x, y); cout<<a<<“ “<<b; } #include<iostream. h> void interschimb (int &a, int &b) {int aux; aux=a; a=b; b=aux; } void main() {int x, y; cout<<“x=”; cin>>x; cout<<“y=”; cin>>y; interschimb(x, y); cout<<a<<b; }
Fisa de lucru 1. Ce se va afisa in urma executarii urmatoarei secvente de program? int x; void sb 1(int x) {x=10; cout<<x ; } void sb 2(int x) {x=20 ; cout<<x ; } void main() {x=30 ; sb 1(x) ; cout<<x ; sb 2(x) ; cout<<x ; } 2. Ce se va afisa in urma executarii urmatoarei secvente de program? int x; void sb 1(int x) {x=20; cout<<x ; } void sb 2(int &x) {x=30 ; cout<<x ; } void main() {x=50 ; cout<<x ; sb 1(x) ; cout<<x ; sb 2(x) ; cout<<x ; } 3. Ce se va afisa in urma executarii urmatoarei secvente de program? int a, b; void sb 1(int x, int y) {x=x-y; y=y-x; } void sb 2(int x, int y) {a=sb 1(x, y) ; b=sb 1(y, x) ; } void main() {a=1 ; b=2 ; sb 1(a, b) ; cout<<a<<b; sb 1(b, a) ; cout<<a<<b ; } 4. Ce se va afisa in urma executarii urmatoarei secvente de program? float x; void sb(int &x) {cout<<x ; x=1; cout<<x ; } void main() {x=2. 5 ; sb(x) ; cout<<x ; }
- Slides: 9