Witam, mam problem z programem i potrzebuję Waszej pomocy. Poniżej umieszczam polecenie oraz sam program, którym staram się zrealizować to polecenie, jednak wiem, że zrobiłem kilka błędów i nie bardzo umiem je naprawić.
Zaprojektuj klasę wielomian, reprezentującą wielomian dowolnego zadanego stopnia. Klasa powinna zawierać metody implementujące typowe operacje na wielomianach (dodawanie, odejmowanie, mnożenie). UWAGA: wykorzystaj klasę kontenerową vector<> z biblioteki standardowej.
Zdefiniuj metody tej klasy wielomian. Zapewnij zgłaszanie wyjątków. Inicjuj zmienne przed użyciem. Sprawdzaj warunki początkowe i końcowe.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
class Wielomian
{
vector<double>wsp;
private:
int n; // stopien wielomianu
double *wsp; // wspolczynniki wielomianu
public:
Wielomian(int _n); // konstrktor, inicjacja obiektu
Wielomian(const Wielomian& w); // konstruktor kopiujacy
~Wielomian; // destruktor
Wielomian& operator=(const Wielomian& _w); // operator przypisania
friend Wielomian operator +(const Wielomian& A, const Wielomian& B);
friend Wielomian operator *(const Wielomian& A, const Wielomian& B);
friend Wielomian operator -(const Wielomian& A, const Wielomian& B);
};
Wielomian::Wielomian(int _n) : n(_n + 1) // konstruktor
{
wsp= new double[n];
srand(time(NULL));
for (int i= n-1; i>= 0; ++i)
{
wsp[i] = rand() % 21;
wsp[i] -= 10;
}
}
Wielomian::Wielomian(const Wielomian& w) // konstruktor kopiuj
{
n= w.n;
wsp= new double[n];
for (int i=n; i>=0; i--)
{
wsp[i]=w.wsp[i];
}
}
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;
}
Wielomian operator+(const Wielomian& A, const Wielomian& B) // suma wielomianow
{
int n;
if (A.n>=B.n)
{
n=A.n;
}
else
{
n=B.n;
}
Wielomian w(n);
w.wsp = new double[w.n];
for (int i=w.n; i>=0; i--)
{
w.wsp[i]=A.wsp[i]+B.wsp[i];
}
return w;
}
Wielomian operator-(const Wielomian& A, const Wielomian& B) // roznica wielomianow
{
int n;
if (A.n>=B.n)
{
n=A.n;
}
else
{
n=B.n;
}
Wielomian w<n);
w.wsp= new double[w.n];
for (int k=w.n; k>=0; k--)
{
w.wsp[k]=A.wsp[k]-B.wsp[k];
}
return w;
}
Wielomian operator*(const Wielomian& A, const Wielomian& B) // iloczyn wielomianow
{
Wielomian w(A.n+B.n);
for (int i=0; i<=w.n; i++)w.wsp[i]=0;
for (int i=0; i<=A.n; i++)
{
for (int j=0; j<=B.n; j++)
{
w.wsp[i+j]+= A.wsp[i] * B.wsp[j];
}}
return w;
}
ostream& operator<<(ostream& o, const Wielomian& w) //operator wyjscia
{
for (int i=w.n; i>=0; i--)
{
o<< w.wsp[i]<< (i==1 ? "x" : (i==0 ? "" : "x^"))<< i<< (i<2 ? "\b" : "")<< (w.wsp[i-1]<0 ? "" : "+");
}
return o<< "\b ";
}
int main()
{
Wielomian y= *x;
Wielomian z= *x + y;
Wielomian h= *x - y;
cout<< "x: " << *x << endl;
cout<< "y: " << y << endl;
cout<< "z=x+y\nz: " << z << endl;
cout<< "x=z'\nx: " << *x << endl;
cout<< "h=x-y\nz: " << h << endl;
return 0;
}
Bardzo Was proszę o pomoc w uzupełnieniu braków i poprawieniu błędów. Pozdro!