środa, 31 maja 2017

Tydzień 12: kolekcje

Ćwiczenia

  1. Zaimplementuj prostą książkę telefoniczną w telefonie komórkowym. Książka powinna zawierać następujące operacje:
    • wyszukiwanie numeru telefonu podanej osoby,
    • zwracanie uporządkowanej alfabetycznie listy osób, których numery telefonu mamy,
    • rozpoznawanie numeru telefonu (identyfikacja, kto do nas dzwoni),
    • dodawanie osoby razem z numerem telefonu,
    • usuwanie osoby.
    Dla uproszczenia można założyć, że każda osoba ma tylko jeden numer telefonu. 
  2. Anagramy to słowa, które składają się z tych samych liter, ale w różnej kolejności. Napisz program, który dla danej listy słów wypisze wszystkie grupy anagramów pojawiające się na tej liście.
  3. Napisz program, który dla danego pliku tekstowego wypisze nastepujące informacje:
    1. z ilu słów składa się plik,
    2. słowo na pozycji 45,
    3. z ilu różnych słów składa się plik,
    4. wszystkie słowa pliku w kolejności alfabetycznej (każde słowo na liście pojawia się tylko raz),
    5. dla każdego słowa, ile razy to słowo występuje w pliku,
    6. wszystkie słowa, które mają więcej niż 6 liter, w kolejności alfabetycznej, bez powtórzeń. Do rozwiązania zadania należy uzyć odpowiednich kolekcji.

Laboratorium

  1. Przejść tutorial do Swinga w Netbeans.
  2. Uruchom programy Zagadka.java i Zagadka2.java. Wyjaśnij, dlaczego programy tak się zachowują. Co trzeba zmienić, żeby programy zachowywały się zgodnie z oczekiwaniami autora?
  3. Anagramy to słowa, które składają się z tych samych liter, ale w różnej kolejności. Napisz program, który dla danej listy słów wypisze wszystkie grupy anagramów pojawiające się na tej liście.
  4. Napisz własną implementację listy wraz z iteratorem. Twoja lista powinna mieć nastepujące operacje:
    • dodawanie nowego elementu,
    • rozmiar,
    • test niepustości,
    • iterowanie przy pomocy pętli foreach.
    Wskazówki:
    • Pętlą foreach można iterować po obiektach implementujących interfejs Iterable.
    • Do implementacji iteratora trzeba użyć klas wewnętrznych (ang. inner classes). Klasa wewnętrzna ma dostęp do prywatnych składowych otaczającego obiektu.
    • Warto przeczytać rozdział o klasach wewnętrznych z tutorialu na stronie Oracle.
    • Ściągawkę, jak napisać własny iterator można znaleźć w klasie java.util.AbstractList. W Eclipse trzeba mieć podpięte źródła Javy

środa, 24 maja 2017

Tydzień 11: typy generyczne i kolekcje

Ćwiczenia

  1. Napisz własne drzewo BST, parametryzowane typem elementów przechowywanych w drzewie. Porządek powinien być zadany jako java.util.Comparator lub java.util.Comparable.
  2. Napisz procedurę sortującą tablicę dowolnego typu. Porządek definiujemy jak w zadaniu 2.

Laboratorium

Stworzyć własną klasę Lista.
  • Lista ma zawierać elementy wskazanego typu (parametr klasy).  
  • Lista ma mieć metody umożliwiające sprawdzenie rozmiaru listy, dostęp do i-tego elementu listy, dodanie elementu na i-tym miejscu (pozostałe elementy przesuwają się), zamiana i-tego elementu listy na inny, usunięcie i-tego elementu z listy (pozostałe elementy przesuwają się).
  • Dodatkowo lista ma mieć metodę sortuj (dowolny algorytm przez porównywanie) z parametrem klasy implementującej interfejs java.util.Comparator.

Praca domowa nr 11 (nieobowiązkowa)

Zadanie o liście.


Zasady:
  • Rozwiązanie w należy wysłać mailem na adres kozubek (at) mimuw.edu.pl do 30 maja 2017 r.
  • Rozwiązanie powinno mieć postać jednego pliku. Jeśli chcemy wysłać kilka plików, należy spakować je zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora, np. JanKowalski.zip.
  • Temat wiadomości to PO11.

środa, 17 maja 2017

Film: The Good, Bad, and Ugly of Java Generics

Polecam ciekawy film o niespodziankach, jakie sprawiają typy generyczne w Javie.

Venkat Subramaniam, który prowadzi ten wykład, jest bardzo znaną postacią w środowisku Javowym i znakomitym mówcą. Wszystkie jego wykłady o Javie można oglądać "w ciemno", wszystkie są bardzo wartościowe. Venkat Subramaniam pojawia się czasem na dużych konferencjach Javowych w Polsce. Gorąco polecam udział w jego wykładzie, jeśli będą mieli Państwo okazję wysłuchać go na żywo.

poniedziałek, 15 maja 2017

Tydzień 10: typy generyczne

Ćwiczenia

Proszę pójść na ćwiczenia do grupy pana Konrada Durnogi, sala 3130. 

Laboratorium

  1. Przeczytaj informacje o typach generycznych.
  2. Dodatkowe wyjaśnienia na temat wyjątków można znaleźć na ważniaku oraz w tutorialu firmy Oracle.
  3. Zaimplementuj stos parametryzowany typem elementów przechowywanych na stosie. Twoje rozwiązanie powinno mieć dwie klasy: klasę Stos<T> implementującą stos oraz klasę ElementStosu<T> implementującą element stosu. Klasa Stos<T> używa klasy ElementStosu<T> do przechowywania elementów stosu. Użytkownik używa klasy Stos<T> i jej interfejsu. Zaimplementuj też krótki program pokazujący działanie Twojego stosu (np. liczenie wartości wyrażeń w odwrotnej notacji polskiej lub badanie, czy podane wyrażenie nawiasowe jest poprawne.)
  4. Stos parametryzowany typem elementów, implementacja za pomocą tablicy. Uwaga: to zadanie jest trudniejsze technicznie niż poprzednie. W Javie nie można tworzyć tablic z parametrem typowym. Żeby to obejść, trzeba utworzyć tablicę obiektów Object i wykonać odpowienie rzutowania. Zaimplementuj krótki program pokazujący działanie Twojego stosu.
  5. Napisz własne drzewo BST, parametryzowane typem elementów przechowywanych w drzewie. Porządek powinien być zadany jako java.util.Comparator lub java.util.Comparable.

Praca domowa nr 10

Do wyboru: zadanie 3, zadanie 4 lub zadanie 5.

Zasady:
  • Rozwiązanie w należy wysłać mailem na adres kozubek (at) mimuw.edu.pl do 23 maja 2017 r.
  • Rozwiązanie powinno mieć postać jednego pliku. Jeśli chcemy wysłać kilka plików, należy spakować je zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora, np. JanKowalski.zip.
  • Temat wiadomości to PO10.

poniedziałek, 8 maja 2017

Tydzień 9: wyjątki

Ćwiczenia

Proszę pójść na ćwiczenia do grupy pana Konrada Durnogi, sala 3130.

Laboratorium

  1. Przeczytaj informacje o wyjątkach.
  2. Dodatkowe wyjaśnienia na temat wyjątków można znaleźć na ważniaku oraz w tutorialu firmy Oracle.
  3. Implementacja stosu liczb całkowitych za pomocą tablicy.
    1. Zaprojektuj interfejs Stos reprezentujący stos liczb całkowitych.
    2. Zaimplementuj interfejs Stos za pomocą tablicy liczb całkowitych. Rozmiar tablicy ma być podany w konstruktorze i dla ustalonego stosu jest niezmienny. Twoja implementacja powinna rzucać odpowiedni wyjątki (trzeba je zdefiniować) przy próbie zdjęcia elementu z pustego stosu i położenia elementu na przepełniony stos.
    3. Napisz program, który wczytuje (z linii poleceń lub ze standardowego wejścia) wyrażenie w odwrotnej notacji polskiej (z działaniami +, −, *) i wylicza jego wartość używając stosu z poprzedniego zadania.

Praca domowa nr 9

Zadanie 3 o implemetacji i użyciu stosu. Zasady:
  • Rozwiązanie w należy wysłać mailem na adres kozubek (at) mimuw.edu.pl do 16 maja 2017 r.
  • Rozwiązanie powinno mieć postać jednego pliku. Jeśli chcemy wysłać kilka plików, należy spakować je zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora, np. JanKowalski.zip.
  • Temat wiadomości to PO9.