ファイルが読み込めてない…?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kohaA
記事: 10
登録日時: 10年前

ファイルが読み込めてない…?

#1

投稿記事 by kohaA » 10年前

ex7.c
(819 バイト) ダウンロード数: 146 回
ラグランジュ多項式を解けるはず…なのですが出力されるファイルに書き込まれていません
ex7.txtには下のように数字が入っています
4 1
2 5
6 0
3 2
1 5

コード:

#include<stdio.h>
#include<math.h>
#define max 100

double lag(int , int , double , double*);

int main(void)
{

int i,n;
double x,y;
double datax[max];
double datay[max];

FILE *input;
FILE *output;

input=fopen("ex7.txt","r");
output=fopen("ex7ans.txt","w");

 for(i=0;i<max;i++){
   datax[i]=0.0;
   datay[i]=0.0;
 }

 i=0;

 while(fscanf(input,"%lf%lf",&datax[i],&datay[i])!=EOF){
   i++;
   n=i;
 }

 for(x=datax[0];x<datax[n-1];x+=0.1){
   y=0.0;
   for(i=0;i<n;i++){
     y=0.0;
     y+=datay[i]*lag(i,n,x,datax);
   }
   fprintf(output,"%f %f\n",x,y);
 }

 fclose(input);
 fclose(output);

 return 0;

}




double lag(int i,int n,double x,double datax[]){

  int j;
  double ans=1.0;

  for(j=0;j<n;j++){

    if(i!=j){
      ans*=(x-datax[j])/(datax[i]-datax[j]);
    }
  }
  return 0;
}
添付ファイル
ex7.txt
(20 バイト) ダウンロード数: 180 回

box
記事: 2002
登録日時: 15年前

Re: ファイルが読み込めてない…?

#2

投稿記事 by box » 10年前

実験も何もしておらず、コードを見ただけですが、
36行目の
y=0.0;
は本当に必要なのか?という疑問があります。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: ファイルが読み込めてない…?

#3

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

実行はしていませんが、
kohaA さんが書きました:ex7.txtには下のように数字が入っています
4 1
2 5
6 0
3 2
1 5
このデータを読み込むとdatax[0]は4、datax[n-1]は1になるので、最初から33行目のx<datax[n-1]が偽となり、
39行目のfprintfは1回も実行されず、その結果「出力されるファイルに書き込まれていません」という事象が観測されたのだと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: ファイルが読み込めてない…?

#4

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

オフトピック
kohaA さんが書きました:

コード:

 while(fscanf(input,"%lf%lf",&datax[i],&datay[i])!=EOF){
不正な入力を与えると無限ループになるリスクがあるので、

コード:

 while(fscanf(input,"%lf%lf",&datax[i],&datay[i])==2){
の方がいいかもしれないと思いました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 15年前

Re: ファイルが読み込めてない…?

#5

投稿記事 by box » 10年前

別の疑問が…。
63行目の
return 0;
は本当に正しいでしょうか?
return ans;
のような気がするけど…。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

kohaA
記事: 10
登録日時: 10年前

Re: ファイルが読み込めてない…?

#6

投稿記事 by kohaA » 10年前

はいreturn 0;は間違いでした…

しかし未だ出力されず格闘中・・・

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

Re: ファイルが読み込めてない…?

#7

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

kohaA さんが書きました:はいreturn 0;は間違いでした…

しかし未だ出力されず格闘中・・・
試しに入力を

コード:

4 1
2 5
6 0
にしたところ、(正しさは知りませんが)出力が出ました。
やはりこれが原因でしょう。
みけCAT さんが書きました:このデータを読み込むとdatax[0]は4、datax[n-1]は1になるので、最初から33行目のx<datax[n-1]が偽となり、
39行目のfprintfは1回も実行されず、その結果「出力されるファイルに書き込まれていません」という事象が観測されたのだと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kohaA
記事: 10
登録日時: 10年前

Re: ファイルが読み込めてない…?

#8

投稿記事 by kohaA » 10年前

お二人とも有難うございました
精度があっているのかは明日の解説で理解しようと思います

返戻値を間違えるくらいはいい加減気をつけます。。。

みけCATさんには毎度お世話になってます・・・なさけなひ

閉鎖

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