klasa Wielomian- problem z programem

klasa Wielomian- problem z programem
gigasad
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 13 lat
  • Postów:1
0

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.

Kopiuj
 #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!


#include<iostream>
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
0

Po co Ci tablica wsp i vector wsp? :-/


"(...) otherwise, the behavior is undefined".
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:3 minuty
0

#o co chodzi z tym main na początku?
#to co napisał Endrju, duplikujesz dane

Kopiuj
class Wielomian
{
private:
    vector<double>wsp;
 
public:
    Wielomian(int _n, double leadingElement = 1.0);              // konstrktor, inicjacja obiektu

    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);
};

Korzystając z vector z automatu masz właściwe (nawet lepsze niż gdybyś sam napisał): konstruktor kopiujący, destruktor i operator przypisania, więc nie musisz ich definiować! Pozostaje ci tylko zdefiniować operatory.
Popatrz jak działa vector.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.