前提・実現したいこと
c言語とgnuplotで、1クラス分の生徒の個々の平均点をヒストグラムにするプログラムを作成中です。(グラフの横軸が10点ごとの点数、縦軸が人数)
生徒1人1人の平均点を出すところまではいけたのですが、グラフ化するところで苦戦しています。
簡単なフローチャート
平均点010、1120、2130のように変数を10個つくる60の変数+1
→一人の平均点が56点だった
→51
→人数分繰り返し。
###試したこと
いろんなサイトで調べて、配列をgnuplotに渡すやり方はわかったのですが、縦軸を人数で表記するというやり方がどこにも載っていなかったので、考え方などを教えてくださるとうれしいです。
よろしくお願いします。
###ソースコード
平均を計算するプログラムとグラフ化するプログラムを一旦分けているので、グラフ化の方だけ記述します。
#include <stdio.h> int main(void) { FILE *gp; //パイプを開く int i; int x[10]; for(i=0;i<10;i++){ x[i]=i*10; } gp=_popen("gnuplot -persist","w"); //gnuplot起動。-persistでずっと開いた状態にする fprintf(gp,"set boxwidth 1\n"); //棒グラフの設定,棒の太さ fprintf(gp, "set xrange [0:10]\n"); //x軸の表示設定 fprintf(gp, "set yrange [0:100]\n"); //y軸の表示設定 fprintf(gp,"plot '-' with boxes\n"); for(i=0;i<10;i++){ fprintf(gp,"%d\t%d\n",i,x[i]); } fprintf(gp,"e\n"); fflush(gp); _pclose(gp); return 0; }
このプログラムに、
if(x[i]<=10) hist0+=1; else if(11<=x[i]<=20) hist1+=1; else if(21<=x[i]<=30) hist2+=1; else if(31<=x[i]<=40) hist3+=1; else if(41<=x[i]<=50) hist4+=1; else if(51<=x[i]<=60) hist5+=1; else if(61<=x[i]<=70) hist6+=1; else if(71<=x[i]<=80) hist7+=1; else if(81<=x[i]<=90) hist8+=1; else if(91<=x[i]<=100) hist9+=1;