総合的な学習の時間

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

2次方程式を解いてみる

今日は、2次方程式に挑戦してみようと思います。

{ \displaystyle
x^{2}+5x+6=0
}

を解いてみましょう。
まずは因数分解して

{ \displaystyle
(x+2)(x+3)=0
}

2つの解は

{ \displaystyle
x = -2, -3
}

となります。


おわり


ません。笑

中学生でも解ける2次方程式でしたが、今度はC言語で解いてみましょう。

しかし、方程式を入力したからといって勝手に解いてくれるわけではありません。

因数分解という操作も、実はコンピュータには難しい作業で
一からプログラムするのは難しいんです。

そこで、今回はこれをつかいます。

{ \displaystyle
x = \frac{-b\pm\sqrt{b^{2}-4ac}}{2a}
}

2次方程式 { \displaystyle
ax^{2}+bx+c=0
}の解の公式です。
(PCだと根号が上手く表示されてませんがお許し下さい。。。)

これを使えば、a,b,cの値さえ分かれば一発で計算ができるので
コンピュータにも楽勝です!

さっそくC言語で試してみましょう。

C言語で先ほどの解の公式を表現すると

x1 = (-b+sqrt(b*b-4*a*c))/(2*a);
x2 = (-b-sqrt(b*b-4*a*c))/(2*a);

となります。
少しややこしいですが、sqrt()はカッコの中に入れた数値の平方根をとってくれる関数です。
ここでいう関数とは、データを入れると何らかの処理を施して返してくれる機能を持つもののことです。

この公式はまだ文字で表しているだけなので
a,b,cにはそれぞれどんな値が入るのかを、以下のように定義してあげる必要があります。

int a,b,c;
double x1,x2;
a = 1;
b = 5;
c = 6;

1行目は、「a,b,cの3つの変数には整数が入りますよ」という宣言です。
2行目は、「x1とx2という変数には実数が入りますよ」という宣言です。
3〜5行目では、a,b,cの値をそれぞれ具体的に定めています。

解が求められたら

printf("%f\n",x1);
printf("%f\n",x2);

で表示させることができます。

ここまでをまとめると

#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);
}

となります。

あ、説明し忘れましたが、見覚えのない行がありますね。

 #include<math.h>

これ、sort()を使うために必要なおまじないです。


さあ、実行してみましょう・・・

-2.000000  
-3.000000

おぉ!なんか0が多いけど、ちゃんと計算してくれました!
さきほど因数分解から求めた解と一致してますね。

a,b,cの値をいろいろ変えて遊んでみると楽しいと思うので、試してみてください。


解の公式なんて初めて習ったときには
なんでこんなややこしい式覚えなきゃいけないんだ!
と憤慨したものですが
因数分解の苦手なコンピュータにとってはありがたい公式なんですね。


次回はこのプログラムに条件分岐を加えて遊んでみましょう。


ごきげんよう。