C言語関係掲示板

過去ログ

No.1327 ヒストグラムを表示するプログラム

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

ヒストグラムを表示するプログラム
投稿者---transfar(2004/11/09 20:41:49)


テストの点数を入力して、それをヒストグラムで表示させるプログラムを造りたいのですが、なかなか難しくてうまくいきません。どなたか、教えてください。

#include<stdio.h>
#include<conio.h>

void main()
{
    int i,ninzu;
    int seiseki[50],hist[10]={0,0,0,0,0,0,0,0,0,0};

    printf("人数の入力:");
    scanf("%d",&ninzu);

    for(i=0;i<ninzu;i++){
        printf("%d番目のデータ:",i+1);
        scanf("%d",&seiseki[i]);
            if(seiseki[i]>100||seiseki<0){
                printf("0〜100の範囲で入力\n");
                i--;
            }
    }

    for(i=0;i<ninzu;i++){
        if(seiseki[i]==100) 
            seiseki[i]--;
            hist[seiseki[i]/10]++;
    }


    getch();
}



No.17920

Re:ヒストグラムを表示するプログラム
投稿者---ぽへぇ(2004/11/09 21:33:47)


100点とった人がちょっとかわいそうなのはさておき、
配列 hist が何を表しているのか分かりますか?
もしかして「ヒストグラム」がわからないのかな。

ヒント:
横書きのヒストグラムなら forの2重ループで書けます。



No.17922

Re:ヒストグラムを表示するプログラム
投稿者---RiSK(2004/11/09 22:06:33)


/*
# 久しぶりの書き込み (^^

> テストの点数を入力して、それをヒストグラムで表示させるプログラムを造りたいのですが、
> なかなか難しくてうまくいきません。どなたか、教えてください。

「なかなか難しくてうまくい」かないところは,どこでしょうか?
・テストの点数入力?
・ヒストグラムの表示?

次のような点を書くとよい質問になりますよ。
・希望する動作
・現在の動作
・どこが思い通りではないか
・そう思った理由

以下にサンプルを挙げますが,分からないところはハッキリ書いてくだいね〜。
*/
#include <stdio.h>

#define MAX_NUM (50)
#define FULL_MARKS (100)
#define MARKS_PER_SCALE (10)

int main(void)
{
    unsigned int number, i, marks[MAX_NUM];

    // 人数入力

    do {
        printf("人数の入力(0-%u):", MAX_NUM);
        if (scanf("%u", &number) != 1) {
            return -1;
        }
    } while (number < 0 || number > MAX_NUM);

    // 点数入力

    for (i = 0; i < number; ++i) {
        do {
            printf("%2u人目の点数(0-%u):", i, FULL_MARKS);
            if (scanf("%u", &marks[i]) != 1) {
                return 1;
            }
        } while (marks[i] < 0 || marks[i] > FULL_MARKS);
    }

    // ヒストグラム表示

    for (i = 0; i < number; ++i) {
        printf("%2u人目:", i);
        for (marks[i] /= MARKS_PER_SCALE; marks[i] > 0; --marks[i]) {
            putchar('*');
        }
        putchar('\n');
    }
    return 0;
}
/*
K&R 2nd 読んでたら無性にコードを書きたくなった。。。
*/