このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1276873238/586
#  問題 
#  円Cの半径r、中心の座標(x,y)が与えられたとき 
#  円の面積の第1象限の部分、第2象限の部分、第3象限の部分、第4象限の部分を求めよ。 
# 

円の面積(_r,_面積) :-
        _面積 is _r * _r * pi.

'円Cの半径r、中心の座標(x,y)が与えられたとき円の面積の第1象限の部分、第2象限の部分、第3象限の部分、第4象限の部分を求めよ'(_r,_中心のx座標,_中心のy座標,_第1象限の面積,_第2象限の面積,_第3象限の面積,_第4象限の面積) :-
        円の面積(_r,_円の面積),
        半径を0からrまで変化させて中心座標から半径分だけ離れた任意の座標の象限の統計をとる(100000,_r,_中心のx座標,_中心のy座標,0,0,0,0,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数),
        度数から面積を得る(_円の面積,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の面積,_第2象限の面積,_第3象限の面積,_第4象限の面積).

半径を0からrまで変化させて中心座標から半径分だけ離れた任意の座標の象限の統計をとる(0,_r,_,_,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数) :- !.
半径を0からrまで変化させて中心座標から半径分だけ離れた任意の座標の象限の統計をとる(N,_r,_中心のx座標,_中心のy座標,_第1象限の度数_1,_第2象限の度数_1,_第3象限の度数_1,_第4象限の度数_1,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数) :-
        標本点を得る(_r,_中心のx座標,_中心のy座標,_x,_y),
        象限度数に加算(_x,_y,_第1象限の度数_1,_第2象限の度数_1,_第3象限の度数_1,_第4象限の度数_1,_第1象限の度数_2,_第2象限の度数_2,_第3象限の度数_2,_第4象限の度数_2).
        N_1 is N - 1,
        半径を0からrまで変化させて中心座標から半径分だけ離れた任意の座標の象限の統計をとる(N_1,_r,_中心のx座標,_中心のy座標,_第1象限の度数_2,_第2象限の度数_2,_第3象限の度数_2,_第4象限の度数_2,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数).

象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数_2,_第2象限の度数,_第3象限の度数,_第4象限の度数) :-
        _x > 0.0,
        _y > 0.0,
        _第1象限の度数_2 is _第1象限の度数 + 1,!.
象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数_2,_第3象限の度数,_第4象限の度数) :-
        _x < 0.0,
        _y > 0.0,
        _第2象限の度数_2 is _第2象限の度数 + 1,!.
象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数,_第3象限の度数_2,_第4象限の度数) :-
        _x < 0.0,
        _y < 0.0,
        _第3象限の度数_2 is _第3象限の度数 + 1,!.
象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数_2) :-
        _x > 0.0,
        _y < 0.0,
        _第4象限の度数_2 is _第4象限の度数 + 1,!.
象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数).

標本点を得る(_r,_中心のx座標,_中心のy座標,_x,_y) :-
        半径とラジアン角度をランダムに得る(_r,_半径,_ラジアン角度),
        _x is _半径 * cos(_ラジアン角度) + _中心のx座標,
        _y is _半径 * sin(_ラジアン角度) + _中心のy座標.

半径とラジアン角度をランダムに得る(_r,_半径,_ラジアン角度) :-
        _半径 is _r * (random(10000) + 1) / 10000,        
        _ラジアン角度 is 2 * pi * (random(10000) + 1) / 10000.

度数から面積を得る(_円の面積,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の面積,_第2象限の面積,_第3象限の面積,_第4象限の面積) :-
        _標本数 is _第1象限の度数+_第2象限の度数+_第3象限の度数+_第4象限の度数,
        _第1象限の面積 is _円の面積 * _第1象限の度数 / _標本数,
        _第2象限の面積 is _円の面積 * _第2象限の度数 / _標本数,
        _第3象限の面積 is _円の面積 * _第3象限の度数 / _標本数,
        _第4象限の面積 is _円の面積 * _第4象限の度数 / _標本数.