PDA

Visualizza la versione completa : [c++]Stampare un float


ramy89
28-07-2011, 10:28
Ho scritto questo semplice programma che tra le varie cose stampa la media di tre interi.
Il problema è che siccome per effettuare la media bisogna fare una divisione, il risultato sarà di tipo float ma i tre numeri sono interi.Allora ho dichiarato una variabile di tipo float che ho chiamato media, assegnandogli il valore della somma dei tre interi diviso 3.Il problema è che mi stampa comunque un intero,come fare per convertirlo in float?



#include <iostream>

using namespace std;

// uso degli operatori per stabilire la relazione tra due numeri

int main()
{
int num[3],i,min,max;
float media;
cout <<"Inserisci tre interi:\n";
for(i=0;i<3;i++)
cin>>num[i];
media=(num[0]+num[1]+num[2])/3;
cout <<"La media e' "<<media;
cout <<"\nLa somma e' "<<num[0]+num[1]+num[2];
min=num[0];
max=num[0];
for(i=0;i<3;i++)
if(max<num[i])
max=num[i];
cout <<"\nIl maggiore e' "<<max;
for(i=0;i<3;i++)
if(min>num[i])
min=num[i];
cout<<"\nIl minore e' "<<min<<"\n";
return 0;
}

MisterBean
28-07-2011, 11:30
Un trucco che dovrebbe funzionare è dividere per 3.0 invece che per 3, altrimenti effettui un cast esplicito della somma a float:

media=(float)(num[0]+num[1]+num[2])/3;

ramy89
28-07-2011, 11:52
L' ho riscritto così allora:


#include <iostream>
#include <iomanip>

using namespace std;


int main()
{
int voto=0,i=1;
float media=0;
while(voto!=-1)
{
media+=voto;
cout << "Inserire il " << i <<"o voto, -1 per terminare: ";
cin >>voto;
i++;
}
media=(float)(media/(i-1));
cout <<"\nla media e' " <<setprecision(3)<<media <<"\n";
return 0;
}


E funziona.

Freax
28-07-2011, 18:27
meglio fare il casting diretto ad almeno 1 degli operatori, e non dopo lo svolgimento dell'operazione, in pratica


media=(float)(media/(i-1));

diventa


media=(((float)media)/(i-1));

Loading