Cele trei structuri, aceeași logică
Orice buclă are: INIȚIALIZARE, CONDIȚIE, CORP, ACTUALIZARE. Echivalările le rearanjează.
pentru → cât timp
pentru i ← 1, n execută i ← 1
scrie i cât timp i ≤ n execută
scrie i
i ← i + 1
Inițializarea iese ÎNAINTE, actualizarea intră la FINALUL corpului.
cât timp → repetă...până când (capcana clasică)
repetă execută corpul MĂCAR O DATĂ; cât timp poate să nu-l execute deloc. Echivalarea corectă cere protecție:
cât timp c execută dacă c atunci
corp repetă
corp
până când NOT c
Fără dacă, la condiție inițial falsă cele două programe diferă: EXACT ce testează subiectul.
Inversarea condiției
cât timp rulează CÂT TIMP condiția e adevărată; până când se oprește CÂND devine adevărată. La transformare, condiția se NEAGĂ: cât timp x < 10 ↔ până când x ≥ 10.
Exemplu complet de rescriere (cerință tip)
i ← 10 i ← 10
cât timp i > 0 execută repetă
scrie i scrie i
i ← i - 2 i ← i - 2
până când i ≤ 0
Ambele afișează 10 8 6 4 2 ✓ (condiția inițială e adevărată, protecția nu era necesară aici, dar menționeaz-o!).
Greșeli frecvente
- Uitarea negării condiției: bucla rulează invers.
- repetă fără protecție execută corpul și când nu trebuie.
- La pentru descrescător (pas -1), actualizarea devine i ← i - 1: pasul se copiază fidel.
Alege limbajul în care dai examenul. Poți edita codul și îl poți rula direct aici. Programa oficiala de BAC (proba E.d) cere Pascal sau C/C++, la alegere. Python apare in manualele noi si e pus aici pentru inteles, nu ca limbaj de examen.
#include <iostream>
using namespace std;
int main() {
int s = 0;
for (int i = 1; i <= 5; i++) s += i;
cout << s << " ";
s = 0;
int i = 1;
while (i <= 5) { s += i; i++; }
cout << s << " ";
s = 0;
i = 1;
do { s += i; i++; } while (i <= 5);
cout << s;
return 0;
}