From 3dbe54853c4733bbe5ff58a6403d1759e921bdc3 Mon Sep 17 00:00:00 2001 From: sumuel Date: Sun, 7 Jun 2026 02:07:59 +0100 Subject: Change main.c to stats.c --- Makefile | 3 ++- build.sh | 2 +- main.c | 81 ---------------------------------------------------------------- stats.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 83 deletions(-) delete mode 100644 main.c create mode 100644 stats.c diff --git a/Makefile b/Makefile index e850d74..ace1cb4 100755 --- a/Makefile +++ b/Makefile @@ -5,8 +5,9 @@ CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os CC = gcc +SRC = stats.c all: - ${CC} ${CFLAGS} main.c -o stats + ${CC} ${CFLAGS} ${SRC} -o stats .PHONY: all clean dist install uninstall diff --git a/build.sh b/build.sh index cfe5ef0..e980568 100755 --- a/build.sh +++ b/build.sh @@ -2,6 +2,6 @@ clear -vim main.c +vim stats.c make diff --git a/main.c b/main.c deleted file mode 100644 index fa69715..0000000 --- a/main.c +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include - -/* Enums make words into numbers, ergo no magic numbers */ -enum MODE { - MODE_MAX, - MODE_MIN, - MODE_DIFF -}; - -void help(){ - printf("Usage: stats \n"); - exit(1); -} - -/* ADDING UP ALL THE VALUES */ -int sigma(int argc, char * argv[]) { - char *endptr; - int sum = 0; - - for (int i = 1; i < argc; i++) { - - sum += strtol(argv[i], &endptr, 10); /* convert the value to an integer and add it on */ - if (endptr == argv[i] || *endptr != '\0') { - help(); - } - - } - return sum; -} - -/* FINDING MEAN */ -float average(int n, int sum) { - float mean = (float) sum / n; - return mean; -} - -/* FINDING THE MIN/MAX/DIFFERENCE */ -int range(int argc, char * argv[], enum MODE mode) { - int low = strtol(argv[1], NULL, 10); - int high = low; - - for (int i = 1; i < argc; i++) { - int val = strtol(argv[i], NULL, 10); - if (val > high) high = val; - if (low > val) low = val; - } - - /* Check once and return what we need */ - switch (mode) { - case MODE_MAX: - return high; - case MODE_MIN: - return low; - case MODE_DIFF: - return high - low; - } - return 1; -} - -int main(int argc, char * argv[]) { - if (argc < 2) { /* Stop empty input */ - help(); - } - - int n = argc - 1; /* this is how many numbers there are */ - int sum = sigma(argc, argv); /* sigma means adding them all together */ - float mean = average(n, sum); /* the sum divided by the however many numbers there are */ - int min = range(argc, argv, MODE_MIN); /* Using enums here to use words instead of numbers */ - int max = range(argc, argv, MODE_MAX); - int diff = range(argc, argv, MODE_DIFF); - - - /* align text left for 6 and 12 right */ - printf("%-6s %12d\n", "num:", n); - printf("%-6s %12d\n", "sum:", sum); - printf("%-6s %12.3f\n", "mean:", mean); - printf("%-6s %12d\n", "min:", min); - printf("%-6s %12d\n", "max:", max); - printf("%-6s %12d\n", "range:", diff); -} diff --git a/stats.c b/stats.c new file mode 100644 index 0000000..fa69715 --- /dev/null +++ b/stats.c @@ -0,0 +1,81 @@ +#include +#include + +/* Enums make words into numbers, ergo no magic numbers */ +enum MODE { + MODE_MAX, + MODE_MIN, + MODE_DIFF +}; + +void help(){ + printf("Usage: stats \n"); + exit(1); +} + +/* ADDING UP ALL THE VALUES */ +int sigma(int argc, char * argv[]) { + char *endptr; + int sum = 0; + + for (int i = 1; i < argc; i++) { + + sum += strtol(argv[i], &endptr, 10); /* convert the value to an integer and add it on */ + if (endptr == argv[i] || *endptr != '\0') { + help(); + } + + } + return sum; +} + +/* FINDING MEAN */ +float average(int n, int sum) { + float mean = (float) sum / n; + return mean; +} + +/* FINDING THE MIN/MAX/DIFFERENCE */ +int range(int argc, char * argv[], enum MODE mode) { + int low = strtol(argv[1], NULL, 10); + int high = low; + + for (int i = 1; i < argc; i++) { + int val = strtol(argv[i], NULL, 10); + if (val > high) high = val; + if (low > val) low = val; + } + + /* Check once and return what we need */ + switch (mode) { + case MODE_MAX: + return high; + case MODE_MIN: + return low; + case MODE_DIFF: + return high - low; + } + return 1; +} + +int main(int argc, char * argv[]) { + if (argc < 2) { /* Stop empty input */ + help(); + } + + int n = argc - 1; /* this is how many numbers there are */ + int sum = sigma(argc, argv); /* sigma means adding them all together */ + float mean = average(n, sum); /* the sum divided by the however many numbers there are */ + int min = range(argc, argv, MODE_MIN); /* Using enums here to use words instead of numbers */ + int max = range(argc, argv, MODE_MAX); + int diff = range(argc, argv, MODE_DIFF); + + + /* align text left for 6 and 12 right */ + printf("%-6s %12d\n", "num:", n); + printf("%-6s %12d\n", "sum:", sum); + printf("%-6s %12.3f\n", "mean:", mean); + printf("%-6s %12d\n", "min:", min); + printf("%-6s %12d\n", "max:", max); + printf("%-6s %12d\n", "range:", diff); +} -- cgit v1.2.3