//----------------------------------------------------------------------------- // File: HelloMath.cpp // Class: None // Parent: None // Children: None // Purpose: Tests out various mathematical functions //----------------------------------------------------------------------------- // The following are standard C/C++ header files. // If a filename is enclosed inside < > it means the header file is in the Include directory. // If a filename is enclosed inside " " it means the header file is in the current directory. #include // Character Types #include // Mathematical Constants #include // Variable Argument Lists #include // Standard Input/Output Functions #include // Utility Functions #include // String Operations #include // Signals (Contol-C + Unix System Calls) #include // Nonlocal Goto (For Control-C) #include // Time and Date information #include // Verify Program Assertion #include // Error Codes (Used in Unix system()) #include // Floating Point Constants #include // Implementation Constants #include // Standard Definitions #include // Exception handling (e.g., try, catch throw) #include #include #include #include using namespace std; //----------------------------------------------------------------------------- #define PI 3.14159265 //----------------------------------------------------------------------------- // Prototypes for local functions (functions not called by code in other files) //----------------------------------------------------------------------------- bool WriteDoubleToFileWithExponentInSpecifiedPrecision( double x, int precision, FILE *fptr ); bool GetStringFromFile( char inputString[], unsigned long sizeOfString, FILE* fptr); bool GetStringFromKeyboard( char inputString[], unsigned long sizeOfString); bool WriteStringToScreen ( const char outputString[]); bool WriteStringToFile( const char outputString[], FILE *fptr); const char* ConvertStringToDouble( const char *s, double &returnValue, double defaultValue); double ConvertFromRadiansToDegrees( double angleInDegrees); double ConvertFromDegreesToRadians( double angleInRadians);//{return angleInDegrees*(PI/180)}; //----------------------------------------------------------------------------- int main( int numberOfCommandLineArguments, char *arrayOfCommandLineArguments[] ) { char inputString[256]; WriteStringToScreen("Please enter an angle in degrees\n"); GetStringFromKeyboard(inputString,256); double returnValue; if(ConvertStringToDouble(inputString,returnValue,45)==NULL) { fprintf(stdout, "A non-number was entered therefore a default value of 45 degrees will be used\n"); } WriteStringToScreen ("\nThe angle that you entered in degrees is:"); WriteDoubleToFileWithExponentInSpecifiedPrecision(returnValue,5,stdout); double angleInRadians=ConvertFromDegreesToRadians(returnValue); WriteStringToScreen ("\nThe angle that you entered in radians is:"); WriteDoubleToFileWithExponentInSpecifiedPrecision(angleInRadians,5,stdout); WriteStringToScreen ("\nThe sin of the angle (in degrees) is:"); WriteDoubleToFileWithExponentInSpecifiedPrecision(sin(angleInRadians),5,stdout); WriteStringToScreen ("\nThe cosine of the angle (in degrees) is:"); WriteDoubleToFileWithExponentInSpecifiedPrecision(cos(angleInRadians),5,stdout); WriteStringToScreen ("\nThe tangent of the angle (in degrees) is:"); WriteDoubleToFileWithExponentInSpecifiedPrecision(tan(angleInRadians),5,stdout); printf("\n\n Press Enter to terminate the program:"); int key = getchar(); return 0; } //__________________________________________________________________________________ bool GetStringFromKeyboard( char inputString[], unsigned long sizeOfString) { GetStringFromFile(inputString,256,stdin); return 0; } //_________________________________________________________________________________ bool GetStringFromFile(char inputString[], unsigned long sizeOfString, FILE* fptr) { fgets (inputString, sizeOfString, fptr ); return 0; } //_____________________________________________________________________________________ const char* ConvertStringToDouble( const char *s, double &returnValue, double defaultValue) { returnValue = defaultValue; if (s) { char *pointerToCharacterAfterNumber = NULL; double x =strtod(s,&pointerToCharacterAfterNumber); char characterAfterNumber = pointerToCharacterAfterNumber ? *pointerToCharacterAfterNumber : 'z'; if ( characterAfterNumber == '\0' || isspace (characterAfterNumber) ) { returnValue = x; return pointerToCharacterAfterNumber; } } return NULL; } //___________________________________________________________________________________________ bool WriteStringToScreen ( const char outputString[]) { WriteStringToFile(outputString, stdout); return 0; } //___________________________________________________________________________________ bool WriteStringToFile( const char outputString[], FILE *fptr) { fprintf(fptr,outputString); return 0; } //___________________________________________________________________________________________ double ConvertFromDegreesToRadians( double returnValue) { double angleInRadians=returnValue*(PI/180); return angleInRadians; } //____________________________________________________________________________________________________________ bool WriteDoubleToFileWithExponentInSpecifiedPrecision(double x, int precision, FILE *fptr) { if (precision < 0 || precision >17) precision =15; int fieldWidth =precision +8; char format[20]; sprintf(format," %%- %d.%de", fieldWidth, precision); return fprintf( fptr, format, x) >0; }