1. Suma elementelor unui vector
suma ← 0
PENTRU i de la 0 la n-1 EXECUTA
suma ← suma + v[i]
SCRIE suma
# Suma elementelor unui vector v = [3, 7, 2, 9, 5, 1, 8] n = len(v) suma = 0 for i in range(n): suma += v[i] print("Vectorul:", v) print("Suma elementelor:", suma)
Vectorul: [3, 7, 2, 9, 5, 1, 8] Suma elementelor: 35
Variabila suma este initiata la 0 inainte de bucla. Daca ar fi initiata cu alta valoare, rezultatul ar fi incorect — greseala frecventa la examen.
2. Minimul si maximul unui vector
# Gasirea minimului si maximului dintr-un vector v = [3, 7, 2, 9, 5, 1, 8] n = len(v) minim = v[0] maxim = v[0] poz_min = 0 poz_max = 0 for i in range(1, n): if v[i] < minim: minim = v[i] poz_min = i if v[i] > maxim: maxim = v[i] poz_max = i print("Vectorul:", v) print("Minim:", minim, "la pozitia", poz_min) print("Maxim:", maxim, "la pozitia", poz_max)
Vectorul: [3, 7, 2, 9, 5, 1, 8] Minim: 1 la pozitia 5 Maxim: 9 la pozitia 3
| i | v[i] | minim | poz_min | maxim | poz_max |
|---|---|---|---|---|---|
| init | — | 3 | 0 | 3 | 0 |
| 1 | 7 | 3 | 0 | 7 | 1 |
| 2 | 2 | 2 | 2 | 7 | 1 |
| 3 | 9 | 2 | 2 | 9 | 3 |
| 4 | 5 | 2 | 2 | 9 | 3 |
3. Cautarea secventiala
# Cautare secventiala intr-un vector v = [3, 7, 2, 9, 5, 1, 8] n = len(v) target = 9 gasit = False poz = -1 for i in range(n): if v[i] == target: gasit = True poz = i break if gasit: print(f"Valoarea {target} gasita la pozitia {poz}") else: print(f"Valoarea {target} nu a fost gasita")
Valoarea 9 gasita la pozitia 3
break?Instructiunea break opreste bucla imediat ce elementul a fost gasit. Fara ea, algoritmul ar continua sa caute inutil si, daca exista duplicate, ar returna pozitia ultimei aparitii, nu a primei.
4. Inserarea unui element
Initial: [3, 7, 2, 9, 5, 1, 8] — n=7
Dupa mutare la dreapta: [3, 7, 2, _, 9, 5, 1, 8] — pozitia 3 e libera
Dupa inserare: [3, 7, 2, 4, 9, 5, 1, 8] — n=8
# Inserarea unui element intr-un vector la o pozitie data v = [3, 7, 2, 9, 5, 1, 8] n = len(v) val_nou = 4 poz_ins = 3 print("Vectorul initial:", v) print(f"Inseram valoarea {val_nou} la pozitia {poz_ins}") v.append(0) # extindem lista cu un element n = n + 1 for i in range(n - 1, poz_ins, -1): v[i] = v[i - 1] v[poz_ins] = val_nou print("Vectorul dupa inserare:", v)
Vectorul initial: [3, 7, 2, 9, 5, 1, 8] Inseram valoarea 4 la pozitia 3 Vectorul dupa inserare: [3, 7, 2, 4, 9, 5, 1, 8]
Atentie la directia buclei: bucla merge descrescator (de la n-1 spre poz_ins+1). Daca am parcurge crescator, am suprascrie elementele inainte de a le muta, pierzand date.
5. Stergerea unui element
Initial: [3, 7, 2, 9, 5, 1, 8] — n=7
Dupa mutare la stanga: [3, 7, 9, 5, 1, 8, 8] — ultimul e duplicat
Dupa eliminare: [3, 7, 9, 5, 1, 8] — n=6
# Stergerea unui element dintr-un vector la o pozitie data v = [3, 7, 2, 9, 5, 1, 8] n = len(v) poz_sterg = 2 print("Vectorul initial:", v) print(f"Stergem elementul de la pozitia {poz_sterg} (valoarea {v[poz_sterg]})") for i in range(poz_sterg, n - 1): v[i] = v[i + 1] v.pop() # eliminam ultimul element (acum duplicat) n = n - 1 print("Vectorul dupa stergere:", v)
Vectorul initial: [3, 7, 2, 9, 5, 1, 8] Stergem elementul de la pozitia 2 (valoarea 2) Vectorul dupa stergere: [3, 7, 9, 5, 1, 8]
Comparatie cu inserarea: la stergere bucla merge crescator (copiem din dreapta in stanga), la inserare mergea descrescator (copiem din stanga in dreapta). Directia conteaza pentru corectitudinea algoritmului.
6. Aceleasi operatii in C++ EXCLUSIV INTENSIV
La profilul intensiv lucram cu tablouri C++ (int v[MAX]). Spre deosebire de Python, dimensiunea tabloului este fixa la compilare si trebuie declarata suficient de mare. Variabila n retine numarul de elemente efectiv folosite. Algoritmii sunt identici ca logica.
Suma elementelor in C++:
#include <iostream> using namespace std; int main() { int v[] = {3, 7, 2, 9, 5, 1, 8}; int n = 7; int suma = 0; for (int i = 0; i < n; i++) { suma += v[i]; } cout << "Suma elementelor: " << suma << endl; return 0; }
Suma elementelor: 35
Min/Max in C++:
#include <iostream> using namespace std; int main() { int v[] = {3, 7, 2, 9, 5, 1, 8}; int n = 7; int minim = v[0], maxim = v[0]; int poz_min = 0, poz_max = 0; for (int i = 1; i < n; i++) { if (v[i] < minim) { minim = v[i]; poz_min = i; } if (v[i] > maxim) { maxim = v[i]; poz_max = i; } } cout << "Minim: " << minim << " la pozitia " << poz_min << endl; cout << "Maxim: " << maxim << " la pozitia " << poz_max << endl; return 0; }
Minim: 1 la pozitia 5 Maxim: 9 la pozitia 3
Inserare in C++ (tablou cu capacitate rezervata):
#include <iostream> using namespace std; int main() { int v[10] = {3, 7, 2, 9, 5, 1, 8}; int n = 7; int val_nou = 4, poz_ins = 3; for (int i = n; i > poz_ins; i--) { v[i] = v[i - 1]; } v[poz_ins] = val_nou; n++; cout << "Vectorul dupa inserare: "; for (int i = 0; i < n; i++) { cout << v[i]; if (i < n - 1) cout << " "; } cout << endl; return 0; }
Vectorul dupa inserare: 3 7 2 4 9 5 1 8
Stergere in C++:
#include <iostream> using namespace std; int main() { int v[] = {3, 7, 2, 9, 5, 1, 8}; int n = 7; int poz_sterg = 2; for (int i = poz_sterg; i < n - 1; i++) { v[i] = v[i + 1]; } n--; cout << "Vectorul dupa stergere: "; for (int i = 0; i < n; i++) { cout << v[i]; if (i < n - 1) cout << " "; } cout << endl; return 0; }
Vectorul dupa stergere: 3 7 9 5 1 8