#include <iostream>
#include <iomanip> //for formatted output
#include <string> //for strings
using namespace std;
//named constants
const double CENTIMETERS_PER_INCH = 2.54;
const int INCHES_PER_YARD = 36;
const int INCHES_PER_FOOT = 12;
//function prototypes
double toCentimeters(int, int, int);
void fromCentimeters(double, int&, int&, int&);
char inputData(int, string&, double&, int&, int&, int&);
void outputData(int, string, double, int, int, int);
int main ()
{
//declare variables
int yards, feet, inches;
double centimeters;
char convType;
string name;
string header = " # Last, First Name Yards Feet Inches Centimeters ";
int numConv; //# of conversions
double total = 0.0; //total # of cm
// 1. Prompt the user how many conversions are needed.
cout << "Enter the number of conversions: ";
cin >> numConv;
for(int i = 1; i <= numConv; i++, total += centimeters)
{
convType = inputData(i, name, centimeters, yards, feet, inches);
if (convType == 'f') //To centimeters .
centimeters = toCentimeters(yards, feet, inches);
else //From centimeters
fromCentimeters(centimeters, yards, feet, inches);
cout << header << endl;
outputData(i, name, centimeters, yards, feet, inches);
} //end of the loop by # numConv
// The last two rows in the table should be: Total and Average.
fromCentimeters(total, yards, feet, inches);
outputData(numConv+1, "Total", total, yards, feet, inches);
fromCentimeters(total/numConv, yards, feet, inches);
outputData(numConv+2, "Average", total/numConv, yards, feet, inches);
return 0;
}
//---------------------------------------------------------------------------------------------------------------
char inputData(int convNum, string& name, double& centimeters, int& yards, int& feet,int& inches)
{
char convType;
string temp;
//2. Repeatedly prompt the user for the Last, First Name and length.
// For each prompt of the user perform the input validity checks using sentinels and either while or do loop.
cout << "Please enter Last name for " << convNum <<" student: \n";
cin >> name;
cout << "Please enter First name for " << convNum <<" student: \n";
cin >> temp;
name = name + ", " + temp;
// Prompt the user which conversion is needed: to or from centimeters.
do {
cout << "\nEnter a letter f if conersion is from yards feet inches to centimeters";
cout << "\nEnter a letter c if conersion is from centimeters to yards feet inches\n ";
cin >> convType;
}
while(convType != 'f' && convType != 'c');
if (convType == 'f')
//2. To centimeters .
do {
cout << "Enter three integers, one for yards, one for feet and "
<< "one for inches\n separated by space for " << convNum <<" student: \n";
cin >> yards >> feet >> inches;
cout << endl;
} while(yards<0|| feet<0|| inches <0 ||yards > 10); // 0 and 10yd are sentinels
//3. From centimeters. The program prompts the user to enter the length in centimeters,
else
do {
cout << "Enter the length in centimeters for " << convNum <<" student: \n";
cin >> centimeters;
cout << endl;
} while(centimeters<0 || centimeters>300); // 0 and 300cm are sentinels
return convType;
}
//----------------------------------------------------------------------------------------------------------------------
double toCentimeters(int yards, int feet, int inches)
{
int totalInches = INCHES_PER_YARD * yards + INCHES_PER_FOOT * feet + inches;
return CENTIMETERS_PER_INCH * totalInches;
}
//----------------------------------------------------------------------------------------------------------------------
void fromCentimeters(double centimeters, int& yards, int& feet, int& inches)
{
int remainder;
inches = static_cast<int> (centimeters / CENTIMETERS_PER_INCH + 0.5);
// we added 0.5 to round to the nearest inch, say <int>(0.7 + 0.5) is 1
yards = inches / INCHES_PER_YARD ;
remainder = inches %= INCHES_PER_YARD;
feet = remainder / INCHES_PER_FOOT;
inches = remainder % INCHES_PER_FOOT;
}
//--------------------------------------------------------------------------------------------------------------------
//4. The output should be printed as formatted table with the header: Last, First Name, length in yards, feet, inches
// in that order and length in centimeters.
void outputData(int studentNumber, string name, double cm, int yd, int ft, int in)
{
cout << left << setw(3) << studentNumber;
cout << left << setw(20)<< name; //name
cout << right << setw(5) << yd;
cout << right << setw(5) << ft;
cout << right << setw(7) << in;
cout << right << setw(10) << cm ;
cout << endl;
}
Recommended Answers
Jump to PostApproach what exactly? You just barfed out a bunch of code (that's probably not even yours) and yelled "HELP!"
Have you read any of the posting guidelines?
We have absolutely no information to even begin to know how to help.
All 2 Replies
Reply to this topic
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.