Ce vei învăța astăzi?
După această lecție, vei înțelege conceptul de structură repetitivă, vei ști să recunoști toate tipurile de bucle și vei putea identifica elementele comune ale oricărei structuri repetitive.
Ce este o Structură Repetitivă?
Definiție: O structură repetitivă (buclă sau ciclu) este o structură de control care permite executarea repetată a unui set de instrucțiuni, fie pentru un număr cunoscut de ori, fie atâta timp cât o anumită condiție este îndeplinită.
Analogie: Exercițiile fizice zilnice
Gândește-te la o buclă ca la exercițiile fizice zilnice:
Mai sunt repetări de făcut?
Verificare la fiecare exercițiuExecută o repetare
Instrucțiunea care se repetăNumără repetările făcute
Urmărește progresulDe ce avem nevoie de bucle?
Problema: Afișează numerele de la 1 la 10
Cerință: Scrieți un algoritm care afișează pe ecran numerele de la 1 la 10, fiecare pe linie separată.
Fără buclă ar fi: 10 linii de cod scrise manual!
Probleme majore:
- 10 linii de cod identice!
- Dacă vrem 1-100, ar fi 100 de linii
- Ușor de greșit (uiti vreun număr)
- Cod greu de modificat
Avantaje enorme:
- Doar 6 linii de cod!
- Funcționează pentru orice n (1-10, 1-100, 1-1000)
- Ușor de modificat (schimbi doar valoarea lui n)
- Mult mai puține erori
Reduci sute de linii la câteva linii
Funcționează pentru orice valoare de intrare
Mai puține locuri unde poți face greșeli
Modifici într-un singur loc, funcționează peste tot
Tipurile Fundamentale de Structuri Repetitive
1. Cu Număr CUNOSCUT de Pași
Caracteristică: Știm exact de câte ori trebuie să se repete bucla.
- Afișează numerele de la 1 la 10
- Calculează suma primelor 20 de numere
- Generează 5 numere aleatoare
Cum implementăm: instrucțiunea pentru (for)
2. Cu Număr NECUNOSCUT de Pași
(test la început)
Caracteristică: Mai întâi verifică dacă se poate executa, apoi execută.
- Citește numere până la 0
- Calculează până la o precizie dorită
- Verifică până găsește răspunsul corect
Cum implementăm: instrucțiunea cât timp (while)
3. Cu Număr NECUNOSCUT de Pași
(test la sfârșit)
Caracteristică: Execută cel puțin o dată, apoi verifică dacă mai continuă.
- Meniu interactiv (afișează, apoi întreabă)
- Jocuri (joacă o rundă, apoi întreabă)
- Validări (cere input, apoi verifică)
Cum implementăm: instrucțiunea repetă...până când (do...while)
Exercițiu simplu: Care tip de buclă?
Pentru fiecare situație, gândește-te ce tip de buclă ai folosi:
Elementele Esențiale ale Orice Bucle
1. INIȚIALIZARE
Pregătim variabilele înainte de buclă
i ← 1 ← începem de la 1suma ← 0 ← pregătim suma
2. CONDIȚIE
Verifică dacă mai continuăm
i ≤ 10 ← mai sunt numere?suma < 100 ← am atins limita?
3. CORP BUCLĂ
Instrucțiunile care se execută DE FIECARE DATĂ
scrie "Salut" ← se repetăsuma ← suma + i ← se repetă
4. ACTUALIZARE
Pregătim următoarea iterație
i ← i + 1 ← următorul numărn ← n - 1 ← scădem contorul
5. REVENIRE
Salt înapoi pentru verificarea condiției
Se face automat de către calculator!
Exercițiu simplu: Identifică elementele
Urmărește acest algoritm simplu și identifică fiecare element:
Elemente buclei:
Primul Tău Program cu Buclă
Ce face acest algoritm? Calculează suma numerelor de la 1 la n.
Pentru n=5: 1 + 2 + 3 + 4 + 5 = 15
#include <iostream>
using namespace std;
int main() {
int n;
cout << "Introdu n: ";
cin >> n;
int s = 0; // inițializare sumă
int i = 1; // inițializare contor
while (i <= n) { // condiție
s = s + i; // corp - se execută de fiecare dată
i = i + 1; // actualizare - pentru următoarea iterație
}
cout << "Suma numerelor de la 1 la " << n
<< " este: " << s;
return 0;
}
Urmărește pas cu pas pentru n=3:
Atenție la Buclele Infinite!
Ce este o buclă infinită?
O buclă care nu se oprește niciodată pentru că condiția rămâne întotdeauna adevărată.
Problemă: i rămâne întotdeauna 1, condiția i ≤ 5 este întotdeauna adevărată!
Găsește bucla infinită:
Care dintre aceste bucle NU se va opri niciodată?
Cum evităm buclele infinite?
PBInfo #1007 - Suma primelor N numere
Problemă perfectă pentru prima buclă
Enunț:
Cerință: Să se scrie un program care citește un număr natural n și afișează suma primelor n numere naturale.
Date de intrare:
Programul citește de la tastatură un număr natural n.
Date de ieșire:
Programul va afișa pe ecran suma numerelor de la 1 la n.
Exemplu:
Intrare:
5
Ieșire:
15
Explicație: 1 + 2 + 3 + 4 + 5 = 15
Restricții și precizări:
- 1 ≤ n ≤ 1000
- Se va folosi o buclă (while sau for)
- Timp de execuție: 0.1 secunde
- Memorie: 2 MB
Cum gândim soluția:
- Citim n de la tastatură
- Pregătim o variabilă
sumacare începe de la 0 - Pregătim un contor
icare începe de la 1 - Cât timp
i ≤ n:- Adaugă
ilasuma - Mărește
icu 1
- Adaugă
- Afișează
suma
Scrie soluția ta în C++:
Soluție corectă:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int suma = 0; // inițializare sumă
int i = 1; // inițializare contor
while (i <= n) { // condiție
suma = suma + i; // corp - adaugă i la sumă
i = i + 1; // actualizare - următorul număr
}
cout << suma;
return 0;
}
Ce am învățat din această problemă:
- Inițializare corectă:
suma = 0(începem de la 0),i = 1(începem de la 1) - Condiție logică:
i <= n(inclusiv n) - Actualizare obligatorie:
i = i + 1(altfel bucla infinită!) - Acumulare rezultat: adunăm la
sumape rând fiecare număr
PBInfo #1010 - Numere consecutive
Altă problemă simplă cu buclă
Enunț:
Cerință: Să se scrie un program care citește un număr natural n și afișează toate numerele naturale de la 1 la n, separate prin spațiu.
Date de intrare:
Programul citește de la tastatură un număr natural n.
Date de ieșire:
Programul va afișa pe ecran toate numerele de la 1 la n, separate prin câte un spațiu.
Exemplu:
Intrare:
5
Ieșire:
1 2 3 4 5
Restricții și precizări:
- 1 ≤ n ≤ 1000
- Numerele se afișează în ordine crescătoare
- Ultimul număr este urmat de un spațiu (sau nu, depinde de platformă)
- Se va folosi o buclă
Cum gândim soluția:
- Citim n de la tastatură
- Pregătim un contor
icare începe de la 1 - Cât timp
i ≤ n:- Afișează
iși un spațiu - Mărește
icu 1
- Afișează
Scrie soluția ta în C++:
Soluție corectă:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int i = 1; // inițializare contor
while (i <= n) { // condiție
cout << i << " "; // corp - afișează i și spațiu
i = i + 1; // actualizare - următorul număr
}
return 0;
}
Puncte cheie importante:
- Aceeași structură: inițializare → condiție → corp → actualizare
- Corp diferit: în loc de
suma = suma + i, avemcout << i << " " - Spațiul important:
" "separă numerele (altfel ar fi 12345) - Actualizare identică: tot
i = i + 1pentru următorul număr
Transformare Pseudocod → C++
Exercițiu de traducere pentru fixare
Pseudocod dat (afișează numerele pare de la 1 la n):
Ce face acest algoritm? Afișează numerele pare (divizibile cu 2) de la 1 la n.
Exemplu pentru n=7: 2 4 6
Scrie programul C++ echivalent:
Soluție corectă:
#include <iostream>
using namespace std;
int main() {
int n, i;
cin >> n;
i = 1;
while (i <= n) {
if (i % 2 == 0) {
cout << i << " ";
}
i = i + 1;
}
return 0;
}
Reguli de transformare Pseudocod → C++ pentru bucle:
| Pseudocod | C++ |
|---|---|
┌ cât timp ... execută |
while (...) { |
└■ |
} |
scrie |
cout << |
← |
= |
% (rest) |
% (rămâne la fel) |
Fără ; |
Cu ; la sfârșit |
Exercițiul Practic: Primul Algoritm cu Buclă
Sarcini de lucru
Completează următoarele sarcini pentru a-ți consolida cunoștințele despre structurile repetitive
Sarcina 1: Analiză algoritm cu buclă
Pseudocod dat:
Soluție pentru Sarcina 1:
Analiza algoritmului:
- Ce calculează: Produsul numerelor de la 1 la n (factorialul lui n)
- Calcul pentru n=4: 1 × 2 × 3 × 4 = 24
- Elementele buclei:
• Inițializare:produs ← 1,i ← 1
• Condiție:i ≤ n(i ≤ 4)
• Corp:produs ← produs × i(înmulțește)
• Actualizare:i ← i + 1(următorul număr) - Tip de buclă: Cu număr cunoscut de pași (4 iterații)
Sarcina 2: Scriere pseudocod pentru problemă nouă
Enunț: "Scrieți un algoritm care calculează media aritmetică a primelor n numere naturale."
Exemplu pentru n=5: (1+2+3+4+5)/5 = 15/5 = 3
Soluție pentru Sarcina 2:
ALGORITMUL MediaPrimelorN
VARIABILE
n, i, suma, media: întreg
ÎNCEPUT
CITESTE n
suma ← 0
i ← 1
CÂT TIMP i ≤ n EXECUTĂ
suma ← suma + i
i ← i + 1
SFÂRȘIT CÂT TIMP
media ← suma / n
SCRIE "Media primelor ", n, " numere este: ", media
SFÂRȘIT
Explicație pas cu pas:
- Citim n (până la cât calculăm)
- Pregătim suma (începe de la 0)
- Pregătim contorul i (începe de la 1)
- Bucla: adaugă i la sumă și mărește i
- După buclă: calculează media = suma / n
- Afișează rezultatul