このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1258320456/193
#  2. 以下の手順に沿って二次方程式の解を計算するプログラム q2.py を作りなさい。ただし、実行結果は以下の黄色の囲みの部分の通りになるようにしなさい。なお、平方根の計算には math.sqrt() を使うことができます。 
#   
#      (1) aを入力する 
#      (2) bを入力する 
#      (3) cを入力する 
#      (4) 判別式D=b*b-4*a*cを計算する。 
#      (5) Dの値に応じて以下の処理を行う。 
#               (5-1) D<0 のとき "実数解はありません"と表示する 
#               (5-2) D=0 のとき 重解を計算して表示する 
#               (5-3) D>0 のとき 2つの解を計算して表示する 
#   
#   
#  実行例  
#   
#  $./q2.py二次方程式ax^2+bx+c=0の係数を入れてくださいa? 1b? 0c? 1実数解はありません$ ./q2.py二次方程式ax^2+bx+c=0の係数を入れてくださいa? 1b? 0c? -1解は 1.0 と -1.0 です 
#    
#   
#   
#   
# 
# 

'二次方程式の解を計算する' :-
        aを入力する(_a),
        bを入力する(_b),
        cを入力する(_c),
        '判別式D=b*b-4*a*cを計算する。'(_a,_b,_c,D),
        'Dの値に応じて以下の処理を行う。'(D,_a,_b,_c).        

aを入力する(_b) :-
         write('ax^2 + bx + c = 0 の係数bを入力してください : '),
         get_integer(_b).

aを入力する(_c) :-
         write('ax^2 + bx + c = 0 の係数cを入力してください : '),
         get_integer(_c).

aを入力する(_a) :-
         write('ax^2 + bx + c = 0 の係数aを入力してください : '),
         get_integer(_a).

'判別式D=b*b-4*a*cを計算する。'(_a,_b,_c,D) :-
        D is _b * _b - 4 * _a * _c.

'Dの値に応じて以下の処理を行う。'(D,_a,_b,_c) :-
        'D<0 のとき "実数解はありません"と表示する'(D),!.
'Dの値に応じて以下の処理を行う。'(D,_a,_b,_c) :-
        'D=0 のとき 重解を計算して表示する'(D,_a,_b,_c),!.
'Dの値に応じて以下の処理を行う。'(D,_a,_b,_c) :-
        'D>0 のとき 2つの解を計算して表示する'(D,_a,_b,_c),!.

'D<0 のとき "実数解はありません"と表示する'(D) :-
        write('実数解はありません\n').
'D=0 のとき 重解を計算して表示する'(D,_a,_b,_c) :-
        D=0,
        X is ((-1) * _b) / (2 * _a),
        write_formatted('X = %t\n',[X]),!.
'D>0 のとき 2つの解を計算して表示する'(D,_a,_b,_c) :-
        D > 0,
        二次方程式の第一解(X_1),
        二次方程式の第一解(X_2),
        write_formatted('X = %t または X = %t\n',[X_1,X_2]),!.

二次方程式の第一解(_a,_b,D,X) :-
            X is ((-1) * _b) + sqrt(D)) / (2 * _a),!.
二次方程式の第二解(_a,_b,D,X) :-
            X is ((-1) * _b) - sqrt(D)) / (2 * _a),!.