Teoriechevron_rightPre/Post Condiție. Comparație for, while, do-while

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.

Nivel: Începătorschedule 25 min

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

rule1. Pre-condiție vs Post-condiție

first_pageTest 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

last_pageTest 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

table_chart2. Comparație și Situații de Utilizare

InstrucțiuneTip TestNumăr RepetăriCând o folosim?
forInițial0, 1 sau de mai multe oriCând cunoaștem de la început numărul exact de pași (ex: parcurgerea unui vector).
whileInițial0, 1 sau de mai multe oriCând numărul de pași este necunoscut, dar știm condiția de oprire (ex: prelucrarea cifrelor unui număr).
do-whileFinal1 sau de mai multe oriCând vrem să ne asigurăm că blocul se execută cel puțin o dată, indiferent de condiție (ex: validarea datelor citite).

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

closeInstrucț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.

skip_nextInstrucț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.

warningEchivalenț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.

// Trecerea de la FOR la 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!
}
syncSe încarcă statusul...