SOURCE FILE: p128_prob01.cpp


#include <iostream>
using namespace std ;

/* 

   Problem #1 on page 128 of Savitch (Absolute C++ 3/e, Addison Wesley)
   states:

   A liter is 0.264179 gallons.  Write a program that will read in the number
   of liters of gasoline consumed by the user's car and the number of miles
   travelled by the car and will then output the number of miles per gallon
   the car delivered.

    The program should allow the user to repeat this calculation as often as
    the user wishes.

    Define a function to compute the number of miles per gallon.  Your program
    should use a globally-defined constant for the number of liters per
    gallon.

*/

const double gallonsPerLiter = 0.264179 ;
const double litersPerGallon =  1 / gallonsPerLiter ;

double GetLiters() ;
double GetMiles() ;
double CalcMPG(double, double) ;
void GiveResults(double, double, double) ;
bool UserWantsToContinue() ;

int main ()
{
  double liters, miles, mpg ;
  
  do
    {
      liters = GetLiters() ;
      miles = GetMiles() ;
      mpg = CalcMPG(liters, miles) ;
      GiveResults(liters, miles, mpg) ;
    } while (UserWantsToContinue() ) ;
   
  cout << endl ;
  return 0;
}

double GetLiters() 
{
  int liters ;
  cout << "\nHow many liters of gas did you use on your trip? " ;
  cin >> liters ;
  return liters ;
}

double GetMiles() 
{
  int miles ;
  cout << "How many miles did you travel on your trip? " ;
  cin >> miles ;
  return miles ;
}

double CalcMPG(double liter_val, double miles_val) 
{
   return (miles_val / liter_val) * litersPerGallon ;
}

void GiveResults(double liters_GR, double miles_GR, double mpg_GR ) 
{
  cout.setf(ios::fixed ) ;
  cout.setf(ios::showpoint ) ;
  cout.precision(2) ;

  cout << "\nYou travelled " << miles_GR << " miles\n"
       << "and used " << liters_GR << " liters of gas\n"
       << "(" << liters_GR * gallonsPerLiter << " gallons).\n" 
       << "Your mileage was " << mpg_GR << " miles per gallon.\n\n" ;
}

bool UserWantsToContinue() 
{
  char answer ;
  cout << "Would you like to compute mileage for another trip? (y/n): " ;
  cin >> answer ;
  if (answer == 'y') return true ;
  else return false ;
}