From 57daa5a13302da3679bc6b988d53a727eb28a309 Mon Sep 17 00:00:00 2001 From: Benjamin Sabean Date: Thu, 25 Sep 2014 19:25:14 +0000 Subject: [PATCH 1/9] Created mm.c file --- mm.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 mm.c diff --git a/mm.c b/mm.c new file mode 100644 index 0000000..ff1779f --- /dev/null +++ b/mm.c @@ -0,0 +1,52 @@ +#include +#include + +#define debug 0 + +// Comparison function for qsort() +int numcmp (const void *a, const void *b) { + int x = *((int*) a); + int y = *((int*) b); + if (x > y) return 1; + if (x < y) return -1; + return 0; +} + +int main(int argc, char *argv[]) { + + int i, length, *pt; + + // Check for proper usage + if (argc < 2) { + fprintf(stderr, "%s: Aborting, not enough arguments.\n", argv[0]); + return (-1); + } + + // Determine amount of numbers from argc + length = argc - 1; +#if debug + fprintf(stderr, "%s: DEBUG: %d numbers were passed.\n", argv[0], length); +#endif + + // Allocate memory for array of number (and error check) + if ((pt = malloc(length * sizeof(int))) == NULL) { + fprintf(stderr, "%s: Could not allocate memory.\n", argv[0]); + } + + // Read numbers into array + for (i = 0; i < length; i++) { + pt[i] = (int) strtol(argv[i+1], NULL, 10); + } + + // Sort numbers + qsort(pt, length, sizeof(int), numcmp); + + // Print out numbers + fprintf(stdout, "%s: Sorted output is: \n", argv[0]); + for (i=0; i Date: Wed, 1 Oct 2014 11:32:46 +0000 Subject: [PATCH 2/9] Fixes #2 --- mm.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mm.c b/mm.c index ff1779f..8576d84 100644 --- a/mm.c +++ b/mm.c @@ -12,6 +12,18 @@ int numcmp (const void *a, const void *b) { return 0; } +// mean() +// int n, the length of the list +// char *list[], command line argument. Data starts at index 1. +double mean(int n, char *list[]) { + int sum = 0; + int i; + for(i = 1; i < n; i++) { + sum += atoi(list[i]); + } + return (double) sum / (double)(n-1); +} + int main(int argc, char *argv[]) { int i, length, *pt; @@ -48,5 +60,8 @@ int main(int argc, char *argv[]) { } fprintf(stdout, "\n%s: FIN. \n", argv[0]); + // Calculate mean + fprintf(stdout, "\nMean = %f\n", mean(argc,argv)); + return 0; } From f77e9deea36ce7fd9759313ec55f512adaefdc86 Mon Sep 17 00:00:00 2001 From: Benjamin Sabean Date: Wed, 1 Oct 2014 12:12:17 +0000 Subject: [PATCH 3/9] Fixes #3 --- mm.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/mm.c b/mm.c index 8576d84..a7dc6d2 100644 --- a/mm.c +++ b/mm.c @@ -24,6 +24,18 @@ double mean(int n, char *list[]) { return (double) sum / (double)(n-1); } +// median() +// int n, number of elements in list. +// int *list pointer to first element of a SORTED list. +double median(int n , int *list) { + if ((n-1) % 2 != 0) { + return (double) list[(n-1)/2]; + } + else { + return ((double) list[((n-1)/2)-1] + (double) list[((n-1)/2)]) / 2.0; + } +} + int main(int argc, char *argv[]) { int i, length, *pt; @@ -63,5 +75,7 @@ int main(int argc, char *argv[]) { // Calculate mean fprintf(stdout, "\nMean = %f\n", mean(argc,argv)); + // Calculate median + fprintf(stdout, "Median = %f\n", median(argc,pt)); return 0; } From 06d9672af639987a4592e094990e9f7334168b44 Mon Sep 17 00:00:00 2001 From: Benjamin Sabean Date: Wed, 1 Oct 2014 12:41:44 +0000 Subject: [PATCH 4/9] Fixes #4 --- mm.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/mm.c b/mm.c index a7dc6d2..89139f9 100644 --- a/mm.c +++ b/mm.c @@ -1,7 +1,10 @@ #include #include +#include #define debug 0 +#define SUCCESS 0 +#define FAILURE -1 // Comparison function for qsort() int numcmp (const void *a, const void *b) { @@ -26,7 +29,7 @@ double mean(int n, char *list[]) { // median() // int n, number of elements in list. -// int *list pointer to first element of a SORTED list. +// int *list, pointer to first element of a SORTED list. double median(int n , int *list) { if ((n-1) % 2 != 0) { return (double) list[(n-1)/2]; @@ -43,7 +46,7 @@ int main(int argc, char *argv[]) { // Check for proper usage if (argc < 2) { fprintf(stderr, "%s: Aborting, not enough arguments.\n", argv[0]); - return (-1); + return FAILURE; } // Determine amount of numbers from argc @@ -70,8 +73,21 @@ int main(int argc, char *argv[]) { for (i=0; i 0) { + //parent code. + } // Calculate mean fprintf(stdout, "\nMean = %f\n", mean(argc,argv)); From fbda05628290dee874d10c73b7a671e99b8166c9 Mon Sep 17 00:00:00 2001 From: Benjamin Sabean Date: Wed, 1 Oct 2014 12:46:22 +0000 Subject: [PATCH 5/9] Fixes #5 --- mm.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mm.c b/mm.c index 89139f9..c862539 100644 --- a/mm.c +++ b/mm.c @@ -83,6 +83,7 @@ int main(int argc, char *argv[]) { if (rc == 0) { // Child code. + fprintf(stdout, "Median = %f\n", median(argc,pt)); } if (rc > 0) { @@ -90,8 +91,5 @@ int main(int argc, char *argv[]) { } // Calculate mean fprintf(stdout, "\nMean = %f\n", mean(argc,argv)); - - // Calculate median - fprintf(stdout, "Median = %f\n", median(argc,pt)); return 0; } From 8266d564895ee2c4cd1ef230727f72c35289939d Mon Sep 17 00:00:00 2001 From: Benjamin Sabean Date: Wed, 1 Oct 2014 13:01:24 +0000 Subject: [PATCH 6/9] Fixes #6 --- mm.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/mm.c b/mm.c index c862539..0f31831 100644 --- a/mm.c +++ b/mm.c @@ -42,7 +42,7 @@ double median(int n , int *list) { int main(int argc, char *argv[]) { int i, length, *pt; - + // Check for proper usage if (argc < 2) { fprintf(stderr, "%s: Aborting, not enough arguments.\n", argv[0]); @@ -59,7 +59,7 @@ int main(int argc, char *argv[]) { if ((pt = malloc(length * sizeof(int))) == NULL) { fprintf(stderr, "%s: Could not allocate memory.\n", argv[0]); } - + // Read numbers into array for (i = 0; i < length; i++) { pt[i] = (int) strtol(argv[i+1], NULL, 10); @@ -68,28 +68,30 @@ int main(int argc, char *argv[]) { // Sort numbers qsort(pt, length, sizeof(int), numcmp); - // Print out numbers - fprintf(stdout, "%s: Sorted output is: \n", argv[0]); - for (i=0; i 0) { //parent code. + fprintf(stdout,"Mean = %f\n", mean(argc,argv)); +#if debug + fprintf(stdout, "%s: DEBUG: rc = %d, PID = %d\n", argv[0],rc,getpid()); +#endif } - // Calculate mean - fprintf(stdout, "\nMean = %f\n", mean(argc,argv)); return 0; } From c8048bb0b44524ee61ded1f78ccc5b87e055f70b Mon Sep 17 00:00:00 2001 From: Benjamin Sabean Date: Wed, 1 Oct 2014 13:09:19 +0000 Subject: [PATCH 7/9] Fixed #7 --- mm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mm.c b/mm.c index 0f31831..443cd36 100644 --- a/mm.c +++ b/mm.c @@ -1,6 +1,7 @@ #include #include #include +#include #define debug 0 #define SUCCESS 0 @@ -88,6 +89,7 @@ int main(int argc, char *argv[]) { if (rc > 0) { //parent code. + wait(NULL); // wait until child is finished. fprintf(stdout,"Mean = %f\n", mean(argc,argv)); #if debug fprintf(stdout, "%s: DEBUG: rc = %d, PID = %d\n", argv[0],rc,getpid()); From b502c3eb78c47eaf203126f421421a7767f05051 Mon Sep 17 00:00:00 2001 From: Benjamin Sabean Date: Wed, 1 Oct 2014 13:14:05 +0000 Subject: [PATCH 8/9] Program is now working to assignment specifications. --- mm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm.c b/mm.c index 443cd36..f9b4fb3 100644 --- a/mm.c +++ b/mm.c @@ -95,5 +95,5 @@ int main(int argc, char *argv[]) { fprintf(stdout, "%s: DEBUG: rc = %d, PID = %d\n", argv[0],rc,getpid()); #endif } - return 0; + return SUCCESS; } From b6047371a8e1f403058c614ddc61ff7cec63a4e7 Mon Sep 17 00:00:00 2001 From: Benjamin Sabean Date: Wed, 1 Oct 2014 13:18:40 +0000 Subject: [PATCH 9/9] Made a few minor fixes to coding style. --- mm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm.c b/mm.c index f9b4fb3..0d9ccbe 100644 --- a/mm.c +++ b/mm.c @@ -76,7 +76,7 @@ int main(int argc, char *argv[]) { if (rc < 0) { fprintf(stderr,"%s aborting: Could not fork\n", argv[0]); - return SUCCESS; + return FAILURE; } if (rc == 0) {