Pagina Principală
Ora 8

Bucla PENTRU (for)

Structura repetitivă cu număr cunoscut de pași

40min teorie + 15min probleme PbInfo
Competența 3.2
Sigla liceului
TEORIE - 40 minute

Ce vei învăța astăzi?

După această lecție, vei stăpâni complet bucla PENTRU (for) și vei putea rezolva probleme simple cu aceasta.

Sintaxa exactă a buclei PENTRU
Parametrii buclei (start, stop, pas)
Probleme cu număr cunoscut de pași
Rezolvarea problemelor simple

Sintaxa Buclei PENTRU

Definiție: Bucla PENTRU (for) execută un bloc de instrucțiuni pentru un număr specific de ori, controlat de un contor care se modifică automat după fiecare iterație.

Analogie: Număratul până la 10

Gândește-te la bucla PENTRU ca la număratul până la 10:

START

Începe de la 1

Valoarea inițială
STOP

Până la 10

Valoarea finală
PAS

Crește cu 1

Incrementare

Structura și Fluxul Buclei PENTRU

┌ pentru contor ← start, stop, pas execută │ instrucțiune1 │ instrucțiune2 │ ... │ instrucțiuneN └■ ┌ pentru i ← 1, 5, 1 execută │ scrie i └■ ┌ pentru i ← 10, 1, -1 execută │ scrie i └■ ┌ pentru i ← 2, 10, 2 execută │ scrie i └■

Reguli importante:

  • Contorul ia automat valoarea următoare după fiecare iterație
  • Pasul poate fi pozitiv (crescător) sau negativ (descrescător)
  • Dacă pasul este omis, se consideră implicit 1
  • Bucla se execută inclusiv pentru valoarea stop
ÎNCEPUT BUC LĂ
Inițializează contor ← start
Contor ≤ stop?
(pentru pas pozitiv)
DA
Execută corpul buclei
Contor ← contor + pas
NU
Ieși din buclă
Continuă programul

Bucla se repetă automat - contorul se incrementează singur după fiecare iterație până când depășește valoarea stop.

Exemple diverse cu PENTRU:
Exemplu 1: Numărătoare simplă
┌ pentru i ← 1, 5 execută │ scrie i └■
Exemplu 2: Numărătoare inversă
┌ pentru i ← 5, 1, -1 execută │ scrie i └■
Exemplu 3: Numere pare
┌ pentru i ← 2, 10, 2 execută │ scrie i └■
Exemplu 4: Suma numerelor
citește n s ← 0 ┌ pentru i ← 1, n execută │ s ← s + i └■ scrie "Suma este: ", s
Caracteristică PENTRU (For) CÂT TIMP (While)
Utilizare Număr cunoscut de iterații Număr necunoscut de iterații
Control Automat (contor) Manual (condiție)
Flexibilitate Limitata - doar contoare Mare - orice condiție
Sintaxă Simplă și concisă Mai complexă
Exemple Parcurgere array, calcule Validări, procesări

Regulă practică: Folosește PENTRU când știi exact de câte ori trebuie să se repete bucla, și CÂT TIMP când nu știi numărul de iterații.

Parametrii Buclei PENTRU

START

Valoarea inițială a contorului

i ← 1

Prima valoare pe care o ia contorul

STOP

Valoarea finală a contorului

i ≤ 10

Ultima valoare inclusivă

PAS

Cu cât crește contorul

pas = 2

Poate fi pozitiv sau negativ

Exercițiu de completare - Suma numerelor pare:
citește n
s ← ______
______ i ← ______, n, ______ execută
│ s ← s ______ i
└■
scrie "Suma numerelor pare: ", ______
Bancă de cuvinte:
0 pentru 2 + s

Când să Folosești Bucla PENTRU

Situații Ideale pentru PENTRU

Parcurgere secvențe
Parcurgerea unui interval cunoscut de valori
➡️ ┌ pentru i ← 1, 10 execută
│ scrie i
Calcule matematice
Calcule care necesită un număr fix de iterații
➡️ ┌ pentru i ← 1, n execută
│ factorial ← factorial * i
Prelucrare date
Prelucrarea unui număr cunoscut de elemente
➡️ ┌ pentru i ← 1, numar_elemente execută
│ procesează(element[i])
Generare secvențe
Generarea de secvențe cu pas constant
➡️ ┌ pentru i ← 0, 100, 5 execută
│ scrie i
Test de înțelegere:

Câte iterații va executa următoarea buclă?

┌ pentru i ← 3, 10, 2 execută │ scrie i └■

Exemplu Complex: Generare Triunghi Numeric

citește n ┌ pentru i ← 1, n execută │ ┌ pentru j ← 1, i execută │ │ scrie j, " " │ └■ │ scrie "\n" └■
Ce face acest algoritm?
➡️ Citește un număr n care reprezintă numărul de linii
➡️ Folosește două bucle PENTRU imbricate
➡️ Bucla exterioară controlează liniile
➡️ Bucla interioară controlează numerele pe fiecare linie
➡️ Generează un triunghi numeric
Variabile utilizate:
n - numărul de linii ale triunghiului
i - contorul buclei exterioare (linii)
j - contorul buclei interioare (coloane)
De ce PENTRU este ideal aici?

Știm exact de câte ori trebuie să se repete fiecare buclă. Bucla exterioară se execută de n ori, iar bucla interioară se execută de i ori pentru fiecare linie.

Execuție pas cu pas pentru n=3:
Linia 1 (i=1):
j ← 1, 1 Afișează: 1
Linia completă: 1
Linia 2 (i=2):
j ← 1, 2 Afișează: 1 2
Linia completă: 1 2
Linia 3 (i=3):
j ← 1, 3 Afișează: 1 2 3
Linia completă: 1 2 3

Rezultat final:

1 1 2 1 2 3

Capcane și Best Practices

Capcane comune cu PENTRU:

❌ Modificarea contorului - nu modifica manual contorul în corpul buclei
┌ pentru i ← 1, 5 execută │ scrie i │ i ← i + 1 └■
❌ Bucle infinite - pasul 0 sau condiții imposibile
┌ pentru i ← 1, 5, 0 execută │ scrie i └■
❌ Interval incorect - start > stop cu pas pozitiv
┌ pentru i ← 10, 5 execută │ scrie i └■

Best Practices pentru PENTRU:

✅ Nume descriptive - folosește nume semnificative pentru contoare
✅ Nu modifica contorul - lasă bucla să-și controleze singură contorul
✅ Verifică intervalul - asigură-te că start ≤ stop pentru pas pozitiv
✅ Folosește pasul corect - alege pasul potrivit pentru secvența dorită
✅ Documentează scopul - explică în comentarii ce face bucla
PROBLEME PBINFO - 15 minute

PbInfo #2 - Suma n numere

Enunț:

Cerință: Se citește un număr natural n, apoi n numere întregi. Să se calculeze suma acestor n numere.

Date de intrare:

Programul citește de la tastatură numărul n, apoi n numere întregi, separate prin spații.

Date de ieșire:

Programul va afișa pe ecran suma celor n numere.

Exemplu:

Intrare:

5
10 20 30 40 50

Ieșire:

150

Explicație: 10+20+30+40+50 = 150

Cum gândim soluția cu FOR:
  1. Citim numărul n (câte numere vom citi)
  2. Pregătim o variabilă suma ← 0
  3. Folosim for(i = 1; i <= n; i++) pentru a citi cele n numere
  4. La fiecare iterație: citește un număr x și adaugă-l la sumă: suma = suma + x
  5. Afișăm suma
Execuție cu FOR pentru n=3 și numerele 10, 20, 30:
i=1: citește 10 → suma = 0 + 10 = 10
i=2: citește 20 → suma = 10 + 20 = 30
i=3: citește 30 → suma = 30 + 30 = 60
REZULTAT: 10+20+30 = 60
De ce această problemă este bună pentru FOR?

Este perfectă pentru exersarea buclei FOR pentru că:

  • Știm exact numărul de iterații (n)
  • Contorul i crește de la 1 la n cu pasul 1
  • Operația în buclă este simplă (citire și adunare)
  • Este o problemă practică și utilă
Scrie soluția în C++ cu FOR:
Soluție corectă cu bucla FOR:
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    int suma = 0;
    
    for(int i = 1; i <= n; i++) {
        int x;
        cin >> x;
        suma = suma + x;  // sau suma += x;
    }
    
    cout << suma;
    
    return 0;
}

Ce învățăm din această problemă:

  • FOR perfect pentru citire repetată: Când trebuie să citești mai multe date, FOR este ideal
  • Contor clar: i merge de la 1 la n, crește automat după fiecare iterație
  • Variabilă auxiliară: Folosim x pentru a citi fiecare număr și apoi îl adunăm la sumă
  • Acumulare: suma = suma + x este modelul clasic de acumulare în buclă

PbInfo #63 - Suma Gauss

Problemă clasică perfectă pentru FOR

Enunț:

Cerință: Se dă un număr natural n. Calculați suma S = 1 + 2 + 3 + ... + n.

Date de intrare:

Programul citește de la tastatură numărul n.

Date de ieșire:

Programul va afișa pe ecran suma S.

Exemplu:

Intrare:

100

Ieșire:

5050

Explicație: 1+2+3+...+100 = 5050 (formula lui Gauss: n*(n+1)/2)

Cum gândim soluția cu FOR:
  1. Citim numărul n
  2. Pregătim o variabilă S ← 0
  3. Folosim for(i = 1; i <= n; i++)
  4. La fiecare pas: S = S + i
  5. Afișăm S
Execuție cu FOR pentru n=5:
i=1: S = 0 + 1 = 1
i=2: S = 1 + 2 = 3
i=3: S = 3 + 3 = 6
i=4: S = 6 + 4 = 10
i=5: S = 10 + 5 = 15
REZULTAT: 1+2+3+4+5 = 15
De ce această problemă este bună?

Este perfectă pentru exersarea buclei FOR pentru că:

  • Știm exact numărul de iterații (n)
  • Contorul i crește de la 1 la n cu pasul 1
  • Operația în buclă este simplă (adunare)
  • Putem verifica ușor rezultatul cu formula Gauss
Scrie soluția în C++ cu FOR:
Soluție corectă cu bucla FOR:
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    int S = 0;
    
    for(int i = 1; i <= n; i++) {
        S = S + i;  // sau S += i;
    }
    
    cout << S;
    
    return 0;
}
Varianta optimizată cu formula Gauss:
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    // Formula lui Gauss
    int S = n * (n + 1) / 2;
    
    cout << S;
    
    return 0;
}

Ce învățăm din această problemă:

  • FOR perfect pentru sume: Când aduni elemente într-o sumă, FOR este ideal
  • Contor clar: i merge de la 1 la n, crește automat după fiecare iterație
  • Verificare ușoară: Poți verifica cu formula Gauss că bucla ta funcționează corect
  • Performanță: Formula Gauss este O(1) vs FOR care este O(n) - bună ocazie să discuți eficiența
EXERCIȚII PRACTICE - 10 minute

Exercițiul Practic: Probleme cu PENTRU

Sarcini de lucru

Completează următoarele sarcini pentru a-ți consolida cunoștințele despre bucla PENTRU

Sarcina 1: Analiză problemă PbInfo #2

Analizează problema "Suma n numere":

Pentru n=4 și numerele 5, 10, 15, 20, care va fi rezultatul corect?

Soluție pentru Sarcina 1:

Analiza pentru n=4, numere: 5, 10, 15, 20:

  • Algoritmul cu FOR:
  • Citim n=4
  • suma = 0
  • FOR i=1 până la 4:
  • i=1: citește 5 → suma = 0 + 5 = 5
  • i=2: citește 10 → suma = 5 + 10 = 15
  • i=3: citește 15 → suma = 15 + 15 = 30
  • i=4: citește 20 → suma = 30 + 20 = 50
  • Rezultat corect: 50

Cum funcționează algoritmul cu FOR:

citește n s ← 0 ┌ pentru i ← 1, n execută │ citește x │ s ← s + x └■ scrie s # 5+10+15+20 = 50
Sarcina 2: Scriere pseudocod pentru Suma Gauss

Cerință: Scrie pseudocodul pentru problema #63 (Suma Gauss) folosind DOAR bucla FOR, fără formula Gauss.

Soluție pentru Sarcina 2:
ALGORITMUL SumaGauss
VARIABILE
    n, i, S: întreg
ÎNCEPUT
    CITESTE n
    S ← 0
    
    PENTRU i ← 1, n EXECUTĂ
        S ← S + i
    SFÂRȘIT PENTRU
    
    SCRIE S
SFÂRȘIT

Verificare pentru n=5:

i=1: S = 0 + 1 = 1
i=2: S = 1 + 2 = 3
i=3: S = 3 + 3 = 6
i=4: S = 6 + 4 = 10
i=5: S = 10 + 5 = 15 ✓

Descarcă exercițiile