====== Funkcje zaprzyjaźnione i zakresy dostępu ====== * [[https://pl.wikibooks.org/wiki/C%2B%2B/Czym_jest_obiekt#Kontrola_dost%C4%99pu|Kontrola dostępu]] * private * public * protected * [[https://pl.wikibooks.org/wiki/C%2B%2B/Konstruktor_i_destruktor#Instrukcje_inicjalizuj%C4%85ce|Instrukcje inicjalizujące konstruktora]] * [[wppl>Funkcja_zaprzyjaźniona|Funkcja zaprzyjaźniona]] * [[wppl>Klasa_zaprzyjaźniona|Klasa zaprzyjaźniona]] ====== 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 [[https://en.cppreference.com/w/cpp/io/manip/setprecision|std::setprecision]] oraz [[https://en.cppreference.com/w/cpp/io/manip/fixed|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: - 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 [[https://moodle.umk.pl/mod/assign/view.php?id=361021|Zadanie 3]]