// Solucion problema polinomios examen Prog. Avanzada 20/1/2004 #include using namespace std; #include "Polinomio.h" Polinomio::Polinomio (int g) : grado(g) { if (grado < 0) coeficientes = NULL; else coeficientes = new float[grado+1]; } Polinomio::Polinomio (float* v, int n) : grado(n-1) { if (n==0) coeficientes = NULL; else { coeficientes = new float[grado+1]; for (int i = 0; i <= grado; i++) coeficientes[i] = v[i]; } } Polinomio::Polinomio (const Polinomio & p) : grado(p.grado) { if (p.coeficientes == NULL) coeficientes = NULL; else { coeficientes = new float[grado+1]; for (int i = 0; i <= grado; i++) coeficientes[i] = p.coeficientes[i]; } } Polinomio::~Polinomio() { delete [] coeficientes; coeficientes = NULL; grado = -1; } Polinomio Polinomio::operator*(float r) const { if (r == 0 || coeficientes == NULL) { // Devolvemos P(x) = 0 Polinomio resultado(0); resultado.coeficientes[0] = 0; return resultado; } else { Polinomio resultado(*this); for (int i = 0; i <= grado; i++) resultado.coeficientes[i] *= r; return resultado; } } Polinomio operator* (float r, const Polinomio &p) { return p*r; } bool Polinomio::operator== (const Polinomio& p) const{ if (grado != p.grado) return false; for (int i = 0; i <= grado; i++) if (coeficientes[i] != p.coeficientes[i]) return false; return true; // En particular devuelve true si los dos operandos tienen grado -1 } bool Polinomio::operator!= (const Polinomio& p) const{ return !(*this == p); } Polinomio Polinomio::Derivada() const { if (coeficientes == NULL) // Si el polinomio esta vacio, su derivada tambien return *this; else if (grado == 0){ // Si es de grado 0, su derivada es P(x) = 0 Polinomio resultado(0); resultado.coeficientes[0] = 0; return resultado; } else { // Caso grado > 0 Polinomio resultado(grado - 1); for (int i = 0; i < grado; i++) resultado.coeficientes[i] = coeficientes[i+1] * (i+1); return resultado; } } void Polinomio::Ver() const { if (coeficientes == NULL) cout << "{}" << endl; else { cout << "{" << grado << ";"; for (int i = 0 ; i < grado; i++) cout << coeficientes[i] << ","; cout << coeficientes[grado] << "}" << endl; } }