総合的な学習の時間

これまでに学んできた国語,英語,数学,理科,社会の知識を生かして何か書きます.

2次方程式を解いてみる Part2

前回の続きです。
2次方程式を解くためのプログラム

#include<stdio.h>
#include<math.h>

int main(void)
{
    int a,b,c;
    double x1,x2;
    a = 1;
    b = 5;
    c = 6;
    
    x1 = (-b+sqrt(b*b-4*a*c))/(2*a);
    x2 = (-b-sqrt(b*b-4*a*c))/(2*a);
    
    printf("%f\n%f\n",x1,x2);
}

を作りました。

これ、実数解のない2次方程式を解かせようとすると
どうなるんですかね・・・

試してみましょう。

{ \displaystyle
x^{2}+x+1=0
}

これならどうだ!

a = 1, b = 5, c = 6
だったところを
a = 1, b = 1, c = 1
にして・・・実行!!

nan
nan

ん?なんだこれは?

カレーによく合うやつかな・・・?

ちなみにナンを焼く窯のことを
タンドールといいます。

気になる人とカレーを食べに行った時のネタにでも使ってください。


話を戻します。


nanはwikipediaによれば色んな意味があるようですが
とりあえずは
「解けません」
とでも解釈しておきましょう。

そうはいってもやはり、いきなりnanが現れると
どうしてもカレーを連想してしまうので
プログラムに工夫を加えてみます。

もし結果がnanになったら
「解けません!」
と潔く叫んでもらいましょうか。

ここで使うのは条件分岐(if-else文)です。

if (isnan(x1))
        printf("解けません!\n");
    else
        printf("%f\n%f\n",x1,x2);

これは

もしx1とx2の値がnanになったら
「解けません!」
と表示しなさい。
そうでなければ2つの解を1行ごとに表示しなさい。

と命令しているのと同じです。

ifの後の()の中が真(True)だと、そのあとの命令が実行され
偽(False)だとelseの後の命令が実行されます。

isnan()というのは、()内の変数がnanだったらTrueを返してくれる関数で
今回の場合はこの関数によって、ifの後の()の中身がTrueになるわけです。

2次方程式だと
x1がnanなら自動的にx2もnanになるはずなので
x1だけ調べるようにしました。

ここまでをまとめると、以下の様なプログラムになります。

#include<stdio.h>
#include<math.h>

int main(void)
{
    int a,b,c;
    double x1,x2;
    a = 1;
    b = 1;
    c = 1;
    
    x1 = (-b+sqrt(b*b-4*a*c))/(2*a);
    x2 = (-b-sqrt(b*b-4*a*c))/(2*a);
    
    if (isnan(x1))
        printf("解けません!\n");
    else
        printf("%f\n%f\n",x1,x2);
}

実行してみましょう。

解けません!

大変潔くて好感が持てますね。
見習いたいものです。


今回はここまで! ごきげんよう!