C ++ 11 — C ++ Усреднение пробега

Предполагается, что я делаю простую консольную программу, которая позволяет пользователю вводить свои мили и количество галлонов, использованных во время нескольких поездок. Он использует структуру цикла while и рассчитывает две экономии топлива, одну для поездки, и общую экономию топлива. Моя проблема в том, чтобы мои результаты соответствовали тому, что есть в книге, из которой я учусь. Его близко, но не на месте.

Это вывод из книги:

Enter miles driven (-1 to quit): 287
Enter gallons used: 13
MPG this trip: 22.076923
Total MPG: 22.076923

Enter miles driven (-1 to quit): 200
Enter gallons used: 10
MPG this trip: 20
Total MPG: 21.173913

Enter miles driven (-1 to quit): 120
Enter gallons used: 5
MPG this trip: 24
Total MPG: 21.678571

Это то, что я сделал до сих пор:

#include <iostream>
int main ( )
{
// Set our variables and initialize them
double miles = 0;
double gallons = 0;
double economyTrip = 0;
double economyTotal = 0;

while (miles >= 0)
{
std::cout << "Enter miles driven (-1 to quit):  ";
std::cin >> miles ;

// Check input
if (miles == -1)
break;
else
std::cout << "Enter gallons used:  ";
std::cin >> gallons;

// Calculate trip fuel economy
economyTrip = (miles/gallons) ;

// Calculate total fuel economy
if (economyTotal == 0)
economyTotal = economyTrip;
else
economyTotal += (economyTrip - economyTotal)/2;

// Display the results
std::cout << "MPG this trip: " << economyTrip << std::endl;
std::cout << "Total MPG:" << economyTotal << std::endl << "\n";
}

}

Я ошибаюсь в усреднении? Я знаю, что на калькуляторе, если вы берете среднее значение за три поездки, вы получите около 22,02563. , ,
Так что, мягко говоря, книга немного ближе, чем я. Мне интересно, как я могу сделать это по-другому, чтобы я мог получить более близкий ответ. Или это то, о чем я должен беспокоиться?

-2

Решение

Вы не можете продолжать вычислять MPG и добавлять его к промежуточной сумме. Вам нужно хранить всего миль а также всего галлонов а затем рассчитать MPG в конце.

1

Другие решения

Ваша формула для вычисления общей экономики неверна. Вы должны взять сумму пройденных миль и разделить ее на сумму использованного топлива.

2

Есть два способа получить среднее значение:

  1. Самое простое: вести подсчет для обеих величин, делить в конце
  2. Более сложный: средний на каждой итерации (что занимает немного математики)

Как правило, использование второго и более сложного метода приносит мало пользы, поэтому я предлагаю вам не отставать от первого.


Просто для удовольствия, давайте сделаем это вторым способом … но давайте сначала поймем, что мы делаем.

avg1 = a

avg2 = (a + b) / 2

avg3 = (a + b + c) / 3 = (a + b) / 3 + c / 3

= (a + b) * 2 / (2 * 3) + c / 3

= (a + b) / 2 * (2 / 3) + c / 3

= avg2 * (2 / 3) + c / 3

avg4 = (a + b + c + d) / 4 = avg3 * (3 / 4) + d / 4

и поэтому: avg[N] = avg[N-1] * (N - 1) / N + val[N] / N который начинает чувствовать себя как барицентр 🙂 Замечания: avg[N-1] * (N-1) на самом деле общая сумма до N-1!

Таким образом, вместо общего количества миль и галлонов мы можем сохранить среднее число миль / галлонов и общее количество галлонов (в Python, просто чтобы показать принцип):

avgMiles = 0.0
totGallons = 0.0

while True:
miles = float(raw_input("Enter miles driven: "))
gallons = float(raw_input("Enter gallons used: "))

print "MPG this trip:", miles / gallons

newTotGallons = totGallons + gallons
avgMiles = avgMiles * totGallons / newTotGallons + miles / newTotGallons
totGallons = newTotGallons

print "Total MPG:", avgMiles

И вывод (или было бы, если бы оно было интерактивным):

Enter miles driven: 200
Enter gallons used: 10
MPG this trip: 20.0
Total MPG: 20.0
Enter miles driven: 100
Enter gallons used: 10
MPG this trip: 10.0
Total MPG: 15.0
Enter miles driven: 50
Enter gallons used: 5
MPG this trip: 10.0
Total MPG: 14.0
Enter miles driven:

Кстати, вместо -1принято использовать CTRL+D сигнализировать об окончании пользовательского ввода (по крайней мере, в Linux).

1

Просто наткнулся на это на некоторое время позже, чем было опубликовано. У меня такое же домашнее задание, за исключением C (не C ++), поэтому есть некоторые минимальные различия. Я решил это, и я поставлю решение здесь для всех, кто может встретить этот пост в будущем.

#include <stdio.h>

int main()
{
float gallons, miles, mpg, averagempg, gallonstotal, milestotal;

gallons = 0;
miles = 0;
mpg = 0;
averagempg = 0;
gallonstotal = 0;
milestotal = 0;

printf("\nEnter gallons used (-1 to end): ");
scanf("%f", &gallons);

while (gallons != -1) {

gallonstotal = gallonstotal + gallons;

printf("Enter the miles driven: ");
scanf("%f", &miles);

milestotal = milestotal + miles;
mpg = miles / gallons;

printf("The miles / gallon for this tank was %f \n", mpg);

printf("\nEnter gallons used (-1 to end): ");
scanf("%f", &gallons);
}

if (gallonstotal != 0){
averagempg = milestotal / gallonstotal;
printf("\nThe overall average miles/gallon was %f \n", averagempg);
}
else {
puts("Error: no gallons were entered \n");
}
}
0
#include <iostream>
using namespace std;

int main()
{

unsigned int tripCounter = 0;
double tripMPG = 0;
double totalTripMPG = 0;

cout << "Enter miles driven (-1 to quit): ";
double miles = 0;
cin >> miles;

while ( miles != -1 )
{
cout << "Enter gallons used: ";
double gallons = 0;
cin >> gallons;

tripMPG = miles / gallons;

cout << "MPG this trip: " << tripMPG << endl;

tripCounter = tripCounter + 1;
totalTripMPG = totalTripMPG + tripMPG;

double avgMPG = static_cast< double >( totalTripMPG ) / tripCounter;

cout << "Total MPG: " << avgMPG << endl;
cout << endl;

cout << "Enter miles driven (-1 to quit): ";
cin >> miles;
}

system("pause");
}
0
По вопросам рекламы [email protected]