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 & lewy, const Wielomian & prawy );
- Wielomian operator- (Wielomian & liczba);
- 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);
- void stopien();
- };
- Wielomian::Wielomian()
- {
- n = 0;
- wsp = new double[1];
- *wsp=4;
- }
- 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];
- memcpy(wsp, w.wsp, (n*sizeof(double)));
- }
- Wielomian::~Wielomian() // destruktor
- {
- delete[] wsp;
- }
- 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;
- }
- // iloczyn 2 wielomianow
- 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; i++)
- {
- w.wsp[i + j] += w1.wsp[i] * w2.wsp[j];
- }
- }
- return w;
- }
- // 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 & lewy, const Wielomian & prawy )
- {
- int l = lewy.n;
- int p = prawy.n;
- int stopien;
- double suma;
- if ( l > p )
- stopien = l;
- else
- stopien = p;
- Wielomian wynik;
- for ( int i=stopien; i >= 0; i-- )
- {
- suma = lewy.wsp[i] + prawy.wsp[i];
- if (suma!=0.0)
- wynik.wsp[i]=suma;
- }
- return wynik;
- }
- Wielomian Wielomian::operator- (Wielomian & liczba)
- {
- int i=liczba.n;
- if(n>=liczba.n)
- {
- for(i=liczba.n; i>0; i--)
- {
- *(wsp+n - i)=(*(wsp+ n -i)) - (*((liczba.wsp)+liczba.n -i) );
- }
- }
- else
- {
- Wielomian temp(liczba.n); //pomocniczy obiekt, aby nie stracic danych
- for(int i=liczba.n; i>=0; i--)
- {
- if(i>n)
- {
- (*((temp.wsp)+liczba.n - i))=(*((liczba.wsp)+liczba.n -i) );
- }
- else
- {
- (*((temp.wsp)+liczba.n - i))=(*(wsp+ n -i)) - (*((liczba.wsp)+liczba.n -i) );
- }
- }
- delete [] wsp;
- n=liczba.n;
- wsp = new double [liczba.n];
- memcpy(wsp, temp.wsp, (liczba.n*sizeof(double)));
- }
- return *this;
- }
- int main()
- {
- int n, k;
- Wielomian *odej;
- odej= new Wielomian();
- 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