二次方程式を解く

今から十数年前の 8 ビットパソコンが出始めたころのプログラムテキストには二次方程式を解くものが必ずといっていいほど掲載されていましたし、十年前の大学の授業の一貫として二次方程式を解くプログラムを作るものがあったところもあります。

さて、今回は十進BASIC に掲載されていた以下の問題です。

組み方がちっともわかりません。
だれか下のプログラムの組み方を教えてくださいませんか??

2次方程式ax^2+bx+c=0(ただしa≠0)の解は
-b±√(b^2-4ac)
x=−−−−−−−−
    2a
である、キーボードから、3つの数a,b,cを入力し、2次方程式の解を計算し画面に表示するプログラム

です。誰かわかるかたいましたら教えてください、お願いします(><)

非常に簡単に解いてみます。 awk の場合にキーボードから入力値を得るには getline を用います。 また、print 文で文字列と数値を連接している関係でひょっとしたらおかしなことになるかもしれません。

#! /usr/bin/gawk -f
# quadratic_equation.awk

BEGIN {
    print "ax^2+bx+c=0 を解きます。";

    printf("a = ");
    getline a;
    printf("b = ");
    getline b;
    printf("c = ");
    getline c;

    if (b ^ 2 - 4 * a * c < 0) {
        print "解がありません。";
    } else if (b ^ 2 - 4 * a * c == 0) {
        print "x (重解) = " (-b) / (2 * a);
    } else {
        print "x = " (-b + sqrt(b ^ 2 - 4 * a * c)) / (2 * a);
        print "x = " (-b - sqrt(b ^ 2 - 4 * a * c)) / (2 * a);
    }
}

実行してみましょう。

$ nawk -f quadratic_equation.awk
ax^2+bx+c=0 を解きます。
a = 1
b = 2
c = 1
x (重解) = -1

$ nawk -f quadratic_equation.awk
ax^2+bx+c=0 を解きます。
a = 1
b = 1
c = 1
解がありません。

$ nawk -f quadratic_equation.awk
ax^2+bx+c=0 を解きます。
a = 1
b = 3
c = 1
x = -0.381966
x = -2.61803

もちろん、判別式を if 文と公式で 2 回解くのではなく、一度変数に入れておいた方が計算コストは少なくなります。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png