Problema 3 · Programació II UDL Juny 2011

Tema: Diseño de clases y objetos en Java, herencia e igualdad · Del examen Juny (2011)

Enunciado

Problema 3 [4 puntos]. Implementación de la clase Polynomial

Se desea diseñar e implementar una clase en Java denominada Polynomial para representar y operar con polinomios de una variable de la forma:

P(x)=a0+a1x+a2x2+⋯+anxnP(x) = a_0 + a_1 x + a_2 x^2 + \dots + a_n x^n

donde nn es el grado del polinomio (an≠0a_n \neq 0). Recordar que para un polinomio de grado nn se necesitan n+1n + 1 coeficientes.

La clase debe proporcionar obligatoriamente las siguientes operaciones y constructores:

new Polynomial(int maxDegree): crea un polinomio cuyo grado máximo admitido es maxDegree, con todos sus coeficientes inicializados a cero.

int getMaxDegree(): devuelve la capacidad máxima de grado permitida en el polinomio.

int getDegree(): devuelve el grado efectivo del polinomio, correspondiente a la potencia con el coeficiente no nulo más alto. Si todos los coeficientes fuesen cero, debe devolver 0.

void setCoefficient(int degree, double coeff): asigna el valor coeff al término de grado degree. Si el valor de degree excede el grado máximo permitido para la instancia (o es negativo), la operación no realiza ninguna modificación.

double getCoefficient(int degree): devuelve el coeficiente del grado especificado. Si el grado solicitado es mayor que el grado máximo permitido (o negativo), debe devolver 0.0.

static Polynomial add(Polynomial p1, Polynomial p2): calcula y retorna un nuevo polinomio correspondiente a la suma algebraica de p1 y p2. El grado de la suma es el grado del polinomio de mayor grado. Además, se requiere que el resultado devuelto sea un polinomio normalizado.

void normalize(): ajusta la representación interna del polinomio de manera que su grado máximo coincida con su grado real no nulo (salvo en el caso del polinomio nulo, donde únicamente subsiste el término de grado 0). Tras llamar a normalize(), los métodos getDegree() y getMaxDegree() deben devolver exactamente el mismo valor.

Implemente la clase completa con sus atributos, constructores y métodos, aplicando buenas prácticas de encapsulación y descomposición auxiliar.

Enunciado: Problema 3 · Programació II UDL Juny 2011

Solución

Según los criterios oficiales de corrección

Implemente la clase completa con sus atributos, constructores y métodos, aplicando buenas prácticas de encapsulación y descomposición auxiliar.

Solución: ```java public class Polynomial { private double[] coefficients; public Polynomial(int maxDegree) { if (maxDegree < 0) { maxDegree = 0; } this.coefficients = new double[maxDegree + 1]; } public int getMaxDegree() { return this.coefficients.length - 1; } public int getDegree() { for (int i = this.coefficients.length - 1; i > 0; i--) { if (this.coefficients[i] != 0.0) { return i; } } return 0; } public void setCoefficient(int degree, double coeff) { if (degree >= 0 && degree <= getMaxDegree()) { this.coefficients[degree] = coeff; } } public double getCoefficient(int degree) { if (degree >= 0 && degree <= getMaxDegree()) { return this.coefficients[degree]; } return 0.0; } public void normalize() { int actualDegree = getDegree(); if (actualDegree != getMaxDegree()) { double[] newCoeffs = new double[actualDegree + 1]; for (int i = 0; i <= actualDegree; i++) { newCoeffs[i] = this.coefficients[i]; } this.coefficients = newCoeffs; } } public static Polynomial add(Polynomial p1, Polynomial p2) { int deg1 = p1.getDegree(); int deg2 = p2.getDegree(); int maxDeg = Math.max(deg1, deg2); Polynomial result = new Polynomial(maxDeg); for (int i = 0; i <= maxDeg; i++) { double sum = p1.getCoefficient(i) + p2.getCoefficient(i); result.setCoefficient(i, sum); } result.normalize(); return result; } } ```

La explicación paso a paso, hecha con IA, es Premium. Premium

Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.

‹ Problema 2 · Juny 2011 · Ejercicio Recuperación - Problema 2. Clase StatVar y agrega… · 2010 ›

Más ejercicios de Diseño de clases y objetos en Java, herencia e igualdad