====== Klasy i ich konstruktory. ====== ===== Wielomian ===== W pliku nagłówkowym ''wielomian.h'' zadeklaruj klasę ''Wielomian'' zgodnie z opisem podanym na wykładzie. class Wielomian { private : int st; double *wsp; public : Wielomian Pochodna(int ktora=1); Wielomian(); Wielomian(int st, double *wsp); Wielomian(Wielomian &); ~Wielomian(); }; W pliku źródłowym ''wielomian.c'' zdefiniuj konstruktory, destruktor i metodę ''Pochodna()''. Zaimplementuj metodę ''Wypisz()'', która wyświetli wielomian w terminalu podając liczby rzeczywiste z dokładnością do 2 miejsc po przecinku. \\ Przykład: ''f(x) = -1.32 x^3 + x + 3.12'' Zaimplementuj metodę ''Wczytaj()'', która wczyta z terminala współczynniki wielomianu. Zaimplementuj prywatny konstruktor ''Wielomian(int stopien)'', który przydziela tablicę na współczynniki wielomianu ale jej nie inicjuje. Zaimplementuj zaprzyjaźnione funkcje ''Dodaj'' i ''Iloczyn'' Wielomian Dodaj(Wielomian &, Wielomian &); Wielomian Iloczyn(Wielomian &, Wielomian &); ===== Liczby wymierne ===== W pliku ''wymierna.h'' zadeklaruj klasę wg. wzoru: class Wymierna { private : long licznik, mianownik; long NWD(long a, long b); public : Wymierna(Wymierna &w); Wymierna(long licznik,long mianownik); Wymierna(long licznik); void Wczytaj(); void Wypisz(); Wymierna Dodaj(Wymierna w); Wymierna Pomnoz(Wymierna w); }; W pliku ''wymierna.c'' zdefiniuj wymagane metody i napisz program testujący poprawność działania. Metoda ''NWD()'' znajduje największy wspólny dzielnik dwóch liczb całkowitych. Wykorzystaj [[http://pl.wikipedia.org/wiki/Algorytm_Euklidesa|algorytm Euklidesa]] aby przechowywać liczby wymierne w skróconej postaci. Zaimplementuj operacje dodawania i mnożenia jako zaprzyjaźnione funkcje zwracające referencje do nowego obiektu klasy Wymierna. ===== Słownik ===== Przetransformuj program z poprzednich zajęć do postaci obiektowej. Rozbij zadanie na 3 obiekty: * Dictionary - reprezentuje słownik. Odpowiednie metody pozwalają utworzyć słownik z danych pobranych z pliku tekstowego lub ze strumienia wejściowego. * Tree - reprezentuje drzewo przechowujące wyrazy. Dostarcza metodę dodającą wyraz (napis) do kolekcji wstawiając go w porządku alfabetycznym. * Node - reprezentuje pojedynczy węzeł drzewa. {{:zajecia:po_2013_1:dict.png?600|}} Klasa **Dictionary** (slownik) zadeklarowana jest następująco: class Dictionary { Tree t; string getword(istream &i); public: Dictionary(); Dictionary(const char *filename); void Read(istream &i); void Print(); ~Dictionary(){}; }; Klasa **Tree** (drzewo) zadeklarowana jest następująco: class Tree { private: Node *root; Node *Add(Node *k,string word); void Free(Node *k); void Print(Node *k); public: Tree(); void Add(string word); void Print(); ~Tree(); }; Deklaracja struktury **Node** (element) class Node { public: int count; string word; Node *left; Node *right; Node(); Node(string _word); void Print(); }; W klasie ''Node'' wszystkie pola są publiczne. W tym przypadku jest to wygodne, jednak łamie zasadę hermetyzacji. Spróbuj poprawić program tak aby pola tej klasy (zwłaszcza pola ''left'' i ''right'') nie były publicznie dostępne.