/*
プログラム1-3(Prog1-3.cpp)
ファイル入出力
*/
#include <stdio.h>
#include <stdlib.h>
#define INFILE "normal.csv"
#define OUTFILE "result.txt"
#define LF 0x0A /* 改行コード */
void dsperr(const char *);
double *dvector(int);
int get_num(FILE *);
void read_vec(FILE *,double *,int);
int main(void)
{
FILE *fp;
int i,n;
double *x,s,ss,avg,var;
if((fp=fopen(INFILE,"r"))==NULL)
dsperr("ファイルを開くことができません.");
n=get_num(fp); /* データ数を取得 */
x=dvector(n);
rewind(fp); /* ファイルの位置指定を先頭に戻す */
read_vec(fp,x,n);
fclose(fp); /* ファイルを閉じる */
s=ss=0;
for(i=0,max=x,min=x;i<n;++i){
s+=x;
ss+=x*x;
if(max<x){max=x;}
if(min>x){min=x;}
}
avg=s/n; /* 平均 */
var=ss/n-avg*avg; /* 分散 */
range=max-min/*最大-最小*/
if((fp=fopen(OUTFILE,"w"))==NULL)
dsperr("ファイルを開くことができません.");
fprintf(fp,"データ数 = %d: 平均 = %f: 分散 = %f\n",n,avg,var);
fclose(fp);
free(x);
return EXIT_SUCCESS;
}
/* メッセージを出力して強制終了 */
void dsperr(const char *msg)
{
fprintf(stderr,"%s\n",msg);
exit(EXIT_FAILURE);
}
/* サイズ n の double 型 1 次元配列のメモリ確保,及びゼロで初期化 */
double *dvector(int n)
{
double *v;
v=(double *)calloc(n,sizeof(double));
if(!v) dsperr("メモリ確保失敗");
return v;
}
/* CSV 形式のファイルから標本サイズを調べる */
int get_num(FILE *fp)
{
int n=0;
while(!feof(fp)) /* EOF に達するまで LF の数を調べる */
if(LF==fgetc(fp)) ++n;
return n;
}
/* データ読み込み */
void read_vec(FILE *fp,double *x,int n)
{
int i;
for(i=0;i<n;++i)
fscanf(fp,"%lf",&x);
}
/* EOF */
もともと平均と分散のみを記述したプログラムに、データの最大と最小を求める関数を付け足して、レンジを出力するプログラムにしたんですが、エラーがでます!データの最大と最小を求めるところでエラーがでるんですがこのプログラムのどこをどう直したら良いのでしょうか????
教えてくださいお願いします。
エラーがでます
Re:エラーがでます
ケアレスミスが多いです。
以下を修正すればとりあえずコンパイルは通ります。
(内容までは吟味していませんが・・・)
・定義していない変数(max, min, range)をいきなり使用している。
・全角の{ }が混入。
・セミコロンのつけ忘れ。
以下を修正すればとりあえずコンパイルは通ります。
(内容までは吟味していませんが・・・)
・定義していない変数(max, min, range)をいきなり使用している。
・全角の{ }が混入。
・セミコロンのつけ忘れ。