Invatare Atomica

Vreau sa parcurg toate elementele!

Progres lectie:
0%
🎯

Obiectivul lectiei

Ai 30 de note ale elevilor si trebuie sa le afisezi pe toate. Le scrii una cate una? Exista o cale mult mai buna!

Dupa aceasta lectie vei putea:

  • Sa explici ce inseamna "a parcurge" un tablou
  • Sa explici formula magica: for + tablou
  • Sa aplici progRAM complet: parcurgere + suma
  • Sa analizezi variabila n = numarul de elemente
  • Sa aplici parcurgere de la dreapta la stanga

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 main() { int note[5] = {9, 7, 10, 8, 6}; int n = 5; for (int i = 0; i < n; i++) { cout << "Nota " << i + 1 << ": " << note[i] << endl; } return 0; }
▶ Deschide OneCompiler
2
Observa output-ul. Bucla for a afisat toate cele 5 note automat! Acum schimba i + 1 in i in linia de cout. Ruleaza din nou. Ce observi diferit la numerotarea notelor?
3
Acum incearca parcurgerea inversa! Inlocuieste bucla for cu:
for (int i = n - 1; i >= 0; i--)
Ruleaza. In ce ordine apar notele acum?
4
Adauga inca 3 note in tablou (marin dimensiunea la 8 si adauga valori). Nu uita sa schimbi si n = 8. Ruleaza si verifica ca apar toate 8.
🌟 BONUS: Adauga dupa bucla for o variabila suma care calculeaza totalul notelor in interiorul buclei, apoi afiseaza media cu cout << (float)suma / n;
Blocat la pasul 2? Click aici pentru un indiciu

Cand scrii i + 1, notele apar numerotate de la 1: "Nota 1", "Nota 2"...

Cand scrii doar i, notele apar numerotate de la 0: "Nota 0", "Nota 1"...

De ce? Pentru ca i incepe de la 0 (indexul tabloului), iar i + 1 transforma indexul in numar natural (mai intuitiv pentru oameni).

Blocat la pasul 3? Click aici

Parcurgerea inversa: for (int i = n - 1; i >= 0; i--)

i incepe de la ultimul index (n-1 = 4) si scade pana la 0. Astfel notele apar invers: 6, 8, 10, 7, 9.

Atentie: conditia este i >= 0 (mai mare sau egal cu 0), nu i > 0 (care ar sari peste note[0]!).

Blocat la pasul 4? Click aici

Modifica declaratia tabloului astfel:

int note[8] = {9, 7, 10, 8, 6, 5, 9, 7};

int n = 8;

Bucla for foloseste n ca limita, deci automat va parcurge toate cele 8 elemente. Nu trebuie sa schimbi nimic in bucla!

1

Ce inseamna "a parcurge" un tablou?

Ce inseamna "a parcurge" un tablou?

A parcurge un tablou inseamna a vizita (accesa) fiecare element al tabloului, pe rand, de la primul pana la ultimul (sau invers). In loc sa scriem manual note[0], note[1], ..., lasam o bucla for sa faca munca repetitiva.

Parcurgerea este cea mai importanta operatie cu tablourile. Aproape orice vrei sa faci cu un tablou (afisare, suma, cautare, numarare) necesita o parcurgere.

📚 Analogie: Catalogul clasei

Imaginezi-ti profesorul care face prezenta. Deschide catalogul si trece prin fiecare elev, de la primul la ultimul: "Andrei?" - prezent. "Maria?" - prezenta. "Ion?" - absent. Nu sare peste nimeni, nu se opreste la jumatate. Trece prin toti elevii, unul cate unul.

Asta face si bucla for: trece prin fiecare element al tabloului, de la indexul 0 pana la ultimul, si face ceva cu fiecare (il afiseaza, il aduna, il verifica etc.).

2

Formula magica: for + tablou

Formula magica: for + tablou

Parcurgerea unui tablou are mereu aceeasi structura. Odata ce o inveti, o vei folosi de sute de ori:

Formula generala - parcurgere de la stanga la dreapta
for (int i = 0; i < n; i++) { // Fa ceva cu tablou[i] }
Componenta Ce face
int i = 0 Incepe de la primul element (indexul 0)
i < n Continua cat timp i este mai mic decat numarul de elemente (n). Se opreste inainte de n!
i++ Dupa fiecare pas, trece la urmatorul element (i creste cu 1)
tablou[i] La fiecare iteratie, i devine indexul curent: tablou[0], tablou[1], tablou[2]...
3

Program complet: parcurgere + suma

Program complet: parcurgere + suma

Sa urmarim exact ce se intampla la fiecare pas al buclei:

Codul pe care il urmarim
#include <iostream> using namespace std; int main() { int note[5] = {9, 7, 10, 8, 6}; int n = 5; int suma = 0; for (int i = 0; i < n; i++) { cout << "Nota " << i + 1 << ": " << note[i] << endl; suma = suma + note[i]; } cout << "Suma: " << suma << endl; cout << "Media: " << (float)suma / n << endl; return 0; }
▶ Ruleaza pe OneCompiler
4

Variabila n = numarul de elemente

Variabila n = numarul de elemente

In loc sa scriem i < 5 direct in for, pastram numarul de elemente intr-o variabila separata n. De ce?

Rau: numar magic
int note[5] = {9, 7, 10, 8, 6}; for (int i = 0; i < 5; i++) // Daca adaugi elemente, trebuie sa cout << note[i]; // gasesti TOATE locurile unde scrie "5" si sa le schimbi
Bine: variabila n
int note[5] = {9, 7, 10, 8, 6}; int n = 5; for (int i = 0; i < n; i++) // Schimbi doar n = 8 intr-un singur loc cout << note[i]; // si TOTUL functioneaza corect!
5

Parcurgere de la dreapta la stanga

Parcurgere de la dreapta la stanga

Uneori vrei sa parcurgi tabloul invers - de la ultimul element spre primul. Structura se schimba putin:

Formula - parcurgere inversa
for (int i = n - 1; i >= 0; i--) { // Fa ceva cu tablou[i] }
Componenta Ce face
int i = n - 1 Incepe de la ultimul element (indexul n-1)
i >= 0 Continua cat timp i este mai mare sau egal cu 0 (nu uita de index 0!)
i-- Dupa fiecare pas, scade la elementul anterior (i scade cu 1)
Exemplu complet
#include <iostream> using namespace std; int main() { int note[5] = {9, 7, 10, 8, 6}; int n = 5; cout << "Notele in ordine inversa:" << endl; for (int i = n - 1; i >= 0; i--) { cout << "note[" << i << "] = " << note[i] << endl; } return 0; }
▶ Ruleaza pe OneCompiler
6

Ce poti face in interiorul buclei?

Ce poti face in interiorul buclei?

Parcurgerea nu inseamna doar "afisare". In interiorul buclei poti face orice operatie cu fiecare element:

Afisare
for (int i = 0; i < n; i++) cout << note[i] << " "; // Output: 9 7 10 8 6
Suma elementelor
int suma = 0; for (int i = 0; i < n; i++) suma = suma + note[i]; // suma = 40
Numarare (cate note sunt >= 8?)
int count = 0; for (int i = 0; i < n; i++) if (note[i] >= 8) count++; // count = 3 (notele 9, 10, 8)
Gasire maxim
int maxim = note[0]; for (int i = 1; i < n; i++) if (note[i] > maxim) maxim = note[i]; // maxim = 10
7

Parcurgere pentru citire (cin)

Parcurgere pentru citire (cin)

Poti folosi aceeasi structura de parcurgere pentru a citi valorile tabloului de la tastatura, nu doar pentru a le afisa:

Citire de la tastatura
#include <iostream> using namespace std; int main() { int note[100]; // declaram tablou suficient de mare int n; cout << "Cate note ai? "; cin >> n; // Parcurgere pentru CITIRE for (int i = 0; i < n; i++) { cout << "Nota " << i + 1 << ": "; cin >> note[i]; } // Parcurgere pentru AFISARE cout << "Ai introdus: "; for (int i = 0; i < n; i++) { cout << note[i] << " "; } return 0; }
▶ Ruleaza pe OneCompiler

Exercitii practice

Exercitiul 1 (Nivel minim) - Analiza parcurgerii

Raspunde la urmatoarele intrebari despre parcurgerea tablourilor:

  1. Avem tabloul int temp[7] = {22, 25, 19, 30, 28, 21, 18}; si n = 7. Urmareste pas cu pas bucla for (int i = 0; i < n; i++) suma += temp[i]; si calculeaza valoarea finala a variabilei suma (care porneste de la 0).
  2. Ce se intampla daca scriem din greseala for (int i = 1; i < n; i++) in loc de for (int i = 0; i < n; i++)? Ce element pierdem si de ce?
  3. Scrie pe hartie tabelul de executie (iteratia, i, conditia, valoarea) pentru parcurgerea inversa a tabloului int v[3] = {5, 10, 15};

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

Exercitiul 2 (Nivel standard) - Temperaturile saptamanii

Cerinta: Scrie un program C++ care declara un tablou cu temperaturile din fiecare zi a saptamanii (7 valori), apoi:

  1. Afiseaza fiecare temperatura cu numele zilei (Luni, Marti, ... Duminica)
  2. Calculeaza si afiseaza temperatura medie
  3. Afiseaza cate zile au avut temperatura peste 25 de grade
  4. Afiseaza temperaturile in ordine inversa (de Duminica pana la Luni)

Exemplu output:

Luni: 22 grade
Marti: 25 grade
...
Duminica: 19 grade
Temperatura medie: 23.1 grade
Zile peste 25: 3
Invers: 19 24 28 30 25 22 20

Indicii:

  • Foloseste un tablou pentru temperaturi: int temp[7] = {...};
  • Poti folosi un al doilea tablou de string-uri: string zile[7] = {"Luni", "Marti", ...};
  • Pentru medie: calculeaza suma cu o parcurgere, apoi imparte la 7 cu cast la float
  • Pentru numarare: variabila count si if (temp[i] > 25) count++;
  • Pentru ordine inversa: for (int i = 6; i >= 0; i--)

Exercitiul 3 (Nivel performanta) - Prelucrarea notelor

Cerinta: Scrie un program C++ care citeste n note de la tastatura (maxim 50), le stocheaza intr-un tablou, apoi:

  1. Afiseaza toate notele pe o singura linie, separate prin spatiu
  2. Calculeaza si afiseaza media
  3. Numara cate note sunt sub 5 (restante)
  4. Gaseste si afiseaza nota maxima
  5. Afiseaza notele in ordine inversa

Indicii:

  • Declara tabloul cu dimensiune mare: int note[50];
  • Citeste n, apoi citeste notele cu o bucla for
  • Foloseste parcurgeri separate pentru fiecare cerinta, sau combina-le intr-o singura parcurgere
  • Pentru maxim: initializeaza cu note[0], apoi compara cu fiecare element

Cuvinte cheie de folosit: parcurgere, for, index, tablou, n, suma, medie, maxim, numarare, ordine inversa

Ce ai invatat astazi

  • Ai invatat ce inseamna "a parcurge" un tablou
  • Acum stii formula magica: for + tablou
  • Ai descoperit program complet: parcurgere + suma
  • Ai explorat variabila n = numarul de elemente
  • Ai inteles parcurgere de la dreapta la stanga
  • Ai invatat ce poti face in interiorul buclei
  • Acum stii parcurgere pentru citire (cin)

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →