# Formatarea afișării cu iomanip

> Pagina: https://bacalaurescu.ro/informatica/lectii/citire-si-afisare/formatarea-afisarii
> Markdown: https://bacalaurescu.ro/informatica/lectii/citire-si-afisare/formatarea-afisarii.md
> Sursa: Bacalaurescu (bacalaurescu.ro), conținut gratuit pentru BAC 2027.

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

Capitolul: [Citirea și afișarea datelor](https://bacalaurescu.ro/informatica/lectii/citire-si-afisare)
Actualizat: 2026-11-01

setprecision, fixed, setw și diferența dintre endl și \n.

## Pe scurt pentru BAC

- Fără formatare, C++ afișează realele cu 6 cifre semnificative, uneori în notație științifică.
- Cu `#include <iomanip>`, `fixed` cere notația zecimală obișnuită, iar `setprecision(2)` face ca `3.14159` să apară ca `3.14`.
- `setw(n)` rezervă n poziții pentru următoarea valoare și o aliniază la dreapta.
- `endl` și `"\n"` trec ambele pe rând nou, dar `endl` golește și buffer-ul, deci e mai lent în bucle mari.
- `setprecision` rotunjește, nu taie: `fixed << setprecision(1) << 2.35` afișează de regulă `2.4`.

## Afișarea numerelor reale

Fără formatare, C++ afișează realele "cum vrea el" (6 cifre semnificative, uneori notație științifică). Controlul complet:

```cpp
#include <iomanip>
cout << fixed << setprecision(2) << 3.14159;
```

Afișează `3.14`. `fixed` = notație zecimală obișnuită; `setprecision(n)` = exact n zecimale (cu rotunjire).

**Atenție**: `setprecision` FĂRĂ `fixed` numără cifrele SEMNIFICATIVE totale, nu zecimalele: `setprecision(2) << 3.14159` dă `3.1`.

## Alinierea pe coloane

`setw(n)` rezervă n poziții pentru URMĂTOAREA valoare (aliniere la dreapta):

```cpp
cout << setw(5) << 7 << setw(5) << 123;
```

Afișează `    7  123`. setw se "consumă" la fiecare afișare: îl repeți pentru fiecare valoare.

## endl vs "\n"

Ambele trec pe rând nou; `endl` GOLEȘTE și buffer-ul (flush): mai lent în bucle mari. La BAC ambele sunt corecte; în programe cu multe afișări, preferă `"\n"`.

## Rotunjirea: detaliul care pică

`setprecision` ROTUNJEȘTE, nu taie: `fixed << setprecision(1) << 2.35` afișează `2.4` (sau, rar, 2.3, din reprezentarea binară a lui 2.35: de aceea la BAC valorile de test evită cazurile-limită).

## Media aritmetică afișată corect (tiparul complet)

```cpp
int a, b, c;
cin >> a >> b >> c;
cout << fixed << setprecision(2) << (a + b + c) / 3.0;
```

Împărțirea la `3.0` (real!) + formatarea = răspunsul complet. Cu `/ 3` (întreg) media lui 1, 2, 3 ar fi 2, nu 2.00.

> [!RETINE]
> Perechea fixed + setprecision(n) = exact n zecimale. setw se repetă la fiecare valoare. Media cere împărțire la 3.0, nu la 3.

## Greșeli frecvente

1. setprecision fără fixed = cifre semnificative, nu zecimale.
2. setw(5) formatează O SINGURĂ valoare, nu tot rândul.
3. (a+b)/2 cu a, b întregi pierde zecimalele ÎNAINTE de formatare.
