// Modified from C18 Ex5 #include #include #include #define DEBUG_MAIN #define DEBUG_FNS float degrees_to_radians(float degrees) { #ifdef DEBUG_FNS printf("degrees_to_radians(degrees=%f): called\n", degrees); #endif return M_PI * degrees / 180.0; } // Simple function to populate an integer array void PopulateTheArray ( int Size, float ArrayData[]) { #ifdef DEBUG_FNS printf("PopulateTheArray(Size=%d, ArrayData): called\n", Size); #endif int i; // Variable to use in our loop for ( i = 0 ; i < Size ; i++) { ArrayData[i] = degrees_to_radians(i); // Treat it like a normal array } } // Simple function do display contents an integer array void DisplayTheArray ( int Size, float ArrayData[]) { #ifdef DEBUG_FNS printf("DisplayTheArray(Size=%d, ArrayData): called\n", Size); #endif int i; // Variable to use in our loop for ( i = 0 ; i < Size ; i++) { #ifdef DEBUG_FNS printf("DisplayTheArray(): i=%d\n", i); #endif printf ("%d\t%0.3f\n", i, ArrayData[i]); } } int SaveArrayBinary (char *filename, int Size, float ArrayData[]) { #ifdef DEBUG_FNS printf("DisplayTheArray(filename=%s, Size=%d, ArrayData): called\n", filename, Size); #endif FILE *fp; // File Pointer int i; // Variable to use in our loop fp = fopen(filename, "wb"); #ifdef DEBUG_FNS printf("DisplayTheArray(): fp=%p\n", fp); #endif // if file open failed, return error to caller if (fp == NULL) { return 1; } // write data fwrite(ArrayData, sizeof(float), Size, fp); // close file, returns 0 on successful closing (therefore function has executed sucessfully) return fclose(fp); } // Main () - execution starts here int main (void) { #ifdef DEBUG_MAIN printf("main(): called\n"); #endif char filename[2049]; int rc, iSizeForArray; float *pData; // A pointer to hold the base address of out array // Ask for the size of the array and store result printf("Please enter the size of the array to dynamically allocate: "); scanf ("%d", &iSizeForArray); #ifdef DEBUG_MAIN printf("main(): iSizeForArray=%d\n", iSizeForArray); #endif // Use calloc with checking pData = calloc( iSizeForArray, sizeof (float)); #ifdef DEBUG_MAIN printf("main(): pData=%p\n", pData); #endif // Check we got the memory if ( pData == NULL) { printf ("Sorry, I could not allocate the memory, bye!\n"); return -1; } // Pass the size, iSizeForArray) and the pointer created // which points to the start of the sucesfully allocated memory PopulateTheArray(iSizeForArray, pData); DisplayTheArray(iSizeForArray, pData); // Exercise doesn't ask to use function but kind of pointless without printf("Enter filename: "); scanf("%2048s", filename); #ifdef DEBUG_MAIN printf("main(): filename=%s\n", filename); #endif rc = SaveArrayBinary(filename, iSizeForArray, pData); #ifdef DEBUG_MAIN printf("main(): rc=%d\n", rc); #endif if (rc != 0) { printf("Error saving file\n"); free(pData); return rc; } free(pData); // Free up the memory before exiting return (0); // Exit indicating sucess }