Invatare Atomica

Vreau sa scriu cod fara sa ma repet!

Progres lectie:
0%
🎯

Obiectivul lectiei

Imagineaza-ti ca ai un program cu aceleasi 5 linii copiate in 3 locuri diferite. Apoi gasesti un bug... si trebuie sa-l repari in toate cele 3 locuri. Asta e un cosmar!

Dupa aceasta lectie vei putea:

  • Sa explici ce este o functie si de ce ai nevoie de ea
  • Sa implementezi de ce repetarea codului e o problema grava
  • Sa aplici ce inseamna void
  • Sa aplici apelarea = chemarea functiei
  • Sa aplici fiecare functie face un singur lucru

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; // Aceasta este o FUNCTIE void afiseazaLinie() { cout << "********************" << endl; } int main() { afiseazaLinie(); cout << " Salut, lume!" << endl; afiseazaLinie(); cout << " Invat functii!" << endl; afiseazaLinie(); return 0; }
▶ Deschide OneCompiler
2
Observa: functia afiseazaLinie() este apelata de 3 ori, dar scrisa o singura data. Ce apare pe ecran?
3
Acum modifica functia: schimba "********************" cu "====================" . Ruleaza din nou. Ce observi? Cate linii ai modificat?
4
Adauga o noua functie void salut() care afiseaza "Buna ziua!". Apeleaz-o din main inainte de prima linie.
🌟 BONUS: Creeaza o functie void afiseazaCaseta() care afiseaza o caseta completa (linie, text, linie) si apeleaz-o de 2 ori!
Blocat la pasul 3? Click aici pentru un indiciu

Ai modificat o singura linie (cea din interiorul functiei), dar efectul se vede in toate cele 3 locuri unde e apelata. Asta e puterea functiilor!

Fara functie, ai fi trebuit sa modifici 3 linii separate. Cu functia, modifici una singura.

Blocat la pasul 4? Click aici

Scrie noua functie deasupra lui main (la fel ca afiseazaLinie):

void salut() {

    cout << "Buna ziua!" << endl;

}

Apoi, in main(), scrie salut(); pe prima linie (inainte de afiseazaLinie();).

Blocat la BONUS? Click aici

Poti chema o functie din alta functie! Scrie:

void afiseazaCaseta() {

    afiseazaLinie();

    cout << " Mesaj important!" << endl;

    afiseazaLinie();

}

Pune aceasta functie dupa afiseazaLinie si inainte de main.

1

Ce este o functie si de ce ai nevoie de ea?

Ce este o functie si de ce ai nevoie de ea?

O functie (sau subprogram) este un bloc de cod cu un nume pe care il poti apela (chema) ori de cate ori ai nevoie, fara sa rescrii codul.

Gandeste-te asa: in loc sa copiezi aceleasi linii de cod in 5 locuri, le scrii o singura data intr-o functie, si apoi doar chemi functia de 5 ori.

🍳 Analogie: Reteta de prajituri

Cand vrei sa faci prajituri, nu inventezi reteta de fiecare data. O scrii o data pe o foaie si apoi o folosesti ori de cate ori vrei sa gatesti. Reteta este functia. A gati dupa reteta este apelarea functiei.

Daca vrei sa schimbi cantitatea de zahar, modifici doar reteta, nu toate prajiturile pe care le-ai facut vreodata!

2

De ce repetarea codului e o problema grava

De ce repetarea codului e o problema grava

Cand copiezi acelasi cod in mai multe locuri, se intampla 3 lucruri rele:

Problema Ce se intampla concret
Bug multiplicat Gasesti un bug intr-o copie. Il repari. Dar ai uitat ca exista inca 2 copii cu acelasi bug. Programul tot nu merge.
Cod greu de citit 200 de linii de cod cu blocuri repetate vs. 50 de linii cu functii clare. Care e mai usor de inteles?
Timp pierdut Orice modificare trebuie facuta in N locuri. Cu o functie, o faci o singura data.
3

Ce inseamna void?

Ce inseamna void?

Cuvantul void inseamna "nimic" sau "gol". O functie void este o functie care face ceva (afiseaza text, deseneaza pe ecran, etc.) dar nu returneaza un rezultat.

Gandeste-te la diferenta: un cuptor face prajitura (returnare) - primesti ceva inapoi. Un aspirator curata (void) - face treaba, dar nu iti "da" ceva inapoi.

Formula generala
void nume_functie() { // instructiunile functiei // pot fi una sau mai multe linii }
Exemple practice
// Functie care afiseaza un salut void salut() { cout << "Buna ziua!" << endl; } // Functie care afiseaza o linie decorativa void afiseazaLinie() { cout << "========================" << endl; } // Functie care afiseaza un meniu void afiseazaMeniu() { cout << "1. Adauga elev" << endl; cout << "2. Afiseaza note" << endl; cout << "3. Iesire" << endl; }
4

Apelarea = chemarea functiei

Apelarea = chemarea functiei

Ca sa "chemi" o functie, scrii numele ei urmat de paranteze si punct si virgula:

Apelarea functiei
salut(); // Apeleaza functia salut afiseazaLinie(); // Apeleaza functia afiseazaLinie afiseazaMeniu(); // Apeleaza functia afiseazaMeniu
💡 Definire vs. Apelare

Definirea functiei = scrierea "retetei" (o faci o singura data).
Apelarea functiei = folosirea "retetei" (o faci de cate ori vrei).

O functie pe care o definesti dar nu o apelezi niciodata este ca o reteta pe care o scrii dar nu o gatesti niciodata - codul din ea nu se va executa.

5

Fiecare functie face UN singur lucru

Fiecare functie face UN singur lucru

Un program bine scris este ca o echipa: fiecare membru (functie) are un rol clar. Nu pui un singur om sa faca totul!

Regula: daca poti descrie ce face functia intr-o singura propozitie, atunci e bine definita.

Program organizat cu functii
#include <iostream> using namespace std; // Functie: afiseaza o linie decorativa void linie() { cout << "========================" << endl; } // Functie: afiseaza titlul programului void titlu() { linie(); cout << " CATALOG SCOLAR" << endl; linie(); } // Functie: afiseaza meniul de optiuni void meniu() { cout << "1. Adauga elev" << endl; cout << "2. Afiseaza note" << endl; cout << "3. Iesire" << endl; linie(); } int main() { titlu(); // Afiseaza titlul meniu(); // Afiseaza meniul return 0; }
▶ Ruleaza pe OneCompiler
6

Regula de plasare: functia INAINTE de apel

Regula de plasare: functia INAINTE de apel

In C++, functia trebuie sa fie definita inainte de locul unde o apelezi. De obicei, scriem functiile deasupra lui main().

Exercitii practice

Exercitiul 1 (Nivel minim) - Analiza conceptelor

Raspunde la urmatoarele intrebari despre functii:

  1. Explica in cuvintele tale ce inseamna principiul DRY si de ce este important in programare. Da un exemplu concret de situatie in care l-ai aplica.
  2. Care este diferenta intre definirea unei functii si apelarea ei? De ce trebuie sa le facem pe amandoua?
  3. Un coleg a scris o functie void salut() { cout << "Buna!"; } dar programul nu afiseaza nimic. Ce a uitat sa faca? Explica.

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

Exercitiul 2 (Nivel standard) - Programeaza cu functii

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

  1. void separator() - afiseaza o linie de 30 de caractere '-'
  2. void antet() - apeleaza separator(), afiseaza "MAGAZIN ONLINE", apoi apeleaza separator() din nou
  3. void produse() - afiseaza o lista de 3 produse (ex: "1. Laptop - 2500 lei")

In main(), apeleaza: antet(), produse(), separator().

Exemplu output:

------------------------------
  MAGAZIN ONLINE
------------------------------
1. Laptop - 2500 lei
2. Mouse - 50 lei
3. Tastatura - 150 lei
------------------------------

Indicii:

  • Defineste toate cele 3 functii deasupra lui main()
  • Functia antet() poate apela separator() - dar separator trebuie definit inainte de antet!
  • Ordinea definirii conteaza: separator → antet → produse → main

Exercitiul 3 (Nivel performanta) - Gandeste ca un programator

Cerinta: Ai un program de 60 de linii care face 3 lucruri: afiseaza un header (5 linii), proceseaza date (40 linii) si afiseaza un footer (5 linii). Header-ul si footer-ul sunt identice. Fara functii, programul are 60 de linii.

  1. Cum ai reorganiza acest program folosind functii? Ce functii ai crea?
  2. Cate linii ar avea programul dupa reorganizare? (header-ul/footer-ul se scriu o singura data ca functie)
  3. Daca clientul iti cere sa schimbi header-ul, cate linii modifici CU functii vs. FARA functii?
  4. Imagineaza-ti o situatie din viata reala (nu programare) in care aplici principiul DRY. Descrie-o.

Cuvinte cheie de folosit: functie, void, apel, definire, DRY, reutilizare, organizare, main

Ce ai invatat astazi

  • Ai invatat ce este o functie si de ce ai nevoie de ea
  • Acum stii de ce repetarea codului e o problema grava
  • Ai descoperit ce inseamna void
  • Ai explorat apelarea = chemarea functiei
  • Ai inteles fiecare functie face un singur lucru
  • Ai invatat regula de plasare: functia inainte de apel

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →