VV さんが書きました:このような場合、文字と数字があるので単純にファイルごとに配列に格納し、二つの配列のi番目の値を足して2で割る、という方法で平均を求める事ができません。
無理に配列に格納せず、素直に入力したデータをすぐに計算して出力すればいいと思います。
また、「文字と数字がある」ことと「単純にファイルごとに配列に格納し(略)できません」ということの関係がよくわかりません。
なぜそう判断したのでしょうか?VVさんの環境で利用可能なプログラミング言語は何でしょうか?
とりあえず、C言語で適当なプログラムを書いてみました。
指定されたファイルの形式のみに対応した、適当なプログラムです。
コード:
#include <stdio.h>
int main(int argc, char *argv[]) {
const int header_num = 1;
const int content_num = 3;
const int footer_num = 1;
int i;
char buffer1[1024];
char buffer2[1024];
double val1,val2;
FILE* fp1;
FILE* fp2;
FILE* fpout;
if(argc!=4) {
fputs("please specify input1, input2 and output file\n", stderr);
return 1;
}
fp1=fopen(argv[1],"r");
fp2=fopen(argv[2],"r");
if(fp1==NULL || fp2==NULL) {
fputs("input file open error\n", stderr);
if(fp1!=NULL)fclose(fp1);
if(fp2!=NULL)fclose(fp2);
return 1;
}
fpout=fopen(argv[3],"w");
if(fpout==NULL) {
fputs("output file open error\n", stderr);
fclose(fp1);
fclose(fp2);
return 1;
}
for(i=0;i<header_num;i++) {
fgets(buffer1,sizeof(buffer1),fp1);
fgets(buffer2,sizeof(buffer2),fp2);
fputs(buffer1,fpout);
}
for(i=0;i<content_num;i++) {
fgets(buffer1,sizeof(buffer1),fp1);
fgets(buffer2,sizeof(buffer2),fp2);
fputs(buffer1,fpout);
fgets(buffer1,sizeof(buffer1),fp1);
fgets(buffer2,sizeof(buffer2),fp2);
if(sscanf(buffer1,"%lf",&val1)==1 && sscanf(buffer2,"%lf",&val2)==1) {
fprintf(fpout,"%g\n",(val1+val2)/2.0);
} else {
fputs("number convert error\n",fpout);
}
}
for(i=0;i<footer_num;i++) {
fgets(buffer1,sizeof(buffer1),fp1);
fgets(buffer2,sizeof(buffer2),fp2);
fputs(buffer1,fpout);
}
fclose(fp1);
fclose(fp2);
fclose(fpout);
return 0;
}