Teoriechevron_rightInstrucț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ătorschedule 30 min

all_inclusiveInstrucț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ă.

code1. 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.";

psychology2. 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 4321

2. 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)

warningCapcană la Bacalaureat

  • Bucla Infinită: Când variabila folosită în condiția din while nu 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 efectiv 0, bucla nu se execută deloc, iar dacă trebuia să obții cifra 0, algoritmul ar putea pica testul. E bine să tratezi numărul 0 separat sau să folosești structura do-while în anumite cazuri.
syncSe încarcă statusul...