#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;
		}
Ancient Dragon commented: You did not use code tags -5

Recommended Answers

All 2 Replies

any advice on how to approach this?

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.