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 読んでたら無性にコードを書きたくなった。。。 */ |