Espero me pue
El código de mi programa es:
Código:
#include <iostream> #include <cstdlib> #include <vector> #include <math.h> //Se usa solo para la opción de evaluar polinomios using namespace std; class Poli : public vector<double> { public: Poli(); int Gr() const; ostream& Print(ostream& os) const; }; Poli::Poli() : vector<double>() { } ostream& Poli::Print(ostream& os) const { for (int k=0; k<this->size(); k++) os << " + " << (*this)[k] << "x**" << k; return os; } ostream& operator << (ostream& os, const Poli& p) { return p.Print(os); } int Poli::Gr() const { int gr= 0; for (int k=0; k < (*this).size(); k++) if ( (*this)[k] != 0.0 ) gr= k; return gr; } Poli Integral(const Poli& p) { Poli r; int Gp= p.Gr(); int k= 0; r.push_back(0); while (k<=Gp) { r.push_back( p[k] /(k+1) ); k++; } return r; } Poli Derivada(const Poli& p) { Poli r; int Gp= p.Gr(); int k= 2; r.push_back(p[1]); while (k<=Gp) { r.push_back( p[k] *(k) ); k++; } return r; } Poli Suma(Poli p, Poli q) { Poli r; int Gp= p.Gr(); int Gq= q.Gr(); int k= 0; while (k<=Gp && k<=Gq) { r.push_back( p[k] + q[k] ); k++; } while (k<=Gp) r.push_back( p[k++] ); while (k<=Gq) r.push_back( q[k++] ); return r; } Poli Resta(Poli p, Poli q) { Poli r, t; int Gp= p.Gr(); int Gq= q.Gr(); int k= 0; while (k<=Gp && k<=Gq) { r.push_back( p[k] - q[k] ); k++; } while (k<=Gp) r.push_back( p[k++] ); while (k<=Gq) r.push_back( -q[k++] ); return r; } Poli Mult(Poli p, Poli q) { Poli r; int res[p.Gr()+q.Gr()+1]; for(int c=0; c<=p.Gr()+q.Gr(); c++) res[c]=0; for(int i=0; i<=p.Gr(); i++) { for(int j=0; j<=q.Gr(); j++) { res[i+j]+=p[i]*q[j]; } } for(int k=0; k<=p.Gr()+q.Gr(); k++) { r.push_back(res[k]); } return r; } Poli Div(Poli p, Poli q) { Poli a, b, c, r, t; Poli s; s.push_back(0); double f[q.Gr()-p.Gr()]; for(int i=0; i<=q.Gr()-p.Gr(); i++) f[i]=0; f[q.Gr()-p.Gr()]=q[q.Gr()]/p[p.Gr()]; for(int j=0; j<=q.Gr()-p.Gr(); j++) a.push_back(f[j]); b=Mult(p, a); s = Suma(s, a); c=Resta(q, b); return s; } Poli Residuo(Poli p, Poli q) { Poli a, b, c, r, t; Poli s; s.push_back(0); double f[q.Gr()-p.Gr()]; for(int i=0; i<=q.Gr()-p.Gr(); i++) f[i]=0; f[q.Gr()-p.Gr()]=q[q.Gr()]/p[p.Gr()]; for(int j=0; j<=q.Gr()-p.Gr(); j++) a.push_back(f[j]); b=Mult(p, a); s = Suma(s, a); c=Resta(q, b); return c; } Poli MCD(Poli p, Poli q) { Poli m; do { m= Residuo(p, q); q = p; p = m; } while(m.Gr() != 0); return m; } int main() { Poli p; p.push_back(8); p.push_back(2); p.push_back(0); p.push_back(1); Poli q; q.push_back(2); q.push_back(0); q.push_back(4); q.push_back(1); q.push_back(4); q.push_back(9); Poli r, s; int b, a; cout<<"CALCULADORA DE POLINOMIOS\n"; cout<<"Por favor elija la operación que quiera hacer con los polinomios ingresados\n"; cout<<"1 Sumar los polinomios p y q\n"; cout<<"2 Restar los polinomios p y q\n"; cout<<"3 La integral de p y la integral de q\n"; cout<<"4 La derivada de p y la derivada de q\n"; cout<<"5 Evaluar p y q en un punto elegido por el usuario\n"; cout<<"6 Multiplicar p y q\n"; cout<<"7 Dividir q (el polinomio de mayor grado) entre p\n"; cout<<"8 El residuo de dividir q entre p\n"; cout<<"9 El MCD de los polinomios q (de mayor grado) y p\n"<<endl; cin>>a; switch(a) { case 1: { r= Suma(p, q); cout<<"La suma de los polinomios p y q es:\n"; cout<< r << endl; cout<<"\n El grado de la suma es:"<< r.Gr() << endl; } break; case 2: { r= Resta(p, q); cout<<"La resta de los polinomios p y q es:\n"; cout<< r << endl; cout<<"\n El grado de la resta es:"<< r.Gr() << endl; } break; case 3: { r= Integral(p); s= Integral(q); cout<<"La integral del polinomio p es:\n"; cout<< r <<" + c"<< endl; cout<<"\n El grado de la integral de p es: "<< r.Gr() << endl; cout<<"\n La integral del polinomio q es:\n"; cout<<s<< " + c"<< endl; cout<<"\n El grado de la integral de q es:"<< s.Gr() << endl; } break; case 4: { r= Derivada(p); s= Derivada(q); cout<<"La derivada del polinomio p es:\n"; cout << r << endl; cout<<"El grado de la derivada de p es: "<< r.Gr() << endl; cout<<"La derivada del polinomio q es:\n"; cout << s << endl; cout<<"El grado de la derivada de q es: "<< s.Gr() << endl; } break; case 5: { cout<<"Ingrese el número donde quiere evaluar a los polinomios p y q: "<<endl; cin>>b; int sum1=0, par1; for(int j=0; j<=p.Gr(); j++) { par1=p[j]*pow(b,j); sum1+=par1; } int sum2=0, par2; for(int j=0; j<=q.Gr(); j++) { par2=q[j]*pow(b,j); sum2+=par2; } cout<<"\n El valor del polinomio p en "<<b<<" es: "<<sum1<<endl; cout<<"\n El valor del polinomio q en "<<b<<" es: "<<sum2<<endl; } break; case 6: { Poli r; r= Mult(p, q); cout<<"La multiplicación de p y q es:\n"; cout<<r<< endl; cout<<"El grado de la multiplicación es: "<<r.Gr()<<endl; } break; case 7: { Poli r; r= Div(p, q); cout<<"La división q entre p es:\n"; cout<< r << endl; cout<<"El grado de la división es: "<<r.Gr()<<endl; } break; case 8: { Poli r; r= Residuo(p, q); cout<<"La división q entre p es:\n"; cout<< r << endl; cout<<"El grado del residuo es: "<<r.Gr()<<endl; } break; case 9: { Poli r; r=MCD(p, q); cout<<"El MCD de los polinomios p y q es:\n"; cout<<r <<endl; } break; } return EXIT_SUCCESS; }