Invatare Atomica ⭐ Extra / Aprofundare

Vreau sa lucrez cu liste de date!

⚠️ Continut extracurricular — sintaxa C++ pentru tablouri depaseste programa de gimnaziu OMEN 3393/2017. Recomandat pentru aprofundare si pregatire liceu.

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!

C++ nu verifica limitele automat, asa ca note[5] va citi o zona de memorie de dupa tablou. Vei vedea un numar aleatoriu (ce s-a nimerit acolo). In programe mai mari, asta poate provoca rezultate gresite sau chiar oprirea programului. Aceasta clasa de erori se numeste undefined behavior — retine ca indexul valid merge de la 0 la N-1.

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: Sirul de sertare

Imagineaza-ti un dulap cu 5 sertare asezate unul langa altul. Dulapul are un singur nume (de ex. "Dulapul cu Note"), iar sertarele sunt numerotate de la stanga la dreapta: sertarul 0, sertarul 1, sertarul 2, sertarul 3, sertarul 4. Ca sa ajungi la un sertar, spui: "Dulapul cu Note, sertarul 3".

La fel in C++: tabloul are un singur nume (de ex. note), iar fiecare element are un index (de ex. note[3]). Sertarele sunt aliniate orizontal, la fel ca elementele tabloului in memorie — primul sertar este cel mai din stanga (index 0).

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) - Cod cu doua tablouri si raport

Cerinta: Scrie un program C++ care primeste notele a 5 elevi in doua materii (matematica si romana) stocate in doua tablouri separate. Programul trebuie sa:

  1. Afiseze tabelul: Elev 1: Mate=9, Romana=8 (etc.) pentru fiecare elev
  2. Calculeze si afiseze media fiecarei materii
  3. Afiseze numele materiei cu media mai mare (sau "Egalitate!" daca sunt egale)

Exemplu output:

Elev 1: Mate=9, Romana=8
Elev 2: Mate=7, Romana=10
Elev 3: Mate=8, Romana=9
Elev 4: Mate=10, Romana=7
Elev 5: Mate=6, Romana=8
Media Matematica: 8.00
Media Romana: 8.40
Materia cu media mai mare: Romana

Indicii:

  • Declara doua tablouri: int mate[5] = {...}; si int romana[5] = {...};
  • Parcurge cu o singura bucla for si acceseaza mate[i] si romana[i] in acelasi pas
  • Calculeaza sumele separat, apoi imparte la 5 folosind float pentru medie
  • Compara cele doua medii cu if/else si afiseaza mesajul corespunzator

Concepte aplicate: doua tablouri paralele, acces simultan cu acelasi index, comparatie de medii

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 →