niedziela, 15 maja 2016

Tydzień 11: kolekcje

Z powodu wyjazdu na konferencję w tym tygodniu nie będzie mnie na zajęciach.

Ćwiczenia

Na ćwiczenia proszę rozproszyć się po innych grupach. Ćwiczenia z PO o godzinie 12:
  • sala 3130, Kazimierz Grygiel
  • sala 3140, Marcin Pilipczuk
  • sala 3150, Marcin Dziubiński 
  • sala 3160, Krzysztof Szafran

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.
    Potrzebne informacje o kolekcjach można znaleźć w notatkach z wykładu oraz rozdziale o kolekcjach w tutorialu Javy.
  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.

Praca domowa nr 10

Zadanie 2.

Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 10). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora.

Termin oddania: 24.05.2016 r. 

środa, 4 maja 2016

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.
  2. Dla chętnych: zadanie o ONP z użyciem typów generycznych.

Praca domowa nr 9

Zadanie o BST.

Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 9). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora.

Termin oddania: 17.05.2016 r. 

niedziela, 24 kwietnia 2016

Tydzień 9: klasówka treningowa, wyjątki

Przypomnienie: za tydzień na wykładzie jest klasówka.

Ćwiczenia

Głosowanie. Klasówka z roku 2013/2014.
Rozgrywki piłkarskie. Klasówka z roku 2012/2013.

Laboratorium 

  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. 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 wyrażenie w odwrotnej notacji polskiej (z działaniami +, −, *, /) i wylicza jego wartość używając stosu z poprzedniego zadania.
W tym tygodniu nie ma pracy domowej.

wtorek, 19 kwietnia 2016

Tydzień 8: klasówka treningowa, interfejsy

Ćwiczenia

Majówka - klasówka z roku 2013/2014.

Laboratorium

  1. Zaimplementuj drzewo BST przechowujące liczby całkowite. Chcemy uniknąć dużej liczby testów (czy jest lewe dziecko, czy jest prawe dziecko,...) w kodzie. Jak będziesz reprezentować puste drzewo? Wskazówka: użyj polimorfizmu.
  2. Kolejka priorytetowa to struktura danych, do której można wstawiać elementy i z niej je pobierać. Kolejność pobierania elementów zależy od priorytetu tych elementów, najpierw wydawane są elementy o wyższym priorytecie. Zdefiniuj i zaimplementuj interfejs KolejkaPriorytetowa z operacjami:
    • void dodaj(int priorytet, String s) – dodaje do kolejki nowy napis z zadanym priorytetem.
    • String[] pobierz() – pobiera z kolejki wszystkie napisy obiekty o najmniejszej wartości priorytetu (moze byc ich wiele, stad wynikiem jest tablica). Pobrane elementy są usuwane z  kolejki.
    • boolean czyPusta() – wynikiem jest true wtedy i tylko wtedy, gdy w kolejce nie ma już elementów.
    Zdefiniuj klasę realizującą ten interfejs za pomocą jednej z metod: lista posortowana, kopiec, drzewo BST. Napisz program, który wczyta ze standardowego wejścia kilka napisów, a następnie wypisze wczytany zbiór posortowany (za pomocą KolejkiPriorytetowej) ze względu na liczbę wystąpień litery a w napisie. 

Praca domowa nr 8

Zadanie 1.

Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 8). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora.

Film: Inheritance, Polymorphism, & Testing

Ciekawy wykład o programowaniu bez if-ów, między innymi na przykładzie wyrażeń.

wtorek, 12 kwietnia 2016

Tydzień 7: wyrażenia cz. 2 + duże zadanie zaliczeniowe

Ćwiczenia

Kontynuacja zadania z poprzedniego tygodnia:
Chcemy zdefiniować klasę obiektów reprezentujących wyrażenia arytmetyczne jednej zmiennej rzeczywistej (x). Interesują nas następujące operacje:

  • policzenie wartości w zadanym punkcie,
  • policzenie (symboliczne) pochodnej,
  • policzenie (numeryczne) całki oznaczonej,
  • wypisywanie,
  • upraszczanie.
Wyrażenia mogą zawierać:
  • stałe liczbowe,
  • wystąpienia zmiennej x,
  • operatory arytmetyczne (dwuargumentowe): +, -, *, /, ...
  • funkcje jednoargumentowe: sin, cos, lg, ...
  • nawiasy okrągłe.
 Laboratorium jest odwołane (Olimpiada Informatyczna)

Zadanie domowe nr 1

W moodle'u pojawiła się treść pierwszego dużego zadania zaliczeniowego.
Moje wymagania formalne co do rozwiązania:
  • Proszę przysłać wyłącznie pliki źródłowe, z zachowaniem struktury pakietów. Proszę nie przysyłać projektów z Eclipse ani plików .class.
  • Plik z rozwiązaniem powinien mieć nazwę postaci ImięNazwisko.zip
Rozwiązania należy wysłać za pomocą moodle'a. 

środa, 6 kwietnia 2016

Tydzień 6: wyrażenia cz. 1

Ćwiczenia

Chcemy zdefiniować klasę obiektów reprezentujących wyrażenia arytmetyczne jednej zmiennej rzeczywistej (x). Interesują nas następujące operacje:

  • policzenie wartości w zadanym punkcie,
  • policzenie (symboliczne) pochodnej,
  • policzenie (numeryczne) całki oznaczonej,
  • wypisywanie.
Wyrażenia mogą zawierać:
  • stałe liczbowe,
  • wystąpienia zmiennej x,
  • operatory arytmetyczne (dwuargumentowe): +, -, *, /, ...
  • funkcje jednoargumentowe: sin, cos, lg, ...
  • nawiasy okrągłe.

 Laboratorium

  1. Bitwa robotów wojennych odbywa się na polu bitwy reprezentowanym przez planszę o rozmiarze 8 na 8. Uczestniczą w niej dwa roboty, których celem jest zniszczenie się nawzajem.
    Początkowo roboty ustawione są tak, jak na poniższym diagramie, gdzie 'vA' oraz '^B' reprezentują roboty A i B skierowane odpowiednio na południe (v) i na północ (^).
     _ _ _ _ _ _ _ _
     _ _ _ vA_ _ _ _
     _ _ _ _ _ _ _ _
     _ _ _ _ _ _ _ _
     _ _ _ _ _ _ _ _

     _ _ _ _ _ _ _ _

     _ _ _ _ ^B_ _ _

     _ _ _ _ _ _ _ _

    Zaprojektuj klasy reprezentujące pole bitwy oraz roboty. Zaimplementuj wypisywanie aktualnego stanu pola bitwy.
  2. (Ciąg dalszy zadania 1) Każda tura bitwy składa się z akcji wykonywanych kolejno przez roboty A i B. Możliwe akcje dla każdego robota:
    • obrót w lewo lub w prawo
    • krok do przodu. Wykonanie jest możliwe tylko wtedy, gdy docelowe pole jest wolne.
    • strzał. Robot strzela przed siebie laserem mającym zasięg wzdłuż całej linii.
  3. Wszystkie akcje odbywają się względem aktualnego kierunku robota. Jeżeli w wyniku strzału w jego zasięgu znalazł się robot-przeciwnik, zostaje on zniszczony i gra kończy się.

    Bitwa trwa 20 tur lub do czasu, gdy jeden robot zniszczy drugiego.

    Do klas z poprzedniego zadania dopisz symulację bitwy robotoów. Każda akcja robota powinna zostać wypisana na ekranie. Program powinien wypisywać stan pola bitwy po każdej turze. Zadbaj o właściwy podział odpowiedzialności między klasami.
  4. (Kontynuacja zadania 2) Bitwa robotów - pełna treść klasówki z roku 2007/2008

Praca domowa nr 6

Do wyboru: zadanie 1+2 lub zadanie 1+3. Zadanie 1 musi być zrobione osobno.

Rozwiązanie należy wysłać mailem. W temacie wiadomości powinien znaleźć się ciąg PO oraz numer pracy domowej (tutaj: 6). Pliki źródłowe powinny być spakowane zip-em. Nazwa pliku powinna zawierać imię i nazwisko autora