c言語の読み込みについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hirorin

c言語の読み込みについて

#1

投稿記事 by hirorin » 9年前

あるdatファイルに時間と振幅のデータが入っているんですが振幅のデータのみを2乗してから2乗したものに1/2乗し正のものだけから振幅の最大値を求め、振幅の最大値の2割に達した時間を出力したいのですが、振幅のデータのみを2乗して1/2乗し正のものだけから振幅の最大値を求めることができません。
サンプルプログラムを載せますのでおねがいします。
ちなみにdatファイルには
時間 振幅
時間 振幅

となっています。
#include <stdio.h>
int main(void) {
const char * fname = "C2.dat";
char line[BUFSIZ];
double amp, time,arrival, max=0,max20;
FILE *fp = fopen(fname, "r");
while (fgets(line, BUFSIZ, fp)) {
sscanf(line, "%lf%lf", &time, &amp);
if (amp > max) {
max = amp;
}
}
fclose(fp);
printf("max: %.7lf\n", max);

fp =fopen(fname,"r");
while (fgets(line, BUFSIZ, fp)){
sscanf(line, "%lf%lf" , &time, &amp);
if(amp > max*0.2){
arrival = time;
break;
}
}
fclose(fp);
printf("arrival:%.16lf\n",arrival);

return 0;
}

アバター
Tatu
記事: 445
登録日時: 13年前
住所: 北海道

Re: c言語の読み込みについて

#2

投稿記事 by Tatu » 9年前

「振幅のデータを2乗してから2乗したものに1/2乗し、正のものだけを求める」
とはどういうことでしょうか?

振幅が3であるならばそのまま3
振幅が-5であるならば5にする

というようなことであれば

振幅の絶対値をとる
もしくは
振幅が負ならば-1をかけて正にする
というように表現できると思います。

初級者
記事: 200
登録日時: 13年前

Re: c言語の読み込みについて

#3

投稿記事 by 初級者 » 9年前

こんなデータを使って
こんな結果を想定したが
実際にはこうなってしまう

というような
具体例があるといいなぁ
と思います。

hirorin

Re: c言語の読み込みについて

#4

投稿記事 by hirorin » 9年前

振幅が3なら3
振幅がー5なら5といった感じです。
わざわざ2乗してから1/2乗せずに絶対値をとればよかったです。
ちなみに
#include <stdio.h>
int main(void) {
const char * fname = "C2rbc2(50,0)sq,almi00000.dat";
char line[BUFSIZ];
double amp, time,arrival, max=0,max20;
FILE *fp = fopen(fname, "r");
while (fgets(line, BUFSIZ, fp)) {
sscanf(line, "%lf%lf", &time, &amp);
if (abs(amp) > max) {
max = abs(amp);
}
}
fclose(fp);
printf("max: %.7lf\n", max);

fp =fopen(fname,"r");
while (fgets(line, BUFSIZ, fp)){
sscanf(line, "%lf%lf" , &time, &amp);
if(abs(amp) > max*0.2){
arrival = time;
break;
}
}
fclose(fp);
printf("arrival:%.16lf\n",arrival);

return 0;
}
といったように変更したのですが
最初にのせたプログラムでは
max:0.0781250
arrival:0.0000020749590000
とでたのですが
変更後は
max:0.0000000
arrival:2.794567789890…
といったようになってしまうのですがどこがおかしいんですか

初級者
記事: 200
登録日時: 13年前

Re: c言語の読み込みについて

#5

投稿記事 by 初級者 » 9年前

だから、使ったデータは?

hirorin

Re: c言語の読み込みについて

#6

投稿記事 by hirorin » 9年前

-0.000250000959 0.003125
-0.000249998959 0
-0.000249996959 0
-0.000249994959 0
-0.000249992959 -0.0015625
-0.000249990959 -0.0015625
-0.000249988959 0.0046875
-0.000249986959 -0.0015625
-0.000249984959 0.0015625
-0.000249982959 0.0015625
-0.000249980959 -0.0015625
-0.000249978959 0.003125
-0.000249976959 0
-0.000249974959 0
-0.000249972959 0
-0.000249970959 0.0015625
-0.000249968959 0.0015625
-0.000249966959 0
-0.000249964959 0.003125


と続くかんじのdatファイルです。
ちなみに
時間      振幅

です

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: c言語の読み込みについて

#7

投稿記事 by みけCAT » 9年前

コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。

今回は実数を扱うので、abs関数(stdlib.h)ではなくfabs関数(math.h)または自作の絶対値を求める関数を利用するべきです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る