# Structurile if/else și while

> Pagina: https://bacalaurescu.ro/informatica/lectii/structuri-de-control/if-si-while
> Markdown: https://bacalaurescu.ro/informatica/lectii/structuri-de-control/if-si-while.md
> Sursa: Bacalaurescu (bacalaurescu.ro), conținut gratuit pentru BAC 2027.

Materia: [Informatică](https://bacalaurescu.ro/informatica)

Capitolul: [Structuri de control](https://bacalaurescu.ro/informatica/lectii/structuri-de-control)
Actualizat: 2026-11-01

Decizii și repetiții: cum gândim condițiile și cum urmărim execuția pas cu pas.

## Pe scurt pentru BAC

- Condiția din `if` se evaluează la adevărat sau fals, iar pentru mai multe instrucțiuni pe o ramură folosești acolade.
- Egalitatea se testează cu `==`, deoarece `=` singur e atribuire și strică logica.
- Bucla `while (i <= 4)` care adună `i` la `s` face ca `s` să ia pe rând valorile 1, 3, 6, 10, iar la `i = 5` se oprește.
- Produsul `p = p * n` cu `n` coborând de la 3 până la 1 calculează 3!, deci se afișează 6.

## Structura alternativă if/else

~~~cpp
if (n % 2 == 0)
    cout << "par";
else
    cout << "impar";
~~~

Condiția din paranteze se evaluează la adevărat sau fals. Pentru mai multe instrucțiuni pe ramură, folosește acolade.

Atenție: egalitatea se testează cu `==`; `=` singur e atribuire și strică logica.

## Structura repetitivă while

~~~cpp
int i = 1, s = 0;
while (i <= 4) {
    s = s + i;
    i = i + 1;
}
cout << s;
~~~

Urmărim execuția: s devine 1, apoi 3, apoi 6, apoi 10; la `i = 5` condiția pică. Se afișează `10`.

## for: aceeași idee, compactă

~~~cpp
int s = 0;
for (int i = 1; i <= 4; i++)
    s += i;
~~~

Echivalent cu while-ul de mai sus: inițializare; condiție; pas.

## Exemplu rezolvat

Ce afișează?

~~~cpp
int n = 3, p = 1;
while (n > 0) {
    p = p * n;
    n--;
}
cout << p;
~~~

Urmărim: pentru n=3, p devine 3; pentru n=2, p devine 6; pentru n=1, p rămâne 6; la n=0 bucla se oprește. Se afișează `6` (adică 3!).

> [!RETINE]
> `if` alege o ramură, `while` repetă cât timp condiția e adevărată, iar `for (inițializare; condiție; pas)` este un `while` scris compact. Urmărește variabilele pas cu pas: cu `i` pornind de la 1, `i < 4` face 3 pași, iar `i <= 4` face 4.

## Greșeli frecvente

1. `while (i = 5)` în loc de `==`: atribuirea face condiția mereu adevărată (5 e nenul), buclă infinită.
2. Uitarea pasului (`i++`) în while: buclă infinită.
3. Off-by-one: `i < 4` face 3 pași, `i <= 4` face 4; numără-i pe hârtie.
