1-13a
authorCian Bagshaw <cian@cianb.xyz>
Thu, 4 May 2023 21:35:06 +0000 (22:35 +0100)
committerCian Bagshaw <cian@cianb.xyz>
Thu, 4 May 2023 21:35:06 +0000 (22:35 +0100)
Made vertical histogram

1/13.c
1/13a.c [new file with mode: 0644]

diff --git a/1/13.c b/1/13.c
index 53da9c3..2a6458b 100644 (file)
--- a/1/13.c
+++ b/1/13.c
@@ -28,7 +28,7 @@ int main () {
        }
        while (lngst--) {       /* for each count */
                printf("%2.d|", lngst+1);                       /* length */
-               while (count[lngst]--) putchar('#');/* count (bar) */
+               while (count[lngst]--) putchar('-');/* count (bar) */
                putchar('\n');                                          /* newline */
        }       
 }
diff --git a/1/13a.c b/1/13a.c
new file mode 100644 (file)
index 0000000..1358227
--- /dev/null
+++ b/1/13a.c
@@ -0,0 +1,40 @@
+/*
+       Exercise 1-13. Write a program to print a histogram of the lengths of words in
+       its input. It is easy to draw the histogram with the bars horizontal; a
+       vertical orientation is more challenging.
+       ===
+*/
+
+#include <stdio.h>
+
+#define BUF 50 /* max word length */
+
+int main () {
+       int c, l, i, m, lngst;  /* character, length, index, most, longest */
+       int count[BUF];         /* length count */
+       
+       /* initialise to zero */
+       for (i=0; i<BUF; i++) count[i]=0;
+       lngst=m=l=0;
+
+       while ((c=getchar())!=EOF) {
+               if (c==' ' || c=='\t' || c=='\n') {     /* space */
+                       if (l) {        /* if word just ended */
+                               if (l>lngst) lngst=l;   /* update longest */
+                               count[l-1]++;                   /* add length to count */
+                               if (count[l-1]>m) m=count[l-1]; /* update most */
+                               l=0;                                    /* reset length count */
+                       }
+               } else l++;     /* count word length */
+       }
+       while (m--) {   /* for each line */
+               for (i=0; i<=lngst-1; i++) {    /* for each count */
+                       if (count[i]>=m+1)      printf(" | ");
+                       else                            printf("   ");
+               } putchar('\n');
+       }
+       for (i=1; i<=lngst; i++)        /* labels */
+               printf("%2.d ", i);
+       putchar('\n');
+
+}