// header files #include "Console_IO_Utility.h" #include // for trig functions // global constants const int DEGREES_IN_TRIANGLE = 180; const double ANGEL_C_DEG = 90; const double CONSTANT_PI = 3.141592654; const int TWO_ENDLINES = 2; const int TABLE_WIDTH = 35; const int DATA_NAME_WIDTH = 16; const int UNIT_WIDTH = 7; const int VALUE_WIDTH = 8; const char TOP_LINE[] = "==================================="; const char THICK_LINE_DIVIDER[] = "|=================================|"; const char THIN_LINE_DIVIDER[] = "|---------------------------------|"; const char PIPE_SPACE[] = "| "; const char SPACE_PIPE[] = " |"; // prototypes // none // main program int main() { // initialize function/variables // initialize variables double sideA, sideB, sideC; double sqSideA, sqSideB, sqSideC; double cosAngleA, angleA_Rad, angleA_Deg; double angleB_Deg; // show title // function: printString, printEndline(s) printEndline(); printString( "Right Triangle Angle Calculator" ); printEndline(); printString( "=========================" ); printEndlines( TWO_ENDLINES ); // get input // show expression, provide instructions // function: printString, printEndline(s) printString( "For any given triangle," ); printEndline(); printString( "Enter the side lengths below:" ); printEndlines( TWO_ENDLINES ); // get first coefficient // function: promptForDouble sideA = promptForDouble( "Enter side A: " ); // get second coefficient // function: promptForDouble sideB = promptForDouble( "Enter side B: " ); // process data // calculate sideA^2 // function: pow sqSideA = pow(sideA, 2); // calculate sideB^2 // function: pow sqSideB = pow(sideB, 2); // calculate sideC^2 sqSideC = sqSideA + sqSideB; // calculate sideC // function: sqrt sideC = sqrt(sqSideC); // find angles // find angle A cosAngleA = sideB/sideC; // find angle in radians // function: acos angleA_Rad = acos(cosAngleA); // find angle A in degrees angleA_Deg = angleA_Rad*(DEGREES_IN_TRIANGLE/CONSTANT_PI); // find angle B in degrees angleB_Deg = ANGEL_C_DEG - angleA_Deg; // display results // print top line // function: printString, printEndline printEndline(); printString( TOP_LINE ); printEndline(); // print title line // function: printCharacter, printStringJustified, printEndline printCharacter( PIPE ); printStringJustified( "RIGHT TRIANGLE ANGLE CALCULATIONS", TABLE_WIDTH - 2, "CENTER" ); printCharacter( PIPE ); printEndline(); // print thick divider line // function: printString, printEndline printString( THICK_LINE_DIVIDER ); printEndline(); // print sub title line // function: printStringJustified, printString, printCharacter printString( PIPE_SPACE ); printStringJustified( "Data Name", DATA_NAME_WIDTH - 1, "LEFT" ); printCharacter( PIPE ); printStringJustified( "Units", UNIT_WIDTH, "CENTER" ); printString( PIPE_SPACE ); printStringJustified( "Values", VALUE_WIDTH - 2, "CENTER" ); printString( SPACE_PIPE ); printEndline(); // print thin divider line // function: printString, printEndline printString( THIN_LINE_DIVIDER ); printEndline(); // print Side A line printString( PIPE_SPACE ); printStringJustified( "Side A", DATA_NAME_WIDTH - 1, "LEFT" ); printCharacter( PIPE ); printStringJustified( "m", UNIT_WIDTH, "CENTER" ); printCharacter( PIPE ); printDoubleJustified( sideA, PRECISION, VALUE_WIDTH - 1, "RIGHT" ); printString( SPACE_PIPE ); printEndline(); // print thin divider line // function: printString, printEndline printString( THIN_LINE_DIVIDER ); printEndline(); // print Side B line printString( PIPE_SPACE ); printStringJustified( "Side B", DATA_NAME_WIDTH - 1, "LEFT" ); printCharacter( PIPE ); printStringJustified( "m", UNIT_WIDTH, "CENTER" ); printCharacter( PIPE ); printDoubleJustified( sideB, PRECISION, VALUE_WIDTH - 1, "RIGHT" ); printString( SPACE_PIPE ); printEndline(); // print thin divider line // function: printString, printEndline printString( THIN_LINE_DIVIDER ); printEndline(); // print Side C line printString( PIPE_SPACE ); printStringJustified( "Side C", DATA_NAME_WIDTH - 1, "LEFT" ); printCharacter( PIPE ); printStringJustified( "m", UNIT_WIDTH, "CENTER" ); printCharacter( PIPE ); printDoubleJustified( sideC, PRECISION, VALUE_WIDTH - 1, "RIGHT" ); printString( SPACE_PIPE ); printEndline(); // print thick divider line // function: printString, printEndline printString( THICK_LINE_DIVIDER ); printEndline(); // print Angle a line printString( PIPE_SPACE ); printStringJustified( "Angle a", DATA_NAME_WIDTH - 1, "LEFT" ); printCharacter( PIPE ); printStringJustified( "deg", UNIT_WIDTH, "CENTER" ); printCharacter( PIPE ); printDoubleJustified( angleA_Deg, PRECISION, VALUE_WIDTH - 1, "RIGHT" ); printString( SPACE_PIPE ); printEndline(); // print thin divider line // function: printString, printEndline printString( THIN_LINE_DIVIDER ); printEndline(); // print Angle b line printString( PIPE_SPACE ); printStringJustified( "Angle b", DATA_NAME_WIDTH - 1, "LEFT" ); printCharacter( PIPE ); printStringJustified( "deg", UNIT_WIDTH, "CENTER" ); printCharacter( PIPE ); printDoubleJustified( angleB_Deg, PRECISION, VALUE_WIDTH - 1, "RIGHT" ); printString( SPACE_PIPE ); printEndline(); // print thin divider line // function: printString, printEndline printString( THIN_LINE_DIVIDER ); printEndline(); // print Angle c line printString( PIPE_SPACE ); printStringJustified( "Angle c", DATA_NAME_WIDTH - 1, "LEFT" ); printCharacter( PIPE ); printStringJustified( "deg", UNIT_WIDTH, "CENTER" ); printCharacter( PIPE ); printDoubleJustified( ANGEL_C_DEG, PRECISION, VALUE_WIDTH - 1, "RIGHT" ); printString( SPACE_PIPE ); printEndline(); // print thick divider line // function: printString, printEndline printString( THICK_LINE_DIVIDER ); printEndline(); // end program // show end program // function: printString, printEndline printEndline(); printString( "End Program" ); printEndline(); // return program success return 0; } // supporting functions // none