Funkcje zaprzyjaźnione i zakresy dostępu

Klasa: Wielomian

Wielomian $n$-tego stopnia jest funkcją postaci

$$ f(x) = a_n x^n + a_{n-1} x^{n-1} + \ldots + a_1 x + a_0 $$

Zaimplementuj klasę reprezentującą wielomiany. W pliku nagłówkowym wielomian.h zadeklaruj klasę Wielomian

class Wielomian
{
   private :
      int st;
      double *wsp;
 
   public :
      Wielomian();                     
      Wielomian(int st, const double *wsp); 
      Wielomian(const Wielomian &); 
 
      Wielomian Pochodna(int ktora=1);
 
      void Wypisz();                                
      ~Wielomian();           
};

Pole prywatne wsp to adres tablicy zawierającej współczynniki wielomianu $a_0, a_1, \ldots, a_n$. Wielomian stopnia $n$ posiada $n+1$ współczynników.

W pliku źródłowym wielomian.cpp zdefiniuj konstruktory, destruktor i metody składowe klasy Wielomian:

  • publiczny konstruktor domyślny tworzy wielomian stopnia 0 postaci $f(x) = 0$
  • publiczny konstruktor Wielomian(int st, double *wsp); inicjujący wielomian stopnia st o współczynnikach wsp
  • konstruktor kopiujący
  • publiczną funkcję składową Pochodna() zwracającą nowy wielomian, który jest równy pochodnej wielomianu. Pochodna pierwszego stopnia wielomianu wynosi:
    $$ f’(x) = a_n \cdot n \cdot x^{n-1} + a_{n-1} \cdot (n-1) \cdot x^{n-2} + \ldots + a_1$$
  • publiczną funkcję składową Pochodna(int stopien), która zwraca wielomian będący pochodną stopnia stopien
  • funkcję składową Wypisz(), która wyświetla wielomian w terminalu. Współczynniki wielomianu wypisz z dokładnością do dwóch miejsc po przecinku.
    Przykład: f(x) = -1.32 x^3 + x + 3.12
    Zobacz manipulator strumienia std::setprecision oraz std::fixed.
  • destruktor, który zwalnia pamięć zajmowaną przez tablicę współczynników wielomianu

Dodaj do implementacji wielomianu:

  • prywatny konstruktor Wielomian(int stopien), który przydziela tablicę na współczynniki wielomianu, ale jej nie inicjuje. Wykorzystaj ten konstruktor w liście inicjalizacyjnej innych konstruktorów aby wyeliminować powtarzający się kod.

Zaimplementuj funkcję globalną Dodaj, która będzie zaprzyjaźniona z klasą Wielomian. Funkcja ta zwraca nowy wielomian stanowiący sumę wielomianów podanych w argumentach.

Wielomian Dodaj(const Wielomian &a, const Wielomian &b);

Zadanie 3: Iloczyn wielomianów

Uzupełnij implementację klasy Wielomian o następujące elementy:

  • publiczną metodę Wczytaj(), która wczyta nową zawartość wielomianu ze standardowego wejścia (std::cin). Użytkownik podaje stopień wielomianu oraz wszystkie współczynniki. Pamiętaj, że przed wywołaniem metody wielomian posiada już pewną zawartość, którą metoda nadpisze. Zadbaj o zwolnienie pamięci zajmowanej przez dotychczasowe współczynniki przed nadpisaniem ich nowymi wartościami.
  • zaprzyjaźnioną funkcję globalną zwracającą wynik mnożenia dwóch wielomianów w1 i w2
        Wielomian Iloczyn(const Wielomian &w1, const Wielomian &w2); 


    Wynikiem iloczynu wielomianów stopnia $n$ i $m$ będzie wielomian stopnia $n+m$ o współczynnikach
    $$ c_i = \sum_{j=0}^{i} a_jb_{i-j} \qquad \text{dla} \quad 0 \leq i \leq n+m $$

Napisz program, który:

  1. wczyta dwa wielomiany (wykorzystaj funkcję składową Wczytaj())
  2. obliczy iloczyn obu wielomianów (wykorzystaj funkcję zaprzyjaźnioną Iloczyn())
  3. wypisze wynik

Przykładowy przebieg programu:

Wielomian 1
Podaj stopien wielomianu: 2
Podaj wspolczynniki: 1 -2 3

Wielomian 2
Podaj stopien wielomianu: 1
Podaj wspolczynniki: 4 5

Iloczyn wielomianow: 4.00 x^3 - 5.00 x^2 + 2.00 x + 15.00

Rozwiązanie w postaci plików nagłówkowych *.h i źródłowych *.cpp umieść w Moodle Zadanie 3