#pragma warning(disable:4996) #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) //----------------------------------------------------------------------------- // Prototypes for local functions (functions not called by code in other files) //----------------------------------------------------------------------------- bool GetStringFromFile( char inputString[], unsigned long sizeOfString, FILE *fptr ){return fgets(inputString, sizeOfString, fptr) !=NULL;} bool GetStringFromKeyboard( char inputString[], unsigned long sizeOfString ){return GetStringFromFile(inputString, sizeOfString, stdin);} bool WriteStringToFile( const char outputString[], FILE *fptr ){return fputs(outputString, stdout)!=EOF; } bool WriteStringToScreen( const char outputString[] ){return WriteStringToFile(outputString, stdout);} bool WriteDoubleToFileWithEExponentInSpecifiedPrecision( double x, int precision, FILE *fptr); const char* ConvertStringToLong( const char *s, long &returnValue, long defaultValue ); double ConvertFromRadiansToDegrees( double angleInRadians ){ return angleInRadians * 57.295779513082320876798154814105170332405472466564321549160243861; } double ConvertFromDegreesToRadians( double angleInDegrees ){ return (angleInDegrees*3.1415926535897932384626433832795)/180; } FILE* FileOpenWithMessageIfCannotOpen( const char *filename, const char *attribute); int main( void ) { // Prompt the user to enter an angle in degrees between 180 and 720 printf( " Enter the angle btw 180 and 720: "); // Verification of the angle char angleStringFromKeyboard[17]; GetStringFromKeyboard( angleStringFromKeyboard, 17); long angleInDegrees; ConvertStringToLong( angleStringFromKeyboard, angleInDegrees, 360); // Prompt the user to enter the precision for writing numbers printf( " Enter the precision for writing numbers btw 1 - 17\n"); char precisionOfTheOutput[2]; GetStringFromKeyboard( precisionOfTheOutput, 2); long precision; ConvertStringToLong( precisionOfTheOutput, precision, 5); FILE* filePtr; filePtr = FileOpenWithMessageIfCannotOpen( "HelloMath2Results.txt", "w+" ); for( int i = 0; i < angleInDegrees; i++) { double angleInRadians = ConvertFromDegreesToRadians(i); double sinAngle = sin(angleInRadians); double cosAngle = cos(angleInRadians); double tanAngle = tan(angleInRadians); WriteDoubleToFileWithEExponentInSpecifiedPrecision( i, precision, filePtr); WriteDoubleToFileWithEExponentInSpecifiedPrecision( angleInRadians, precision, filePtr); WriteDoubleToFileWithEExponentInSpecifiedPrecision( sinAngle, precision, filePtr); WriteDoubleToFileWithEExponentInSpecifiedPrecision( cosAngle, precision, filePtr); WriteDoubleToFileWithEExponentInSpecifiedPrecision( tanAngle, precision, filePtr); fprintf( filePtr, "\n"); } fclose(filePtr); WriteStringToScreen( "\n\n Press enter to terminate... "); getchar(); return 0; } const char* ConvertStringToLong( const char *s, long &returnValue, long defaultValue ) { returnValue = defaultValue; // Check the input if it is valid if( s!=NULL ) { char *ptrToCharacterAfterNumber = NULL; long variable = strtol( s, &ptrToCharacterAfterNumber, 17 ); char CharacterAfterNumber = ptrToCharacterAfterNumber ? *ptrToCharacterAfterNumber : 'z'; if( CharacterAfterNumber == '\0' || isspace(CharacterAfterNumber) ) { returnValue = variable; } //if angle is not valid, then the default value will be used else printf("/n 360 degree will be used as default"); } return 0; } FILE* FileOpenWithMessageIfCannotOpen( const char *filename, const char *attribute) { FILE *stream; if( (stream = fopen( filename, attribute )) == NULL) { printf("Err: cannot open file\n"); } else { printf("file opened\n"); } return stream; } bool WriteDoubleToFileWithEExponentInSpecifiedPrecision( double x, int precision, FILE *fptr) { if( precision >17 || precision < 1 ) { precision = 5; } int fieldWidth = precision + 8; char stringLength[22]; sprintf( stringLength, " %%- %d.%dE", fieldWidth, precision ); return fprintf( fptr, stringLength, x ) > 0; }