Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cs-142:how-much-wood [2015/05/19 18:35] (current)
cs142ta created
Line 1: Line 1:
 +=How much wood?=
 +==Problem==
 +* We want to build some 2D structures out of wood. How much wood will we need?
 +* User can choose (each option prompts for dimensions):​
 +**  A house 
 +*** Height of wall
 +*** Height and width of roof
 +** An ice cream cone
 +*** Height and width of cone
 +*** Height of ice cream
 +** A train car
 +*** Height of car
 +*** Height of wheel
 +* Report back the total area of wood needed
  
 +==Solution==
 +<code cpp>
 +/*
 +Test case 1:
 +Input: 3, 1, 2 (train example)
 +Expected Ouput: 8.283
 +Actual: ​
 +
 +Test case 2:
 +Input: 2, 1, 2, 1 (ice cream cone)
 +Expected Output: 2.5708
 +Actual Output: 2.5708
 +
 +Test case 3:
 +Input: 1, 1, 1, 2 (house)
 +Expected: 2
 +Actual: ​
 +*/
 +
 +#include <​iostream>​
 +#include <​string>​
 +
 +using namespace std;
 +
 +const double PI = 3.14159265359;​
 +const double MAX_DIMENSION = 100000;
 +
 +// These must be declared before the function that calls them (e.g., main), but can be defined below
 +void print_menu();​
 +double get_user_input(double min, double max);
 +
 +double calculate_circle_area(double radius);
 +double calculate_square_area(double side_length);​
 +double calculate_triangle_area(double width, double height);
 +
 +double calculate_house_area(double wall_height,​ double roof_height,​ double roof_width);​
 +double calculate_ice_cream_area(double cone_height,​ double cone_width, double ice_cream_height);​
 +double calculate_train_area(double car_height, double wheel_height);​
 +
 +int main()
 +{
 + double area = 0.0;
 +
 + // prompt user for choice
 + print_menu();​
 +
 + int choice = get_user_input(1,​ 3);
 +
 + // if choice is 1
 + if (choice == 1)
 + {
 + // prompt for house and roof dimensions
 + double wall_height,​ roof_height,​ roof_width;
 + cout << "You chose house. How tall's the wall? ";
 + wall_height = get_user_input(0,​MAX_DIMENSION);​
 +
 + cout << "How tall's the roof? ";
 + roof_height = get_user_input(0,​ MAX_DIMENSION);​
 +
 + cout << "How wide's the roof? ";
 + roof_width = get_user_input(0,​ MAX_DIMENSION);​
 +
 + area += calculate_house_area(wall_height,​ roof_height,​ roof_width);​
 + }
 +
 + // if choice is 2
 + else if (choice == 2)
 + {
 + // prompt for ice cream cone dimensions
 + double cone_height,​ cone_width, ice_cream_height;​
 + cout << "You chose ice cream cone. How tall's the cone? ";
 + cone_height = get_user_input(0,​ MAX_DIMENSION);​
 +
 + cout << "How wide's the cone? ";
 + cone_width = get_user_input(0,​ MAX_DIMENSION);​
 +
 + cout << "How tall's the ice cream? ";
 + ice_cream_height = get_user_input(0,​ MAX_DIMENSION);​
 +
 + area += calculate_ice_cream_area(cone_height,​cone_width,​ ice_cream_height);​
 + }
 +
 + // if choice is 3
 + else if (choice == 3)
 + {
 + // prompt for train dimensions
 + double car_height, wheel_height;​
 + cout << "You chose the train. How tall's the car? ";
 + car_height = get_user_input(0,​ MAX_DIMENSION);​
 +
 + cout << "How tall's the wheel? ";
 + wheel_height = get_user_input(0,​ MAX_DIMENSION);​
 +
 + area += calculate_train_area(car_height,​ wheel_height);​
 + }
 +
 + // Report total area
 + cout << "Total area of wood needed is " << area << " square inches"​ << endl;
 +
 + system("​pause"​);​
 + return 0;
 +
 +}
 +
 +/*
 +Just print the menu (doesn'​t read input)
 +*/
 +void print_menu()
 +{
 + cout << "​Choose from the following\n"​
 + << "1. A 2d House\n"​
 + << "2. A 2d ice cream cone\n"​
 + << "3. A 2d train car\n"
 + << "​Choice:​ ";
 +
 + return;
 +}
 +
 +/*
 +Reads for integer input and reprompts until valid floating-point input is provided within range
 +@param min minimum value for range of input
 +@param max maximum value for range of input
 +@return first valid input floating-point number
 +*/
 +double get_user_input(double min, double max)
 +{
 + int input;
 + // read in from cin
 + cin >> input;
 +
 + // while it's bad (non-int or not in range)
 + while (cin.fail() || input < min || input > max)
 + {
 + // send message, reprompt
 + cout << "​That'​s bad input. Gimme a value between " << min << " and " << max << ":";​
 + if (cin.fail())
 + {
 + cin.clear();​
 + string dummy;
 + cin >> dummy;
 + }
 + // read again from cin
 + cin >> input;
 + }
 +
 + return input;
 +}
 +
 +/*
 + Calculate the area of a circle given the radius
 + @param radius the radius of the circle
 + @return the area of the circle given the radius
 +*/
 +double calculate_circle_area(double radius)
 +{
 + double area = 0.0;
 +
 + area = PI * pow(radius, 2);
 +
 + return area;
 +}
 +
 +/*
 + Calculate the area of a square given the side length
 + @param side_length the length of the side of the square
 + @return the area of the square
 +*/
 +double calculate_square_area(double side_length)
 +{
 + double area = 0.0;
 +
 + area = pow(side_length,​ 2);
 +
 + return area;
 +}
 +
 +/*
 + Calculate the area of a triangle given the width and height
 + @param width length of the unequal edge of an isoseles triangle
 + @param height length of the line perpendicular to the unequal edge 
 + of the isosoles triangle extending to the opposite corner
 + @return the area of the triangle
 +*/
 +double calculate_triangle_area(double width, double height)
 +{
 + double area = 0.0;
 +
 + area = width * height / 2;
 +
 + return area;
 +}
 +
 +/*
 + Calculate the area of a house given the dimensions
 + @param wall_height the height of a wall (the house is square)
 + @param roof_height the height of the roof (see height of triangle in calculate_triangle_area function)
 + @param roof_width the width of the roof (see width of triangle in calculate_triangle_area function)
 + @return the area of the house as 2d object
 +*/
 +double calculate_house_area(double wall_height,​ double roof_height,​ double roof_width)
 +{
 + double area = 0.0;
 +
 + area += calculate_square_area(wall_height);​
 + area += calculate_triangle_area(roof_width,​ roof_height);​
 +
 + return area;
 +}
 +
 +/*
 + Calculate the area of an ice cream cone given dimensions
 + @param cone_height the height of the ice cream above the cone (i.e., radius of a half circle)
 + @param cone_width the width of the cone (see width of triangle in calculate_triangle_area function)
 + @param ice_cream_height the height of the cone (see width of triangle in calculate_triangle_area function)
 + @return the area of the ice cream as 2d object
 +*/
 +double calculate_ice_cream_area(double cone_height,​ double cone_width, double ice_cream_height)
 +{
 + double area = 0.0;
 +
 + area += calculate_triangle_area(cone_width,​ cone_height);​
 + area += calculate_circle_area(ice_cream_height) / 2.0;
 +
 + return area;
 +}
 +
 +/*
 + Calculate the area of a train given dimensions
 + @param car_height the height of the train car (which is also 2x the length)
 + @param wheel_height the diameter of the train car wheel
 + @return the area of the train as 2d object
 +*/
 +double calculate_train_area(double car_height, double wheel_height)
 +{
 + double area = 0.0;
 +
 + area += 2 * calculate_square_area(car_height);​
 + area += 2 * calculate_circle_area(wheel_height / 2.0);
 +
 + return area;
 +}
 +</​code>​
cs-142/how-much-wood.txt ยท Last modified: 2015/05/19 18:35 by cs142ta
Back to top
CC Attribution-Share Alike 4.0 International
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0