Hey all, imi poate explica si mie cineva de ce atunci cand intr-un enunt ne este precizat ca o functie returneaza prin intermediul aceluiasi parametru o valoare trebuie sa scriem antetul functiei de tipul void in loc de int?
Ex: functia elim_impar primeste prin intermediul parametrului x un numar natural si furnizeaza prin intermediul aceluiasi parametru x nr. obtinut prin eliminarea tuturor cifrelor impare din x. In cazul acesta avem variantele:
A. int elimin_impar (int &x)
B. void elimin_impar(int x)
C. void elimin_impar (int &x)
D. int elimin_impar(int x)
dintre toate acestea raspunsul corect este C insa nu inteleg de ce.
Multumesc anticipat.
Răspunsuri la întrebare
Forma generala:
void nume_functie(tip_variabila var_1, ... , tip_variabila &var_n)
{
instructiune 1;
...
instructiune n;
}
Unde:
void - reprezinta tipul functiei
nume_functie - reprezinta identificatorul cu ajutorul caruia functia va fi apelata pe parcursul programului
Lista de parametri formali :
- tip_variabila - reprezinta tipul variabilelor/parametrilor formali
- var_1 - reprezinta parametrul formal al functiei
- &var_n - reprezinta parametrul formal cu referință al functiei
Intre acolade se trece corpul functiei - setul de instructiuni ce va prelucra parametrii formali in scopul returnarii unui rezultat.
ATENTIE!
Daca se cere: "Sa se scrie o functie care intoarce rezultatul printr-un parametru" se va folosi un astfel de antet:
EX: void nume_functie( int ¶metru )
Daca se cere: "Sa se scrie o functie care returneaza ceva a numarul primit prin parametrul x", unde "ceva" semnifica o actiune asupra numarului, cum ar fi numarul de cifre SAU cate cifre impare are etc. ....se va folosi un astfel de antet:
EX:
int nume_functie(int x)
{
bloc_instructiuni;
...
return variabila; // ( sau 1 sau 0 );
}
În cazul tău, cerința îți cere să furnizezi prin intermediul aceluiași parametrul valoarea obținută. Prin urmare, pentru ca in momentul in care apelezi in main functia elimin_impar(n) , variabil n va primi numarul obtinut in subprogram datorita referintei. Deci... daca punem referinta la un parametru in suprogram, atunci valoarea parametrului respectiv va fi aceeasi pentru variabila declarata in main.
Sa luam exemplul urmator:
void marire(int &x)
{
x=x+1;
}
int main()
{
int n;
cin>>n;
marire(n);
cout<<n;
}
Daca citim pentru n valoare 19, la afisare se va afisa 20.
Explicatie: Odata ce am citit valoarea lui n, prin apelul functiei marire(n), lui x i se va atribui valoarea lui n. Teoretic, x-ul va deveni n-ul din main. Ceea ce i se intampla lui x in subprogram i se va intampla si lui n in main.
In general, intr-un subprogram de tip void ai voie fie sa afisezi in interiorul lui, fie sa intorci prin referinta, fie sa afisezi si sa intorci prin referinta; pe cand in cele de tip int ai voie doar sa returnezi o valoare si cam atat..
( return variabila SAU return 1/0 )
Sper ca ai inteles.. Daca nu, astept un reply :)
EX: int functie ( int angajat )
{
int bani=100; angajat=bani; return angajat;
}
Daca ai folosi subprogram de tip int atunci te-ai contrazice cu cerinta.
Cel mai simplu, dau exemplu:
int x(int &p)
{
p++;
}
int main()
{
int v=10;
v=x(v);
cout<}
Daca faci asa ca mai sus, fara a mai da return la valoarea p in subprogram, o sa iti afiseze valori reziduale.
void x(int &p)
{
p++;
}
int main()
{
int v=10;
x(v);
cout<}