Instrucțiunea do - while
Instrucțiunea
do - whileeste o structură repetitivă cu test final: execută mai întâi instrucțiunile și abia apoi verifică condiția, repetând cât timp aceasta este adevărată.
Diferența esențială față de while este că instrucțiunile se execută cel puțin o dată, indiferent de condiție, pentru că verificarea se face la sfârșit. Este echivalentul în C++ al structurii repetă - până când din pseudocod, totuși cu o mică diferență: valoarea de adevăr pe care trebuie să o aibă condiția (de oprire) diferă între cele două.
Sintaxă
do {
// instructiuni
} while (conditie);
Spre deosebire de celelalte structuri, după while (conditie) de la final se pune obligatoriu ;.
Efect
- se execută instrucțiunile din interior;
- se evaluează condiția: dacă este adevărată, se revine la punctul 1;
- când condiția devine falsă, se trece mai departe în program.
Exemplu: numărul de cifre
Enunț. Se citește un număr natural din intervalul . Să se afișeze câte cifre are.
int n, c = 0;
cin >> n;
do {
c++;
n /= 10;
} while (n);
cout << c;
> 5431561
7
> 0
1
La fiecare pas creștem contorul c și eliminăm ultima cifră. Aici do - while este alegerea potrivită: dacă numărul citit este chiar 0, el are totuși o cifră, iar structura cu test final garantează că instrucțiunile se execută o dată, numărând corect acea cifră. Un while obișnuit ar fi sărit complet peste numărul 0.
Exemplu: prelucrarea cifrelor
Enunț. Se citește o cifră
k, apoi numere naturale până la întâlnirea unei valori negative. Să se afișeze de câte ori apare cifrakîn total.
int k, n, c = 0;
cin >> k >> n;
while (n >= 0) {
do {
if (n % 10 == k) c++;
n /= 10;
} while (n);
cin >> n;
}
cout << c;
> 5
> 1254
> 324
> 5
> 980
> 5251
> -1
4
Pentru fiecare număr citit, parcurgem cifrele cu un do - while și numărăm aparițiile cifrei k. Structura cu test final asigură că și numărul 0 este tratat corect (are o cifră, cifra 0).
Concluzii
Instrucțiunea do - while se folosește atunci când vrem ca instrucțiunile să se execute măcar o dată înainte de prima verificare a condiției. În rest, principiul este același ca la while: bucla continuă cât timp condiția rămâne adevărată.