このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/824
#  [1] 授業単元: C言語とアルゴリズム 
#  [2] 問題文(含コード&リンク):  
#  初速v、仰角θを入力。着弾距離、着弾するまでの時間を求める。 
#  <問題の意味> 
#  vx=vcos(θ),vy=-gt+vsin(θ) 
#  x=vtcos(θ),y=-gt^2/2+vtsin(θ)+y0 
#  y=0,y0=0のとすると、 
#  着弾するまでの時間は gt^2/2=vtsin(θ) > t=2*vsin(θ)/g 
#  着弾距離はtがわかれば x=vtcos(θ)で求まる 
#  

'初速v、仰角θを入力。着弾距離、着弾するまでの時間を求める' :-
        初速vの入力(_v),
        仰角thetaの入力(_theta),
        '初速v、仰角θを入力。着弾距離、着弾するまでの時間を求める'(_v,_theta,_着弾距離,_着弾するまでの時間),
        writef('着弾距離は %t m\n着弾するまでの時間は %t 秒です。\n',[_着弾距離,_着弾するまでの時間]).

'初速v、仰角θを入力。着弾距離、着弾するまでの時間を求める'(_v,_theta,_着弾距離,_着弾するまでの時間) :-
        _着弾するまでの時間 is  _v * sin(_theta) / 9.80665.
        _着弾距離 is  _v * cos(_theta) * _着弾するまでの時間.

初速vの入力(_v) :-
        write('初速vを入力して下さい : '),
        get_line(Line),
        初速vの入力診断(Line,_v),!.
初速vの入力(_v) :-
        初速vの入力(_v).

初速vの入力診断(Line,_v) :-
        atom_to_term(Line,_v,_),
        number(_v),
        _v > 0.0,!.
初速vの入力診断(Line,_v) :-
        writef('入力された%tは初速vとして適切でありません。再入力をお願いします。\n',[Line]),
        fail.

仰角thetaの入力(_theta) :-
        write('仰角thetaを入力して下さい : '),
        get_line(Line),
        仰角thetaの入力診断(Line,_theta),!.
仰角thetaの入力(_theta) :-
        仰角thetaの入力(_theta).

仰角thetaの入力診断(Line,_theta) :-
        atom_to_term(Line,_theta,_),
        number(_theta),
        _theta >= 0.0,
        _theta =< pi,!.
仰角thetaの入力診断(Line,_theta) :-
        writef('入力された%tは仰角thetaとして適切でありません。再入力をお願いします。\n',[Line]),
        fail.