Invatare Atomica

Bucla FOR

Progres lectie:
0%
🎯

Obiectivul lectiei

Vei invata sa repeti automat un grup de instructiuni de un numar cunoscut de ori, folosind bucla for cu range() in Python (si for clasic in C++ la intensiv), fara sa scrii aceeasi linie de zeci de ori.

Dupa aceasta lectie vei putea:

  • Sa explici cand se foloseste bucla for (repetitie cu numar cunoscut de pasi)
  • Sa scrii bucle cu range(stop), range(start, stop) si range(start, stop, pas)
  • Sa acumulezi un rezultat (suma, produs) folosind o variabila acumulator
  • Sa parcurgi direct elementele unei liste cu for element in lista
  • Sa folosesti bucle imbricate si sa traduci o bucla for din Python in C++ (intensiv)

Incearca singur!

Provocare:

Trebuie sa afisezi de exact 100 de ori mesajul "Invat sa programez!". Ai scrie 100 de linii cu print(...)? Scrie in cateva cuvinte o idee mai buna: cum ai cere calculatorului sa repete aceeasi instructiune de 100 de ori?

💡 Ai nevoie de un indiciu?

Gandeste-te la un contor care numara de la 1 la 100 si, la fiecare pas, executa instructiunea de afisare. Cand contorul ajunge la 100, repetarea se opreste singura.

Exact asta face o bucla for: repeta un bloc de cod de un numar cunoscut de ori.

1

1. Ce este bucla FOR si cand o folosim

O bucla for (structura repetitiva) executa un bloc de instructiuni de un numar cunoscut de ori. In Python, numerele peste care se repeta sunt produse de functia range().
Analogie din viata reala:

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
Atentie:

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

2. range() cu inceput, sfarsit si pas

Functia range() are trei forme:
  • range(stop) — de la 0 pana la stop-1
  • range(start, stop) — de la start pana la stop-1
  • range(start, stop, pas) — din pas in pas; pasul poate fi si negativ
In toate formele, valoarea stop nu este inclusa.
# 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

3. Acumulator: suma numerelor de la 1 la 100

Un acumulator este o variabila in care strangem un rezultat pas cu pas. Pentru o suma porneste de la 0; pentru un produs porneste de la 1. La fiecare pas al buclei adaugam (sau inmultim) valoarea curenta.
# 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
De ce range(1, n + 1)?

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

4. Parcurgerea directa a unei liste

In Python, 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
Doua stiluri, ambele corecte:

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

5. Bucle imbricate (una in alta)

O bucla poate contine alta bucla. Pentru fiecare pas al buclei exterioare, bucla interioara se executa complet. Daca exterioara face m pasi si interioara n pasi, instructiunea din mijloc ruleaza de m × n ori.
# 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	
Despre complexitate (notatia O):

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

6. Doar intensiv Bucla for clasica in C++

Sectiune exclusiv pentru intensiv informatica

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.

In C++, bucla 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 vs C++ — aceeasi idee:

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.

Exercitii practice

Exercitiul 1 (Nivel minim) - Numaratoare

Scrie o bucla for in Python care afiseaza numerele de la 1 la 10, fiecare pe cate o linie. Indiciu: foloseste range(1, 11).

Exercitiul 2 (Nivel standard) - Suma numerelor pare

Scrie un program care calculeaza si afiseaza suma numerelor pare de la 2 la 20 (adica 2 + 4 + 6 + ... + 20). Foloseste un acumulator si range(2, 21, 2). (Rezultatul corect este 110.)

Exercitiul 3 (Nivel performanta) - Dreptunghi de stelute

Folosind doua bucle for imbricate, afiseaza un dreptunghi de 4 linii si 6 coloane format din caracterul * (deci 4 linii, fiecare cu 6 stelute). Bonus intensiv: rescrie acelasi program in C++ folosind for clasic.

Ce ai invatat astazi

  • Bucla for repeta un bloc de un numar cunoscut de ori
  • range(stop), range(start, stop) si range(start, stop, pas) — stop NU este inclus
  • Acumulatorul (suma=0, produs=1) strange rezultatul pas cu pas
  • for element in lista parcurge direct valorile unei colectii
  • Buclele imbricate fac m × n pasi; o singura bucla = O(n), doua imbricate = O(n²)
  • Intensiv: in C++, for (init; conditie; pas) face acelasi lucru explicit

Urmatoarea lectie

Continua cu bucla WHILE, care repeta cat timp o conditie este adevarata — utila cand NU stim dinainte numarul de pasi.

Continua →