ヒストグラム

K&R本 演習1-13

入力した単語の長さをヒストグラムにしてプリントするプログラムを書け。

動的にデータの長さが変わると難しいのでとりあえず固定値でやってみた

#include <stdio.h>
#include <math.h>
#include "mylib.h"

int main(void) {
    int num[] = {
        1,2,3,2,
        1,2,3,4,
        5,6,7,20,
        9,8,7,6,
        11,11,11,22,
        3
    };
    int limit;
    int i=0,j,k;
    
    limit = (int)sqrt(ARRAY_NUM(num));
    
    while(i<ARRAY_NUM(num)) {
        printf("%3d:",i);
        for(j=0;j<limit && i<ARRAY_NUM(num);j++) {
            for(k=0;k<num[i];++k){
                printf("*");
            }
            i++;
        }
        puts("");
    }
    return 0;
}
$ main
  0:********
  4:**********
  8:**************************************
 12:******************************
 16:*******************************************************
 20:***

mylib.h

一応できた。難しいね。後々また挑戦してみたい。