Tablouri unidimensionale (vectori)
Ideile de bază pe scurt și, unde există, exercițiile din subiectele de BAC care le verifică. Lecția completă, animată, cu grile și exerciții corectate, e în aplicația Tomomi.
Pe scurt
Sintaxă: declararea și citirea unui vector
Forma canonică: capacitatea maximă se declară o dată, apoi primele n celule se umplu din intrare:
int a[100];
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}Capcana: indicii pornesc de la 0
Primul element este a[0], ultimul a[n - 1]. Accesarea lui a[n] este în afara vectorului: celulele valide sunt exact 0..n - 1. Când afișezi ultimul element, scrie a[n - 1], nu a[n].
Șablon: parcurgerea cu acumulator
Vizitezi fiecare element o dată și îl prelucrezi în același fel:
int s = 0;
for (int i = 0; i < n; i++) {
s = s + a[i];
}
// variante: cnt (numărare), p (produs)Capcana: i este index, a[i] este valoare
În corpul buclei, i este poziția, a[i] este conținutul celulei. Testul i % 2 == 0 verifică POZIȚII pare; testul a[i] % 2 == 0 verifică VALORI pare. Confuzia dintre ele este cea mai frecventă greșeală la vectori.
Idee: acumulatorul
Un acumulator este o variabilă care adună contribuția fiecărui element pe parcursul buclei: pornește de la o valoare neutră înainte de buclă (0 pentru sumă și numărare, 1 pentru produs) și se actualizează la fiecare trecere. La final, ține rezultatul pentru întregul vector.
Șablon: minimul și poziția lui
Candidatul pornește din prima celulă și este provocat de fiecare element următor:
int mn = a[0];
int poz = 0;
for (int i = 1; i < n; i++) {
if (a[i] < mn) {
mn = a[i];
poz = i;
}
}
// maxim: aceeași schemă, cu >Capcana: minimul nu pornește de la 0
Inițializarea mn = 0 eșuează pe vectori de valori pozitive: 0 câștigă mereu fără să fie în vector. Candidatul corect de start este chiar primul element, a[0], cu bucla pornind de la indicele 1.