- ベストアンサー
main関数の中でパラメータを宣言
c言語で積分をしています。 a~bまで積分する関数を dobule integral(double (*f)(double), double a, double b) { ・・・・・・ return s; /*sが計算結果*/ } としています。 fx=x*x を積分するときは double fx(double x) { return x*x; } を用意して、 main() { double ans = integral(fx, 0.0, 1.0); } という具合で現在やっています。 本題なのですが、 main関数の中でxを宣言して、そのxで同じように積分をしたいのです。 どうすればよいのでしょうか? 良い方法があれば教えて頂きたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No2の方が既に書いてますように、gxを定義して、gxを呼び出す形になると思います。mainの中で、x1=x/3を定義するのは、無理があります。ここでxは、本来、integral関数の中で、a~bまでxを変化させる時の用途で用いられます。従って、integral関数の中でのみ、意味があります。 従って double gx(double x) { double x1; x1 = x/3.0; return fx(x); } の関数を定義します。 main関数で ans = integral(gx,0.0,1.0); とすれば、integral関数の中からgxを呼び出すはずですので、このようにするのが最も素直な方法かと思います。
その他の回答 (2)
- ranx
- ベストアンサー率24% (357/1463)
「main関数の中で」というのは、何をなさりたいのかよく分かりませんが、 (x/3)*(x/3)を積分したいのであれば、手っ取り早いのは double gx(x){ return fx(x/3.0); } として、integralの引数にgxを渡すことですよね。 それではだめなのでしょうか。
- tatsu99
- ベストアンサー率52% (391/751)
すいません。質問の意味がよくわかりません。 >main関数の中でxを宣言して、そのxで同じように積分をしたいのです。 xとは、変数名のことですか。それとも関数名のことですか。 もし、fx=xを積分したいのなら、 double fx(double x) { return x; } とすれば、良いと思いますが。 なにをなさりたいのか、もうすこし具体的に説明していただけませんでしょうか。
お礼
たびたびすいません。 要するに、 double fx(double x) { return x*x; } として、(x/3)*(x/3) を積分するには?ってことです。 mainの中で double x, x1; double (*func)(double); x1 = x/3; func=fx; (*func)(x_dash); integral(…, func) としてもうまくいかないんです。
補足
すいませんでした。 具体的に説明させてもらいます。 いまfxは double fx(double x) { x*x; } として、変えないとします。 で、(x/n)^2 や、(x-m)^2 を積分したいときに、 main関数の中で double x1 を宣言して x1 = x1/n; とします。 このx1をfxのxとして積分したいのです。 このとき、各関数をどのように呼び出して受け渡せばいいのかが分かりません。 どうも説明がしにくいのですが、伝わるでしょうか?
お礼
ありがとうございました。 いろいろ考慮しているところです。