Examen de ampliación

Implemente una clase Calculadora que haga operaciones con polinomios de una incógnita. La clase recibe dos polinomios de la entrada estándar e imprime operaciones de suma, resta y multiplicación de los polinomios.

Ejemplo de entrada:
5
2 0 7 -1 -2 1

4
-3 0 0 2 0
Ejemplo de salida:
P1 = 2x^5 + 7x^3 + -1x^2 + -2x + 1
P2 = -3x^4 + 2x

P1 + P2 = 2x^5 + -3x^4 + 7x^3 + -1x^2 + 1
P1 - P2 = 2x^5 + 3x^4 + 7x^3 + -1x^2 + -4x + 1
P2 - P1 = -2x^5 + -3x^4 + -7x^3 + x^2 + 4x + -1
P1 * P2 = -6x^9 + -21x^7 + 7x^6 + 6x^5 + 11x^4 + -2x^3 + -4x^2 + 2x

Un polinomio de una variable x y de grado n se puede representar como un arreglo de coeficientes, cuyas posiciones indican el exponente de cada monomio. Por ejemplo, el polinomio

2x5 + 7x3 - x2 - 2x + 1

puede representarse con el arreglo

0 1 2 3 4 5 6
1 -2 -1 7 0 2

Implemente una clase Polinomio en Java, capaz de representar un polinomio de una variable utilizando un arreglo como miembro de datos. Su clase deberá ser capaz de leer los coeficientes del teclado; de imprimir un polinomio en la pantalla y, de sumarse, restarse y multiplicarse con otro polinomio. Por ejemplo:

En matemática los coeficientes de los polinomios son implícitamente reales, aunque se prefiere utilizar racionales. Para efectos de este examen puede asumir que son siempre enteros. Implemente al menos los siguientes métodos en su clase Polinomio:

  1. Constructor por defecto. Construye un polinomio de grado 0 sin coeficientes.
  2. Constructor de grado n. Construye un polinomio de grado n (recibido por parámetro), con todos sus coeficientes en 0.
  3. a.leer(). Lee el polinomio a del teclado. Solicita al usuario el grado del polinomio y luego, cada uno de sus coeficientes, desde el monomio de mayor grado al monomio de menor grado.
  4. a.imprimir(). Imprime el polinomio a en la pantalla. No debe imprimir monomios cuyo coeficiente es 0, ni coeficiente 1 (a menos de que sea el coeficiente de x0), ni el exponente 1 de la variable x, ni la potencia x0. Los monomios se deben separar por un símbolo de +. Sugerencia: imprima este símbolo antes de imprimir el resto del monomio, cuando sea el caso.
  5. a.grado(). Retorna el grado del polinomio a.
  6. a.coeficiente(i). Retorna el coeficiente del monomio xi en el polinomio a. Note que para un polinomio de grado n, los coeficientes de sus monomios xn + 1, xn + 2, ..., son 0.
  7. a.sumar(b). Se invoca en un polinomio a y recibe por parámetro un polinomio b. Retorna el polinomio resultado de la suma a + b, cuyo grado es el mayor de los grados entre a y b.
  8. a.restar(b). Se invoca en un polinomio a y recibe por parámetro un polinomio b. Retorna el polinomio resultado de la resta a - b, cuyo grado es el mayor de los grados entre a y b.
  9. a.multiplicar(b). Se invoca en un polinomio a y recibe por parámetro un polinomio b. Retorna el polinomio resultado de multiplicar el polinomio a con el polinomio b, aplicando la propiedad distributiva.

Para poder implementar las operaciones de sumar(), restar() y multiplicar, utilice el constructor de grado n, que recibe el grado por parámetro y construye un polinomio de ese grado con todos sus coeficientes en 0. Note que 0 es el valor de inicialización de los elementos de un arreglo de variables de un tipo de datos primitivo en Java.

Evaluación

  1. [10%]. Clase controladora Calculadora. Tiene dos polinomios como atributos.
  2. [15%]. Métodos de la clase Calculadora: main() y al menos un método para probar las operaciones con los polinomios como en el ejemplo.
  3. [10%]. Constructor por defecto y constructor de grado n.
  4. [10%]. Métodos grado() y coeficiente().
  5. [10%]. Método leer().
  6. [15%]. Método imprimir().
  7. [30%]. Métodos sumar() y restar().
  8. [15% opcional]. Método multiplicar().
  9. [5% opcional]. En lugar de siempre imprimir el polinomio como una sucesión de sumas de monomios, utilizar restas para los coeficientes negativos. Por ejemplo, en lugar de 2x^5 + 7x^3 + -1x^2 + -2x + 1, su programa imprime 2x^5 + 7x^3 - x^2 - 2x + 1.