klasa Wielomian- problem z programem

Odpowiedz Nowy wątek
2011-10-25 00:25
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.

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

Pozostało 580 znaków

2011-10-25 00:42
0

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


"(...) otherwise, the behavior is undefined".

Pozostało 580 znaków

2011-10-25 08:02
0

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

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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0