====== 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 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 [[https://en.cppreference.com/w/cpp/io/manip/setprecision|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:
- wczyta dwa wielomiany (wykorzystaj funkcję składową ''Wczytaj()'')
- obliczy iloczyn obu wielomianów (wykorzystaj funkcję zaprzyjaźnioną ''Iloczyn()'')
- wypisze wynik
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=292536|Zadanie 3]]