Sunteți pe pagina 1din 4

Obiective:

 Scrierea corecta a unui


subprogram.
Subprograme  Parametrii transmisi ca
referinta vs valoare

Introducere
Un subprogram reprezinta un ansamblu de instructiuni (de declarare, executabile) scrise în vederea executarii
unei anumite prelucrari. Este identificat printr-un nume si implementat separat.

Tipul void
Subprogram care nu returneaza nimic.

Secventa de cod din interiorul programului se executa a si cum ar fi copiata in interiorul programului, iar
variabilele trimise ca parametru se inlocuiesc cu cele din apelul functiei. (Valorile variabileleor se schimba in
programul mare doar daca au fost trimise ca referinta)
void afiseaza(int n)
{
cout<<n;
}

Subprograme de un anumit tip


Subprogram care returneaza o valoare de tipul specificat.

Secventa de cod din interiorul programului se executa ca si cum ar fi copiata in interiorul programului, iar
variabilele trimise ca parametru se inlocuiesc cu cele din apelul functiei. In plus, acest subprogram returneaza
o anumita valoare care poate fi (sau nu) preluata in locul din care a fost apelat subprogramul.
int dubleaza(int n)
{
return 2*n;
}

int main()
{
cout << dubleaza(2); // va afisa 4
}

Parametrii unui subprogram


Trimiterea parametrilor ca referinta sau ca valoare

Atunci când transmiteţi argumente (şi sunt variabile) unei funcţii, transmiteţi de fapt o copie a acelor
variabile. Aceasta este transmiterea prin valoare (pass by value). Orice modificare a parametrilor unei
funcţii este vizibilă numai în acea funcţie. Variabilele - folosite ca argumente - rămân nemodificate.
#include <iostream>
using namespace std;

void modifica(int a)
{
a = a + 5;
cout << "a are valoarea: " << a << '\n';
}

int main()
{
int x = 1;
cout << "x inainte de apel: " << x << '\n';
modifica(x);
cout << "x dupa apel: " << x;
return 0;
}

Output:
x inainte de apel: 1
a are valoarea: 6
x dupa apel: 1

O funcţie poate returna decât o singură valoare printr-un return, ca la matematică.


Uneori vrem ca o funcţie să poată returna mai multe valori. Un mod prin care putem obţine acest lucru
este transmiterea prin referinţă (pass by reference).
Atunci când transmiteţi prin referinţă, parametrii funcţiei alterează direct conţinutul variabilelor
argumente (nu mai există nicio copie).
Ca să transmiteţi prin referinţă folosiţi ampersand (&) între tipul parametrului şi numele acestuia.
Parametrii referinţă acceptă numai variabile. NU acceptă constante (deoarece nu pot fi alterate)!

#include <iostream>
using namespace std;

void modifica(int& a) // Nu uitati de ’&’ !


{
a = a + 5;
cout << "a are valoarea: " << a << '\n';
}

int main()
{
int x = 1;
cout << "x inainte de apel: " << x << '\n';
modifica(x);
cout << "x dupa apel: " << x;
return 0;
}

Output:
x inainte de apel: 1
a are valoarea: 6
x dupa apel: 6
Aplicatii
Probleme diverse

1)Test de primalitate http://www.pbinfo.ro/?pagina=probleme&id=14

bool estePrim(int numar)


{
for(int i=2; i*i <= numar; i++)
{
if( numar%i == 0 )
return false;
}
return true;
}

Probleme propuse
Probleme propuse spre rezolvare acasa

https://www.pbinfo.ro/?pagina=probleme&id=1664

Hint: Lucrul cu doi indici

https://www.pbinfo.ro/?pagina=probleme&id=1826

Hint: exponentul lui 5 in N!

https://www.pbinfo.ro/?pagina=probleme&id=898

Hint: Spargerea in cifre

https://www.pbinfo.ro/?pagina=probleme&id=23

Hint: brute force

https://www.pbinfo.ro/?pagina=probleme&id=30

Hint: brute force

https://www.pbinfo.ro/?pagina=probleme&id=42

Hint: brute force

https://www.pbinfo.ro/?pagina=probleme&id=1510

Hint: brute force

https://www.pbinfo.ro/?pagina=probleme&id=1842

Hint: brute force

Alte surse de documentatie:

http://www.lbi.ro/~carmen/vineri/Subprograme%20iterative(pdf)/Subprograme%2
0Cpp.pdf

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