続・二次方程式の解を求めるサンプルコード - 萌えJava超入門
第十二章 クラスメソッド

続・二次方程式の解を求める
サンプルコード

各項の係数を配列で与えて、
 { partB ±√(partC) } / partA
の形で、解を得るメソッドを作ってみましょう。

ax2+bx+c = 0 の解
        (x≠0)
目次

1. 続・ax2+bx+c=0 の解を求めるメソッド


今回はあえて√(ルート)を計算しないで、以下のそれぞれのパートを求めることにしました。
解の公式
  partA = 2*a
  partB = -b
  partC = (b*b-4*a*c)

partB ±√(partC) x = ------------------ partA


//Sample07_131.java
class Sample07_131 {

  static double[] method_04(double a, double b, double c){
      /*各パートの計算*/
      double[] ans = {(2*a) , -b ,  (b*b-4*a*c)};
      return ans;
  }
  static void printAnswer(double[] ans){
      /*答えの表示*/
      double partA = ans[0];
      double partB = ans[1];
      double partC = ans[2];

      System.out.println("          " + partB + "  ±√( "+ partC +" )");
      System.out.println("    x = -------------------------");
      System.out.println("                " + partA);
  }
  public static void main(String[] args){

      int a=2;
      int b=3;
      int c=-4;
      /*問題の表示*/
      System.out.println(
          (int)a + "xx+" + (int)b +"x+" +(int)c +"=0"
      );

      double[] ans = method_04(a, b, c);//計算
      printAnswer(ans);//答えの表示
  }
}

コマンドライン
>javac Sample07_131.java
>java Sample07_131
2xx+3x+-4=0
          -3.0  ±√( 41.0 )
    x = -------------------------
                4.0


これでどうだ!?
表示のソースコードが複雑になったので
printAnswerメソッドにまとめてみた。
答えは
 x = -[√(41)-3] / 4
 と
 x = [√(41)+3] / 4 。
キタ~~!!
私も数学の勉強やめるわ。



そりゃダメだろ!!

係数から各パートの値を得るメソッド(method_04)と、
各パートの値から定型で表示するためのメソッド(printAnswer)を分けてみました。
機能ごとにメソッドを分けておくと、ソースコードが見やすくなりますね。

ちなみに、約分やルートの計算は各自行うようにしましょう。
ってゆうか宿題はちゃんとやった方がいいですよ?


2. 問題集を解く

  
次の2次方程式を解きなさい 1. x2 -2x - 1= 0 2. x2 +4x + 1= 0 3. x2 -6x + 1= 0 4. x2+10x +13= 0 5. 2x2 -4x - 8= 0 6. 3x2 +6x - 6= 0 7. x2 -5x + 5= 0 8. x2 + x - 3= 0 9. 2x2 -8x + 1= 0 10. 2x2+12x + 7= 0 11. x2 -2x - 5= 0 12. 3x2+24x +39= 0 13. 3x2 -8x + 3= 0 14. 8x2+24x +13= 0 15. 5x2-10x + 3= 0 16. 7x2 +4x - 1= 0
えええ~~!
シズちゃんそれはちょっと
やりすぎだと思うわ!
ふっ!
殺(ヤ)っちまったら
一人も二人も同じことよ!!
やったー!!
会長カッコイイ~!!

//Sample07_132.java
class Sample07_132 {
  static double[] method_04(double a, double b, double c){
      /*各パートの計算*/
      double[] ans = {(2*a) , -b ,  (b*b-4*a*c)};
      return ans;
  }
  static void printAnswer(double[] ans){
      /*答えの表示*/
      double partA = ans[0];
      double partB = ans[1];
      double partC = ans[2];

      System.out.println("   " + partB + " ±√( "+ partC +" )");
      System.out.println("x = -------------------------");
      System.out.println("          " + partA);
  }
    public static void main(String[] args){
      /*各問題の係数*/
      int[][] coefficient ={//静乃さん、多次元配列はまだ説明してませんよ!!
          {1,-2,-1},
          {1,4,1},
          {1,-6,1},
          {1,10,13},
          {2,-4,-8},
          {3,6,-6},
          {1,-5,5},
          {1,1,-3},
          {2,-8,1},
          {2,12,7},
          {1,-2,-5},
          {3,24,39},
          {3,-8,3},
          {8,24,13},
          {5,-10,3},
          {7,4,-1}

        };
        for(int i=0; i<coefficient.length; i++){

            /*一問ずつ抽出*/
            int[] line = coefficient[i];
            int a = line[0];
            int b = line[1];
            int c = line[2];

            /*設問の表示*/
            System.out.println(
                (i+1) + ". " +
                (int)a + "xx+" + (int)b +"x+" +(int)c +"=0"
            );

            /*計算*/
            double[] ans = method_04(a, b, c);

            /*答えの表示*/
            printAnswer(ans);
       }
    }
}

コマンドライン
>javac Sample07_132.java
>java Sample07_132
1. 1xx+-2x+-1=0
          2.0  ±√( 8.0 )
    x = -------------------------
                2.0
2. 1xx+4x+1=0
          -4.0  ±√( 12.0 )
    x = -------------------------
                2.0
3. 1xx+-6x+1=0
          6.0  ±√( 32.0 )
    x = -------------------------
                2.0
4. 1xx+10x+13=0
          -10.0  ±√( 48.0 )
    x = -------------------------
                2.0
5. 2xx+-4x+-8=0
          4.0  ±√( 80.0 )
    x = -------------------------
                4.0
6. 3xx+6x+-6=0
          -6.0  ±√( 108.0 )
    x = -------------------------
                6.0
7. 1xx+-5x+5=0
          5.0  ±√( 5.0 )
    x = -------------------------
                2.0
8. 1xx+1x+-3=0
          -1.0  ±√( 13.0 )
    x = -------------------------
                2.0
9. 2xx+-8x+1=0
          8.0  ±√( 56.0 )
    x = -------------------------
                4.0
10. 2xx+12x+7=0
          -12.0  ±√( 88.0 )
    x = -------------------------
                4.0
11. 1xx+-2x+-5=0
          2.0  ±√( 24.0 )
    x = -------------------------
                2.0
12. 3xx+24x+39=0
          -24.0  ±√( 108.0 )
    x = -------------------------
                6.0
13. 3xx+-8x+3=0
          8.0  ±√( 28.0 )
    x = -------------------------
                6.0
14. 8xx+24x+13=0
          -24.0  ±√( 160.0 )
    x = -------------------------
                16.0
15. 5xx+-10x+3=0
          10.0  ±√( 40.0 )
    x = -------------------------
                10.0
16. 7xx+4x+-1=0
          -4.0  ±√( 44.0 )
    x = -------------------------
                14.0

約分まではできなかったけど
こんなもんかな。



スゲー!!



や~
やりすぎとは思うけど、
とりあえずスゲー!!

多次元配列についてはいずれ解説していきたいと思います。
  ご参照↓
   第二十三章 多次元配列




少しずつ実用性が出てきました。

お疲れ様でした。




© 2019 awasekagami