Funkcje zaprzyjaźnione i zakresy dostępu
-
- private
- public
- protected
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 stopniasto współczynnikachwsp - 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ą stopniastopien - 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
w1iw2
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:
- wczyta dwa wielomiany (wykorzystaj funkcję składową
Wczytaj()) - obliczy iloczyn obu wielomianów (wykorzystaj funkcję zaprzyjaźnioną
Iloczyn()) - 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