このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/506
#  [1] 授業単元: 
#  [2] 問題文:平面上の点,直線,円の位置関係を判定するプログラムを作れ. 
#     判定結果としては,カッコ内の文字列を表示せよ. 
#     点のxy-座標および円の半径と中心のxy-座標を入力し,その点と円の位置関係を, 
#    (a) 点は円の外部にある('gaibu') 
#    (b) 点は円周上にある('enshuujou') 
#    (c) 点は円の内部にある('naibu') 
#    のいずれかに分類せよ. 
#  

'平面上の点,直線,円の位置関係を判定する'(_判定) :-
        '点のxy-座標および円の半径と中心のxy-座標を入力し'(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標),
        その点と円の位置関係を判定する(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標,_判定),
        write('%t\n',[_判定]).

'点のxy-座標および円の半径と中心のxy-座標を入力し'(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標) :-
        '点のxy-座標を入力'(_点x座標,_点y座標),
        '円の半径を入力'(_円の半径),
        '円の中心のxy-座標を入力'(_中心のx座標,_中心のy座標).

その点と円の位置関係を判定する(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標,点は円の外部にある) :-
        点は円の外部にある(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標),!.

その点と円の位置関係を判定する(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標,点は円周上にある) :-        
        点は円周上にある(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標),!.

その点と円の位置関係を判定する(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標,点は円の内部にある) :-
        点は円の内部にある(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標),!.

'点のxy-座標を入力'(_点x座標,_点y座標) :-
        '点のx座標の入力'(_点x座標),
        '点のy座標の入力'(_点y座標),!.

'円の半径の入力'(_円の半径) :-
        write('円の半径を入力してください : '),
        get_line(Line),
        数値入力診断(Line,_円の半径),!.
'円の半径を入力'(_円の半径) :-
        '円の半径を入力'(_円の半径).

'円の中心のxy-座標を入力'(_中心のx座標,_中心のy座標) :-
        '円の中心のx座標を入力'(_中心のx座標),
        '円の中心のy座標を入力'(_中心のy座標),!.

'点のx座標の入力'(_点x座標) :-
        write('点のxy-座標を入力してください x座標 : '),
        get_line(Line),
        数値入力診断(Line,_点x座標),!.
'点のx座標を入力'(_点x座標) :-
        '点のx座標を入力'(_点x座標).

'点のy座標の入力'(_点y座標) :-
        write(' y座標 : '),
        get_line(Line),
        数値入力診断(Line,_点y座標),!.
'点のy座標を入力'(_点y座標) :-
        '点のy座標を入力'(_点y座標).

'円の中心のx座標の入力'(_中心のx座標) :-
        write('円の中心のxy-座標を入力してください x座標 : '),
        get_line(Line),
        数値入力診断(Line,_中心のx座標),!.
'円の中心のx座標を入力'(_中心のx座標) :-
        '円の中心のx座標を入力'(_中心のx座標).

'円の中心のy座標の入力'(_中心のy座標) :-
        write(' y座標 : '),
        get_line(Line),
        数値入力診断(Line,_中心のy座標),!.
'円の中心のy座標を入力'(_中心のy座標) :-
        '円の中心のy座標を入力'(_中心のy座標).

数値入力診断(Line,_座標点) :-
        atom_to_term(Line,_座標点,_),
        number(_座標点),!.
数値入力診断(Line,_座標点) :-
        writef('入力された %t から数値が得られません。再入力をお願いします。\n',[Line]),
        fail.

点は円の外部にある(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標) :-
        X is (_点x座標 - _中心のx座標) * (_点x座標 - _中心のx座標),
        Y is (_点y座標 - _中心のy座標) * (_点y座標 - _中心のy座標),
        X + Y > _円の半径 * _円の半径,!.

点は円周上にある(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標) :-
        X is (_点x座標 - _中心のx座標) * (_点x座標 - _中心のx座標),
        Y is (_点y座標 - _中心のy座標) * (_点y座標 - _中心のy座標),
        X + Y =:= _円の半径 * _円の半径,!.

点は円の内部にある(_点x座標,_点y座標,_円の半径,_中心のx座標,_中心のy座標) :-
        X is (_点x座標 - _中心のx座標) * (_点x座標 - _中心のx座標),
        Y is (_点y座標 - _中心のy座標) * (_点y座標 - _中心のy座標),
        X + Y < _円の半径 * _円の半径,!.