Problem Description This program is to give the user the option of converting a
ID: 3560328 • Letter: P
Question
Problem Description
This program is to give the user the option of converting a set of temperatures either from Celsius to Fahrenheit (C to F) or vice versa, from Fahrenheit to Celsius (F to C), or to quit the program. If the user selects either C to F or F to C, the program will prompt the user to enter three integer values, a starting temperature, an ending temperature, and an increment. After these values have been entered the program will display a table of equivalent C and F (or F and C) temperatures, from the starting temperature to the ending temperature and incrementing by the increment value each row.
The table must meet all of the following criteria:
Explanation / Answer
#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
using namespace std;
// functions prototype
void displayMenu();
char getMenuSelection();
void getStartEndAndIncrement(int&, int&, int&);
double CtoF(double);
double FtoC(double);
void displayTable(char, int, int, int);
// display the main menu
void displayMenu()
{
cout << "Welcome to the temperatures convertor program" << endl;
cout << "Please select one of the following options: " << endl;
cout << "(F/f) From Fahrenheit to Celsius" << endl;
cout << "(C/c) From Celsius to Fahrenheit" << endl;
cout << "(Q/q) Exit" << endl;
}
// get the menu selection from the user
// return the option
// f...... F to C
// c...... C to F
// q...... Quit
char getMenuSelection()
{
char selection = '';
cout << "Please select an option: ";
cin >> selection;
while (tolower(selection) != 'f' && tolower(selection) != 'c' && tolower(selection) != 'q')
{
cout << "-- Invalid selection: try again --" << endl;
cout << endl;
//re-prompt the menu
displayMenu();
cout << "Please select an option: ";
cin >> selection;
// clear the ' ' after the user hits enter
cin.clear();
}
return selection;
}
// gets the start, end and increment values
// NOTE: since we are not allowed to use global variables, I guess passing by reference instead here
void getStartEndAndIncrement(int& start, int& end, int& increment)
{
cout << "Enter 3 integers: starting temperature, ending temperature, and an increment" << endl;
string tmpStart = "", tmpEnd = "", tmpIncre = "";
// check if the number user enters is a digit
cout << "starting temperature: ";
cin >> tmpStart;
cin.clear();
while (atoi(tmpStart.c_str()) == 0)
{
cout << "-- Invalid starting temperature -- " << endl;
cout << endl;
cout << "reenter again: ";
cin >> tmpStart;
cin.clear();
}
cout << "ending temperature: ";
cin >> tmpEnd;
cin.clear();
while (atoi(tmpEnd.c_str()) == 0)
{
cout << "-- Invalid ending temperature -- " << endl;
cout << endl;
cout << "reenter again: ";
cin >> tmpEnd;
cin.clear();
}
cout << "increment: ";
cin >> tmpIncre;
cin.clear();
while (atoi(tmpIncre.c_str()) == 0)
{
cout << "-- Invalid increment value -- " << endl;
cout << endl;
cout << "reenter again: ";
cin >> tmpIncre;
cin.clear();
}
start = atoi(tmpStart.c_str());
end = atoi(tmpEnd.c_str());
increment = atoi(tmpIncre.c_str());
}
// converts a celsius temperature to Fahrenheit
double CtoF(double celsius)
{
return (9.0/5.0)*celsius + 32;
}
// converts a Fahrenheit temperature to celsius
double FtoC(double fahrenheit)
{
return (5.0/9.0)*(fahrenheit-32);
}
// displays a C to F or F to C table given start, end and increment values, and the
// conversion character the user selected
void displayTable(char option, int startTemp, int endTemp, int increment)
{
cout << "------------------------------" << endl;
cout << setiosflags(ios::right);
cout << setiosflags(ios::fixed);
// convert from C to F
if (option == 'c')
{
cout << setw(6) << "C" << (char)248 << setw(8) << "F" << (char)248 << endl;
while (endTemp > startTemp)
{
cout << setw(8) << startTemp << setw(8) << setprecision(1) << CtoF(startTemp) << endl;
startTemp += increment;
}
// output the endTemp
if (startTemp != endTemp)
cout << setw(8) << endTemp << setw(8) << setprecision(1) << CtoF(endTemp) << endl;
}
else // convert from F to C
{
cout << setw(6) << "F" << (char)248 << setw(8) << "C" << (char)248 << endl;
while (endTemp > startTemp)
{
cout << setw(8) << startTemp << setw(8) << setprecision(1) << FtoC(startTemp) << endl;
startTemp += increment;
}
// output the endTemp
if (startTemp != endTemp)
cout << setw(8) << endTemp << setw(8) << setprecision(1) << FtoC(endTemp) << endl;
}
}
int main()
{
char usrSelection = '';
int startTemp = 0;
int endTemp = 0;
int increment = 0;
displayMenu();
usrSelection = getMenuSelection();
// as long as the user doesn't quit
while (usrSelection != 'q')
{
getStartEndAndIncrement(startTemp, endTemp, increment);
displayTable(usrSelection, startTemp, endTemp, increment);
cout << endl;
displayMenu();
usrSelection = getMenuSelection();
}
return 0;
}
Please rate if I succeeded in helping you.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.