zadanie nr 8 termin realizacji: 25 kwiecień 2005

C++

dowolnie indeksowane tablice (przestrzenie nazw) studia dzienne

W przestrzeni nazw struktury zdefiniuj wzorzec klasy dla bezpiecznej tablicy. Powinna to być klasa opakowująca dynamicznie przydzielaną tablicę elementów określonego w parametrze szablonu typu. Jej elementy powinny być zainicjalizowane konstruktorem domyślnym, lub wartościami podanymi w tablicy wzorcowej (wskaźnik do pierwszego elementu). Zgodnie ze sztuką należy również zaprogramować konstruktor kopiujący, operator przypsania kopiującego i wirtualny destruktor.

Do elementów tablicy należy się odwoływać poprzez operator[], który powinien zwracać referncję do elementu. Tablica ma być indeksowana kolejnymi liczbami całkowitymi, ale niekoniecznie od 0 (zakres indeksów dla tablicy ma być podawany w konsrtuktorze). Dodatkowo napisz metody

pierwszyIndeks() ostatniIndeks() i dlugosc().

Bezpieczeństwo tablicy ma polegać na tym, że kiedy będziemy się odwoływali do elementu spoza dopuszczalnego zakresu, to będzie zgłaszany wyjątek BladZakresu, który będzie zawierał informację o indeksie powodującym sytuację wyjątkową.

Następnie (w przestrzeni nazw testy) napisz programy testujące twój szablon:

• W tablicy P[1...10] z liczbami rzeczywistymi zapisane są prawdopodobieństwa pewnych zdarzeń. Sprawdź, czy są one nieujemne i czy sumują się one do 1 (zrób to w konstruktorze klasy dziedziczącej po szablonie bezpiecznej tablicy dla liczb rzeczywistych).

• W tablicy R[2...4] z liczbami zespolonymi zapisane są współczynniki wielomianu zespolonego r_{2}z^{2} + r_{3}z^{3} + r_{4}z^{4}. Policz wartość tego wielomianu w punkcie (π, 0). Funkcję obliczającą wartość wielomianu zaprogramuj zgodnie ze schematem Hornera i napisz ją tak by starała się ona odwołać do współczynników r_{0} i r_{1} (złap zgłaszany wyjątek i wypisz odpowiedni komunikat na wyjściu dla błędów).

• W tablicy S[-1000...999] zapisane są losowe liczby całkowite ze zbioru {1000, …, 1024}. Posortuj je algorytmem counting-sort (sortowanie przez zliczanie).

• W tablicy T[1...31] zapisane są imiona solenizantów sierpniowych (obiekty typu string). Znajdź najkrótsze i najdłuższe imię (pod względem ilości liter).

Uniwersytet Wrocławski Paweł Rzechonek Instytut Informatyki ul. Przesmyckiego 20 PL-51-151 Wrocław