Sari la conținut

Capitolul 4 · Lecția 4.2 din 2

Formatarea afișării cu iomanip

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

Capitolul 4: Citirea și afișarea datelorConținut verificat

Pe scurt pentru BAC · 5 idei

  • 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.
Pe această pagină6 secțiuni

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.

Reține

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.

Bifează când ai terminat, ca s-o vezi citită pe toate dispozitivele.

Testează-te pe capitolul 4

Lecția în clipuri

Clipuri scurte, cu voce și subtitrări.

Folosim cookie-uri esențiale, fără de care site-ul nu merge, și cookie-uri de analiză anonimizate, ca să vedem ce pagini ajută. Detalii în politica de confidențialitate