diff --git a/KNR C/ex1_13.c b/KNR C/ex1_13.c deleted file mode 100644 index 6cc80ef..0000000 --- a/KNR C/ex1_13.c +++ /dev/null @@ -1,41 +0,0 @@ -#include - -#define IN 1 /*State when selected character is within a word*/ -#define OUT 0 /*State when selected character is any kind of whitespace*/ - - - -int main(){ - - int charCount[10]; /*Array for storing char lengths*/ - - int last, lCount, state, i; /*last stores last character, or 0 at init. lCount increments every time the main for loop encounters a non-newline/whitespace character and then resets when one is encountered after commiting its value to charCount.*/ - /*Begin array initialization*/ - for(i = 0; i < 10; ++i){ - charCount[i] = 0; - } - /*End array init*/ - - - last = lCount = 0; - - for(int a = getchar(); a != EOF; a = getchar()){ - - if(a == '\t' || a == ' ' || a == '\n'){ /*Check if current char is WS. If so, set state to OUT and check if the last character was not. If it was not, then we are exiting a word, and so comitting lCount to charCount.*/ - state = OUT; - if (last != '\t' && last != ' ' && last != '\n'){ /*True on word exit only.*/ - ++charCount[lCount-'0']; - lCount = 0; - } - - } else { - state = IN; - ++lCount; /*Increment lCount when encountering a non-WS character.*/ - } - last = a; - } - printf("Word letter count composition:\n1 2 3 4 5 6 7 8 9 10\n"); - for (i = 0; i < 10; ++i) - printf("%d ", charCount[i]); - return 0; - } diff --git a/KNR C/ex1_13_improved.c b/KNR C/ex1_13_improved.c deleted file mode 100644 index 6cfd69a..0000000 --- a/KNR C/ex1_13_improved.c +++ /dev/null @@ -1,78 +0,0 @@ -#include - -/*Slight modification to ex1_13.c that makes charCount an array of ints 11 entries long, in order to circumvent the need for additional mathematical operations down the line as a consequence of ocurrences of the value "1" being store at position 0. This sacrifices 4 bytes of memory in the stack by extending the array, but results a shorter binary. - * - * how much shorter, you ask? - * - * 1 instruction. - * - * lol.*/ - -#define IN 1 /*State when selected character is within a word*/ -#define OUT 0 /*State when selected character is any kind of whitespace*/ - - - -int main(){ - - int charCount[11]; /*Array for storing char lengths*/ - - int last, lCount, state, i; /*last stores last character, or 0 at init. lCount increments every time the main for loop encounters a non-newline/whitespace character and then resets when one is encountered after commiting its value to charCount.*/ - /*Begin array initialization*/ - for(i = 0; i < 11; ++i){ - charCount[i] = 0; - } - /*End array init*/ - - - last = lCount = 0; - - /*Begin input letter count enumeration.*/ - for(int a = getchar(); a != EOF; a = getchar()){ - - /*Check if current char is WS. If so, set state to OUT and check if the last character was not. If it was not, then we are exiting a word, and so comitting lCount to charCount.*/ - if(a == '\t' || a == ' ' || a == '\n'){ - state = OUT; - if (last != '\t' && last != ' ' && last != '\n'){ /*True on word exit only.*/ - if(lCount > 10){ /*Array charCount only stores values up to 10, so we will add any longer words to the column for 10+*/ - ++charCount[10]; - } else { - - ++charCount[(lCount)]; } - lCount = 0; /*Reset lCount when a condition that dumps it to charCount is triggered*/ - } - - } else { - state = IN; - ++lCount; /*Increment lCount when encountering a non-WS character.*/ - } - last = a; - } - /*Input letter count enumeration complete*/ - - /*Print a table of the number of words encountered for each number of characters.*/ - printf("Word letter count composition:\n"); - for (i = 1; i <= 9; ++i) - printf("%3d", (i)); - printf ("%3s", " 10+\n"); - for (i = 1; i <= 10; ++i) - printf("%3d", charCount[i]); - - /*Print a histogram of gathered data.*/ - printf("\nHistogram of char counts by frequency of words enountered with a given count.\n"); - i = 1; /*Reset value of i, since we're reusing it*/ - for (int b = charCount[i]; i <= 10; ++i){ - if (i < 10){ - printf("%d ", (i)); - } else if (i == 10) { - printf("%3s", "10+"); - } - - for (b > 0; b > 0; --b){ - printf("|"); - } - printf("\n"); - b = charCount[(i + 1)]; /*Get the value of the next position in the array; since i hasn't incremented yet, it's i+1*/ - } - return 0; -}