Invatare Atomica

Vreau sa fac functii care imi dau raspunsuri!

Progres lectie:
0%
🎯

Obiectivul lectiei

Stii sa faci functii care fac ceva (afiseaza, modifica). Dar cum faci o functie carecalculeazaceva si iti da rezultatul inapoi?

Dupa aceasta lectie vei putea:

  • Sa explici ce face return
  • Sa explici sintaxa: return valoare;
  • Sa aplici 3 moduri de a folOSi rezultatul
  • Sa aplici functii care fac vs. functii care produc
  • Sa aplici tIPul din declaratie = tIPul din return

Incearca singur!

🎯 INCEARCA

Testeaza inainte sa inveti!

Nu trebuie sa intelegi totul acum. Doar copiaza, ruleaza si observa ce se intampla.

Misiunea ta (5 minute):
1
Copiaza codul de mai jos si lipeste-l pe OneCompiler. Apasa Run.
#include <iostream> using namespace std; int patrat(int n) { return n * n; } int main() { int a = patrat(3); int b = patrat(4); int c = patrat(5); cout << "3 la patrat = " << a << endl; cout << "4 la patrat = " << b << endl; cout << "5 la patrat = " << c << endl; int suma = a + b + c; cout << "Suma patratelor: " << suma << endl; return 0; }
▶ Deschide OneCompiler
2
Observa: functia patrat nu afiseaza nimic ea insasi. Ea doar returneaza un numar. Cine afiseaza? main()! Acolo decidem ce facem cu rezultatul.
3
Adauga si patrat(6) in suma. Modifica linia int suma = a + b + c; ca sa includa si patrat(6). Ce rezultat obtii?
4
Incearca sa scrii direct: cout << patrat(10); Merge si fara variabila? Ce afiseaza?
🌟 BONUS: Creeaza o functie int cub(int n) care returneaza n * n * n. Apeleaz-o cu cub(3) si afiseaza rezultatul.
Blocat la pasul 3? Click aici pentru un indiciu

Poti folosi patrat(6) direct in expresie, fara sa-l salvezi intr-o variabila:

int suma = a + b + c + patrat(6);

Sau poti crea o variabila noua: int d = patrat(6); si apoi int suma = a + b + c + d;

Blocat la pasul 4? Click aici

Da! Poti folosi rezultatul functiei direct in cout:

cout << patrat(10); va afisa 100.

Nu e obligatoriu sa salvezi rezultatul intr-o variabila. Il poti folosi direct!

Blocat la BONUS? Click aici

Scrie functia exact ca patrat, dar cu n * n * n:

int cub(int n) { return n * n * n; }

Apoi in main: cout << cub(3); va afisa 27.

1

Ce face return?

Ce face return?

Instructiunea return face doua lucruri simultan:

1. Trimite o valoare inapoi catre codul care a apelat functia (ca un raspuns).

2. Opreste functia imediat - orice cod de dupa return nu se mai executa.

📦 Analogie: Comanda de la magazin

Imagineza-ti ca trimiti pe cineva la magazin sa cumpere lapte. Acea persoana (functia) merge, ia laptele si ti-l aduce inapoi (return). Fara return, ar fi ca si cum persoana merge la magazin, cumpara laptele... si sta acolo. Nu iti aduce nimic!

2

Sintaxa: return valoare;

Sintaxa: return valoare;

Cand o functie ajunge la return, se opreste si trimite valoarea inapoi. Tipul valorii trebuie sa se potriveasca cu tipul de return al functiei.

Exemplu simplu
int dublu(int n) { return n * 2; // trimite n*2 inapoi si opreste functia } int main() { int x = dublu(7); // x primeste valoarea 14 cout << x; // Afiseaza: 14 return 0; }
💡 return opreste functia IMEDIAT

Orice cod scris dupa return nu se mai executa. E ca un "exit" din functie.

Atentie: codul dupa return NU se executa
int test() { return 42; cout << "Aceasta linie NU se executa niciodata!"; // cod mort }
3

3 moduri de a folosi rezultatul

3 moduri de a folosi rezultatul

Cand o functie returneaza o valoare, o putem folosi in mai multe feluri:

Modul 1: Salvam in variabila
int rezultat = patrat(5); // rezultat = 25 cout << rezultat; // Afiseaza: 25
Modul 2: Direct in cout
cout << patrat(5); // Afiseaza: 25 (fara variabila!)
Modul 3: In alte expresii / calcule
int suma = patrat(3) + patrat(4); // 9 + 16 = 25 if (patrat(5) > 20) { cout << "Mai mare!"; // 25 > 20, deci se afiseaza }
4

Functii care FAC vs. Functii care PRODUC

Functii care FAC vs. Functii care PRODUC

In C++ exista doua categorii mari de functii:

🔧 void - Face o actiune

Nu returneaza nimic. Doar executa ceva (afiseaza, modifica).

void saluta(string nume) { cout << "Salut, " << nume; } // Folosire: saluta("Ana"); // NU poti face: // int x = saluta("Ana"); EROARE!
📦 int/float/bool - Produce o valoare

Returneaza un rezultat pe care il putem folosi.

int patrat(int n) { return n * n; } // Folosire: int x = patrat(5); cout << patrat(5); int s = patrat(3) + patrat(4);
🍔 Analogie: Chelnerul

void = "Sterge masa!" - chelnerul face actiunea dar nu iti aduce nimic inapoi.

int = "Adu-mi nota de plata!" - chelnerul face ceva si iti aduce un rezultat (nota).

5

Tipul din declaratie = tipul din return

Tipul din declaratie = tipul din return

Daca functia spune ca returneaza int, atunci return trebuie sa trimita un int. La fel pentru float, bool, string, etc.

Tipul functiei return trebuie sa fie Exemplu
int un numar intreg return 42;
float un numar cu zecimale return 3.14;
bool true sau false return true;
char un caracter return 'A';
void nimic (fara return) return; (optional)
Exemple corecte
int aduna(int a, int b) { return a + b; // OK: a + b este int } float medie(int a, int b) { return (float)(a + b) / 2; // OK: float } bool esteAdult(int varsta) { return varsta >= 18; // OK: comparatia da true/false }
6

return in if/else - pentru cazuri diferite

return in if/else - pentru cazuri diferite

O functie poate avea mai multe instructiuni return, dar numai una se executa (prima la care ajunge). Acest lucru e util cand ai cazuri diferite:

Functia maxim - returneza cel mai mare numar
int maxim(int a, int b) { if (a > b) { return a; // daca a > b, returneaza a si STOP } else { return b; // altfel, returneaza b si STOP } } // Folosire: cout << maxim(7, 3); // Afiseaza: 7 cout << maxim(2, 9); // Afiseaza: 9

Trace of maxim function

👁 Pas cu pas: maxim(7, 3)
Pas Ce se intampla Rezultat
1 Se apeleaza maxim(7, 3) - a=7, b=3 -
2 Se verifica: a > b? 7 > 3? DA
3 Se executa return a; return 7
4 Functia se opreste. else NU se mai executa -
Functia absolut - valoarea absoluta
int absolut(int n) { if (n < 0) { return -n; // daca e negativ, il facem pozitiv } return n; // daca e pozitiv, il lasam asa } cout << absolut(-5); // Afiseaza: 5 cout << absolut(3); // Afiseaza: 3
7

bool = true sau false

bool = true sau false

Functiile de tip bool sunt extrem de utile. Ele raspund la o intrebare cu true (da) sau false (nu). Le poti folosi direct in if!

Exemplu: estePar - verifica daca un numar e par
bool estePar(int n) { return (n % 2 == 0); // true daca restul e 0 } // Folosire in if: if (estePar(4)) { cout << "4 este par"; // Se afiseaza! (4%2==0 este true) } if (estePar(7)) { cout << "7 este par"; // NU se afiseaza (7%2==0 este false) }
Mai multe exemple de functii bool
bool estePozitiv(int n) { return n > 0; } bool esteVocala(char c) { return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'); } bool esteMajor(int varsta) { return varsta >= 18; }
8

Calculator de note cu functii

Calculator de note cu functii

Un program care foloseste mai multe functii cu return: calculeaza media, verifica daca nota e de trecere, si gaseste nota maxima.

Program complet - ruleaza-l!
#include <iostream> using namespace std; // Functie care returneaza media a doua note float medie(int a, int b) { return (float)(a + b) / 2; } // Functie care verifica daca nota e de trecere bool trece(float nota) { return nota >= 5; } // Functie care returneaza maximul dintre doua numere int maxim(int a, int b) { if (a > b) return a; return b; } int main() { int nota1 = 8, nota2 = 6; float m = medie(nota1, nota2); cout << "Media: " << m << endl; if (trece(m)) { cout << "Elevul a trecut!" << endl; } else { cout << "Elevul nu a trecut." << endl; } cout << "Nota maxima: " << maxim(nota1, nota2) << endl; return 0; }
▶ Ruleaza pe OneCompiler

Exercitii practice

Exercitiul 1 (Nivel minim) - Analiza functiilor cu return

Raspunde la urmatoarele intrebari despre return:

  1. Avem functia int triplu(int n) { return n * 3; }. Ce valoare are variabila x dupa executia liniei int x = triplu(4) + triplu(2);? Explica pas cu pas.
  2. Care este diferenta dintre cout << n * 3; si return n * 3; in interiorul unei functii de tip int? Cand folosesti fiecare?
  3. De ce e gresit sa scrii patrat(5); pe o linie separata fara sa salvezi rezultatul? Ce se intampla cu valoarea calculata?

Raspunde numerotat: 1. ... 2. ... 3. ...

Exercitiul 2 (Nivel standard) - Programeaza cu functii return

Cerinta: Scrie un program C++ care contine 3 functii:

  1. int minim(int a, int b) - returneaza minimul dintre doua numere
  2. bool esteDivizibil(int a, int b) - returneaza true daca a se imparte exact la b
  3. float celsius_la_fahrenheit(float c) - conversia e: F = C * 9/5 + 32

In main(), demonstreaza fiecare functie cu cel putin 2 apeluri diferite.

Exemplu output:

Minimul dintre 7 si 3 este: 3
12 se imparte la 4? Da
25 grade C = 77 grade F

Indicii:

  • Pentru minim, foloseste if/else cu doua return-uri
  • Pentru esteDivizibil, foloseste operatorul % (restul impartirii): return a % b == 0;
  • Pentru conversie, atentie la formula: return c * 9.0 / 5 + 32; (9.0 nu 9, ca sa obtii zecimale)

Exercitiul 3 (Nivel performanta) - Explicatie scrisa

Cerinta: Explica in cuvintele tale diferenta dintre o functie void si una care returneaza o valoare. Foloseste o analogie proprie (alta decat cele din lectie).

Indicii:

  • Descrie o situatie din viata reala unde "faci ceva" fara a da un rezultat inapoi (void)
  • Descrie o situatie unde "faci ceva" SI dai un raspuns (return)
  • Explica de ce este important sa folosesti valoarea returnata (sa nu o pierzi)

Cuvinte cheie de folosit: return, void, valoare returnata, apelant, tip de date, bool, true, false

Ce ai invatat astazi

  • Ai invatat ce face return
  • Acum stii sintaxa: return valoare;
  • Ai descoperit 3 moduri de a folosi rezultatul
  • Ai explorat functii care fac vs. functii care produc
  • Ai inteles tipul din declaratie = tipul din return
  • Ai invatat return in if/else - pentru cazuri diferite
  • Acum stii bool = true sau false
  • Ai descoperit calculator de note cu functii

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →