Sari la conținut
LECȚIA 1.2 · INFORMATICĂ

Echivalarea structurilor repetitive

Transformarea pentru ↔ cât timp ↔ repetă...până când: subiectul clasic de rescriere.

Conținut verificat

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

  1. Uitarea negării condiției: bucla rulează invers.
  2. repetă fără protecție execută corpul și când nu trebuie.
  3. La pentru descrescător (pas -1), actualizarea devine i ← i - 1: pasul se copiază fidel.
EXEMPLU, ÎN 4 LIMBAJE

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;
}