# Pseudocodul de BAC: citirea și urmărirea algoritmilor

> Pagina: https://bacalaurescu.ro/informatica/lectii/algoritmi-si-pseudocod/pseudocodul-bac
> Markdown: https://bacalaurescu.ro/informatica/lectii/algoritmi-si-pseudocod/pseudocodul-bac.md
> Sursa: Bacalaurescu (bacalaurescu.ro), conținut gratuit pentru BAC 2027.

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

Capitolul: [Algoritmi și pseudocod](https://bacalaurescu.ro/informatica/lectii/algoritmi-si-pseudocod)
Actualizat: 2026-11-01

Instrucțiunile pseudocodului, urmărirea execuției pas cu pas și echivalarea cu C++.

## Pe scurt pentru BAC

- În C++, `cât timp c execută` devine `while (c)`, iar `pentru i ← 1, n execută` devine `for (int i = 1; i <= n; i++)`.
- La `repetă ... până când c` corpul se execută cel puțin o dată, iar bucla se încheie când condiția devine adevărată.
- La cerința „ce se afișează” faci un tabel cu valorile variabilelor la fiecare pas, ca la suma cifrelor lui 275, care dă 14.
- După terminarea buclei `pentru i ← 1, n`, variabila i are valoarea n+1, detaliu exploatat des de subiecte.
- Tiparele constante sunt suma cifrelor cu `n % 10` și `n / 10`, oglinditul cu `ogl ← ogl * 10 + n % 10` și divizorii cu testul `n % d = 0`.

## Instrucțiunile pseudocodului

| Pseudocod | C++ |
|---|---|
| `citește n` | `cin >> n;` |
| `scrie n` | `cout << n;` |
| `dacă c atunci ... altfel ...` | `if (c) {...} else {...}` |
| `cât timp c execută ...` | `while (c) {...}` |
| `pentru i ← 1, n execută ...` | `for (int i = 1; i <= n; i++)` |
| `repetă ... până când c` | `do {...} while (!c);` |
| `[x]` | partea întreagă a lui x; `[a / b]`, cu a și b întregi, devine `a / b` |
| `x % y` sau `x mod y` | restul împărțirii |

**Atenție la `repetă ... până când`**: corpul se execută cel puțin o dată, iar bucla se OPREȘTE când condiția devine adevărată (invers față de while).

## Urmărirea execuției (tehnica tabelului)

Subiectul I cere "ce se afișează". Fă un tabel cu valorile variabilelor la fiecare pas.

```
citește n          (n = 275)
s ← 0
cât timp n > 0 execută
    s ← s + n % 10
    n ← [n / 10]
scrie s
```

| pas | n | n % 10 | s |
|---|---|---|---|
| inițial | 275 | - | 0 |
| 1 | 27 | 5 | 5 |
| 2 | 2 | 7 | 12 |
| 3 | 0 | 2 | 14 |

Se afișează **14** (suma cifrelor).

## Tiparele care apar constant

1. **Suma/numărul cifrelor**: `n % 10` extrage ultima cifră, `n / 10` o taie.
2. **Oglinditul**: `ogl ← ogl * 10 + n % 10`.
3. **Divizori**: `pentru d ← 1, n` cu test `n % d = 0`.
4. **Maxim**: inițializezi cu primul element SAU cu o valoare imposibil de mică.

> [!ATENTIE]
> La "pentru i ← 1, n", după terminare i are valoarea n+1. Subiectele exploatează des acest detaliu.

## Greșeli frecvente

1. `până când` oprește la ADEVĂRAT; `cât timp` continuă la adevărat.
2. Împărțirea întreagă: `[7/2] = 3`, nu 3,5.
3. Urmărește variabilele în tabel, nu "din ochi": la BAC viteza fără tabel = greșeli.
