Sunteți pe pagina 1din 3

Afișare zecimale fară rotunjire în C++

Pentru a afișa zecimalele unui număr real fără rotunjire, va trebui să recurgem la niște artificii.

Voi lua ca exemplu problema Medie1 de pe pbinfo.ro. Enunțul problemei e următorul:


Să se scrie un program care citeşte de la tastatură cele trei note ale unui elev și
determină media lor.

Date de intrare
Programul citește de la tastatură trei numere naturale x, y, z, reprezentând notele.

Date de ieşire
Programul afișează pe ecran media calculată, cu exact două zecimale, fără
rotunjire.

Restricții și precizări
 cele trei numere citite sunt mai mari decât 0 și mai mici sau egale cu 10
 media se va afișa cu exact două zecimale, fără rotunjire

Exemplul 1
Date de intrare

9 9 7

Date de ieșire

8.33

Exemplul 2
Date de intrare

9 8 7
Date de ieșire

8.00

Autorul problemei (Candele Silviu) propune următoarea metodă:

 înmulţim pe M cu 100
 aflăm partea întreagă

 împărţim la 100.0

1 #include <iostream>
2 #include <iomanip>
3 using namespace std;
4 int main()
5 {
6 int x,y,z;
7 float m;
8 cin>>x>>y>>z;
9 m=(x+y+z)/3.;
10 m=(int)(m*100)/100.;
11 cout<<fixed<<setprecision(2)<<m;
12 return 0;
13 }

Eu vă propun următoarea metodă:

 înmulţim suma (a+b+c) cu 100 și abia după aceea împărțim la 3 ca să


obținem rezultatul M cu cele două zecimale la partea întreagă (de altfel, toate
calculele le efectuăm numai cu întregi).
 Afișăm apoi câtul împărțirii lui M la 100, punctual zecimal și apoi restul
împărțirii lui M la 100 (adică cele două zecimale).

 Dacă restul împărțirii lui M la 100 este 0,ceea ce înseamnă că împărțirea la 3


este exactă, se mai afișează încă o cifră 0.

De exemplu, a=10, b=9, c=7. Media ar fi 8.6666666. Noi procedăm astfel


(efectuăm numai împărțiri întregi):

(a+b+c)*100/3=(10+9+7)*100/3=26*100/3=2600/3=866

Vom afișa cătul 866/3, adică 8, apoi punctual zecimal, după care afișăm
866%100, adică 66 (cele două zecimale).
În cazul particular, când media nu are zecimale, ca de exemplu, a=7, b=9, c=8,
cand media trebuie afișată cu două zecimale egale cu zero, avem:

(a+b+c)*100/3=(7+9+8)*100/3=2400/3=800

Câtul 800/100 este 8, iar restul 800%100 este 0. Prin urmare, trebuie să afișăm
separate cel de-al doilea zero de la partea zecimală.

Programul este următorul:

1 #include <iostream>
2 using namespace std;
3 int main()
4 {
5 int a, b, c, m;
6 cin>>a>>b>>c;
7 m=(a+b+c)*100/3;
8 cout<<m/100<<"."<<m%100;
9 if(m%100%10==0)
10 cout<<0;
11 return 0;
12 }

S-ar putea să vă placă și