Polynomial& operator*=(const Polynomial &q) { Polynomial u; int k=(deg()+q.deg()); u.setA(k,0); double w=0; int i=0; int j=0; for(i=0; i<=deg(); i++) { for( j=0; j<=q.deg(); j++) { u.setA(i+j,u.getA(i+j)+getA(i)*q.getA(j)) ; } j=0; } for(i=0; i<=k; i++) { setA(i,u.getA(i)); } }
void div(const Polynomial &W, const Polynomial &P, Polynomial &Q, Polynomial &R){ R = W; for(int i=R.deg();i>=0 && R.deg()>=P.deg();i--){ Q.setA(i-P.deg(), R.getA(i)/P.getA(P.deg())); for(int a=P.deg();a>=0;a--){ R.setA((i-P.deg())+a, R.getA((i-P.deg())+a)-( P.getA(a) * Q.getA(i-P.deg()) ) ); } } }
const Polynomial differential() const { Polynomial w; int k=deg(); w.setA(k,0); for(int i=0;i<=k-1;i++){ w.setA(i, getA(i+1)*(i+1)); } return w; }
const Polynomial operator+(const Polynomial &q) const { Polynomial w; int k=max(deg(), q.deg()); w.setA(k,0); for(int i=0; i<=k; i++) { w.setA(i,getA(i)+q.getA(i)); } return w; }
Polynomial mult2(Polynomial p, double x) //mnozy wielomian przez liczbe { Polynomial v; for(int i = 0; i <= p.deg(); i++) v.setA(i, p.getA(i)*x); return v; }
int main() { Polynomial p; p.setA(0,1); p.setA(1,5); p.setA(2,0); p.setA(3,3); /*p.setA(4,2); p.setA(5,2); p.setA(6,0); p.setA(7,0);*/ p.print(); cout<<endl<<p.deg()<<endl; Polynomial q; q.setA(0,0); q.setA(1,0); q.setA(2,0); q.setA(3,0); /*q.setA(4,0); q.setA(5,0); q.setA(6,0); q.setA(7,0);*/ q.print(); cout<<endl<<q.deg()<<endl; /* cout<<endl<<"dodawanie; "; add(p, q).print(); cout<<endl<<"mnozenie: "; mult(p, q).print(); cout<<endl<<"wartosc p dla 2; "; cout<<value(p, 2); Polynomial wynik; Polynomial reszta; div(p, q, wynik, reszta); cout<<endl<<"DZIELENIE: "<<"wynik: "; wynik.print(); cout<<" reszta: "; reszta.print();*/ }
Polynomial add(Polynomial q, Polynomial p) { int stW; stW = max(q.deg(), p.deg()); Polynomial w; for(int i=0; i <= stW; i++) w.setA(i, p.getA(i)+q.getA(i)); return w; }
const Polynomial operator*(const Polynomial &q) const { Polynomial u; int k=(deg()+q.deg()); u.setA(k,0); double w=0; int i=0; int j=0; for(i=0; i<=deg(); i++) { for( j=0; j<=q.deg(); j++) { u.setA(i+j,u.getA(i+j)+getA(i)*q.getA(j)) ; } j=0; } return u; }
void div(Polynomial p, Polynomial q, Polynomial &wynik, Polynomial &reszta) { int b = p.deg(); Polynomial l; Polynomial prev_wynik; for(int i = b-q.deg(); p.deg() >= q.deg(); i--) { wynik.setA(i, p.getA(p.deg())/q.getA(q.deg())); l = mult(q, add(wynik, mult2(prev_wynik, -1))); p = add(p, mult2(l, -1)); prev_wynik = wynik; } reszta = p; }
Polynomial mult(Polynomial q, Polynomial p) { Polynomial w; int h=0; //chwilowa wartoϾ w[i] for(int i = (q.deg()+p.deg()); i >= 0; i--) { for(int j = max(p.deg(), q.deg()); j >= 0; j--) { h=h+(wiekszy(p, q).getA(j)*mniejszy(p,q).getA(i-j)); } w.setA(i, h); h=0; } return w; }