Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

• Apply structured and modular design principles to write programs that meet wri

ID: 3627755 • Letter: #

Question

• Apply structured and modular design principles to write programs that meet written specifications and requirements.
• Develop a pseudo-code design using appropriate program structure (sequence, selection, repetition and nesting) to solve a given programming problem.
• Use appropriate selection and repetition statements to implement the design.
• Create user-defined functions to implement a modular design.
• Use appropriate parameter passing mechanisms for passing data into and getting data back from functions.
• Use Iostream and iomanip formatting manipulators to display tabulated data.
• Design and implement a menu-driven interface.
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:
YOUR PROGRAM SHOULD HAVE 3 OPTION
• The table's column headings should display the degree symbol, e.g., °C and °F.
• cout << (char)248;
• The first column must be the "from" temperature (C for C to F or F for F to C) and the second column the "to" temperature (F for C to F or C for F to C).
• 2 COLUMNS FROM C – F, FROM F – C EXIT
• The calculated "to" temperatures are to be displayed to the nearest tenth of a degree (display exactly one decimal place, even if there is no fractional part, i.e., 75° should display as 75.0°).
• YOU MUST HAVE 3 FUNCTIONS
• Temperatures in both columns must be number-aligned (right-justified for the integer "from" values and decimal point aligned right for the "to" values).
• LEFT ALIGN, RIGHT ALIGN SET WIDTH
• Assume the user enters correct data, e.g., the start temperature, end temperature and increment are all integers and the ending temperature is greater than the starting temperature.
• CREATE A CHECK VALIDITY TEMP FUNCTION

The formula to convert Celsius to Fahrenheit is

The formula to convert Fahrenheit to Celsius is


Function Requirements
You must create and use the following functions:
• displayMenu( )displays a menu. DISPLAY 3 COUT 1, COUT 2, COUT 3
COUT << F TO C, C TO F, EXIT
• getMenuSelection ( ) gets the menu selection from the user, upper or lower case 'C' for Celsius to Fahrenheit, upper or lower case 'F' for Fahrenheit to Celsius, and upper or lower case 'Q' to quit. Any other input should get an error message "Invalid selection: try again" and re-prompt for the menu selection.
INT GET MENU SELECTION
{ INT TEMP;
CIN>> TEMP;
RETURN TEMP;
}
• getStartEndAndIncrement( ) gets the start, end and increment values for the table from the user.
Give a start an end and increment of variables via reference
• CtoF( ) converts a Celsius temperature to Fahrenheit. All variables double
• FtoC( )converts a Fahrenheit temperatures to Celsius. All variables double
• displayTable( ) displays a C to F or F to C table given start, end and increment values and the conversion character the user selected. A function , what kind of table will you use, C-F or F-C,
Additional Requirements
• Absolutely NO GLOBAL VARIABLES can be used to implement this program! Any program using global variables will NOT be accepted!
• Use a switch statement to respond to the user's menu selection in the getMenuSelection function.
• After the user selects a valid temperature table option, ask the user to enter start, end, and increment values, then display the table and stop until the user presses the ENTER key to continue (prompt the user, of course). When the user presses ENTER to continue the menu should be redisplayed, allowing the user to make another menu selection (either to display another temperature conversion table or quit).
• Make sure that your code is properly formatted (indentation, etc) and that you have provided suitable documentation of all your functions (comment blocks for program and functions!).
How to print the degree symbol
It is easy enough to find out how to do this by searching the web. The short answer is:

cout << (char)248;

Explanation / Answer

#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
using namespace std;

// functions prototype
void displayMenu();
int 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 << "1. From Fahrenheit to Celsius" << endl;
      cout << "2. From Celsius to Fahrenheit" << endl;
      cout << "3. Exit" << endl;
}

// get the menu selection from the user
// return the option
// 1...... F to C
// 2...... C to F
// 3...... Quit
int getMenuSelection()
{
      string selection = "";

      cout << "Please select an option: ";
      cin >> selection;

      while (atoi(selection.c_str()) != 1 && atoi(selection.c_str()) != 2 && atoi(selection.c_str()) != 3)
      {
            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 atoi(selection.c_str());
}

// 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()
{
      int usrSelection = 0;
      int startTemp = 0;
      int endTemp = 0;
      int increment = 0;

      displayMenu();
      usrSelection = getMenuSelection();

      // as long as the user doesn't quit
      while (usrSelection != 3)
      {
            getStartEndAndIncrement(startTemp, endTemp, increment);
            displayTable(usrSelection, startTemp, endTemp, increment);
            cout << endl;
            displayMenu();
            usrSelection = getMenuSelection();
      }
      return 0;
}