</>
InfoPrep

Lecție

Instrucțiunea do while

Execută instrucțiunile cel puțin o dată și verifică apoi condiția de repetare.

Instrucțiunea do...while

Instrucțiunea do...while repetă un bloc de instrucțiuni cât timp o condiție este adevărată.

Forma generală este:

do {
    instructiuni;
} while (conditie);

Diferența importantă față de while este că aici condiția se verifică după executarea instrucțiunilor.

Așadar, corpul buclei se execută cel puțin o dată.


Cum funcționează?

Exemplu:

int x = 1;

do {
    cout << x << " ";
    x++;
} while (x <= 5);

Execuția este:

x = 1 → afișează 1 → x = 2 → 2 <= 5 → true
x = 2 → afișează 2 → x = 3 → 3 <= 5 → true
x = 3 → afișează 3 → x = 4 → 4 <= 5 → true
x = 4 → afișează 4 → x = 5 → 5 <= 5 → true
x = 5 → afișează 5 → x = 6 → 6 <= 5 → false
                                              ↓
                                             STOP

Se afișează:

1 2 3 4 5

Logica este:

execută instrucțiunile
        ↓
verifică condiția
        ↓
   true → repetă
        ↓
   false → STOP

while vs. do...while

Aceasta este diferența pe care trebuie să o reții.

while

while (conditie) {
    instructiuni;
}
verifică → execută

Condiția este verificată înainte.

Corpul se poate executa de 0 ori.

do...while

do {
    instructiuni;
} while (conditie);
execută → verifică

Condiția este verificată după.

Corpul se execută cel puțin o dată.


Exemplu important

Să avem:

int x = 10;

Cu while:

while (x < 5) {
    cout << x;
}

condiția:

10 < 5 → false

este falsă de la început, deci nu se afișează nimic.

Cu do...while:

do {
    cout << x;
} while (x < 5);

mai întâi se execută:

cout << x;

deci se afișează:

10

Abia apoi se verifică:

10 < 5 → false

și bucla se oprește.

De reținut: do...while execută instrucțiunile o dată înainte să verifice prima condiție.


Exemplu practic

do...while este util atunci când vrem să citim o valoare cel puțin o dată și să repetăm citirea până când aceasta este validă.

De exemplu, citim un număr până când utilizatorul introduce o valoare pozitivă:

int x;

do {
    cin >> x;
} while (x <= 0);

cout << x;

Input

-5
0
8

Programul citește:

-5 → x <= 0 → true  → citește din nou
 0 → x <= 0 → true  → citește din nou
 8 → x <= 0 → false → STOP

Output

8

Atenție la ;

Sintaxa se termină cu ; după condiție:

do {
    instructiuni;
} while (conditie);

Observă:

while (conditie);
                 ↑

Acel ; face parte din sintaxa instrucțiunii do...while.


Recapitulare

Forma generală:

do {
    instructiuni;
} while (conditie);

Diferența esențială:

while
→ verifică → execută
→ 0 sau mai multe repetări

do...while
→ execută → verifică
→ 1 sau mai multe repetări

Reține și:

do...while → condiția este verificată la final

și nu uita ;:

} while (conditie);

Ideea esențială: do...while este alegerea naturală atunci când instrucțiunile trebuie executate cel puțin o dată.