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次方程式を解かせようとすると
どうなるんですかね・・・
試してみましょう。
これならどうだ!
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); }
実行してみましょう。
解けません!
大変潔くて好感が持てますね。
見習いたいものです。
今回はここまで!
ごきげんよう!