zadanie nr 6 termin realizacji: 30 marzec 2005

C++

wielomiany zespolone (operator przypisania, destruktor) studia wieczorowe

Zdefiniuj klasę WielomianLZesp reprezentującą wielomian nad ciałem liczb zespolonych. Do pamiętania liczb zespolonych wykorzystaj klasę LZesp z poprzedniego zadania.

Wielomianem zespolonym stopnia n ∈ N_{0} nazywamy funkcję W : C ⟶ C określoną wzorem:

W (z) = c_{n}z^{n} + c_{n−1}z^{n−1} + … + c_{1}z + c_{0}

gdzie c_{k} ∈ C dla 0 ≤ k ≤ n, oraz c_{n} ≠ (0, 0) (za wyjątkiem sytuacji gdy n = 0).

Do obliczenia wartości wielomianu W w zadanym punkcie z często wykorzystuje się schemat Hornera:

W (z) = (… (c_{n}z + c_{n−1})z + … + c_{1})z + c_{0}

Daje się on łatwo zaprogramować w sposób iteracyjny:

\{ \begin{matrix}w_{n} & = & c_{n} \\ w_{i} & = & w_{i+1} · z + c_{i} & dla & i = n − 1, …, 0 \end{matrix}

Ostatecznie W (z) = w_{0}.

Klasa WielomianLZesp ma służyć do pamiętywania zespolonej funkcji wielomianowej o zadanym stopniu (trzeba zapamiętać wspólczynniki zespolone wielomianu w dynamicznie przydzielonej tablicy). Oprócz innych składowych w klasie tej powinien się znaleźć operator indeksowania operator[] umożliwiający odczytywanie współczynników wielomianu (dla współczynników ponad stopień wielomianu operator ten ma zwracać element zerowy), oraz operator funkcyjny operator() do obliczania wartości wielomianu w zadanym punkcie zespolonym.

class WielomianLZesp
{
protected:
    int st;
    LZesp *wsp;
public:
    explicit WielomianLZesp (int st);
    WielomianLZesp (int st, const LZesp wsp[]);
    WielomianLZesp (const WielomianLZesp &wlz);
    ~WielomianLZesp ();
public:
    WielomianLZesp & operator= (const WielomianLZesp &wlz); // przypisanie
    int stopien () const; // stopien wielomianu
    LZesp operator[] (int n) const; // n-ty wspolczynnik wielomianu
    LZesp operator() (LZesp z) const; // wartosc wielomianu w punkcie
// ...
};

Należy również zdefiniować w tej klasie operatory += i -= umożliwiające dodanie lub odjęcie innego wielomianu, przeciążony operator *= do pomnożenia wielomianu przez stałą zespoloną lub przez inny wielomian, oraz operatory porównywania wielomianów == i !=. Zaprogramuj także zaprzyjaźnione operatory do czytania ze stumienia wejściowego operator» i pisania do strumienia wyjściowego operator«.

Całą definicję klasy WielomianLZesp podziel na część nagłówkową i źródłową. Następnie w osobnym pliku umieść program testowy, który sprawdzi poprawność zdefiniowanych przez Ciebie operacji na wielomianach zespolonych.

Uniwersytet Wrocławski Paweł Rzechonek Instytut Informatyki ul. Przesmyckiego 20 PL-51-151 Wrocław