TeorieInstrucțiunea WHILE
Teorie: Instrucțiunea WHILE
Structura repetitivă cu test inițial. Extragerea cifrelor unui număr, CMMDC, și alte aplicații clasice.
Nivel: Începător 30 min
Instrucțiunea repetitivă WHILE
Instrucțiunea while este o structură repetitivă cu test inițial. Este folosită atunci când numărul de repetări nu este cunoscut de la bun început, dar știm condiția care trebuie îndeplinită pentru ca repetiția să continue.
Se mai numește și ciclu condiționat anterior (sau cu test inițial), deoarece condiția este evaluată înainte de executarea blocului de instrucțiuni. Dacă de la bun început condiția este falsă, instrucțiunile nu se vor executa niciodată.
1. Sintaxa de bază
while (condiție) {
// instrucțiuni care se repetă CÂT TIMP condiția este ADEVĂRATĂ
}// Exemplu: Numărarea cifrelor unui număr (Extragerea cifrelor)
int n = 1234;
int nrCifre = 0;
while (n > 0) {
// int ultimaCifra = n % 10; // Dacă aveam nevoie de cifră
nrCifre++;
n = n / 10; // Eliminăm ultima cifră (foarte important pentru a nu intra în buclă infinită)
}
cout << "Numărul are " << nrCifre << " cifre.";2. Algoritmi clasici la Bacalaureat
Instrucțiunea while este fundamentală pentru subiectele de Bacalaureat. Iată cele mai întâlnite două utilizări:
1. Oglinditul (inversul) unui număr
int n = 1234;
int oglindit = 0;
while (n != 0) {
int c = n % 10; // extragem ultima cifră
oglindit = oglindit * 10 + c; // o adăugăm la oglindit
n = n / 10; // tăiem cifra din n
}
// la final oglindit va fi 43212. C.M.M.D.C. prin scăderi repetate (Algoritmul lui Euclid)
int a = 12, b = 18;
while (a != b) {
if (a > b)
a = a - b;
else
b = b - a;
}
// la final 'a' (sau 'b') conține CMMDC-ul (care e 6)Capcană la Bacalaureat
- Bucla Infinită: Când variabila folosită în condiția din
whilenu se modifică în interiorul blocului, ciclul nu se va termina niciodată. Asigură-te mereu că avansezi starea (ex:n = n / 10) în interiorul acoladelor! - Cazul lui zero: Pentru extragerea cifrelor, dacă folosești
while(n > 0)și numărul inițial este efectiv0, bucla nu se execută deloc, iar dacă trebuia să obții cifra 0, algoritmul ar putea pica testul. E bine să tratezi numărul0separat sau să folosești structurado-whileîn anumite cazuri.
Se încarcă statusul...