1-13.c
演習 1-13 入力した単語の長さをヒストグラム(度数分布図)にしてプリントするプログラムを書け。ヒストグラムは横に書くほうが簡単だが、縦書に挑戦してみるのもよい。
ちょっと難しかったので(度数分布図なんて知らない)、割合の計算はしないでカウントしたらひとつ#を足していく単純なものにしました。長さが20以上の単語は20としてカウント。すこし読みづらいけど横のグラフと縦のグラフどちらも表示。
#include <stdio.h> #define IN 1 #define OUT 0 main() { int c, flag = OUT; int word[20]; int length = 0; int max = 0; int i, x, y; for (i = 0; i < 20; i++) word[i] = 0; while ((c = getchar()) != EOF) { if (c == ' ' || c == '\t' || c == '\n') { if (flag == IN) { flag = OUT; if (length <= 20) ++word[length-1]; else ++word[19]; if (word[length-1] >= max) max = word[length-1]; length = 0; } } else { if (flag == IN) { length++; } else { flag = IN; length++; } } } for (y = 0; y < 20; y++) { printf("%2d: ", y+1); for (x = 0; x < word[y]; x++) printf("#"); printf("\n"); } for (y = max; y > 0; y--) { for (x = 0; x < 20; x++) if (word[x] >= y) printf(" # "); else printf(" "); printf("\n"); } for (x = 1; x <= 20; x++) printf("---"); printf("\n"); for (x = 1; x <= 20; x++) printf("%2d ", x); printf("\n"); }
$ ./a.out < 1-13.c
1: #####################################################
2: ##############################################
3: ############################
4: ####################
5: ######
6: ####
7: ####
8: #####
9: ####
10: #
11: ###
12: ##
13: ####
14: #
15: ##
16:
17: #
18:
19:
20:
#
#
#
#
#
#
#
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# # #
# # #
# # #
# # #
# # #
# # #
# # #
# # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # # #
# # # # # #
# # # # # # # # # #
# # # # # # # # # # #
# # # # # # # # # # # # #
# # # # # # # # # # # # # # # #
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
合っているのか自信が無い!
$ ./a.out
a a a aa aaa aaaa
(Ctrl-D)
1: ###
2: #
3: #
4: #
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
#
#
# # # #
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
合ってるかな