InfoBook.ro ← Harta anului
Modul 04 · Vectori — bază
Modul 04 · Conținut 1.1

O singură structură, zeci de valori

Un vector (în C++) sau o listă (în Python) stochează mai multe valori sub un singur nume. E fundamentul pe care se construiesc toți algoritmii din a doua jumătate a anului — sortări, căutări, frecvențe.

🎯 Obiectiv 1Înțelegi ce e un vector: element, indice, dimensiune, acces direct O(1).
🎯 Obiectiv 2Declari, citești și afișezi un vector în C++ și Python.
🎯 Obiectiv 3Parcurgi vectorul și aplici prelucrări: sumă, numărare, minim, maxim, căutare.
1

Ce e un vector / o listă?

Un rând de cutii numerotate: fiecare cutie păstrează o valoare, iar tu ajungi instant la oricare spunând doar numărul ei.

Analogia perfectă: catalogul clasei. Fiecare elev are un număr de ordine. Dacă profesorul vrea nota elevului #5, nu parcurge tot catalogul — se uită direct la poziția 5. Asta e accesul direct.

📦 Element

O valoare stocată în vector — de exemplu, nota unui elev.

🔢 Indice (index)

„Numărul cutiei" — poziția la care găsești elementul: v[3].

📏 Dimensiune

Câte elemente conține vectorul — la noi, de obicei, n.

🧰 Vector interactiv — apasă pe o cutie ca să-i schimbi valoarea

acces direct: v[]
Acces direct: nu contează câte elemente are vectorul — accesul la v[i] e instantaneu, fără să parcurgi elementele anterioare. Complexitate: O(1).
Atenție la indexare: în Python indicii încep obligatoriu de la 0. În C++ tot de la 0 de regulă — dar la BAC enunțurile folosesc adesea indexarea de la 1. Butonul de sus îți arată ambele convenții pe același vector — învață să „traduci" între ele.
2

Declarare, citire, afișare

Modelul clasic de la BAC: citim întâi n (câte elemente), apoi cele n valori. Privește cutiile umplându-se una câte una.

valori =
DA NU DA NU START citește n i ← 0 i < n ? citește v[i] i ← i + 1 i ← 0 i < n ? scrie v[i] i ← i + 1 STOP două bucle: una umple, una afișează
Variabile
n
i
Ecran
 
Scrie 3–8 valori separate prin spațiu și pornește. Cutiile de sus se umplu în ritmul buclei. 👣
Diferență importantă: în C++ declari vectorul cu o dimensiune maximă (int v[100];) și folosești doar primele n poziții. În Python lista crește dinamic (append) — nu promiți nimic dinainte.
3

Parcurgere și prelucrări: minimul și maximul

Strategia: presupunem că primul element e și minim, și maxim. Parcurgem restul — cine e mai mic ia titlul de minim, cine e mai mare, pe cel de maxim.

valori =
elementul curent v[i] minimul de până acum maximul de până acum
DA NU DA NU DA NU min ← v[0]; max ← v[0] i ← 1 i < n ? v[i] < min ? min←v[i] v[i] > max ? max←v[i] i ← i + 1 scrie min, max STOP o singură parcurgere → ambele răspunsuri complexitate O(n)
Variabile
i
min
max
Ecran
 
iv[i]minmax
Barele arată vectorul. Pornește și urmărește cum min (verde) și max (roșu) își schimbă purtătorul. 👣
Observație de eficiență: parcurgem vectorul o singură dată (de la 1 la n−1) și obținem ambele răspunsuri. Complexitate: O(n). La BAC, „determinați minimul/maximul" e printre cele mai frecvente cerințe.
4

Prelucrările clasice: sumă, numărare, căutare

Trei șabloane care apar în aproape orice problemă cu vectori. Aceeași buclă, prelucrări diferite — ca la cifre!

Σ Suma elementelor

1int S = 0;
2for (int i = 0; i < n; i++)
3 S += v[i];
4cout << S;

Python scurt: print(sum(v))

#️⃣ Numărare (elemente pare)

1int nr = 0;
2for (int i = 0; i < n; i++)
3 if (v[i] % 2 == 0)
4 nr++;
5cout << nr;

Schimbi condiția → numeri orice.

🔍 Căutare secvențială

1bool gasit = false;
2for (int i = 0; i < n; i++)
3 if (v[i] == x)
4 gasit = true;
5cout << (gasit ? "DA" : "NU");

Python scurt: x in v

Recunoști șablonul? E exact „bucla + prelucrarea" de la cifrele numerelor (Modulul 03) — doar că acum prelucrăm v[i] în loc de n % 10. Un singur schelet, o infinitate de probleme.
5

Ștergeri și inserări — vectorul face loc

Vectorul nu are „găuri": când scoți un element, toate cele din dreapta ALUNECĂ o poziție la stânga; când bagi unul, toate se dau la o parte spre dreapta. Privește mutările live:

🗑 Ștergerea poziției p — pas cu pas

valori = p =
DA NU START j ← p j < n−1 ? v[j] ← v[j+1] j ← j + 1 n ← n − 1 STOP toți vecinii din dreapta lui p alunecă o poziție la stânga
Variabile
p
j
n
Ecran
 
Alege vectorul și poziția p, apoi pornește — urmărește alunecarea în cutiile de sus. 👣

➕ Inserarea lui x pe poziția p — pas cu pas

valori = p = x =
DA NU START j ← n j > p ? v[j] ← v[j−1] j ← j − 1 v[p] ← x n ← n + 1 STOP mutarea pornește de la COADĂ — altfel valorile s-ar suprascrie!
Variabile
p
x
j
n
Ecran
 
Alege vectorul, poziția p și valoarea x — cutia goală apare la coadă, apoi totul se dă la o parte. 👣
Trei capcane de BAC: ① la ștergere, dacă uiți n--, ultimul element apare de două ori! ② la inserare, mutarea se face de la COADĂ spre p (invers strici valorile) și îți trebuie loc în vector (dimensiunea maximă din declarare). ③ ambele operații mută toate elementele din dreapta — la un vector mare, asta e multă muncă; ținem minte pentru mai târziu.
6

Vectorul de frecvență — numărătoarea instantanee

„De câte ori apare fiecare cifră?" În loc să parcurgi vectorul de 10 ori, faci O SINGURĂ trecere: fiecare valoare își bifează singură cutia — fr[v[i]]++.

șir =
Apasă „Pas" — fiecare element din șir își incrementează contorul. 👆
Condiția de aur: valorile trebuie să fie NENEGATIVE și MICI (căci valoarea devine chiar INDICELE în f). Cifre 0–9 → f[10]; litere → f[26]; note 1–10 → f[11]. Se mai numește și „vector caracteristic" când reții doar 0/1: a apărut sau nu.
Aplicații fulger, direct din f: câte valori DISTINCTE sunt (numeri pozițiile cu f[c] > 0) · care e cea mai FRECVENTĂ valoare (maximul din f — ca la Modulul 3!) · a apărut x? (f[x] > 0, fără nicio căutare). Iar bonusul de sus e o comoară: parcurgi f[] și afișezi fiecare v de f[v] ori → șirul SORTAT, fără nicio comparație — preludiul stivei, cozii și al sortării cu frecvențe din Modulele 08–09.
7

Ce afișează codul?

Trei întrebări în stil BAC — pentru vectorul v = [3, 8, 5, 1, 6], indexat de la 0.

8

Fișa de sinteză

Fundamentul pentru sortări, căutare binară, frecvențe — tot ce urmează.

Vector = cutii numerotate sub un singur nume; element + indice + dimensiune.
Acces direct O(1): v[i] e instantaneu, indiferent cât de mare e vectorul.
Indexare: Python obligatoriu de la 0; C++ de la 0, dar BAC-ul folosește des de la 1 — traduci atent!
C++: declari dimensiunea maximă (int v[100]) și folosești primele n poziții; Python: lista crește dinamic.
Model de citire: citește n, apoi buclă cu citește v[i] — reflex de BAC.
Min/Max: pornești cu v[0] pentru amândouă, apoi o singură parcurgere O(n).
Șabloane: sumă (S += v[i]), numărare (if condiție → nr++), căutare (gasit = true).
Ștergere: alunecare la stânga de la p + n-- · Inserare: mutare la dreapta DE LA COADĂ + v[p]=x, n++.
Vectorul de frecvență: fr[v[i]]++ — o singură trecere; valoarea e chiar indicele (valori mici, nenegative!).
Aceeași idee ca la cifre: bucla e scheletul, prelucrarea e inima. Schimbi o linie → altă problemă.
Exersează pe pbinfo.ro — patru probleme alese pentru operațiile de bază:
#486 · ușoară

MinMax0

Se citește un vector de n numere întregi. Determinați valoarea minimă și valoarea maximă din vector.

Rezolvă pe pbinfo.ro →
#354 · ușoară

n_maxim

Se citesc n numere naturale. Determinați valoarea maximă dintre cele n numere citite.

Rezolvă pe pbinfo.ro →
#355 · ușoară

n_minim

Se citesc n numere naturale. Determinați valoarea minimă dintre cele n numere citite.

Rezolvă pe pbinfo.ro →
#347 · ușoară

SumMaxMin

Se citesc n numere naturale. Calculați suma dintre valoarea maximă și valoarea minimă din cele n numere citite.

Rezolvă pe pbinfo.ro →
← anteriorModul 03 · Prelucrarea numerelor urmează →Modul 05a · Subprograme