// Clase para manipular polinomios
// Antonio Carrillo Ledesma

// Se define al polinomio por sus coeficientes, es decir
//    A0 + A1x^1 + ...+Anx^n
// Quedando el arreglo como
//    A0, A1, ... An

public class Poly {

   // Coeficientes del polinomio
   private Fraccion []C;
   // Guarda la dimension del arreglo de coeficientes
   static final private int Dim = 10;

   // Constructor de la clase
   public Poly() {
      int i;
      C = new Fraccion [Dim];
      for (i = 0; i < Dim; i++) {
         C[i] = new Fraccion();
      }
   }



   // Constructor de la clase
   public Poly(Fraccion []coef) {
      int i, n = coef.length;
      C = new Fraccion [Dim];
      for (i = 0; i < n; i++) {
         C[i] = new Fraccion(coef[i]);
      }
      for (i = n; i < Dim; i++) {
         C[i] = new Fraccion();
      }

   }

   // Constructor de la clase
   public Poly(Poly a) {
      int i, n = a.dimension();
      C = new Fraccion [Dim];
      for (i = 0; i < n; i++) {
         C[i] = new Fraccion(a.coeficiente(i));
      }
   }

   // Retorna los coeficientes del polinomio
   Fraccion coeficiente(int i) {
      Fraccion r;
      if (i < Dim) r = C[i];
      else r = new Fraccion();
      return r;
   }

   // Retorna la dimension del arreglo de coeficientes
   int dimension() {
      return Dim;
   }

   // Visualiza el polinomio
   public void visualiza() {
      int i;

      for (i = 0; i < Dim; i++) {
         if (C[i].numerador() != 0.0) {
            System.out.print(" + ");
            C[i].visualiza();
            if (i == 0) continue;
            System.out.print("X^");
            System.out.print(i);
         }
      }
      System.out.println(" ");
   }


   // Suma el polinomio A y B
   public void suma(Poly a, Poly b) {
      int i;

      for (i = 0; i < Dim; i++)  C[i].suma(a.coeficiente(i), b.coeficiente(i));
   }


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

      Fraccion []a = new Fraccion[3];
      a[0] = new Fraccion(1, 2);
      a[1] = new Fraccion(2, 2);
      a[2] = new Fraccion(3, 2);
      Fraccion []b = new Fraccion[4];
      b[0] = new Fraccion(1, 3);
      b[1] = new Fraccion(2, 3);
      b[2] = new Fraccion(3, 3);
      b[3] = new Fraccion(1, 3);


      Poly A = new Poly(a);
      A.visualiza();
      Poly B = new Poly(b);
      B.visualiza();
      Poly C = new Poly();
      C.suma(A, B);
      C.visualiza();

   }
}


