K&R Упражнение 1.14. Оцените код - C (СИ)
Формулировка задачи:
Здравствуйте. Решил, но по-моему слишком неоптимально.
Упражнение 1.14.
Напишите программу для вывода гистограммы частот, с которыми встречаются во входном потоке различные символы. Мой код:#include <stdio.h> #define NUM int /* integer type */ #define MAX 30.0 /* maximum symbols in histogram */ #define SYMBOL '#' /* histogram symbol */ #define ORIENTATION 'v' /* h(orizontal) or v(ertical) */ #define HORIZONTAL 'h' /* any symbol */ #define VERTICAL 'v' /* any symbol */ int main(void) { int character, i, j, symbols = 0, output_started = 0, l[256]; float denominator, storage, percent_denominator, percent_storage, i2; for(i = 0; i <= 255; ++i) { l[i] = 0; }; while((character = getchar()) != EOF) { ++l[character]; ++symbols; }; if(ORIENTATION == HORIZONTAL) { denominator = symbols / MAX; percent_denominator = symbols / 100.0; for(i = 0; i <= 255; ++i) { storage = l[i] / denominator; percent_storage = l[i] / percent_denominator; if(l[i] > 0) { if(i == '\n') { printf("\"%s\"(%d;%.2f%%): ", "\\n", l[i], percent_storage); } else if(i == '\t') { printf("\"%s\"(%d;%.2f%%): ", "\\t", l[i], percent_storage); } else if(i == '\b') { printf("\"%s\"(%d;%.2f%%): ", "\\b", l[i], percent_storage); } else { printf("\"%c\"(%d;%.2f%%): ", i, l[i], percent_storage); }; for(i2 = 0; i2 <= storage; ++i2) { putchar(SYMBOL); }; putchar('\n'); }; }; } else if(ORIENTATION == VERTICAL) { denominator = symbols / MAX; percent_denominator = symbols / 100.0; for(j = MAX; j >= 0; --j) { for(i = 0; i <= 255; ++i) { if(l[i] > 0) { storage = l[i] / denominator; percent_storage = l[i] / percent_denominator; if((storage + 1) > j) { output_started = 1; }; if(storage > j) { printf("%c ", SYMBOL); } else if(output_started == 1) { printf(" "); }; }; }; if(output_started == 1) { putchar('\n'); } }; for(i=0; i <= 255; ++i) { if(l[i] > 0) { if(i == '\n') { printf("%s", "\\n "); } else if(i == '\t') { printf("%s", "\\t "); } else if(i == '\b') { printf("%s", "\\b "); } else { printf("%c ", i); }; }; }; }; return 0; }
Решение задачи: «K&R Упражнение 1.14. Оцените код»
textual
Листинг программы
enum {A,B,C};
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д