summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authors a m <samuel@yakubos.org>2026-06-07 01:31:40 +0100
committers a m <samuel@yakubos.org>2026-06-07 01:31:40 +0100
commit73709637abcc952c8efda0349f7f639b90302e7a (patch)
treed685e5ff6212b64c7239efa0476a790e18d00895 /main.c
init
Diffstat (limited to 'main.c')
-rw-r--r--main.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..0c90732
--- /dev/null
+++ b/main.c
@@ -0,0 +1,81 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+/* Enums make words into numbers, ergo no magic numbers */
+enum MODE {
+ MODE_MAX,
+ MODE_MIN,
+ MODE_DIFF
+};
+
+void help(){
+ printf("Usage: stats <numbers>\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 10 right */
+ printf("%-6s %10d\n", "num:", n);
+ printf("%-6s %10d\n", "sum:", sum);
+ printf("%-6s %10.3f\n", "mean:", mean);
+ printf("%-6s %10d\n", "min:", min);
+ printf("%-6s %10d\n", "max:", max);
+ printf("%-6s %10d\n", "range:", diff);
+}