10/01/30 07:35:48
>>514
% Prolog
'キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を 受け取って(最後は改行)、二次方程式 ax2+bx+c=0 の解を画面に(標準出力に)出力せよ。二次方程式の解は複素数の範囲で考えること。' :-
'キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を 受け取り(A,B,C),
二次方程式の解(A,B,C,X).
'キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を 受け取り(A,B,C) :-
get_line(Line),
split(Line,[' '],L),
findall(V,(member(A,L),atom_to_term(A,V,_)),[A,B,C]),!.
二次方程式の解(A,B,C,X) :-
_判別式 is B ^ 2 - 4 * A * C,
判別式により解を求める(_判別式,A,B,C,X).
判別式により解を求める(_判別式,A,B,C,X) :-
( _判別式 > 0; _判別式 > 0.0),!,
( X is ((-1) * B + sqrt(_判別式)) / ( 2 * A);
X is ((-1) * B + sqrt(_判別式)) / ( 2 * A)).
判別式により解を求める(_判別式,A,B,C,X) :-
(_判別式 = 0;_判別式 = 0.0),!,
X is ((-1) * B) / ( 2 * A).
判別式により解を求める(_判別式,A,B,C,X) :-
( _判別式 < 0; _判別式 < 0.0),!,
U is (-1) / (2 * A),
V is sqrt((-1) * _判別式)),
( X = (U + iV); X = (U - iV)).