Teorie: Pre/Post Condiție. Comparație for, while, do-while
Diferența dintre testul inițial și cel final. Analiza și compararea celor 3 tipuri de structuri repetitive.
Structuri Repetitive: Pre-condiție vs Post-condiție
În limbajul C++ există trei tipuri principale de instrucțiuni repetitive: for, while și do-while. Deși toate servesc aceluiași scop general — repetarea unui bloc de cod —, modul în care evaluează condiția de oprire le împarte în două categorii fundamentale: structuri cu pre-condiție (test inițial) și structuri cu post-condiție (test final).
1. Pre-condiție vs Post-condiție
Test Inițial (Pre-condiție)
Condiția este verificată înainte de a se executa corpul buclei. Dacă condiția este falsă de la bun început, instrucțiunile nu se vor executa niciodată.
- Instrucțiunea FOR
- Instrucțiunea WHILE
Test Final (Post-condiție)
Condiția este verificată după ce corpul buclei s-a executat. Acest lucru garantează că instrucțiunile se vor executa cel puțin o dată, indiferent de condiție.
- Instrucțiunea DO-WHILE
2. Comparație și Situații de Utilizare
| Instrucțiune | Tip Test | Număr Repetări | Când o folosim? |
|---|---|---|---|
| for | Inițial | 0, 1 sau de mai multe ori | Când cunoaștem de la început numărul exact de pași (ex: parcurgerea unui vector). |
| while | Inițial | 0, 1 sau de mai multe ori | Când numărul de pași este necunoscut, dar știm condiția de oprire (ex: prelucrarea cifrelor unui număr). |
| do-while | Final | 1 sau de mai multe ori | Când vrem să ne asigurăm că blocul se execută cel puțin o dată, indiferent de condiție (ex: validarea datelor citite). |
3. Controlul suplimentar: break și continue
Uneori, avem nevoie să modificăm comportamentul normal al unei bucle (fie să o oprim complet, fie să sărim peste un pas). Pentru aceasta, folosim instrucțiunile de control al fluxului break și continue. Ele pot fi folosite în oricare dintre structurile repetitive (for, while, do-while).
Instrucțiunea BREAK
Oprește definitiv și imediat execuția buclei în care se află. Programul continuă cu prima instrucțiune aflată după acolada de închidere a buclei.
for (int i = 1; i <= 5; i++) {
if (i == 3) {
break;
}
cout << i << " ";
}
// Va afișa: 1 2
// Când i devine 3, bucla se termină brusc.Instrucțiunea CONTINUE
Oprește doar pasul curent al buclei. Ignoră restul codului din bloc și trece imediat la următoarea iterație (următoarea evaluare a condiției).
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
cout << i << " ";
}
// Va afișa: 1 2 4 5
// A sărit doar peste afișarea lui 3.Echivalența structurilor la Bacalaureat
Un tip foarte frecvent de exercițiu la Bacalaureat îți cere să transformi un algoritm care folosește for într-unul echivalent care folosește while, sau din while în do-while.
for (int i = 1; i <= n; i++) {
// instrucțiuni
}
// Este ECHIVALENT cu:
int i = 1; // Inițializarea înainte de buclă
while (i <= n) {
// instrucțiuni
i++; // Pasul la finalul blocului!
}