ページ 1 / 1
ファイル読み取り→平均、標準偏差、最大値、最小値を求める
Posted: 2010年7月09日(金) 13:42
by ルーニー
問題:レポートの得点が記録されたプログラムがある。これからデータを読み取り、平均、標準偏差、最大値、最小値を求めるプログラムを求めなさい。
分かるところを下のようにプログラミングしたのですが、どのように平均、標準偏差、最大値、最小値を求めればいいか分かりません。
ご教授願います。
#include <stdio.h>
int main (int argc, const char * argv[/url]) {
int average,stdev,max,min;
char line[100],point[100],;
FILE*in_file;
in_file=fopen("Book1.txt","r");
if(in_file==NULL){
return 0;
}
while(fgets(line,100,in_file)!=NULL) {
sscanf(line, "%s" ,point);
average=
stdev=
max=
min=
printf("平均=%s, 標準偏差=%s,最大値=%s,最小値=%s\n",average,stdev,max,min);
}
fclose(in_file);
return 0;
}
Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める
Posted: 2010年7月09日(金) 14:35
by box
得点の数値を格納する変数はどれですか?
Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める
Posted: 2010年7月09日(金) 20:35
by KEYONN_
//サンプルプログラムです。それぞれ計算方法を書いておいたので、参考にしてください。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main()
{
double average=0.0f,stdhensa=0.0f;//平均値、標準偏差(偏差のスペル分からんorz)
int max=0,min=65536;//最大値、最小値初期化
int point[100]={0};//得点テーブル
FILE *fp;//ファイルポインタ
int i;//ループ用変数i
srand(time(NULL));
//ファイル書き込み
fp=fopen("Book1.txt","w");
for(i=0;i<100;i++)
{
fprintf(fp,"%d\n",rand()%101);//100だと、乱数が0~99になってしまう
}
fclose(fp);
//ファイル読み込み
fp=fopen("Book1.txt","r");
for(i=0;i<100;i++)
{
fscanf(fp,"%d",&point);
}
fclose(fp);
//計算部分
//まず平均
int sum=0;//0で初期化しないと足すときに困る
for(i=0;i<100;i++)
{
sum+=point;
}
average=sum/100.0;//平均求める(全部足してその個数で割る)
//次に標準偏差
//まず、平均との差を出す
double diff[100]={0.0f};
for(i=0;i<100;i++)
{
diff=average-point;
}
//次に二乗する
double p[100]={0.0f};
for(i=0;i<100;i++)
{
p=pow(diff,2);
}
//あとは全部足して、個数で割り、平方根を求める
sum=0;//相変わらず、0で初期化
for(i=0;i<100;i++)
{
sum+=p;
}
stdhensa=sqrt(sum/100.0);//標準偏差求まる
//最大値と最小値は簡単(最初の代入を忘れずに)
for(i=0;i<100;i++)
{
if(max<point) max=point;//maxより大きければmaxに代入
if(min>point) min=point[i];//minより小さければminに代入
}
printf("平均値は%f、標準偏差は%f、最大値は%d、最小値は%d\n",average,stdhensa,max,min);
return 0;
}
Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める
Posted: 2010年7月13日(火) 14:38
by ルーニー
参考になりました。
ありがとうございます。
Re:ファイル読み取り→平均、標準偏差、最大値、最小値を求める
Posted: 2010年7月24日(土) 14:55
by 1EC10XXX
上のサンプルプログラムで、プログラムから100個の乱数を発生させるのではなく、
例えば
54
65
78
95
・
・
・
のように特典が記録されたテキストファイルから平均、標準偏差、最大値、最小値を求める方法を教えてください。
平均の分母の数は100ではなくテキストファイルの行数(=サンプルの数)です。
どうかよろしくお願いします。