// Programita para mostrar el calculo de raices de una ecuacion cuadratica
// Antonio Carrillo Ledesma


import java.lang.Math;


public class CuadraticaCodSecuencial {

   // Funcion Principal ....
   public static void main(String[] args) {

      // Coeficientes del polinomio
      double A = 1.0, B = 4.0, C = 1.0, d;
      // Raices del polinomio
      double X1, X2;


      // Calculo del discriminante
      d = B * B - 4.0 * A * C;
      // Raices reales
      if (d >= 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 el calculo de la raiz
         System.out.println("  Evaluacion Raiz (" + X1 + "): " + (A * X1 * X1 + B * X1 + C));
         // Evalua el calculo de la raiz
         System.out.println("  Evaluacion Raiz (" + X2 + "): " + (A * X2 * X2 + B * X2 + C));
         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 el calculo de la raiz
         System.out.println("  Evaluacion Raiz (" + X1 + "): " + (A * X1 * X1 + B * X1 + C));
         // Evalua el calculo de la raiz
         System.out.println("  Evaluacion Raiz (" + X2 + "): " + (A * X2 * X2 + B * X2 + C));
         System.out.println("");


         // Metodo Newton-Raphson
         // x = x - f(x)/f'(x)
         System.out.println("Metodo Newton-Raphson");
         double x = X1 + 10.0;
         for (int i = 0; i < 15; i++) {
            x = x - ((x * x * A + x * B + C) / (2.0 * x * A + B));
         }
         System.out.println("  Evaluacion Raiz (" + x + "): " + (A * x * x + B * x + C));

         x = X2 - 10.0;
         for (int i = 0; i < 15; i++) {
            x = x - ((x * x * A + x * B + C) / (2.0 * x * A + B));
         }
         System.out.println("  Evaluacion Raiz (" + x + "): " + (A * x * x + B * x + C));

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