while sau do while? Diferența care schimbă rezultatul
Compară buclele cu test inițial și final pe intrări concrete. Învață să transformi pseudocodul fără să pierzi cazul în care corpul nu se execută.
În acest material
Diferența dintre while și do while apare înaintea primei repetări. O buclă while poate executa corpul de zero ori. O buclă do while îl execută cel puțin o dată. Dacă această primă execuție modifică un contor, afișează ceva sau citește date, rezultatul poate fi diferit chiar când condiția scrisă pare aceeași.
Testează întâi o condiție inițial falsă
Presupune că n=0 și corpul numără o cifră, apoi împarte n la 10. Cu while (n>0), contorul rămâne zero. Cu do while, contorul devine unu înainte de verificare. Pentru scrierea zecimală a numărului zero, a doua comportare este utilă. Pentru citirea a exact n valori, o execuție obligatorie când n=0 ar fi greșită.
Nu există o buclă universal mai bună. Alegerea depinde de întrebarea: există o operație validă care trebuie făcută înainte să pot decide continuarea?
Bucla while verifică înaintea corpului; bucla do while execută corpul înaintea primei verificări.Mărește schema ↗
Cum trasezi fără să ghicești
Notează valorile inițiale ale variabilelor. Pentru while, verifică mai întâi condiția și consemnează rezultatul ei. Numai dacă este adevărată execuți instrucțiunile, în ordine. Pentru do while, începi cu instrucțiunile și verifici condiția la final.
Pentru x=3, corpul „afișează x; scade x cu 1” și condiția x>0 produc în ambele forme 3, 2, 1. Acest exemplu nu poate demonstra echivalența generală. Repetă trasarea cu x=0: while nu afișează nimic, do while afișează 0.
Transformări care păstrează comportamentul
Pentru o buclă simplă, fără continue sau alte transferuri de control, poți transforma while într-o structură cu test final dacă adaugi înainte o verificare a condiției inițiale. Altfel introduci o execuție suplimentară când condiția este falsă de la început.
La transformarea din do while în while, corpul inițial executat separat poate păstra comportamentul pentru asemenea bucle simple. Dar copierea mecanică a corpului devine riscantă când există continue, break sau modificări ale variabilelor citite în condiție. Atunci verifică fiecare traseu de execuție, nu doar forma vizuală a codului.
„Până când” inversează sensul continuării
În unele notații de pseudocod, repetarea se oprește când o condiție devine adevărată. În C++, condiția lui do while spune când continuă. Traducerea poate cere negarea condiției de oprire. Citește legenda sau convenția enunțului; nu traduce doar cuvintele de lângă paranteze.
Pentru o repetiție care se oprește când x devine zero, condiția de continuare este x diferit de zero. Verifică atât intrarea care se oprește după primul pas, cât și una care necesită mai mulți pași.
Exercițiu de control
Alege valori inițiale pentru care corpul se execută de zero ori, o dată și de trei ori. Dacă o transformare produce aceleași rezultate numai în ultimul caz, nu este încă verificată. Urmărește separat ce se afișează și valoarea finală a variabilelor: acestea sunt rezultate diferite.
Lucrează apoi lecția despre structuri repetitive, ghidul de trasare a pseudocodului și aplicațiile cu cifrele unui număr.
Întrebări frecvente
Care este diferența dintre while și do while?
while verifică înainte de corp și poate executa zero repetări. do while verifică după corp și îl execută cel puțin o dată. Diferența contează când condiția este falsă încă de la început.
Când este util do while la prelucrarea cifrelor?
Când și numărul 0 trebuie prelucrat ca o scriere cu o cifră. Prima execuție examinează cifra zero, apoi condiția stabilește dacă mai există cifre de procesat.
Pot înlocui mecanic while cu do while?
Nu. Verifică dacă prima execuție este permisă pentru toate intrările. De exemplu, dacă trebuie citite exact n valori și n poate fi zero, o citire obligatorie ar încălca cerința.