Teorie subprograme C++
Subprogramele reprezinta functii definite de catre utilizator. Ele sunt identificate prin nume si pot fi apelate in interoriul unui program.
Un subprogram (o functie) are forma urmatoare:
Subprogramele se scriu inainte de functia “int main()”.
Spre exemplu, in problema de mai jos, (pe care o puteti gasi si aici), avem un subprogram cu numele “cifreImpare” (intre liniile 4 si 19). Acesta are doar un parametru formal – n, de tipul int.
Antetul acestui subprogram este “int cifreImpare(int n)”.
Putem observa de asemenea cum acesta este apelat in interiorul functiei int main() (linia 24). Astfel, variabila n citita la linia 23, este prelucrata de catre subprogramul cifreImpare.
In cazul subprogramelor trebuie sa facem distinctie intre variabilele locale si variabilele globale din programul pe care il cream.
Variabilele globale sunt variabile ce pot fi utilizate in interiorul oricarei functii din program. Variabilele globale se declara la inceputul programului inainte de declararea oricarei functii. Concret, in cazul nostru, variabila globala n declarata la linia 3, poate fi utilizata si in functia cifreImpare precum si in functia main.
Variabilele locale sunt variabile ce pot fi utilizate doar in interiorul unei anumite functii. Variabilele locale se declare in interiorul unei functii. Concret, in cazul nostru, regasim variabilele locale la linia 6, ele putand fi utilizate doar in functia cifreImpare.
Ar fi ineficient din punct de vedere al memoriei folosite de catre program daca variabilele locale folosite doar in functia cifreImpare ar fi declarate ca variabile globale.
Exista 2 tipuri de apel al subprogramelor:
1. Apel prin valoare = se transmite o copie a parametrului. Astfel, in urma parcurgerii intructiunilor din subprogram valoarea parametrului nu a fost schimbata intrucat se prelucreaza o copie a sa.
2. Apel prin referinta = se transmite adresa parametrului. Astfel, in urma parcurgerii instructiunilor din subprogram, valoarea parametrului se schimba intrucat se efectueaza prelucrari direct asupra sa.
Spor la lucru! Daca aveti intrebari nu ezitati sa le lasati in comentarii, va vom raspunde cat de repede putem 🙂
Video de pe canalul nostru de YouTube in care discutam despre subprograme:
Buna! Sunt incepatoare la info si am o nedumerire: cand avem nevoie de referinta? imi puteti da un exemplu concret va rog?
Buna, Alina! Daca un parametru e transmis prin referinta, orice modificare adusa lui, va putea fi vazuta si in exteriorul functiei. Daca e transmis prin valoare, acesta va ramane la fel, la iesirea din functie. Exemplu : Daca avem functia void f(int &a) { a = a + 2; } si o apelam cu int a = 2; f(a); valoarea lui a la sfarsit va fi 4. Daca avem functia void f(int a) {
a = a + 2; } valoarea lui a va ramane 2. Ai avea nevoie de referinta cand vrei sa faci modificari asupra parametrilor, care sa fie vazute in programul principal.
Multumesc mult!!
Scrieți funcția inserare care primește ca parametru un număr natural n și furnizează prin intermediul aceluiași parametru numărul obținut din n prin inserarea, între oricare două cifre alăturate ale sale, a valorii absolute a diferenței acestora.
> in cazul in care tipul returnat nu este specificat acesta este implicit int
e o tampenie
variabilele din antetul functiei pot fi si pointeri, mult mai avantajosi ca referintele, aceeasi utilitate
Nu stiu daca in mod general sunt mai avantajosi, depinde de problema si pentru ce vrem sa fie folositi. Referintele au aparut in C++, ele nefiind disponibile in C, tocmai pentru a imbunatati unele apeluri. In cazul apelului prin pointer, tipul de apel este tot prin valoare (pointerul, fiind in principiu doar o adresa, care se copiaza in parametrul functiei), de asta nu a fost necesar sa fie precizat.
La linia 9 trebuie schimbat “==0” cu “!=0”.
Bunaaa , am o problema mare pe care daca nu ma ajutati sa o rezolv o sa raman in urma grav cu materia . Nu inteleg ce face apelul prin referinta si de ce se modifica / valoare si nu se modifica.
Va rog sa ma ajutati .
Buna, Denisa! Cred ca te-ar ajuta rasupnsul de mai sus de la comentariul Alinei. “Daca un parametru e transmis prin referinta, orice modificare adusa lui, va putea fi vazuta si in exteriorul functiei. Daca e transmis prin valoare, acesta va ramane la fel, la iesirea din functie. Exemplu : Daca avem functia void f(int &a) { a = a + 2; } si o apelam cu int a = 2; f(a); valoarea lui a la sfarsit va fi 4. Daca avem functia void f(int a) {
a = a + 2; } valoarea lui a va ramane 2. Ai avea nevoie de referinta cand vrei sa faci modificari asupra parametrilor, care sa fie vazute in programul principal.”