Ce este un tablou unidimensional?
Gandeste-te la un sir de cutii numerotate 0, 1, 2, ... n-1. Fiecare cutie contine o valoare. Cunosti numarul cutiei → accesezi direct valoarea.
In Python tipul corespunzator este list. Poate contine valori de tipuri diferite,
dar in algoritmice folosim de regula liste omogene (toate numerele, sau toate string-urile).
In C++ echivalentul este tabloul static: int v[n] — fix n elemente, acelasi tip.
Declarare si indexare in Python
O lista se creeaza cu paranteze drepte. Indexarea incepe de la 0.
Index negativ: -1 = ultimul element, -2 = penultimul etc.
# Declarare si initializare numere = [10, 20, 30, 40, 50] print("Lista:", numere) print("Lungime:", len(numere)) print("Primul element:", numere[0]) print("Ultimul element:", numere[-1]) print("Al treilea element (index 2):", numere[2])
Lista: [10, 20, 30, 40, 50] Lungime: 5 Primul element: 10 Ultimul element: 50 Al treilea element (index 2): 30
0 la len(lista)-1 (sau de la -len(lista) la -1 pentru indexuri negative).
Parcurgerea unei liste
Doua stiluri principale de parcurgere:
for x in lista— parcurge valorile directfor i, x in enumerate(lista)— parcurge perechi (index, valoare)
numere = [5, 12, 7, 3, 18] print("--- Parcurgere cu for ---") for x in numere: print(x) print("--- Parcurgere cu index (enumerate) ---") for i, x in enumerate(numere): print(f"numere[{i}] = {x}")
--- Parcurgere cu for --- 5 12 7 3 18 --- Parcurgere cu index (enumerate) --- numere[0] = 5 numere[1] = 12 numere[2] = 7 numere[3] = 3 numere[4] = 18
Algoritmi de baza: suma si maximul — O(n)
Suma si maximul unui vector se calculeaza intr-un singur pass: complexitate O(n).
Initializam acumulatorul (suma=0, maxim=primul element), parcurgem si actualizam.
numere = [5, 12, 7, 3, 18] # Suma — O(n) suma = 0 for x in numere: suma += x print("Suma elementelor:", suma) # Maxim — O(n) maxim = numere[0] for x in numere: if x > maxim: maxim = x print("Maximul:", maxim)
Suma elementelor: 45 Maximul: 18
sum(lista) si max(lista) ca functii built-in — la fel O(n) intern. In algoritmica, scrierea explicita a buclei demonstreaza intelegerea algoritmului.
Lista goala, append() si list comprehension
Uneori construim lista dinamic, element cu element, folosind append().
List comprehension ofera o sintaxa compacta pentru liste calculate dintr-o formula.
# Construire dinamica cu append patrate = [] for i in range(1, 6): patrate.append(i * i) print("Patrate:", patrate) # Echivalent cu list comprehension patrate2 = [i * i for i in range(1, 6)] print("Patrate (comprehension):", patrate2)
Patrate: [1, 4, 9, 16, 25] Patrate (comprehension): [1, 4, 9, 16, 25]
Tablouri in C++ EXCLUSIV INTENSIV
In C++ un tablou static se declara cu dimensiunea fixa la compilare. Indexarea este identica cu Python: incepe de la 0.
Diferenta critica: C++ nu verifica automat marginile — accesul in afara tablou = comportament nedefinit.
#include <iostream> using namespace std; int main() { int v[5] = {10, 20, 30, 40, 50}; int n = 5; cout << "Tablou: "; for (int i = 0; i < n; i++) cout << v[i] << " "; cout << endl; cout << "v[0] = " << v[0] << endl; cout << "v[4] = " << v[4] << endl; // Suma — O(n) int suma = 0; for (int i = 0; i < n; i++) suma += v[i]; cout << "Suma: " << suma << endl; // Maxim — O(n) int maxim = v[0]; for (int i = 1; i < n; i++) if (v[i] > maxim) maxim = v[i]; cout << "Maxim: " << maxim << endl; return 0; }
Tablou: 10 20 30 40 50 v[0] = 10 v[4] = 50 Suma: 150 Maxim: 50
v[5] pe un tablou de dimensiune 5 este undefined behavior in C++.
Spre deosebire de Python care arunca IndexError, C++ nu garanteaza nicio eroare vizibila — bug-ul poate ramane ascuns.