このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1260532772/850
#  [1] 授業単元:基礎プログラミング実習 
#  [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10369.txt 
#  
# 次の関数の積分を、台形公式を使って求めたい。
# ただし、積分区間は(0,2)きざみ幅はh=0.01とする。
# f(x)=(4-x^2)^1/2
# 
# ※台形公式は積分区間を(a,b)とすると n=(b-a)/h
# S=h*{1/2(f(a))+f(b))+f(a+h)+f(a+2h)+…+f(a+(n-1)h}となる。
# 
# 
# 問1 この解を求めるプログラム(C言語)を示せ。
# 
# 問2 きざみ幅をh=0.2としたときの解を示せ。

funct(X,Y) :- Y is (4-X^2)^0.5.

'台形公式によってf(x)=(4-x^2)^1/2を区間0から2まで刻み幅0.01で積分する'(S) :-
        台形公式による積分(200,0,2,S).

台形公式による積分(_分割数,_a,_b,S) :-
        _分割数 > 1,
        0 is _分割数 mod 2,
        _b > _a,
        台形公式(_分割数,_a,_b,S).

台形公式(N,_a,_b,X) :-
        _間隔 is (_b - _a) / _分割数,
        台形公式(1,_分割数,_間隔,_a,_b,0.0,S),
        funct(_a,Y0),
        funct(_b,Yn),
        X is (Y0 + Yn + S + S ) * 0.01 * 0.5.

台形公式(N,_分割数,_,_,_,S,S) :-
        N > _分割数,!.
台形公式(N,_分割数,_間隔,_a,_b,Y,S) :-
        X1 is _間隔 * N + _a,
        funct(X1,Y1),
        Y2 is Y + Y1,
        N2 is N + 1,
        台形公式(N2,_分割数,_間隔,_a,_b,Y2,S).