Hi all,
I'm trying to further my knowledge of C by linking some of my class work together so I get a better understanding of building more complete programs.
At the moment I've got two small programs, the first opens a file for writing then writes 500 instances of random numbers between 0 and 100 to that file.
The second, calls that first file and opens the second file for writing, it then allocates each number to an array then does a bubble sort of that array and writes the sorted list to the second file.
I've got all of this working fine, and what I want to do is to count each time a number occurs so I can output something like:
There are x instances of number 0,
There are x instances of number 1,
etc, etc.
Usually when doing something like this in my course work I would use a switch command but having 100 case arguments isn't particularly efficient coding. So I am wondering what would be the best way to proceed?
I've included both programs below:
First program:
Second Program:Code:#include <stdio.h> #include <conio.h> #include <stdlib.h> # define NUMCOUNT 500 int square (int); void main() { FILE *fpin; int count = 0, rand(); if ((fpin = fopen("H:\\numbers.dat", "w")) == NULL) printf("Cannot open file"); else { for (count = 1; count <= NUMCOUNT; ++count) fprintf(fpin, "%d\n", rand() % 101); if (fclose (fpin) == EOF) printf("Cannot close file"); } printf("%d random numbers below or equal to 100\n", NUMCOUNT); printf("have been written to: \"H:\\numbers.dat\""); getch(); }
Code:#include <stdio.h> #include <conio.h> #include <stdlib.h> #define SIZE 500 void fill_array(int, int list[]); void print_array(int, int list[]); void sort_array(int, int list[]); FILE *fpin, *fpout; int n, list[SIZE]; void main() { fpout = fopen("H:\\SP3 misc. work\\sorted_list.dat", "w"); fpin = fopen("H:\\numbers.dat", "r"); if ((fpin == NULL) || (fpout == NULL)) { printf("There is an error opening one of the files"); } else { fill_array(n,list); sort_array(n,list); print_array(n, list); } if ((fclose(fpin) == EOF) || (fclose(fpout) == EOF)) printf("There is an error closing on of the files"); else printf("File numbers.dat has been sorted\n"); printf("\n\n*************************\n"); puts("Press any key to continue"); getch(); } void fill_array(int, int list[]) { int count =0; char cr; while (fscanf(fpin, "%d%c", &list[count], &cr) != EOF) { count++; } return; } void print_array(int, int list[]) { int count; for (count=0; count<=SIZE; count++) fprintf(fpout, "%d\n", list[count]); return; } void sort_array(int, int list[]) { int temp; // Temp varible used in swapping process int count1, count2; // Counters for two nested loops for (count1=0; count1<=(SIZE-1); count1++) { for (count2=(count1+1); count2<=SIZE; count2++) { if (list[count1] > list[count2]) { temp = list[count1]; // Swapping process list[count1] = list[count2]; // Swapping process list[count2] = temp; // Swapping process } } } return; }



LinkBack URL
About LinkBacks


