• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:台形公式)

台形公式を使用して定積分を計算する方法

このQ&Aのポイント
  • C言語初心者の方が、指定の関数の定積分を計算するために台形公式を使用するプログラムを作成していますが、コンパイルエラーが発生しています。
  • プログラムのエラーメッセージを解説し、正しい構文に修正する方法について教えてください。
  • 台形公式による定積分の計算の手順と、C言語での実装方法についても教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#157743
noname#157743
回答No.1

まず、C言語の文法上のミスと誤りから。エラーはこれが原因で出てます。 <<7行目のエラーの原因>> int N,n ←この行の最後に ; が抜けています。 <<14,15行目のエラーの原因(19,20行目も同様)>> while(n=0;n<=N;n++) ←whileの引数に取れるのは条件式1つだけです。(n=0;n<=N;n++)という書式の引数を取れるのはforです。 と、これで文法的なエラーは出なくなるはずですが、おそらく正しい結果は得られません。台形公式の解釈が間違っていると思いますので、それは公式の意味をもう一度よく考えてみてください。

すると、全ての回答が全文表示されます。

その他の回答 (5)

noname#157743
noname#157743
回答No.6

>z-2-2.c(16) : error C2198: 'exp' : 呼び出しに対する引数が少なすぎます。 >とあるのですが、これは何が原因なのでしょうか? exp(t[n]) の中の t[n] がエラーになって値が定まらなくなったので、exp() となって、() の中にあるべき引数がないと言っているんでしょう。

moriyou
質問者

お礼

わかりました! 2日にわたり、ご解答ありがとうございました。 おかげで、新たな知識を身につけることができました。 またご縁があったらよろしくお願いいたします。

すると、全ての回答が全文表示されます。
noname#157743
noname#157743
回答No.5

いやいや、宣言の時にdoubleにしてはいけません。1/Nを計算する時に「キャスト」するんです。キャストってわかりませんか? 日本語で言うと「型変換」です。教科書調べてみてください。 ちなみに、簡易的な方法としては「1/N」を「1.0/N」とすれば、暗黙のキャストが実行されて問題は解決する…と思いますが、どうしてそうなるのかを理解するためにキャストとはどういうことかをきちんと調べてみてください。

moriyou
質問者

補足

いきました! ありがとうございます。 最後にひとつ質問したいのですが、 キャストする前に(#4補足)出てきたエラーの中に、 z-2-2.c(16) : error C2198: 'exp' : 呼び出しに対する引数が少なすぎます。 とあるのですが、これは何が原因なのでしょうか?

すると、全ての回答が全文表示されます。
noname#157743
noname#157743
回答No.4

なるほど。わかりました。 d=1/N; この計算の右辺は「1」も「N」もint型なので計算はintで行われます。すると、N>1の時、計算結果の小数点以下は切り捨てられるので、答えは「0」になります。その後、dへの代入のためにdoubleにキャストされるので、dの値は0.000000になってしまいます。 この状態を解消するには、割り算が実行される前の「1」と「N」を明示的にdouble型にキャストしてあげればいいということになります。

moriyou
質問者

補足

連絡遅くなってしまって申し訳ありません。 n,Nをそれぞれ、doubleにしましたが、以下のようなエラーが出てきてしまいました。 z-2-2.c z-2-2.c(15) : error C2108: 添字に整数でない型が使われました。 z-2-2.c(16) : error C2108: 添字に整数でない型が使われました。 z-2-2.c(16) : error C2108: 添字に整数でない型が使われました。 z-2-2.c(16) : error C2198: 'exp' : 呼び出しに対する引数が少なすぎます。 z-2-2.c(20) : error C2108: 添字に整数でない型が使われました。 z-2-2.c(23) : error C2108: 添字に整数でない型が使われました。 z-2-2.c(26) : error C2108: 添字に整数でない型が使われました。 z-2-2.c(27) : error C2108: 添字に整数でない型が使われました。

すると、全ての回答が全文表示されます。
noname#157743
noname#157743
回答No.3

えーと、ちょっとすぐにはどこがおかしいかピンと来ないのですが、このような場合、途中の計算結果を全て出力させてみてどこがおかしいのかを探るのが得策です。 計算で求めているd,t[n],f[n],sの値を全部出力させて、値を見て考えてみてください。

moriyou
質問者

補足

N=1,2,3の場合について出力させてみたところ、このようになりました。dの値すら0.000000となっているのはなぜでしょうか? N=1 d=1.000000 t[n]=1.000000 f[n]=2.718282 s=0.000000 mennseki=1.859141 N=2 d=0.000000 t[n]=0.000000 f[n]=1.000000 s=1.000000 mennseki=0.000000 N=3 d=0.000000 t[n]=0.000000 f[n]=1.000000 s=2.000000 mennseki=0.000000

すると、全ての回答が全文表示されます。
noname#157743
noname#157743
回答No.2

すみません。訂正。 もう一度見直したところ、台形公式の実装はこれで正しそうです。

moriyou
質問者

補足

早速解答をしていただき、ありがとうございます。 エラーメッセージは取れましたが、N=1では値がしっかり出るのですが、そうでないときには0.000000になってしまいます。 これはどう対処すればよいのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A