C++: Shapes program: read data from txt,calculate area, perimeter,Write results to txt and the console screen
The Shapes Program
Write a C++ program named shapes.cpp to calculate area, perimeter, surface area, and volume of common 2D and 3D shapes. The calculations for 7 shapes include:
area and perimeter of a square
area and perimeter of a rectangle
area and perimeter of a circle
area and perimeter of an equilateral triangle
surface area and volume of a cube
surface area and volume of a box
surface area and volume of a cylinder
NOTE: The "perimeter" of a circle is more commonly referred to as "circumference", but we're calling it perimeter.
See http://www.purplemath.com/modules/geoform.htm (Links to an external site.) for a primer on these calculations.
INPUT: Copy-and-paste this data into your input file (please name it "shapes.txt") -- this is the exact data set that I'll use to evaluate your code:
CIRCLE 3.2 0 0
SQUARE 4.6 0 0
TRIANGLE 12.5 0 0
RECTANGLE 12.4 53.2 0
SPHERE 12.2 0 0
PYRAMID 14.2 6.34 0
BOX 12.2 13.3 14.4
SQUARE 14.5 0 0
SQUARE 0 0 0
RECTANGLE 14.5 4.65 0
CIRCLE 14.5 0 0
CUBE 13 0 0
BOX 1 2 3
SPHERE 0 0 0
CYLINDER 1.23 6 0
CYLINDER 50 1.23 0
TRIANGLE 1.2 0 0
Note the format of this input file consists of: (1) an object type in uppercase (SQUARE, RECTANGLE, CIRCLE, TRIANGLE, CUBE, BOX, CYLINDER), and (2) the dimensions of the object as follows:
for square, 1 dimension: "side"
for rectangle, 2 dimensions: "length" and "width"
for circle, 1 dimension: "radius"
for triangle, 1 dimension: "side"
for cube, 1 dimension: "side"
for box, 3 dimensions: "length", "width", and "height"
for cylinder, 2 dimensions: "radius" and "height"
INPUT FILE FORMAT: The first token is the object name (for example, "SQUARE"). The second through fourth tokens are dimensions. Some calculations need only one dimension (CIRCLE, SQUARE, CUBE, and TRIANGLE); others need two (RECTANGLE, CYLINDER) or three (BOX).
Your input file may contain 0's for unneeded tokens if desired. For example, an input line for a CIRCLE may look like:
CIRCLE 3.2 0 0 <-- since you just need radius for a circle.
INPUT FILE VALIDATION: the input file*also* has some invalid shapes, not part of the valid set of 7 that our program will process. When your program encounters an invalid shape, it should state such.
OUTPUT: Write results to two different sources -- the console screen and a TXT text file.
CONSOLE OUTPUT FORMAT. Output the object name, its dimensions (1, 2, or 3 of them), and calculated results on one line. If the object is not recognized as one of the 7 allowable object types, produce output to this effect: "SPHERE invalid object". The results for the above input should be as follows. Note the identifications of the dimensions and the calculated values.
CIRCLE radius=3.20 area=32.17 perimeter=20.11
SQUARE side=4.60 area=21.16 perimeter=18.40
TRIANGLE side=12.50 area=67.66 perimeter=37.50
RECTANGLE length=12.40 width=53.20 area=659.68 perimeter=131.20
SPHERE invalid object
PYRAMID invalid object
BOX length=12.20 width=13.30 height=14.40 volume=2336.54 surface=1058.92
SQUARE side=14.50 area=210.25 perimeter=58.00
SQUARE side=0.00 area=0.00 perimeter=0.00
RECTANGLE length=14.50 width=4.65 area=67.43 perimeter=38.30
CIRCLE radius=14.50 area=660.52 perimeter=91.11
CUBE side=13.00 volume=2197.00 surface=1014.00
BOX length=1.00 width=2.00 height=3.00 volume=6.00 surface=22.00
SPHERE invalid object
CYLINDER radius=1.23 height=6.00 volume=28.52 surface=55.88
CYLINDER radius=50.00 height=1.23 volume=9660.40 surface=16094.38
TRIANGLE side=1.20 area=0.62 perimeter=3.60
FILE OUTPUT FORMAT. Output to a text file named "output.txt" in exactly the same format as the console output. But unlike the console output, skip invalid shapes -- only output valid shapes.
ROUNDING: Format the calculated results to 2 digits after the decimal.
DO open your outputted TXT file in a text editor to see if it is formatted the same as the console output.
Submit shapes.cpp for grading. Do NOT submit any text input or output files.