Zadania realizowane w ramach laboratorium programowania obiektowego 2 (C#):

  1. Problem B z finałów konkursu ACM 2009
  2. Eksperyment ze słownikiem i dobrym/złym GetHashCode()
    Należy stworzyć własną strukturę/klasę, która posłuży jako typ klucza dla słownika (Dictionary). Prosta funkcja testująca sprawdzi działanie dodawania elementów do słownika i pobierania włożonych wcześniej wartości oraz zmierzy czas działania (wystarczy różnica pobieranych DateTime.Now). Do słownika należy wrzucić i pobierać odpowiednio dużo wartości, by otrzymać miarodajne czasy wykonania.
    Efektem eksperymentu powinna być świadomość kiedy i dlaczego działa to szybko a kiedy i dlaczego wolno, dlaczego bez GetHashCode dla klas jest wyjątek, a dla struktur nie itd. Do rozliczenia potrzebny jest kod eksperymentu i krótki opis wniosków (można go wstawić jako komentarz do pliku z kodem).
    W skrócie, do zrobienia jest: Uwaga! GetHashCode() nadpisujemy zwykle w parze z Equals() - ten sam kod haszujący nie wystarcza by dwa klucze uznać za jednakowe - ostatecznie decyduje właśnie Equals(), która domyślnie, w przypadku typów referencyjnych porównuje referencje właśnie, a w przypadku typów wartościowych porówna wnętrza (dla struktur pole po polu).
  3. Klasa kopca - Heap<Key,Value> i klasa NMin<Key,Value>
    Należy stworzyć dwie klasy: Heap, realizującą kopiec z możliwością dodawania elementów i usuwania elementu z korzenia oraz NMin, która wykorzysta kopiec do tego by wspomagać wyznaczanie zadanej liczby (n) minimalnych wartości spośród wszystkich "przerzuconych" przez obiekt tej klasy, tzn. wywołujemy dowolnie wiele razy metodę (np. Check) z różnymi obiektami i ich kluczami, a ta wrzuca je do kopca dbając, by kopiec nigdy nie zawierał więcej niż n elementów, a na koniec pozwala pobrać wszystkie elementy, które pozostały w kopcu (n minimalnych) w odpowiedniej kolejności.
    W skrócie o klasie Heap:
  4. Problem F z finałów konkursu ACM dla Europy Centralnej 2001

Ocena wg sumy punktów:

Punkty do zdobycia:
  1. Bramki (B-2009) - 10 pkt.
  2. GetHashCode() - 3 pkt.
  3. Kopiec i NMin - 7 pkt.
  4. Cysterny (F-2001) - 10 pkt.
  5. Dodatkowe punkty za rozwiązania wykraczające poza ww. wymagania (np. atrakcyjny interfejs graficzny)
Ostatecznie, ocena: