Instrucțiunea while

Instrucțiunea while este o structură repetitivă cu test inițial: evaluează o condiție și, cât timp aceasta este adevărată, repetă instrucțiunile din interior.

O folosim atunci când nu știm dinainte de câte ori se repetă o secvență, ci doar condiția în care trebuie să continue. Este echivalentul în C++ al structurii cât timp - execută din pseudocod.

Schema logică a instrucțiunii while
Schema logică a instrucțiunii while

Sintaxă

while (conditie) {
    // instructiuni
}

Condiția este verificată înainte de fiecare repetare. Dacă este falsă chiar de la început, instrucțiunile din interior nu se execută niciodată.

Pentru ca bucla să se termine, instrucțiunile din interior trebuie să modifice, la un moment dat, valoarea de adevăr a condiției. Altfel obținem o buclă infinită, iar programul nu se mai oprește.

Exemplu: condiție pe cifre

Enunț. Se citește un număr întreg. Să se elimine cifre de la final până când numărul devine par sau zero.

long long n;
cin >> n;
while (n % 2)
    n /= 10;
cout << n;
> 13255793355
132
> 13579998
13579998

Cât timp n este impar (condiția n % 2 adevărată), îi „tăiem” ultima cifră prin împărțirea întreagă la 10. În momentul în care numărul devine par, condiția devine falsă și ieșim din buclă.


Publicitate

Exemplu: citire până la o valoare specială

Enunț. Se citesc numere întregi până la întâlnirea valorii 0. Să se afișeze câte dintre ele sunt impare.

int n, c = 0;
cin >> n;
while (n) {
    if (n % 2) c++;
    cin >> n;
}
cout << c;

Citim primul număr, apoi, cât timp valoarea citită este diferită de 0, verificăm paritatea și citim următorul număr. Acesta este un tipar foarte des întâlnit la citirea unui șir de lungime necunoscută, pe care îl regăsim și la citirea elementelor unui vector.

Concluzii

Instrucțiunea while repetă instrucțiuni cât timp o condiție rămâne adevărată, fiind potrivită când numărul de pași nu este cunoscut. Dacă numărul de repetări este cunoscut, este mai natural for; dacă vrem ca instrucțiunile să se execute cel puțin o dată, folosim do - while.