C++で二次方程式の解の個数を求めるプログラム
はじめに
本記事では、定数 a、b、c を係数とする二次方程式 ax2 + bx + c が与えられたとき、その実数解の個数を求めるC++プログラムの作成方法を解説します。
問題の概要
二次方程式は最大で2つの解を持ちます。与えられた方程式がいくつの解を持つのかを、判別式を用いて判定するのがこの課題の目的です。
例1
入力: 3x2 + 7x + 4
出力: 2
説明: 方程式を因数分解すると (3x + 4)(x + 1) = 0 となり、解は x = −4/3 と x = −1 の2つです。
例2
入力: x2 − 4x + 4
出力: 1
説明: (x − 2)2 = 0 となり、重解 x = 2 のみを持つため、解は1つです。
例3
入力: 2x2 + 2x + 2
出力: 0
説明: 実数解が存在しないため、解の個数は0です。
解法のアプローチ
解の個数を求めるには、二次方程式の解の性質を調べる必要があります。これは判別式 D の値から判断できます。
二次方程式の解は、次の解の公式で表されます。
x = (−b ± √(b2 − 4ac)) / 2a
ここで、判別式は次のように定義されます。
D = b2 − 4ac
判別式の値によって、二次方程式の解の個数は以下のように決まります。
D = 0 の場合:解は1つ(重解)
D > 0 の場合:解は2つ
D < 0 の場合:解は0つ(負の数の平方根は虚数になるため)
アルゴリズム
ステップ1: 判別式 D = b2 − 4ac を計算する
ステップ2: D > 0 なら「2つの解」と出力する
ステップ3: D = 0 なら「1つの解」と出力する
ステップ4: D < 0 なら「0個の解」と出力する
C++による実装例
#include <iostream>
using namespace std;
int checkSolution(int a, int b, int c) {
int d = (b * b) - (4 * a * c);
if (d > 0)
return 2;
else if (d == 0)
return 1;
else
return 0;
}
int main() {
int a = 2, b = 2, c = 3;
cout << "The quadratic equation is " << a << "x^2 + " << b << "x + "
<< c << " has ";
cout << checkSolution(a, b, c) << " solutions";
return 0;
}実行結果
The quadratic equation is 2x^2 + 2x + 3 has 0 solutions
まとめ
判別式 D = b2 − 4ac の値を計算するだけで、二次方程式の実数解の個数を簡単に判定できます。D の符号を確認するだけのシンプルな処理で済むため、計算コストが低く、非常に効率的な手法です。
-
C++で再帰を使って数値の階乗を求めるプログラム
階乗とは非負整数 n の階乗(factorial)とは、n 以下のすべての正の整数を掛け合わせた積のことです。記号「!」を用いて表されます。例えば、4 の階乗は次のように計算されます。4! = 4 × 3 × 2 × 1 4! = 24整数の階乗は、再帰を使ったプログラムでも、繰り返し処理(反復)を使ったプログラムでも求めることができます。再帰を使った階乗を求めるC++プログラム以下のプログラムは、再帰処理を用いて数値の階乗を求める例です。サンプルコード#include <iostream> using namespace std; int fact(int n) { if
-
【C++入門】二次方程式のすべての解(根)を求めるプログラムの書き方
二次方程式は一般に ax2 + bx + c = 0 の形で表されます。この方程式の解(根)は、以下に示す有名な「解の公式」によって求めることができます。判別式による3つの場合分け二次方程式の解の性質は、判別式 D = b2 − 4ac の値によって、次の3通りに分類されます。b2 < 4ac の場合:解は実数にならず、虚数を含む複素数になります。b2 = 4ac の場合:解は実数となり、両方の解が同じ値(重解)になります。b2 > 4ac の場合:解は実数となり、異なる2つの実数解を持ちます。それでは、これらすべての場合に対応した、二次方程式の解を求めるC++プログラムを見ていき