• 締切済み

プログラム

アドバイスをもとにいろんなサイトを見てみたんですが、なんとなくはわかるんですがこれから先どうしたら良いかわかりません。a,bを入力する画面まではいくんですが、それから先の結果がでないんです。何がいけないんですか? #include <stdio.h> double func(double x){ double y; y=x*x*x-3*x*x+9*x-8; return(y); } int main(){ double EPS=0.00005; double a, b, c; char t; int i=0; do{ printf(" a = "); scanf("%lf%c", &a, &t); printf(" b = "); scanf("%lf%c", &b, &t); if(func(a)*func(b) >= 0){ printf(" f(a)*f(b)>0\n\n"); } }while(func(a)*func(b) >= 0); if(b-a<0){ c=a; a=b; b=c; } while(b-a>EPS){ c=a-((b-a)/(func(b)-func(b)))*func(a); if(func(c)*func(a)<0){ b=c; }else{ a=c; } i++; printf(" %d\t%20.15f\n",i,c); }

みんなの回答

  • keikan
  • ベストアンサー率42% (75/176)
回答No.4

>>c=a-((b-a)/(func(b)-func(a)))*func(a); この式はどこからでてきたのでしょうか? この式では(b-a)が0に近づいていきません。 #3さんのようにされてはいかが?

  • yasuch
  • ベストアンサー率41% (27/65)
回答No.3

コンパイルエラーなんかじゃなかったんですね。 失礼しました。 はさみうち法って、こんな感じではかなったんでしたっけ? c=(a+b)/2; if(func(a)*func(c)<0){ b=c; }else{ a=c; }

  • yasuch
  • ベストアンサー率41% (27/65)
回答No.2

なんていうコンパイルエラーが出てるのでしょうか。 最後の閉じカッコ '}' が足りないからでは?

mmmmaxing
質問者

補足

エラーが出るわけではなくて、a、bを入力するまではコンパイルされるのですが、肝心のyが0に近くなるときのxの値が計算されないのです・・。これでははさみうち法の意味が全くなくて・・。どうプログラムを変えたらよいですか?

  • yasuch
  • ベストアンサー率41% (27/65)
回答No.1

下記の行で func(b)-func(b) は、ゼロになってしまいますよ。 c=a-((b-a)/(func(b)-func(b)))*func(a);

mmmmaxing
質問者

お礼

ありがとうございました。しかしfunc(b)-func(a)に直したところやはり何かがいけないようでうまくコンパイルされません。何がいけないんでしょうか・・