N=1

主にコンピュータ技術関連のことを投稿。 / 投稿は個人の意見であり所属団体の立場を代表するものではありません。

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


合ってるかな