Funkcje zaprzyjaźnione i zakresy dostępu

Klasa: Wielomian

Wielomian $n$-tego stopnia funkcją postaci

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

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

class Wielomian
{
   private :
      int st;
      double *wsp;
 
   public :
      Wielomian();                     
      Wielomian(int st, 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.c 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 pierwotnego. Pochodna 1-szego 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 2 miejsc po przecinku.
    Przykład: f(x) = -1.32 x^3 + x + 3.12
    Zobacz manipulator strumienia setprecision

Dodaj do implementacji wielomianu:

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

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. Użytkownik podaje stopień wielomianu oraz wszystkie współczynniki. Jeżeli wielomian miał już jakąś zawartość, to zostanie ona nadpisana.
  • 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$ bedzie 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

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