このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/277
#  [1] 授業単元:プログラミング言語(C) 
#  [2] 問題文(含コード&リンク): 
#  Cプログラミングの基礎[新訂版]発行:サイエンス社 著:蓑原隆より 
#  P48 3.1 3.2 3.3 3.4  P55 4.1 P88 5.1 P104 6.1 6.2 
#  http://ime.nu/upload.jpn.ph/upload/img/u72273.jpg 
#  http://ime.nu/upload.jpn.ph/upload/img/u72276.jpg 
#  http://ime.nu/upload.jpn.ph/upload/img/u72274.jpg 
#  http://ime.nu/upload.jpn.ph/upload/img/u72275.jpg 
#  
#  3.4 二次方程式 ax2+bx+c = 0 のa,b,cを入力すると答えをだす
#  プログラムを作成せよ。ただし、aが0の場合を考慮せよ。また、
#  実根、重根、虚根の判定をして、重根の場合は答えを1つだけ
#  表示し、虚根の場合は、
#  
#  x = 0.5 + 0.3i  x = 0.5 - 0.3i
#  
#  のように虚部、実部を表示せよ。

:- op(200,xf,i).

'二次方程式 ax2+bx+c = 0 のa,b,cを入力すると答えをだすプログラムを作成せよ。ただし、aが0の場合を考慮せよ。また、実根、重根、虚根の判定をして、重根の場合は答えを1つだけ表示し、虚根の場合は、 x = 0.5 + 0.3i  x = 0.5 - 0.3i のように虚部、実部を表示する' :-
        write('ax*x+bx+c=0の係数 aを入力してください : '),
        get_integer(_a),
        write('ax*x+bx+c=0の係数 bを入力してください : '),
        get_integer(_b),
        write('ax*x+bx+c=0の係数 cを入力してください : '),
        get_integer(_c),
        '二次方程式 ax2+bx+c = 0 のa,b,cを入力すると答えをだす'(_a,_b,_c,_判定,_解),
        判定と解を表示する(_判定,_解).

'二次方程式 ax2+bx+c = 0 のa,b,cを入力すると答えをだす'(0,_b,_c,一次方程式,_解) :-
        \+(_b=0),
        _解 is ((-1) * _c) / _b,!.
'二次方程式 ax2+bx+c = 0 のa,b,cを入力すると答えをだす'(_a,_b,_c,重根,_解) :-
        ( _b * _b - 4 * _a * _c ) = 0,
        _解 is ((-1) * _b) / (2 * _a),!.
'二次方程式 ax2+bx+c = 0 のa,b,cを入力すると答えをだす'(_a,_b,_c,実根,_解) :-
        ( _b * _b - 4 * _a * _c ) > 0,
        _解 is ((-1) * _b + sqrt(_b * _b - 4 * _a * _c)) / (2 * _a). 
'二次方程式 ax2+bx+c = 0 のa,b,cを入力すると答えをだす'(_a,_b,_c,虚根,_解) :-
        ( _b * _b - 4 * _a * _c ) < 0,
        _解 is ((-1) * _b) / (2 * _a) + sqrt((( _b * _b - 4 * _a * _c ) * (-1)) / (2 * _a))).
'二次方程式 ax2+bx+c = 0 のa,b,cを入力すると答えをだす'(_a,_b,_c,虚根,_解) :-
        ( _b * _b - 4 * _a * _c ) < 0,
        A is ((-1) * _b) / (2 * _a)),
        B is sqrt(( _b * _b - 4 * _a * _c ) * (-1)) / (2 * _a),
        _解 = (A + B i).
'二次方程式 ax2+bx+c = 0 のa,b,cを入力すると答えをだす'(_a,_b,_c,虚根,_解) :-
        ( _b * _b - 4 * _a * _c ) < 0,
        A is ((-1) * _b) / (2 * _a)),
        B is sqrt(( _b * _b - 4 * _a * _c ) * (-1)) / (2 * _a),
        _解 = (A - B i).

判定と解を表示する(実根,_解) :-
        write_formatted('判定=実根, x = %t;\n',[_解]),
        fail.
判定と解を表示する(実根,_解) :-
        write_formatted('判定=実根, x = %t\n',[_解]),!.
判定と解を表示する(虚根,_解) :-
        write_formatted('判定=虚根, x = %t;\n',[_解]),
        fail.
判定と解を表示する(虚根,_解) :-
        write_formatted('判定=虚根, x = %t\n',[_解]),!.
判定と解を表示する(_判定,_解) :-
        write_formatted('判定=%t, x = %t;\n',[_判定,_解]).
}