Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- class Wielomian
- {
- private:
- int n; // stopien wielomianu
- double *wsp; //wspolczynniki wielomianu
- public:
- Wielomian();
- Wielomian(int _n); // konstruktor
- Wielomian(const Wielomian& w); // konstruktor kopiujacy
- ~Wielomian(); // destruktor
- Wielomian& operator=(const Wielomian& _w); // operator przypisania
- friend Wielomian operator+ (const Wielomian& w1, const Wielomian& w2);
- friend std::istream& operator >> (std::istream &we, Wielomian &w);
- friend std::ostream& operator << (std::ostream &wy, Wielomian &w);
- friend Wielomian operator*(const Wielomian& w1,const Wielomian&w2);
- static int stopien_plus(const Wielomian &w1, const Wielomian &w2);
- };
- Wielomian::Wielomian()
- {
- n = 0;
- wsp = new double[1];
- }
- Wielomian::Wielomian(int _n) : n(_n) // konstruktor
- {
- n = _n+1;
- wsp = new double[n + 1];
- }
- Wielomian::Wielomian (const Wielomian &w)
- {
- n=w.n;
- wsp = new double [n+1];
- for (int i=n; i>=0; i--)
- {
- wsp[i]=w.wsp[i];
- }
- }
- Wielomian::~Wielomian() // destruktor
- {
- delete[] wsp;
- }
- int Wielomian::stopien_plus(const Wielomian &w1, const Wielomian &w2)
- {
- int st = std::max(w1.n, w2.n);
- if (w1.n == w2.n)
- while (st >= 0 && (w1.wsp[st] + w2.wsp[st] == 0))
- st--;
- return st;
- }
- Wielomian& Wielomian::operator=(const Wielomian& w) // operator przypisania
- {
- n = w.n;
- for (int i = 0; i <= n; i++)
- {
- wsp[i] = w.wsp[i];
- }
- return *this;
- }
- // operator wejscia
- std::istream& operator >> (std::istream &we, Wielomian &w)
- {
- std::cout << std::endl << "Podaj " << w.n << " wspolczynnikow wielomianu zaczynajac od tego przy najwyzszym wykladniku" << std::endl;
- for (int i = 0; i<w.n; i++)
- {
- std::cout << "x^" << w.n - i - 1 << " : ";
- we >> w.wsp[i];
- }
- return we;
- }
- // operator wyjscia
- std::ostream& operator << (std::ostream &wy, Wielomian &w)
- {
- int i = 0;
- wy << std::endl << "Wielomian ma postac:" << std::endl;
- while (i<w.n)
- {
- if ((w.wsp[i]>0) && i != 0)
- wy << " + " << (w.wsp[i]) << "x^" << w.n - i - 1 << " ";
- if ((((w.wsp) + i)>0) && i == 0)
- wy << (w.wsp[i]) << "x^" << w.n - i - 1 << " ";
- if ((w.wsp[i])<0)
- wy << w.wsp[i] << "x^" << w.n - i - 1 << " ";
- i++;
- }
- wy << std::endl;
- return wy;
- }
- Wielomian operator+(const Wielomian& w1, const Wielomian& w2)
- {
- int stp;
- stp=stopien_plus(w1,w2);
- int n;
- int i;
- Wielomian wynik(n);
- wynik.wsp = new double[wynik.n];
- for (i = 0; i <= w1.n && i <= w2.n&& i <= stp;i++)
- wynik.wsp[i] = w1.wsp[i] + w2.wsp[i];
- if (w1.n > w2.n)
- for (;i <= w1.n&& i <= stp;i++)
- wynik.wsp[i] = w1.wsp[i];
- else if (w2.n > w1.n)
- for (;i <= w2.n&& i <= stp;i++)
- wynik.wsp[i] = w2.wsp[i];
- return wynik;
- }
- Wielomian operator*(const Wielomian& w1, const Wielomian& w2)
- {
- Wielomian w(w1.n+w2.n);
- for (int i=0; i<=w.n; i++)
- {
- w.wsp[i]=0;
- }
- for (int i=0; i<=w1.n; i++)
- {
- for (int j=0; j<=w2.n; j++)
- {
- w.wsp[i+j]+= w1.wsp[i] * w2.wsp[j];
- }
- }
- return w;
- }
- int main()
- {
- int n, k;
- Wielomian odej;
- std::cout<<"Podaj stopien pierwszego wielomianu"<<std::endl;
- std::cin>>n;
- Wielomian obiekt1(n);
- std::cin>>obiekt1;
- std::cout<<"Podaj stopien drugiego wielomianu"<<std::endl;
- std::cin>>k;
- Wielomian obiekt2(k);
- std::cin>>obiekt2;
- std::cout<<std::endl<<std::endl;
- std::cout<<obiekt1;
- std::cout<<std::endl<<std::endl;
- std::cout<<obiekt2;
- odej=obiekt1*obiekt2;
- std::cout<<odej;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement