Didaxis
lecție · Informatică

Repetarea cu test inițial

Condiția verificată înaintea corpului ciclului.

Se face în:
Clasa a VI-a
Clasa a VII-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 3 · rezumatul lecției

Pe scurt

Când nu știi dinainte de câte ori trebuie să faci un pas, poți folosi o repetare cu test inițial. Întâi verifici o condiție. Dacă este adevărată, faci pașii din interior și revii la verificare. Dacă este falsă, ieși din repetare. Expresia „cât timp” spune că pașii se fac numai cât timp condiția rămâne adevărată.

Imaginează-ți că aduni jetoane până ajungi la 3. Pornești cu 0 jetoane. Întrebi „am mai puțin de 3?”: da, adaugi unul și ai 1. Întrebi din nou: da, ajungi la 2. Încă o dată: da, ajungi la 3. Acum răspunsul este „nu”, deci te oprești. Numărul final este 3, iar adăugarea s-a făcut de trei ori.

Testul este înainte de primul pas. Dacă începi deja cu 3 jetoane, condiția „mai puțin de 3” este falsă de la început și nu adaugi niciun jeton. Acesta este un lucru important: corpul unei repetări cu test inițial se poate executa de zero ori.

O repetare trebuie să se apropie de oprire. Dacă verifici mereu „mai puțin de 3”, dar nu schimbi niciodată numărul de jetoane, aceeași întrebare primește mereu același răspuns. Vei repeta la nesfârșit. Când desenezi sau urmărești algoritmul, notează atât valoarea de la fiecare verificare, cât și pasul care o modifică.

Exemplu rezolvat — câte zile până la 20 de lei. Dora pune în pușculiță câte 6 lei pe zi și vrea să strângă cel puțin 20 de lei. Pornește de la 0 lei. Condiția de continuare este „am mai puțin de 20 de lei”.

  1. Testul: este adevărat, deci pune 6 lei; are 6 lei, ziua 1.
  2. Testul: este adevărat; are 12 lei, ziua 2.
  3. Testul: este adevărat; are 18 lei, ziua 3.
  4. Testul: este adevărat; are 24 de lei, ziua 4.
  5. Testul: este fals, deci repetarea se oprește.

Dora a pus bani de 4 ori și a făcut 5 teste. Ultimul test este fals și hotărăște oprirea. Suma finală, 24 de lei, depășește 20: nu se oprește exact la 20, pentru că suma crește din 6 în 6.

Desen la lecția „Repetarea cu test inițial”
2în detaliustratul 2 din 3 · pentru clasă și Bacalaureat

În detaliu

În C++, while (conditie) corp; este repetarea cu test inițial: condiția se evaluează înaintea fiecărei execuții a corpului, iar ciclul se încheie la prima evaluare falsă. Numărul de execuții ale corpului poate fi 0. O variabilă care apare în condiție trebuie să aibă valoare înainte de primul test și trebuie modificată în corp (sau prin citire), altfel condiția își păstrează valoarea și ciclul nu se mai termină. Numărul de teste este cu unul mai mare decât numărul de execuții ale corpului.

Exemplul 1 — jetoane până la 3. Se pornește de la 0 jetoane și se adaugă câte unul cât timp numărul lor este mai mic decât 3.

#include <iostream>
using namespace std;
int main() {
    int jetoane = 0;
    while (jetoane < 3) {
        ++jetoane;
    }
    cout << jetoane;
    return 0;
}

Testele se fac pentru 0, 1, 2 și 3; corpul se execută numai pentru primele trei valori, deci sunt 4 teste și 3 execuții. Ieșirea este 3. Dacă începi cu jetoane = 3, primul test este fals și corpul nu se execută deloc.

Exemplul 2 — primul moment în care suma depășește o limită. Se adună pe rând numerele 1, 2, 3, ... cât timp suma este cel mult 20. Cerința este ultimul număr adunat.

  1. Inițial și ; testul este adevărat.
  2. , ; apoi , ; , ; , ; , (testele sunt adevărate).
  3. , ; testul este fals și ciclul se oprește.
int s = 0, k = 0;
while (s <= 20) {
    k++;
    s += k;
}
cout << k << ' ' << s;

Secvența afișează 6 21: ultimul număr adunat este 6, iar suma 21 este prima care depășește 20.

Exemplul 3 — împărțiri repetate. Câte împărțiri la 2 trebuie făcute pentru ca numărul 100 să ajungă sub 1? Se împarte întreg: 100, 50, 25, 12, 6, 3, 1, 0. Ciclul while (n > 0) { n /= 2; pasi++; } face 7 execuții și se oprește când . Rezultatul 7 este , adică numărul de cifre binare ale lui 100. Fiecare execuție înjumătățește valoarea, de aceea ciclul se termină repede chiar pentru valori mari.

Ciclul care nu se oprește și ciclul care nu începe. Dacă în corp nu se schimbă nimic din condiție, de pildă while (jetoane < 3) { cout << 'x'; }, condiția rămâne adevărată la infinit. Invers, while (n > 0) cu nu execută corpul, iar while (n > 0) cu nu îl execută nici el. Un ciclu cu test inițial este potrivit când nu se știe dinainte dacă trebuie făcut vreun pas.

Exemplul 4 — citirea până la o valoare-santinelă. Se citesc numere până apare 0, iar programul afișează suma lor. Prima valoare se citește înainte de ciclu, ca primul test să aibă ce compara, iar următoarea se citește la sfârșitul corpului, ca fiecare test să primească o valoare nouă.

int x, s = 0;
cin >> x;
while (x != 0) {
    s += x;
    cin >> x;
}
cout << s;

Pentru intrarea 4 7 0 testele sunt , și ; primele două sunt adevărate, deci și se afișează 11. Dacă prima valoare citită este 0, corpul nu se execută și se afișează 0. Dacă lipsește citirea de la sfârșitul corpului, rămâne 4 și ciclul nu se mai oprește.

3pentru admiterestratul 3 din 3 · pentru examene

Pentru admitere

La o urmărire, numără testele separat de execuțiile corpului: exemplul cu jetoane are patru teste și trei execuții. Dacă valoarea de control crește cu 2 pornind de la 0 și condiția este „mai mic decât 5”, corpul se execută pentru 0, 2 și 4, apoi se oprește la 6: valoarea de după ultima modificare este 6, deși nu mai intră în corp. Forma de pseudocod de la Bac este „cât timp condiție execută …”. Pentru x←1; cât timp x<4 execută scrie x; x←x+1 se afișează 1, 2, 3, iar ultimul test, la , este fals. Dacă enunțul întreabă „de câte ori se execută corpul”, nu număra testul final; dacă întreabă „de câte ori se evaluează condiția”, adaugă-l.

Atenție la pasul de modificare: pentru n = 5 și ciclul while (n != 0) n -= 2; valorile sunt 5, 3, 1, , , ... și condiția rămâne mereu adevărată, pentru că sare peste 0, deci ciclul nu se termină. Cu testul n > 0 ciclul s-ar fi oprit după trei execuții.

Exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?

int x = 1, k = 0;
while (x < 100) {
    x = x * 3;
    k++;
}
cout << x << ' ' << k;
  • a) 81 4
  • b) 243 5
  • c) 243 4
  • d) 100 5

Răspunsul corect este b). Valorile lui după fiecare execuție sunt 3, 9, 27, 81, 243, iar crește de la 1 la 5. Testul este adevărat, deci corpul se execută încă o dată; testul este fals. Varianta a) se oprește prea devreme, la 81, care este încă mai mic decât 100, iar varianta d) presupune că ciclul se oprește exact la prag.

Greșeli frecvente

  • Greșit: corpul lui while se execută obligatoriu măcar o dată.
    Corect: dacă primul test este fals, nu se execută deloc.
  • Greșit: ultimul test, cel care dă fals, nu contează la urmărire.
    Corect: el explică oprirea și poate schimba numărul total de teste.
  • Greșit: condiția va deveni falsă fără ca algoritmul să schimbe ceva relevant.
    Corect: este necesar un progres spre oprire.
pentru adulți

Pentru părinți

Copilul exersează testarea înaintea fiecărui pas.

  1. Puneți pe masă 0 jetoane.
  2. Întrebați „sunt mai puțin de 3?”.
  3. Adăugați câte unul și repetați întrebarea.
  4. Reluați jocul pornind cu 3.

Întrebați-l: „De ce în a doua încercare nu ai adăugat niciun jeton?”

în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Surse și referințe

Redactare proprie, conform programei:

  • OMEN 3393/2017, anexa 2, Informatică și TIC, p. 9; rocnee.eu
  • OMEN 3393/2017, anexa 2, Informatică și TIC, pp. 11–12; isj.tm.edu.ro
  • UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro

Documente consultate

  • OMEN 3393/2017, anexa 2, Informatică și TIC, clasa a VI-a, p. 9; UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
  • Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
  • Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu
  • Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3 și 6; edu.ro
  • Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro

Desene: Redactare proprie (desen original)

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.