1   /**
2    * Ohjelmalla testataan 2. asteen polynomin juurien etsimistä
3    * @author Vesa Lappalainen
4    * @version 1.0, 16.02.2003
5    */
6   public class P2_2 {
7   
8     public static void testi(double a, double b, double c) {
9       Polynomi2 p = new Polynomi2(a,b,c);
10      System.out.print("Polynomi: " + p);
11      if ( p.getReaalijuuria() <= 0 ) {
12        System.out.println("  Ei yhtään reaalijuuria! ");
13        return;
14      }
15      System.out.print("  juuret: ");
16      System.out.print("x1 = " + p.getX1() + " => P(x1) = " + p.f(p.getX1()) );
17      System.out.print("  ja  ");
18      System.out.print("x2 = " + p.getX2() + " => P(x2) = " + p.f(p.getX2()) );
19      System.out.println();
20    }
21  
22    public static void main(String[] args)  {
23      testi(1,2,1);
24      testi(2,1,0);
25      testi(1,-2,1);
26      testi(2,-1,0);
27      testi(2,1,1);
28      testi(2,0,0);
29      testi(0,2,1);
30      testi(0,0,1);
31    }
32  }
33  
34  
35  
36  /**
37   * Luokka toisen asteen polynomille ja sen nollakohdille
38   * @author Vesa Lappalainen
39   * @version 1.0, 16.02.2003
40   */
41  class Polynomi2 {
42  
43    private double a,b,c,x1,x2;
44    private int reaalijuuria;
45  
46    public Polynomi2(double a, double b, double c) {
47      this.a = a; this.b = b; this.c = c;
48      reaalijuuria = ratkaise_2_asteen_yhtalo();
49    }
50  
51    private int ratkaise_2_asteen_yhtalo() {
52      double D,SD;
53      x1 = x2 = 0;
54      if ( a==0 ) {                       /*       bx + c = 0 */
55        if ( b==0 ) {                     /*            c = 0 */
56          if ( c==0 ) {                   /*            0 = 0 */
57            return 1;                     /* id. tosi         */
58          }                 /* c==0 */
59          else {            /* c!=0 */    /*       0 != c = 0 */
60            return 0;                     /* Aina epät.       */
61          }                 /* c!=0 */
62        }                   /* b==0 */
63        else {              /* b!=0 */    /*       bx + c = 0 */
64          x1 = x2 = -c/b;
65          return 1;
66        }                   /* b!=0 */
67      }                     /* a==0 */
68      else {                /* a!=0 */    /* axx + bx + c = 0 */
69        D = b*b - 4*a*c;
70        if ( D>=0 ) {                     /* Reaaliset juuret */
71          SD  = Math.sqrt(D);
72          x1 = (-b-SD)/(2*a);
73          x2 = (-b+SD)/(2*a);
74          return 2;
75        }                   /* D>=0 */
76        else {                            /* Imag. juuret     */
77          return -1;
78        }                   /* D<0  */
79      }                     /* a!=0 */
80    }
81  
82    public static double P2(double x, double a, double b, double c) {
83      return (a*x*x + b*x + c);
84    }
85  
86    public double f(double x) { return P2(x,a,b,c); }
87    public double getX1() { return x1; }
88    public double getX2() { return x2; }
89    public int getReaalijuuria() { return reaalijuuria; }
90  
91    public String toString() { return a + "x^2 + " + b + "x + " + c; }
92  
93  }
94