1. Ce este bucla FOR si cand o folosim
range().
Cand faci 10 genuflexiuni la sport, numeri "1, 2, 3, ... 10" si la fiecare numar repeti aceeasi miscare. Contorul (numarul) creste pas cu pas, iar cand ajunge la 10 te opresti. Bucla for face exact asta cu instructiunile dintr-un program.
for i in range(5): print("Buna! Repetare numarul", i)
# Output real:
Buna! Repetare numarul 0
Buna! Repetare numarul 1
Buna! Repetare numarul 2
Buna! Repetare numarul 3
Buna! Repetare numarul 4
range(5) produce numerele 0, 1, 2, 3, 4 — pleaca de la 0 si se opreste inainte de 5. Sunt exact 5 valori, dar ultima NU este 5.
2. range() cu inceput, sfarsit si pas
range() are trei forme:
range(stop)— de la 0 pana la stop-1range(start, stop)— de la start pana la stop-1range(start, stop, pas)— din pas in pas; pasul poate fi si negativ
# range(start, stop): de la 1 la 5 for i in range(1, 6): print(i)
# Output real:
1
2
3
4
5
# range cu pas 2, apoi cu pas negativ (numaratoare inversa) for i in range(0, 11, 2): print(i, end=" ") print() for i in range(10, 0, -1): print(i, end=" ") print()
# Output real:
0 2 4 6 8 10
10 9 8 7 6 5 4 3 2 1
3. Acumulator: suma numerelor de la 1 la 100
# Acumulator de tip suma suma = 0 for i in range(1, 101): suma = suma + i print("Suma de la 1 la 100 este:", suma)
# Output real:
Suma de la 1 la 100 este: 5050
# Acumulator de tip produs: factorialul lui 5 (5! = 1*2*3*4*5) n = 5 f = 1 for i in range(1, n + 1): f = f * i print("Factorial de", n, "este", f)
# Output real:
Factorial de 5 este 120
Vrem ca i sa ia valorile 1, 2, 3, 4, 5. Daca am scrie range(1, n) ne-am opri la 4 (lipseste 5). Cu range(1, n + 1) stop este 6, deci ultima valoare folosita este 5.
4. Parcurgerea directa a unei liste
for poate parcurge direct elementele unei colectii (lista, sir de caractere), fara range(). La fiecare pas, variabila primeste urmatorul element.
fructe = ["mar", "para", "banana"] for fruct in fructe: print("Imi place:", fruct)
# Output real:
Imi place: mar
Imi place: para
Imi place: banana
Cand ai nevoie de pozitie (indice), folosesti for i in range(len(lista)) si accesezi lista[i]. Cand ai nevoie doar de valori, folosesti for element in lista — e mai curat si mai usor de citit.
5. Bucle imbricate (una in alta)
# Mica tabla a inmultirii (1..3) for i in range(1, 4): for j in range(1, 4): print(i * j, end="\t") print()
# Output real (coloanele sunt separate prin TAB):
1 2 3
2 4 6
3 6 9
O singura bucla peste n valori face aproximativ n pasi — complexitate O(n). Doua bucle imbricate peste n valori fac aproximativ n × n pasi — complexitate O(n²). De aceea buclele imbricate devin lente cand n este mare.
6. Doar intensiv Bucla for clasica in C++
C++ se studiaza doar la specializarea matematica-informatica intensiv, ca al doilea limbaj. Daca esti la non-intensiv, poti sari aceasta sectiune — la examen lucrezi cu Python.
for are trei parti, separate prin ;:
- initializare (
int i = 0) — se executa o singura data, la inceput - conditie (
i < 5) — verificata inainte de fiecare pas; cat timp e adevarata, bucla continua - pas (
i++) — se executa dupa fiecare repetare;i++creste i cu 1
#include <iostream> using namespace std; int main() { for (int i = 0; i < 5; i++) { cout << "Repetare numarul " << i << endl; } return 0; }
// Output real (g++ -std=c++17):
Repetare numarul 0
Repetare numarul 1
Repetare numarul 2
Repetare numarul 3
Repetare numarul 4
// Acelasi acumulator ca in Python: suma de la 1 la 100 #include <iostream> using namespace std; int main() { int suma = 0; for (int i = 1; i <= 100; i++) { suma = suma + i; } cout << "Suma de la 1 la 100 este: " << suma << endl; return 0; }
// Output real:
Suma de la 1 la 100 este: 5050
Python: for i in range(0, 5) ↔ C++: for (int i = 0; i < 5; i++). In ambele, i ia valorile 0,1,2,3,4. Python ascunde conditia si pasul in range(); C++ le scrie explicit.