<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">

import java.lang.Math;

/**
 * Resuelve una ecuacion cuadratica.
 *
 * Encuentra las dos raices que resuelven la ecuacion cuadratica:
 * 	ax^2 + bx + c = 0.
 *
 * Utiliza la formula general (tambien conocida
 * coloquialmente como el "chicharronera 1 y 2")
 * y el metodo de Newton-Rapson.
 *
 * Parametros:
 *	a -- coeficiente cuadratico (debe ser distinto de 0)
 * 	b -- coeficiente lineal
 * 	c -- termino independiente
 *
 * Error:
 * 	Si (a == 0)
 *
*/
public class cuadratica {

   // Coeficientes del polinomio
   private double A, B, C;


   /**
   *  Constructor de la clase
   *
   * @param a Coeficiente cuadratico
   * @param b Coeficiente lineal
   * @param c Coeficiente independiente
    */
   public cuadratica(double a, double b, double c) {
      if (a == 0) {
         System.out.println("No es una ecuacion cuadratica");
         System.exit(1);
      }
      A = a;
      B = b;
      C = c;
   }

   /**
    * Evalua la funcion cuadratica
    * @param x Valor en que se evaluara la funcion
    *
    * @return Evaluacion de la funcion cuadratica en x
    */
   private double f(double x) {
      return (x * x * A + x * B + C);
   }

   /**
    * Evalua el valor X en la funcion cuadratica
    * @param x Valor en que se evaluara la funcion
    *
    * @return Evaluacion de la funcion cuadratica en x
    */
   private void evalua(double x) {
      System.out.println("Raiz (" + x + ") , evaluacion raiz: " + f(x));
   }

   /**
    * Evalua la derivada de la funcion cuadratica
    * @param x Valor en que se evaluara la funcion
    *
    * @return Evaluacion de la funcion derivada en x
    */
   private double df(double x) {
      return (2.0 * x * A + B);
   }

   /**
    *  Metodo Newton-Raphson: x = x - f(x)/f'(x)
    * @param x Valor inicial para hacer la busqueda de la raiz
    * @param ni Numero de iteraciones
    *
    * @return La raiz buscada
    */
   private double metodoNewtonRapson(double x, int ni) {
      for (int i = 0; i &lt; ni; i++) {
         x = x - (f(x) / df(x));
      }
      return x;
   }

   /**
    * Calculo de las raices del polinomio
    */
   public void raices() {
      // Raices del polinomio
      double X1, X2, x;

      // Calculo del discriminante
      double d = B * B - 4.0 * A * C;

      // Raices reales
      if (d &gt;= 0.0) {
         System.out.println("");
         System.out.println("Raices Reales (" + A + ")X^2 + (" + B + ")X + (" + C + ") = 0");
         System.out.println("Chicharronera 1");
         X1 = (-B + Math.sqrt(d)) / (2.0 * A);
         X2 = (-B - Math.sqrt(d)) / (2.0 * A);
         evalua(X1);
         evalua(X2);
         System.out.println("");


         System.out.println("Chicharronera 2");
         X1 = (-2.0 * C) / (B + Math.sqrt(d));
         X2 = (-2.0 * C) / (B - Math.sqrt(d));;
         evalua(X1);
         evalua(X2);
         System.out.println("");

         // Metodo Newton-Raphson
         System.out.println("Newton-Rapson");
         X1 = Math.round(X1);
         System.out.print("Valor inicial aproximado de X1 = " + X1);
         x = metodoNewtonRapson(X1, 8);
         evalua(x);
         X2 = Math.round(X2);
         System.out.print("Valor inicial aproximado de X2 = " + X2);
         x = metodoNewtonRapson(X2, 8);
         evalua(x);


      } else {
         // Raices complejas
         System.out.println("Raices Complejas ...");
      }
   }


   /**
    * Funcion Principal ....
    */
   public static void main(String[] args) {
      cuadratica cu1 = new cuadratica(1.0, 4.0, 1.0);
      cu1.raices();
   }
}

</pre></body></html>