Ogólne

Rozwiązania zadań należy przysłać na mój adres (olekz@mimuw itd.)

Zadanie 1

(termin: 18 III)

Wersja "trudniejsza" zadania 5 ze scenariusza 3 na Ważniaku (link). Szczegóły: Przydatne klasy i metody:

Zadanie 2

(zadane przez wykładowcę, termin: 26 III ?)

Znajduje się na Moodle'u.

Zadanie 3

(termin: 1 IV)

Zaimplementuj w całości metodę dodaj klasy Liczba, którą zajmowaliśmy się na zajęciach.
Twój program powinien zawierać:

Zadanie 4

(termin: 8 IV)

Zaimplementuj klasy i metody umożliwiające przetwarzanie wyrażeń algebraicznych zależących od jednej zmiennej x, w następującym zakresie:
(lista wymagań jest długa, ale większość z tego zrobiliśmy na zajęciach - jednak spisuję dla tych, których nie było, albo zapomnieli)

Zadanie 5

(termin: 25 IV)

Zaimplementuj klasy pozwalające na przechowywanie bazy danych osób i sortowanie ich wg różnych atrybutów:

Zadanie 6

(termin: 14 V)

Zaimplementuj różne rodzaje generatorów i filtrów, pozwalające m. in. na sortowanie danych z wejścia oraz obliczanie liczb pierwszych.

Elementy omówione dość gruntownie na zajęciach: (spisuję dla przypomnienia / wyjaśnienia itp.) Dodatkowe elementy zadania:

Zadanie 7

(termin: 20 V)

Napisz klasę Pair<K, V>, implementującą interfejs Entry.Map<K, V>, oraz dwie klasy implementujące interfejs Map<K, V>: Utwórz też wspólną abstrakcyjną nadklasę dla ListMap oraz TreeMap i umieść w niej jak najwięcej kodu wspólnego dla obu klas.
(Przykładowo, plik TreeMap.java można napisać tak, by wszystkie konstruktory i metody miały łącznie 12 linii - a pewnie da się mieć też mniej).

W klasie głównej napisz jakąś procedurę, wykonującą dowolnie wybrane przez Ciebie operacje na obiekcie typu Map<String, Integer> i wykonaj ją na new ListMap<>() oraz new TreeMap<>(). Byłoby najpiękniej, gdyby było widać różnicę w czasie działania, ale tego już nie wymagam.

Wskazówki ogólne: Wskazówki dotyczące TreeMap:

Zadanie 8

(termin: 27 V)

To zadanie jest prostsze niż poprzednie. (Mój kod zajmuje mniej miejsca niż treść zadania. I chyba też krócej był pisany).
(Na czerwono późniejsze zmiany w treści zadania).

Zadanie: Napisz usprawnienia dla wykorzystywania iteratorów - w obie strony: Szczegóły: Twoje rozwiązanie powinno zawierać: Przykład: Jeśli na wejściu podano ciąg 2, 4, -1, 0, wyjście powinno wyglądać na przykład tak:
2
4; zmiana o 2
-1; zmiana o -5

Uwagi: Wskazówki:

Zadanie 9

(termin: 3 VI)

Tradycyjnie: treść bardzo długa, a rozwiązanie krótkie. (Wersję podstawową da się zmieścić poniżej 50 linii).
Tekst czerwony stanowi bonus (dodatkowe 0,3 punktu) - w wersji podstawowej zadania po prostu go pomiń.

Użyj mechanizmu refleksji dla zbudowania interpretera prostych poleceń Javy (ściślej: prawie-Javy). A dokładniej: Uwagi do treści zadania: Wskazówki: Żeby było jasne, w co się można bawić, opiszę na koniec składnię interpretera.
(Tu nie ma się czego bać - nic z tym nie musisz robić, bo to już napisane :)
Na niebiesko zaznaczam elementy składni, które odwołują się do interfejsu ReflectionCaller - a więc jedynie te elementy będą korzystać z Twojego rozwiązania wersji podstawowej. Pierwsze dwa warianty poleceń są w zasadzie potrzebne jedynie w wersji podstawowej rozwiązania; w wersji rozszerzonej można je zastąpić równoważnymi System.out.println(...) oraz System.exit(0).

Zadanie 10

(termin: 17 VI)

Dokończ - w elegancki sposób obiektowy - parser SAX z naszych przedostatnich zajęć. Bonus (dodatkowe 0,3 pt): Obsłuż plik o bogatszym formacie, w którym pracownicy są pogrupowani w hierarchię oddziałów (tag <dept>, zawierający tag <name>).