このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/641
#  [2] 問題 
#    
#  1. 等加速度直線運動を考える。初速度(m/s) と等加速度(m/s2) を入力すると、100m 先の地点に到達す 
#  るまでの時間(s)、およびその時の速度(m/s) を表示するプログラムを作成せよ。入力される数値と 
#  して、浮動小数点数値に対応すること。 
#  

s秒後の速度(_初速度,_等加速度,_S,_s秒後の速度) :-
        s秒後の速度 is _初速度 + _等加速度 * _S.

s秒後の進んだ距離(_初速度,_等加速度,_S,_s秒後に進んだ距離) :-
        s秒後の速度(_初速度,_等加速度,_S,_s秒後の速度),
        _s秒後の進んだ距離 is _初速度 * _s + (_s秒後の速度 * _s) / 2.

'等加速度直線運動を考える。初速度(m/s)と等加速度(m/s2)を入力すると、100m先の地点に到達するまでの時間(s)、およびその時の速度(m/s)を表示するプログラムを作成せよ。入力される数値として、浮動小数点数値に対応すること。' :-
        '初速度(m/s)と等加速度(m/s^2)を入力すると'(_初速度,_等加速度),
        '100m 先の地点に到達するまでの時間(m/s)、およびその時の速度(m/s)を'(_初速度,_等加速度,_100m先に到達する時間,_100m先に到達した時の速度),
        表示する(_初速度,_等加速度,_100m先に到達する時間,_100m先に到達した時の速度).

'100m 先の地点に到達するまでの時間(m/s)、およびその時の速度(m/s)を'(_初速度,_等加速度,_100m先に到達する時間,_100m先に到達した時の速度) :-
        '100m先に到達する時間と到達した時の速度'(_初速度,_等加速度,0.000,_100m先に到達する時間,_100m先に到達した時の速度).

'100m先に到達する時間と到達した時の速度'(_初速度,_等加速度,_s,_s,_100m先に到達した時の速度) :-
        s秒後の進んだ距離(_初速度,_等加速度,_S,_s秒後に進んだ距離),
        _s秒後に進んだ距離 >= 100.0,
        s秒後の速度(_初速度,_等加速度,_s,_100m先に到達した時の速度),!.
'100m先に到達する時間と到達した時の速度'(_初速度,_等加速度,_s,_100m先に到達する時間,_100m先に到達した時の速度) :-
        _s_2 is _s + 0.001,
        '100m先に到達する時間と到達した時の速度'(_初速度,_等加速度,_s_2,_100m先に到達する時間,_100m先に到達した時の速度).

'初速度(m/s)と等加速度(m/s^2)を入力すると'(_初速度,_等加速度) :-
        '初速度(m/s)を入力する'(_初速度),
        '等加速度(m/s^2)を入力する'(_等加速度).

'初速度(m/s)を入力する'(_初速度) :-
        write('初速度(m/s)を入力してください : '),
        get_line(Line),
        初速度入力診断(Line,_初速度),!.
'初速度(m/s) を入力する'(_初速度) :-
        '初速度(m/s) を入力する'(_初速度).

初速度入力診断(Line,_初速度) :-
        atom_to_term(Line,_初速度,_),
        integer(_初速度),!.
初速度入力診断(Line,_初速度) :-
        atom_to_term(Line,_初速度,_),
        float(_初速度),!.
初速度入力診断(Line,_初速度) :-
        writef('入力された %t からは適切な整数または浮動小数点数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'等加速度(m/s^2)を入力する'(_等加速度) :-
        write('等加速度(m/s^2)を入力してください : '),
        get_line(Line),
        等加速度入力診断(Line,_等加速度),!.
'等加速度(m/s)を入力する'(_等加速度) :-
        '等加速度(m/s) を入力する'(_等加速度).

等加速度入力診断(Line,_等加速度) :-
        atom_to_term(Line,_等加速度,_),
        integer(_等加速度),!.
等加速度入力診断(Line,_等加速度) :-
        atom_to_term(Line,_等加速度,_),
        float(_等加速度),!.
等加速度入力診断(Line,_等加速度) :-
        writef('入力された %t からは適切な整数または浮動小数点数が得られません。再入力をお願いします。\n',[Line]),
        fail.

表示する(_初速度,_等加速度,_100m先に到達する時間,_100m先に到達した時の速度) :-
        writef('初速度 = %t, 等加速度 = %t の時、100m先に到達する時間は %t, 100m先に到達した時の速度は %t です。\n',[_初速度,_等加速度,_100m先に到達する時間,_100m先に到達した時の速度]).