====== 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.