001 /** 002 * Ohjelmalla testataan 2. asteen polynomin juurien etsimistä 003 * @author Vesa Lappalainen 004 * @version 1.0, 16.02.2003 005 */ 006 public class P2_2 { 007 008 public static void testi(double a, double b, double c) { 009 Polynomi2 p = new Polynomi2(a,b,c); 010 System.out.print("Polynomi: " + p); 011 if ( p.getReaalijuuria() <= 0 ) { 012 System.out.println(" Ei yhtään reaalijuuria! "); 013 return; 014 } 015 System.out.print(" juuret: "); 016 System.out.print("x1 = " + p.getX1() + " => P(x1) = " + p.f(p.getX1()) ); 017 System.out.print(" ja "); 018 System.out.print("x2 = " + p.getX2() + " => P(x2) = " + p.f(p.getX2()) ); 019 System.out.println(); 020 } 021 022 public static void main(String[] args) { 023 testi(1,2,1); 024 testi(2,1,0); 025 testi(1,-2,1); 026 testi(2,-1,0); 027 testi(2,1,1); 028 testi(2,0,0); 029 testi(0,2,1); 030 testi(0,0,1); 031 } 032 } 033 034 035 036 /** 037 * Luokka toisen asteen polynomille ja sen nollakohdille 038 * @author Vesa Lappalainen 039 * @version 1.0, 16.02.2003 040 */ 041 class Polynomi2 { 042 043 private double a,b,c,x1,x2; 044 private int reaalijuuria; 045 046 public Polynomi2(double a, double b, double c) { 047 this.a = a; this.b = b; this.c = c; 048 reaalijuuria = ratkaise_2_asteen_yhtalo(); 049 } 050 051 private int ratkaise_2_asteen_yhtalo() { 052 double D,SD; 053 x1 = x2 = 0; 054 if ( a==0 ) { /* bx + c = 0 */ 055 if ( b==0 ) { /* c = 0 */ 056 if ( c==0 ) { /* 0 = 0 */ 057 return 1; /* id. tosi */ 058 } /* c==0 */ 059 else { /* c!=0 */ /* 0 != c = 0 */ 060 return 0; /* Aina epät. */ 061 } /* c!=0 */ 062 } /* b==0 */ 063 else { /* b!=0 */ /* bx + c = 0 */ 064 x1 = x2 = -c/b; 065 return 1; 066 } /* b!=0 */ 067 } /* a==0 */ 068 else { /* a!=0 */ /* axx + bx + c = 0 */ 069 D = b*b - 4*a*c; 070 if ( D>=0 ) { /* Reaaliset juuret */ 071 SD = Math.sqrt(D); 072 x1 = (-b-SD)/(2*a); 073 x2 = (-b+SD)/(2*a); 074 return 2; 075 } /* D>=0 */ 076 else { /* Imag. juuret */ 077 return -1; 078 } /* D<0 */ 079 } /* a!=0 */ 080 } 081 082 public static double P2(double x, double a, double b, double c) { 083 return (a*x*x + b*x + c); 084 } 085 086 public double f(double x) { return P2(x,a,b,c); } 087 public double getX1() { return x1; } 088 public double getX2() { return x2; } 089 public int getReaalijuuria() { return reaalijuuria; } 090 091 public String toString() { return a + "x^2 + " + b + "x + " + c; } 092 093 }