// 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 Numero [] c; // Guarda la dimension del arreglo de coeficientes private int dim; // Constructor de la clase public Poly() { dim = 0; } // Asigna coeficientes public void asignaCoeficientes(Numero []coef) { int i, n = coef.length; c = new Numero[n]; for (i = 0; i < n; i++) c[i] = coef[0].nuevo(); dim = n; for (i = 0; i < n; i++) c[i] = coef[i]; } // Retorna los coeficientes del polinomio Numero coeficiente(int i) { if (i >= dim) System.out.print("Error"); return c[i]; } // 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].esCero() == false) { System.out.print(" + "); c[i].visualiza(); if (i == 0) continue; System.out.print("X^"); System.out.print(i); } } System.out.println(" "); } // Suma con dos operandos public void suma(Poly a, Poly b) { int i, f, n1 = a.dim, n2 = b.dim; // Revisa quien es mas grande y guarda en f el indice intermedio y en dim el final if(n1 > n2) { f = n2; dim = n1; } else { f = n1; dim = n2; } // Solicita memoria para los coeficientes del polinomio resultante c = new Numero[dim]; for (i = 0; i < dim; i++) c[i] = a.coeficiente(0).nuevo(); // Realiza la suma entre el coeficientes comunes for (i = 0; i < f; i++) c[i].suma(a.coeficiente(i), b.coeficiente(i)); // copia el resto de los terminos if (n1 > n2) for (i = f; i < dim; i++) c[i] = a.coeficiente(i); else for (i = f; i < dim; i++) c[i] = b.coeficiente(i); } // Suma con un operando public void suma(Poly a) { int i, f, n1 = dim, n2 = a.dim; // Revisa quien es mas grande y guarda en f el indice intermedio y en dim el final if(n1 > n2) { f = n2; dim = n1; } else { f = n1; dim = n2; } // Solicita memoria temporal para los coeficientes Numero[] d = new Numero[dim]; for (i = 0; i < dim; i++) d[i] = coeficiente(0).nuevo(); // Realiza la suma entre el coeficientes comunes for (i = 0; i < f; i++) d[i].suma(coeficiente(i), a.coeficiente(i)); // copia el resto de los terminos if (n1 > n2) for (i = f; i < dim; i++) d[i] = coeficiente(i); else for (i = f; i < dim; i++) d[i] = a.coeficiente(i); // Solicita memoria para los coeficientes del polinomio resultante c = new Numero[dim]; for (i = 0; i < dim; i++) c[i] = a.coeficiente(0).nuevo(); for (i = 0; i < dim; i++) c[i] = d[i]; } // Funcion Principal .... public static void main(String[] args) { // Ejemplito para polinomios de coeficientes de tipo Fraccion Double []r = new Double[4]; r[0] = new Double(1); r[1] = new Double(2); r[2] = new Double(3); r[3] = new Double(6); Double []s = new Double[3]; s[0] = new Double(5); s[1] = new Double(6); s[2] = new Double(7); Poly R = new Poly (); R.asignaCoeficientes(r); Poly S = new Poly (); S.asignaCoeficientes(s); Poly TT = new Poly (); System.out.println("Double"); R.visualiza(); System.out.println("+"); S.visualiza(); TT.suma(R, S); System.out.println("====================="); TT.visualiza(); System.out.println(""); System.out.println(""); 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.asignaCoeficientes(a); Poly B = new Poly (); B.asignaCoeficientes(b); Poly C = new Poly (); System.out.println("Fraccion"); A.visualiza(); System.out.println("+"); B.visualiza(); C.suma(A, B); System.out.println("====================="); C.visualiza(); System.out.println(""); System.out.println(""); // Ejemplito de polinomios de coeficionets de tipo Complejos Complejos []x = new Complejos[3]; x[0] = new Complejos(2, 3); x[1] = new Complejos(2, 2); x[2] = new Complejos(3, 2); Complejos []y = new Complejos[3]; y[0] = new Complejos(-2, -3); y[1] = new Complejos(2, 3); y[2] = new Complejos(3, 3); Poly X = new Poly(); X.asignaCoeficientes(x); Poly Y = new Poly(); Y.asignaCoeficientes(y); Poly Z = new Poly(); System.out.println("Complejo"); X.visualiza(); System.out.println("+"); Y.visualiza(); Z.suma(X, Y); System.out.println("====================="); Z.visualiza(); System.out.println(""); System.out.println(""); // Ejemplito de polinomios de coeficionets de tipo ComplejoFraccionario ComplejoFraccionario []xx = new ComplejoFraccionario[3]; xx[0] = new ComplejoFraccionario(2, 3, 4, 5); xx[1] = new ComplejoFraccionario(2, 2, 3, 7); xx[2] = new ComplejoFraccionario(3, 2); ComplejoFraccionario []xy = new ComplejoFraccionario[3]; xy[0] = new ComplejoFraccionario(-2, 3, 5, 6); xy[1] = new ComplejoFraccionario(2, 3, 7, 9); xy[2] = new ComplejoFraccionario(3, 3); Poly xX = new Poly(); xX.asignaCoeficientes(xx); Poly xY = new Poly(); xY.asignaCoeficientes(xy); Poly xZ = new Poly(); System.out.println("Complejo Fraccionario"); xX.visualiza(); System.out.println("+"); xY.visualiza(); xZ.suma(xX, xY); System.out.println("====================="); xZ.visualiza(); System.out.println(""); System.out.println(""); } }