C言語関係掲示板

過去ログ

No799 平均とヒストグラムの表示

[戻る] [ホームページ]
No.10001

平均とかヒストグラムの表示方法。
投稿者---ken(2003/10/25 14:11:16)


キーボードから複数の0〜100までの数字を入力して、
その入力数と入力した数の平均(小数点以下6桁まで)とヒストグラムを出力するプログラムを作りたいんですが、

個人的に平均までは出力できるプログラムを作ったんですが、
そこからヒストグラムまで持っていくことが出来ないみたいで、そこで止まってます。
どういうプログラムの立て方をすれば、スムーズに出来るのか、教えてください。
もし良かったら、そのプログラム自体を作ってもらえると光栄です。

No.10004

Re:平均とかヒストグラムの表示方法。
投稿者---たか(2003/10/25 14:47:43)


縦方向にヒストグラムを作るにはちょいと面倒なので、横方向のヒスト
グラムを作ってみました。どこか間違っているかもしれませんが、だい
たいこんな感じです。

#include <stdio.h>

#define N 1000

int main(void)
{
  int input[N]; /* N個まで */
  int hist[10] = {0};
  int index;
  int sum, i, j;
  
  for (index = 0; index < N; index++)
    while (1) {
      printf("0〜100の数字を入力して下さい(終わりは-1) : ");
      scanf("%d", &input[index]);
      if (input[index] < 0) goto next;
      else if (input[index] <= 100) break;
      else printf("範囲に収まりません\n");
    }
next:;
  printf("入力した数字は %d 個です。\n", index);
  for (sum = 0, i = 0; i < index; i++) sum += input[i];
  printf("入力した数字の平均は %.6f です。\n", (double)sum / index);
  
  printf("        ---10---20---30---40---50---60---70---80---90--100\n");
  for (i = 0; i < 10; i++)
    for (j = 0; j < index; j++) {
      hist[i] += (i * 10 <= input[j] && input[j] < (i + 1) * 10) ? 1 : 0;
      if (i == 9 && input[j] == 100) hist[i]++;
    }
  
  for (i = 0; i < 10; i++) {
    printf("%2d〜%3d:", i * 10, (i == 9) ? 100 : (i + 1) * 10 - 1);
    for (j = 0; j < 100; j++)
      if (hist[i] / 2 > j) putchar('*');
    putchar('\n');
  }
  
  return 0;
}


No.10011

Re:平均とかヒストグラムの表示方法。
投稿者---ken(2003/10/25 16:25:04)


レスありがとうございます


for (i = 0; i < 10; i++)
for (j = 0; j < index; j++) {
hist[i] += (i * 10 <= input[j] && input[j] < (i + 1) * 10) ? 1 : 0;
if (i == 9 && input[j] == 100) hist[i]++;
}

上記の3行目からの意味がよく分からないので教えてもらえないでしょうか?

No.10018

Re:平均とかヒストグラムの表示方法。
投稿者---たか(2003/10/25 17:00:33)


> for (i = 0; i < 10; i++)
> for (j = 0; j < index; j++) {
> hist[i] += (i * 10 <= input[j] && input[j] < (i + 1) * 10) ? 1 : 0;
> if (i == 9 && input[j] == 100) hist[i]++;
> }
>
>上記の3行目からの意味がよく分からないので教えてもらえないでしょうか?

もし入力する数が0〜99なら4行目は省略できます。0〜100という条件付き
ですので100という数を特別に扱っているのです。

またこのヒストグラムは10刻みになっていますが、5刻みや20刻みにも
簡単に変更できます。