do while

Schema logica instructiunea do while

  Instrucțiunea do while este o structură repetitivă cu test final, adică se vor executa mai întâi instrucțiunile și abia apoi se va evalua condiția. Dacă ea este adevărată, se execută încă o dată instrucțiunile. Când condiția devine falsă, se trece mai departe în program.

Sintaxă

do {
  <instructiuni>
}while(<conditie>);

Efect

  1. se execută instrucțiunile;
  2. se evaluează expresia și dacă este adevărată se reia pasul 1;
  3. când expresia devine falsă, se trece în program la următoarea instrucțiune.

Implementare

a) Enunț: Se citește un număr de la tastatură din intervalul [0,109]. Să se afișeze numărul de cifre ale valorii citite.

int n,c=0;
cin>>n;
do{
  c++;
  n/=10;
}while(n);
cout<<c;
5431561
7
0
1

  În acest exemplu de problemă, această structură este mai folositoare decât un while deoarece tratează automat și un caz nefavorabil la citire. Având condiția din structură n!=0, în cazul în care citim numărul 0, din structura while nu se va executa nimic întrucât condiția este falsă din prima (ar fi nevoie de tratarea cazului acesta separat).
  Cu ajutorul lui do while, instrucțiunile se vor executa cel puțin o dată, astfel că va crește contorul de cifre si pentru citirea lui 0.

b) Enunț: Se citește o cifră k și numere naturale până la întâlnirea unei valori negative. Să se afișeze numărul de apariții ale lui k în valorile citite.

int n,k,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
0
100
4020
5431
0
02
-1
5

  În realizarea algoritmului de mai sus vom folosi o structură do while pentru verificarea tuturor cifrelor. Folosirea acestui tip de strucută oferă un avantaj dacă trebuie sa verificăm aparițiile cifrei 0 (la valoarea 0 va număra corect, o apariție).

Citirea unui număr cu 0-uri în față nu va influența numărătoarea, întrucât 0-urile respective sunt ignorate la memorarea valorii.