Invatare Atomica

Vreau sa lucrez cu liste de date!

Progres lectie:
0%
🎯

Obiectivul lectiei

Imagineaza-ti ca esti profesorul clasei si trebuie sa stochezi notele a 30 de elevi. Cum faci?

Dupa aceasta lectie vei putea:

  • Sa explici ce este un tablou si de ce ai nevoie de el
  • Sa explici sintaxa declararii
  • Sa scrii citire si scriere prin index
  • Sa aplici accesare in afara limitelor = pericol
  • Sa aplici afiseaza notele si calculeaza media

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}; cout << "Prima nota: " << note[0] << endl; cout << "A doua nota: " << note[1] << endl; cout << "A treia nota: " << note[2] << endl; return 0; }
▶ Deschide OneCompiler
2
Programul afiseaza doar primele 3 note. Modifica-l sa afiseze si nota 4 si nota 5. Ce numere pui intre parantezele patrate?
3
Acum incearca ceva riscant: adauga linia cout << note[5]; si ruleaza. Ce observi? De ce acel numar ciudat?
4
Schimba valoarea notei a treia: adauga linia note[2] = 4; inainte de cout-uri. Ruleaza din nou. Ce s-a schimbat?
🌟 BONUS: Incearca sa adaugi o linie care calculeaza note[0] + note[1] si afiseaza rezultatul.
Blocat la pasul 2? Click aici pentru un indiciu

Uita-te la pattern: prima nota e note[0], a doua e note[1], a treia e note[2].

Observi? Numerele cresc: 0, 1, 2... Deci a patra nota ar fi note[3], iar a cincea?

Daca tabloul are 5 elemente, numerele merg de la 0 la 4 (nu de la 1 la 5!).

Blocat la pasul 3? Click aici

Tabloul are 5 elemente, numerotate 0, 1, 2, 3, 4. Deci note[5] nu exista!

Calculatorul iti arata o valoare "gunoi" - adica ce se intampla sa fie in memoria de dupa tablou. Asta e un bug periculos in C++!

Blocat la pasul 4? Click aici

Scrie note[2] = 4; pe linia de dupa declaratia tabloului (dupa linia cu {9, 7, 10, 8, 6}).

Observa ca "A treia nota" se schimba din 10 in 4. Ai modificat o valoare din tablou!

1

Ce este un tablou si de ce ai nevoie de el?

Ce este un tablou si de ce ai nevoie de el?

Un tablou (in engleza: array) este o colectie de valori de acelasi tip, stocate una langa alta in memorie, pe care le accesezi printr-un singur nume si un numar de pozitie (numit index).

Fara tablouri, daca ai 100 de valori, ai nevoie de 100 de variabile separate. Cu un tablou, ai nevoie de o singura variabila care le contine pe toate.

🏠 Analogie: Blocul de apartamente

Gandeste-te la un bloc cu 5 etaje. Blocul are un singur nume (de ex. "Bloc Florilor"), dar fiecare apartament are un numar (etaj 0, etaj 1, ... etaj 4). Ca sa ajungi la cineva, spui: "Blocul Florilor, etajul 3".

La fel in C++: tabloul are un singur nume (de ex. note), iar fiecare element are un index (de ex. note[3]).

2

Sintaxa declararii

Sintaxa declararii

Ca sa creezi un tablou, ai nevoie de 3 informatii: ce tip de date va contine, cum se numeste, si cate elemente incap in el.

Formula generala
tip_date nume[dimensiune];
Exemple practice
// Tablou gol (valorile sunt nedefinite!) int note[30]; // Tablou cu valori initiale int note[5] = {9, 7, 10, 8, 6}; // Tablou de numere cu zecimale (temperaturi) float temp[7] = {22.5, 23.1, 19.8, 21.0, 25.3, 20.7, 18.9}; // Tablou de caractere (vocalele) char vocale[5] = {'a', 'e', 'i', 'o', 'u'}; // Dimensiunea se deduce automat din valorile date int zile[] = {31, 28, 31, 30}; // are 4 elemente
3

Citire si scriere prin index

Citire si scriere prin index

Folosim nume[index] atat pentru a citi o valoare, cat si pentru a o modifica. Indexul e un numar intreg, incepand de la 0.

Citire (obtinem valoarea)
int x[5] = {2, 4, 6, 8, 10}; cout << x[0]; // Afiseaza: 2 (primul element) cout << x[2]; // Afiseaza: 6 (al treilea element) cout << x[4]; // Afiseaza: 10 (ultimul element) int suma = x[0] + x[1]; // suma = 2 + 4 = 6
Modificare (schimbam valoarea)
// Inainte: x = {2, 4, 6, 8, 10} x[2] = 99; // Dupa: x = {2, 4, 99, 8, 10} cout << x[2]; // Acum afiseaza: 99 (nu mai e 6!)
4

Accesare in afara limitelor = pericol!

Accesare in afara limitelor = pericol!

In C++, daca folosesti un index in afara intervalului valid (0 pana la N-1), programul nu te opreste. Nu vei primi nicio eroare la compilare. Dar la rulare, se intampla lucruri rele.

De ce? Pentru ca C++ citeste/scrie in memoria calculatorului exact unde ii spui tu. Daca ii spui un index gresit, el va accesa o zona de memorie care nu apartine tabloului tau.

5

Afiseaza notele si calculeaza media

Afiseaza notele si calculeaza media

Acum punem totul impreuna: declarare, acces cu for, si calcul. Urmareste fiecare linie!

Program complet - ruleaza-l!
#include <iostream> using namespace std; int main() { // Pasul 1: Declaram tabloul cu 5 note int note[5] = {9, 7, 10, 8, 6}; int suma = 0; // Pasul 2: Parcurgem tabloul cu for for (int i = 0; i < 5; i++) { cout << "Nota " << i + 1 << ": " << note[i] << endl; suma = suma + note[i]; } // Pasul 3: Calculam media float media = (float)suma / 5; cout << "Suma: " << suma << endl; cout << "Media: " << media << endl; return 0; }
▶ Ruleaza pe OneCompiler

Exercitii practice

Exercitiul 1 (Nivel minim) - Analiza tablourilor

Raspunde la urmatoarele intrebari despre tablouri:

  1. Avem tabloul int note[5] = {9, 7, 10, 8, 6}; - Care este valoarea note[2]? Dar note[4]? Care este indexul valorii 7?
  2. De ce este mai eficient sa stocam 30 de note intr-un tablou int note[30] decat in 30 de variabile separate? Da un exemplu concret de cod care devine mai simplu.
  3. Ce se intampla daca incercam sa accesam note[5] in tabloul de mai sus? De ce nu da compilatorul eroare? De ce este asta periculos?

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

Exercitiul 2 (Nivel standard) - Programeaza cu tablouri

Cerinta: Scrie un program C++ care declara un tablou cu temperaturile din fiecare zi a saptamanii (7 valori), apoi afiseaza fiecare temperatura cu numele zilei si calculeaza temperatura medie.

Exemplu output:

Luni: 22 grade
Marti: 25 grade
...
Duminica: 19 grade
Temperatura medie: 21.7 grade

Indicii:

  • Declara tabloul cu float temp[7] = {...};
  • Poti folosi un al doilea tablou de string-uri pentru zilele saptamanii, sau pur si simplu afisa manual fiecare zi
  • Foloseste o bucla for pentru a calcula suma, apoi imparte la 7

Exercitiul 3 (Nivel performanta) - Explicatie scrisa

Cerinta: Explica in cuvintele tale cum functioneaza un tablou in C++, folosind o analogie din viata reala (alta decat cea din lectie). Exemplu: cutie de creioane colorate, raft de carti, etc.

Indicii:

  • Descrie ce corespunde "numelui tabloului", "elementelor" si "indicilor" in analogia ta
  • Explica de ce numerotarea incepe de la 0
  • Da un exemplu de "accesare in afara limitelor" in analogia ta (ce s-ar intampla daca incerci sa iei obiectul din pozitia care nu exista?)

Cuvinte cheie de folosit: tablou, index, element, declarare, dimensiune, tip de date, limite

Ce ai invatat astazi

  • Ai invatat ce este un tablou si de ce ai nevoie de el
  • Acum stii sintaxa declararii
  • Ai descoperit citire si scriere prin index
  • Ai explorat accesare in afara limitelor = pericol
  • Ai inteles afiseaza notele si calculeaza media

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →