Sari la conținut
LECȚIA 4.2 · INFORMATICĂ

Formatarea afișării cu iomanip

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

Conținut verificat

Afișarea numerelor reale

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

Zecimale fixe la afisare
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    cout << fixed << setprecision(2) << 3.14159;
    return 0;
}

Atenție: Fiecare limbaj are alta scriere pentru acelasi lucru: setprecision in C++, %.2f in C, doua puncte cu numarul de zecimale in Pascal, si formatarea cu acolade in Python.

se trimit programului la citire

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):

Aliniere pe latime fixa
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    cout << setw(5) << 7 << setw(5) << 123;
    return 0;
}

Atenție: Latimea se pune ca sa iasa coloane aliniate. Numarul mai scurt e completat cu spatii la stanga.

se trimit programului la citire

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)

Media a trei numere, cu doua zecimale
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int a, b, c;
    cin >> a >> b >> c;
    cout << fixed << setprecision(2) << (a + b + c) / 3.0;
    return 0;
}

Atenție: Impartirea la 3.0, nu la 3, ca rezultatul sa fie real. Cu 3 intreg, in C si C++ s-ar pierde partea zecimala inainte de afisare.

se trimit programului la citire

Î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.

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.