2011-06-30 1 views
1

J'essaye de faire un programme qui fait un calcul très basique, mais pour une raison quelconque je ne peux pas obtenir le bon code. Il est supposé calculer les miles par gallon pour un voyage. Vous pouvez ensuite ajouter cette information plusieurs fois (pour différents voyages) et pour chaque fois il devrait calculer le nombre total de miles par gallon (c'est-à-dire la moyenne des miles par gallon de tous les voyages). Voici le code:Impossible de faire un programme de caculate correctement

#include <iostream> 
#include <iomanip> 
using namespace std; 


int main() 
{ 
int counter = 1; 
double milePerRe, milePerTo = 0, x, y; 
cout << "Enter the miles used (-1 to quit): "; 
cin >> x; 
cout << "Enter gallons: "; 
cin >> y; 
while (x != -1) 
{ 
     milePerRe = x/y; 
     milePerTo += milePerRe; 
     milePerTo /= counter; 
     cout << "MPG this tankful: " << setprecision(6) << fixed << milePerRe; 
     cout << "\nTotal MPG: " << setprecision(6) << fixed << milePerTo << endl << endl; 
     counter++; 
     cout << "Enter the miles used (-1 to quit): "; 
     cin >> x; 
     if (x != -1) 
     { 
     cout << "Enter gallons: "; 
     cin >> y; 
     } 
} 
system("pause"); 
return 0; 
} 

Quand je lance le programme et dire que j'entre 10 des miles et 1 sur le nombre de gallons la première fois et la deuxième fois, tout fonctionne bien. Ensuite, si je le fais une troisième fois, les calculs commencent à devenir incorrects.

Un conseil?

+0

Où sont indiqués «milePerRe» et «milePerTo»? –

+0

Comment incorrect? Comme dans la dernière décimale? –

+0

Pourquoi "milePerTo" et "milePerRe" accumulent plutôt que de se réinitialiser sur chaque boucle? –

Répondre

3

Vous ne pouvez pas calculer la moyenne des moyennes de la façon dont vous le faites. Dans votre code, vous divisez par le compteur CHAQUE itération, alors que vous ne devez le diviser qu'à la fin. La meilleure façon de faire ce que vous avez besoin est quelque chose comme ceci:

... 
double totalMiles = 0; 
double totalGallons = 0; 
... 
while (x != -1) 
{ 
    milePerRe = x/y; 
    totalMiles += x; 
    totalGallons += y; 
    milesPerTo = totalMiles/totalGallons; 
... 

Cependant, si votre tâche était de calculer explicitement la moyenne des voyages (non la moyenne des miles/gallon), vous devez introduire une autre variable , comme ceci:

... 
double currentMilesPerTo; 
... 
while (x != -1) 
{ 
    milePerRe = x/y; 
    milePerTo += milePerRe; 
    currentMilesPerTo = milePerTo/counter; 
    .... 
    cout << "\nTotal MPG: " << currentMilesPerTo; 
    ... 
0

La valeur de x et y n'est pas mise à jour correctement je suppose. Après chaque itération, essayez de mettre x et y à zéro. espérons que cela fonctionne de cette façon

TNQ

Questions connexes