このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1284079940/8
#  【問題】(超初級) 
#  時間を入力すると時針と分針の角度を出力するプログラムを作れ。 
#  角度は度数法(ラジアンでない)を用い、3時の方向を0度とする。 
#  出力する角度Rは (0.0 <= R && R < 360.0) を満たすこと。 
#   
#  ■入力例 
#  時刻を入力してください> 15:30 
#   
#  ■出力例 
#  時針:345.0度 
#  分針:270.0度 
#   
#  ■応用問題 
#  なんらかの方法で現在時刻の時針分針の角度を出力するオプションを追加せよ。 
#  例えばプログラムの引数や、時刻入力に"*"と入力する、などで判定することができる。 
# 
# 

'時間を入力すると時針と分針の角度を出力するプログラムを作れ。角度は度数法(ラジアンでない)を用い、3時の方向を0度とする。出力する角度Rは (0.0 <= R && R < 360.0) を満たすこと。'  :-
        write('時刻を入力してください : '),
        時・分を得る(_時,_分),
        _分針R is 360 * ((_分 + 45) mod 60) / 60,
        _時針R is 360 * ((_時 + 21)  mod 12) / 12) + _分針R / 12,
        時針と分針の角度を出力する(_分針R,_時針R).

時・分を得る(_時,_分) :-
        get_line(Line),
        時・分を得る(Line,_時,_分),!.
時・分を得る(_時,_分) :-
        時・分を得る(_時,_分).

時・分を得る('*',_時,_分) :-
        A is time,
        localtime(A,_,_,_,_,_,_時,_分,_),!.
時・分を得る(Line,_時,_分) :-
        \+(Line='*'),
        split(Line,[':',' '],[_時,_分]),!.
時・分を得る(Line,_,_) :-
        write_formatted('入力された"%t"から時:分を得ることができません。再入力をお願いします\n',[Line]),
        write('時:分 を入力してください : '),
        fail.

時針と分針の角度を出力する(_分針R,_時針R) :-
        _角度R is abs(_分針R - _時針R),
        write_formatted('時針:%5.1f\n分針:%5.1f\n時針と分針で作る角度は:%5.1f\n',[_時針R,_分針R,_角度R]).