Javaで2次方程式を扱う
概要
2次方程式を扱うプログラム。
class MyquadraticEquation { private double a;// x^2の係数 private double b;// x^1の係数 private double c;// x^0の係数 private double d;// 判別式の解 private MySolution solution;// 解 MyquadraticEquation(double a, double b, double c) { this.a = a; this.b = b; this.c = c; this.d = discriminant(a, b, c); } void solve(double a, double b) { if (d > 0) { MySolution mysl = new MySolution((double) (-1 * b + Math.sqrt(d)) / (2 * a), (double) (-1 * b - Math.sqrt(d)) / (2 * a)); this.solution = mysl; } if (d == 0) { MySolution mysl = new MySolution((double) (-1 * b + Math.sqrt(d)) / (2 * a)); this.solution = mysl; } if (d < 0) { MyComplex mc = new MyComplex(-b / 2 * a, Math.sqrt(-1 * d) / (2 * a)); MySolution mysl = new MySolution(mc); this.solution = mysl; } } double discriminant(double a, double b, double c) { this.d = b * b - 4 * a * c; return this.d; } public String toString() { return "[方程式" + a + "x^2+" + b + "x+" + c + "=0]" + " [判別式=" + d + "]"; } MySolution getSolution() { solve(a, b); return solution; } } class MySolution { private String root_type;// 解の説明(「実数解」、「重解」、「虚数解」) private double root1;// (実数解の1つ目) private double root2;// (実数解の2つ目) private double root;// 重根 private MyComplex solution;// 虚数解 MySolution(double root1, double root2) {// 実数解を2つセットする、解の説明root_typeを「実数解」とする this.root1 = root1; this.root2 = root2; this.root_type = "実数解"; } MySolution(double root) {// 重根をセットする、解の説明root_typeを「重根」とする this.root = root; this.root_type = "重根"; } MySolution(MyComplex mc) {// 虚数解をセットする、解の説明root_typeを「虚数解」とする this.solution = mc; this.root_type = "虚数解"; } public String toString() { String answer = null; if (this.root_type == "実数解") { answer = "実根 [" + this.root1 + "] [" + root2 + "]"; } if (this.root_type == "重根") { answer = "重根 [" + this.root + "]"; } if (this.root_type == "虚数解") { answer = "虚数解 実部[" + this.solution + "]"; } return answer; } } class MyComplex { private double real;// 実部 private double imaginary;// 虚部 MyComplex(double r, double im) { this.real = r; this.imaginary = im; } public String toString() { return "実部[" + real + "]" + " 虚部[" + imaginary + "]"; } } public class MyQuadraticEquationTest_1 { public static void main(String[] args) { MyquadraticEquation mqe1 = new MyquadraticEquation(1.0, -5.0, 4); System.out.println(mqe1); System.out.println(mqe1.getSolution()); MyquadraticEquation mqe2 = new MyquadraticEquation(1.0, -2.0, 1.0); System.out.println(mqe2); System.out.println(mqe2.getSolution()); MyquadraticEquation mqe3 = new MyquadraticEquation(1.0, 0.0, 16.0); System.out.println(mqe3); System.out.println(mqe3.getSolution()); } }
実行結果
[方程式1.0x^2+-5.0x+4.0=0] [判別式=9.0]
実根 [4.0] [1.0]
[方程式1.0x^2+-2.0x+1.0=0] [判別式=0.0]
重根 [1.0]
[方程式1.0x^2+0.0x+16.0=0] [判別式=-64.0]
虚数解 実部[実部[-0.0] 虚部[4.0]]
- メディア: ウェア&シューズ
- この商品を含むブログを見る