piątek, 3 lipca 2015

Skróty klawiszowe w Eclipse

Na tej stronie można nauczyć się skrótów klawiszowych w Eclipse.

wtorek, 2 czerwca 2015

Tydzień 15: egzamin & Swing

Ćwiczenia

Wycieczka objazdowa (Egzamin z roku 2013/2014)

Laboratorium

Przed przystąpieniem do rozwiązywania zadań pobierz archiwum ZIP z szablonami zadań na dzisiejsze laboratorium. Dzisiejsze zajęcia polegąją na uzupełnieniu pobranych szablonów zgodnie z instrukcjami w plikach.
  1. Prawie jak HelloWorld. Program uruchamia proste okienko, które umie się zamknąć.
  2. Do okienka dodaj guzik Quit, który kończy wykonanie programu (System.exit(0);). Zwróć uwagę na wykorzystanie zarządcy widoku (LayoutManager) i klasy anonimowej.
  3. Ćwiczenie na wygenerowanie ciekawego układu klawiszy.
  4. Prosta obsługa zdarzeń. Program informuje, który klawisz został naciśnięty.
  5. "Skomplikowana" obsługa zdarzeń. Aplikacja zmieniająca kolor panelu w zależności od wybranych ustawień.
  6. Napisz użyteczną aplikację z użyciem widoku klawisz z zadania 2. 
Proszę o sprawdzenie, czy oceny za małe zadania (zwłaszcza zadanie z szybkością programów w Javie) zgadza się z tym, co Państwo do mnie wysyłali.

wtorek, 26 maja 2015

Tydzień 14: egzamin & strumienie

Ćwiczenia

Platforma eTam (egzamin z roku 2012/2013).

Laboratorium

  1. Napisz program, który wypisuje na ekran zawartosc pliku tekstowego. Nazwę pliku do wypisania wczytaj ze standardowego wejścia za pomocą odpowiednich strumieni.
  2. Napisz program, który dla podanego pliku wypisze, z ilu bajtów składa się ten plik.
  3. Napisz program, który dla danego pliku tekstowego wypisze liczbę znaków oraz liczbę białych znaków w tym pliku.
  4. (a) Napisz program, który kopiuje znak po znaku pliki tekstowe.
    (b) Zmień program z poprzedniego punktu tak, aby czas kopiowania był mierzony i wypisywany na konsole. Sprawdź, jaki wpływ na efektywność ma użycie buforowania.
  5. Napisz program, który odwróci zawartość pliku tekstowego w nastepujący sposób:
    (a) Odwróci kolejność wierszy.
    (b) W każdym wierszu odwróci kolejność słów.
    (c) W nazwie pliku odwróci kolejność liter, pomijając ewentualne rozszerzenie .txt.
  6. Napisz Iterator<String>, w którym metoda next() zwraca kolejne linie wczytane z Readera. Konstruktor ma dostawać obiekt Readera. Po wczytaniu wszystkiego Reader ma zostać zamknięty. Zauważ, że Iterator nie może rzucać wyjątków IOException. Niech przechwyci taki wyjątek i pozwoli normalnie iterować po wszystkich poprawnie wczytanych liniach.
    Wskazówka: BufferedReader ma metodę readLine(); zwraca ona null, gdy napotka koniec pliku.
    Wskazówka 2: aby hasNext() działał poprawnie, trzeba zawsze mieć wczytana i spamiętaną jedną linie w przód.

sobota, 16 maja 2015

Tydzień 13: kolekcje cz. 3

Ćwiczenia

Na ćwiczenia proszę rozproszyć się po innych grupach. Ćwiczenia z PO o godzinie 12:

  • sala 3130, Kazimierz Grygiel
  • sala 3140, Michał Pilipczuk
  • sala 3150, Tomasz Waleń
  • sala 3160, Krzysztof Szafran
  • sala 3230, Konrad Durnoga

Laboratorium

  1. 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?
  2. Zaproponuj interfejs ImmutableSet<E> reprezentujący niezmienialny zbiór. Operacje wstawiania i usuwania powinny tworzyć nowy zbiór, a nie modyfikować istniejący. 
    Przygotuj implementację tego interfejsu za pomocą drzew BST. Wszystkie używane pola mogą być zadeklarowane jako final, wtedy na pewno struktura będzie niezmienialna.  Niech operacje takie jak size() i isEmpty() działają w czasie stałym.
    Jakie znasz niezmienialne klasy w bibliotece standardowej Javy? Jest ich całkiem sporo!
    Jakie są zalety użycia klasy niezmienialnej (ang. immutable)? Jakie są wady?

wtorek, 12 maja 2015

Tydzień 12: kolekcje cz. 2

Ćwiczenia

MasterMind to gra planszowa dla dwóch osób. Gracze mają do dyspozycji pionki w sześciu kolorach. Pierwszy gra układa z pionków kod czteroelementowy, kolory w kodzie mogą się powtarzać. Zadaniem drugiego gracza jest odgadnięcie kodu wybranego przez pierwszego gracza.
Drugi gracz ma parzystą liczbę prób (zwykle 10). W każdej próbie gracz podejmuje próbę odgadnięcia kodu wybranego przez przeciwnika. Pierwszy gracz ocenia próbę drugiego gracza za pomocą białych i czarnych pionków. Za każdy pionek we właściwym kolorze i na właściwej pozycji przyznaje czarny pionek. Za każdy pionek we właściwy kolorze, ale na niewłaściwej pozycji przyznaje biały pionek. Następnie drugi gracz ma prawo podjąć kolejną próbę.
Zadanie: zaimplementować jeden krok algorytmu grającego w MasterMind. Zaimplementujemy algorytm, który trzyma zbiór możliwych jeszcze układów. Zgadywanie polega na wybraniu ze wszystkich możliwych jeszcze układów takiego, który najlepiej dzieli ten zbiór (generuje podział minimalizujący wielkość największego zbioru możliwych układów po zapytaniu). Przy parametrach standardowego MasterMinda taki algorytm radzi sobie bez problemu.

Laboratorium

  1. Napisz program, który dla danego pliku tekstowego wypisze następujące informacje:
    • z ilu słów składa się plik,
    • słowo na pozycji 45,
    • z ilu różnych słów składa się plik,
    • wszystkie słowa pliku w kolejności alfabetycznej (każde słowo na liście pojawia się tylko raz),
    • dla każdego słowa, ile razy to słowo występuje w pliku,
    • wszystkie słowa, które mają więcej niż 6 liter, w kolejności alfabetycznej, bez powtórzeń.
    Do rozwiązania zadania należy użyć odpowiednich kolekcji.
  2. Przy wypisywaniu zawartości katalogu domyślne sortowanie jest leksykograficzne. Zatem plik laboratorium12.txt jest wypisywany przed plikiem laboratorium2.txt. Napisz własny komparator, który sortuje tak, że nazwa laboratorium2.txt jest wcześniej niż nazwa laboratorium12.txt. Użyj go do wypisania w odpowiedniej kolejności listy plików z wybranego katalogu.
    Wskazówka. Do odczytywania zawartości katalogu można użyć klasy File.

wtorek, 5 maja 2015

Tydzień 11: kolekcje

Ćwiczenia

  1. Dany jest graf. Podzielić jego wierzchołki na możliwie najwięcej niepustych zbiorów, tak by podział miał tę własność, że każda para wierzchołków należących do różnych zbiorów jest połączona krawędzią. Dane:
    • pierwszy wiersz: liczba wierzchołków, liczba krawędzi
    • kolejne: opisy poszczególnych krawędzi (jako dwie liczby, nr pierwszego i nr drugiego wierzchołka).
    Np.:
         3 3
         1 2
         2 3
         3 1
      (graf trójkąt)

    Wynik: Posortowane niemalejąco liczby elementów poszczególnych zbiorów wierzchołków.

    W zadaniu należy zaprojektować struktury danych przechowujące graf (chcemy korzystać z kolekcji w Javie) oraz zaimplementować odpowiedni algorytm.
  2. (Merge uporządkowanych iteratorów) Dane są dwa iteratory na liczbach całkowitych, o których wiemy, że zwracają liczby w porządku rosnącym. Utworzyć uporządkowaną rosnąco listę zawierającą te same elementy, co w danych iteratorach.

Laboratorium

  1. 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.
  2. 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.  

wtorek, 28 kwietnia 2015

Tydzień 10: typy uogólnione

Ćwiczenia

  1. Zaimplementuj stos parametryzowany typem elementów przechowywanych na stosie.
  2. 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.
  3. Napisz procedurę sortującą tablicę dowolnego typu. Porządek definiujemy jak w zadaniu 2.

Laboratorium

  1. Zaimplementuj drzewo BST przechowujące wartości tego samego typu. Algorytm porównujący może być dostarczany w postaci (do wyboru) Comparatora lub interfejsu Comparable. Twoje drzewo powinno udostępniać nastepujące operacje:
    • tworzenie pustego drzewa,
    • dodawanie elementu do drzewa,
    • sprawdzenie, czy drzewo zawiera wskazany element,
    • wypisanie wszystkich elementów drzewa w kolejności rosnącej. 
    Napisz prostą aplikację testującą działanie Twojego drzewa.

Praca domowa nr 11 (dodatkowa) 

Zadanie o drzewie BST. Termin oddania: 6 maja 2015 r.