From 47cd42004bb618bc65c572648e94dfd377e486cb Mon Sep 17 00:00:00 2001 From: dhuha99 Date: Thu, 25 Sep 2014 17:10:05 -0300 Subject: [PATCH 1/7] function mean --- 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 10:59:29 -0300 Subject: [PATCH 2/7] function to calculate mean is added which fixes #2 --- mm.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) mode change 100644 => 100755 mm.c diff --git a/mm.c b/mm.c old mode 100644 new mode 100755 index ff1779f..ff0d497 --- a/mm.c +++ b/mm.c @@ -12,6 +12,19 @@ int numcmp (const void *a, const void *b) { return 0; } +// function to calculate mean +float mean(const int* a, int n){ + float avg =0; + int i; + + for(i=0; i Date: Wed, 1 Oct 2014 12:33:09 -0300 Subject: [PATCH 3/7] function to calculate median is added which fixes #3 --- mm.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mm.c b/mm.c index ff0d497..e36b5dd 100755 --- a/mm.c +++ b/mm.c @@ -25,6 +25,18 @@ float mean(const int* a, int n){ return avg; } +// function to calculate median +float median(const int* a, int n){ + float med = 0; + + if(n % 2 == 0) + med = ( a[n/2-1] + a[n/2] ) / 2.0; + else + med = a[n/2]; + + return med; +} + int main(int argc, char *argv[]) { int i, length, *pt; From 9d578f36dc6f21b8d56f28721c1a18dbed077348 Mon Sep 17 00:00:00 2001 From: dhuha99 Date: Wed, 1 Oct 2014 13:28:53 -0300 Subject: [PATCH 4/7] fork is called. child calls median and parent calls mean. This fixes #4 --- mm.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/mm.c b/mm.c index e36b5dd..fdb43b6 100755 --- a/mm.c +++ b/mm.c @@ -71,7 +71,22 @@ int main(int argc, char *argv[]) { for (i=0; i Date: Wed, 1 Oct 2014 13:34:39 -0300 Subject: [PATCH 5/7] child prints median. This fixes #5 --- mm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm.c b/mm.c index fdb43b6..22fba44 100755 --- a/mm.c +++ b/mm.c @@ -83,6 +83,7 @@ int main(int argc, char *argv[]) { exit(1); } else if (rc == 0) { //child (new process) medianVal = median(pt, length); + fprintf(stdout, "median=%.2f\n", medianVal); } else { // parent goes down this path (main) meanVal = mean(pt, length); fprintf(stdout, "\n%s: FIN. \n", argv[0]); From 0305473185f93db58050a6117fe911eed298cd0e Mon Sep 17 00:00:00 2001 From: dhuha99 Date: Wed, 1 Oct 2014 13:40:14 -0300 Subject: [PATCH 6/7] parent prints mean. This fixes #6 --- mm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm.c b/mm.c index 22fba44..fcc43c5 100755 --- a/mm.c +++ b/mm.c @@ -86,6 +86,7 @@ int main(int argc, char *argv[]) { fprintf(stdout, "median=%.2f\n", medianVal); } else { // parent goes down this path (main) meanVal = mean(pt, length); + fprintf(stdout, "mean=%.2f\n", meanVal); fprintf(stdout, "\n%s: FIN. \n", argv[0]); } From 1d5b8dc61b3460e69761a677a8c07c97ca9b3390 Mon Sep 17 00:00:00 2001 From: dhuha99 Date: Wed, 1 Oct 2014 13:43:02 -0300 Subject: [PATCH 7/7] parent waits for child to finish which fixes #7 --- mm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm.c b/mm.c index fcc43c5..e41ec6e 100755 --- a/mm.c +++ b/mm.c @@ -87,6 +87,7 @@ int main(int argc, char *argv[]) { } else { // parent goes down this path (main) meanVal = mean(pt, length); fprintf(stdout, "mean=%.2f\n", meanVal); + wait(NULL); fprintf(stdout, "\n%s: FIN. \n", argv[0]); }