プログラムについての質問です。 シンプソン法を用いて区間[0,1]でexpxを積分した値を求めるプログラムを作ろうとしているのですがエラーが出てしまっていてどの部分が間違っているのかわからないです。そしてこのプログラムについてですがEPSは分割数Nの場合と分割数2Nの場合の定積分値を比較しその差の絶対値がEPSよりも小さいときに定積分値の計算が終了しそれまでは分割数Nを二倍ずつ増加させる再帰的なプログラムとするためのものです。
C
1#include<stdio.h> 2 #include <math.h> 3 4double funk(double x); 5double simpson(double a, double b, int n, double (*f)()); 6 7int main(void) 8{ 9double *g; 10double EPS=*g; 11printf("sei no seisuu wo nyuuryoku ->",EPS); 12scanf("%d",EPS); 13 14printf("exp(x) wo [0,1] de sekibun simasu. bunkatu suu ha %d desu \n",2*EPS); 15printf("result is %20.15f\n",simpson(0, 1.0, EPS, funk)); 16return 0; 17} 18 19double simpson(double a, double b, int n, double (*f)()) { 20 21double S,h; 22int i; 23 24h=(b-a)/(2.0*n); 25 26S=((*f)(a)+(*f)(b)); 27 28for (i=1;i<n;i++) 29{ 30S += 4.0*(*f)(a+(2.0*i-1.0)*h)+2.0*(*f)(a+2.0*i*h); } 31 32S += 4.0*(*f)(a+(2.0*n-1.0)*h); S *= h/3.0; return S; 33} 34 35double EPS(double g) 36{ 37int n; 38 39*g = (simpson(0, 1.0, 2.0*n, funk)- simpson(0, 1.0, n, funk)); 40 41if(*g < EPS) 42 43return simpson(double a, double b, int 2.0*n, double (*f)()); 44 45else return 1; 46}
エラーメッセージ(コピペできなかったため写真を添付します)
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
エラーが出たなら、エラーメッセージを提示しましょう
エラーメッセージは、いらぬ翻訳省略しないで、出たそのママをコピペで提示してください
teratailを初めて使用したため、使い方を十分に把握できていませんでした。申し訳ございません。
関数:EPS() がどこからも呼び出されていません。
関数:EPS() は再帰していません。
指摘ありがとうございます。
EPS()の再帰にする方法を教えていただきたいです。
再帰する必要あるんですか? 分割数を増やしながら繰り返すだけちゃいますの?
そもそも呼ばれもしない関数定義して何の得があるんです?
なるほど、確かに指示は分割数を増やすだけで、ESPの値は固定です。上記のコードもESPは再帰ではないですよね?関数:EPS() がどこからも呼び出されていません。の詳細を詳しくお聞かせ願います。
いや、main() の中に EPS() を呼んでるところがひとつもない。
> 区間[0,1]でexpxを積分した値を求める
expx とは何ですか?
コード中の funk とは何ですか?
もしかすると、double funk(double x) { return exp(x); } ですか?
回答1件
あなたの回答
tips
プレビュー