środa, 29 marca 2017

Tydzień 5: dziedziczenie

Ćwiczenia

  1. Program graficzny umożliwia rysowanie następujących figur geometrycznych: prostokąt, koło, trójkąt, równoległobok, sześciokąt. Zaprojektować klasy reprezentujące figury geometryczne. Zaimplementować metodę liczącą pole powierzchni tablicy figur.
  2. Zaprojektować i zaimplementować klasę Student, przechowującą imię, nazwisko, nr indeksu, nr roku, listę przedmiotów studenta. Zaprojektować konstruktory oraz inne metody.
  3. Wydzielić ze Studenta nadklasę Osoba, z odpowiednimi atrybutami, konstruktorami i metodami.

Laboratorium

  1. Zaprojektuj hierarchię klas opisujących pojazdy komunikacji miejskiej. Wyraź w tej hierarchii nastepujące fakty:
    • wszystkie pojazdy komunikacji miejskiej (k. m.) są pojazdami,
    • komunikacja miejska używa tramwajów i autobusów,
    • pojazdy są garażowane w zajezdniach,
    • każdy pojazd zna swoją szybkość maksymalną,
    • każdy pojazd k. m. zna swój numer,
    • każdy pojazd k. m. zna swoją zajezdnieę,
    • każdy tramwaj jest zestawem 1 do 3 wagonów (i wie, z ilu wagonów się składa),
    • każdy autobus wie, ile zużył paliwa w bieżącym miesiącu,
    • każda zajezdnia zna swoja nazwę,
    • każda zajezdnia wie, jakie pojazdy do niej należą,
    • każda zajezdnia ma nazwę.
    Każdy pojazd musi umieć podać swój opis w postaci napisu. Opis ma zawierać wszystkie informacje, które zna dany pojazd (np. numer, czy szybkość maksymalną). Opis zajezdni to nazwa zajezdni i opisy poszczególnych pojazdów.
  2. 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_ _ _

     _ _ _ _ _ _ _ _


    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.
    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. Napisz klasy symulujące bitwę robotó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.

Praca domowa nr 5

Do wyboru: zadanie 1 lub zadanie 2.
  • Rozwiązanie w należy wysłać mailem na adres kozubek (at) mimuw.edu.pl. 
  • 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 PO5.

środa, 22 marca 2017

Tydzień 4: klasy

Ćwiczenia

  1. Zdefiniuj klasę Pracownik (podobnie do klasy Osoba z wykładu, dodając jeszcze tekstową informację o zajmowanym przez pracownika stanowisku). Następnie zdefiniuj klasę Firma, która przechowuje w tablicy spis wszystkich pracowników (możesz założyć, że liczba pracowników nie przekracza 100). Zdefiniuj metody dodawania nowych pracowników do firmy oraz wypisywania aktualnego spisu pracowników. Zastanów się, jak przy tym ostatnim zadaniu rozdzielić odpowiedzialności pomiędzy obie klasy.
  2. Zaimplementuj liczby całkowite dowolnego rozmiaru. Operacje do zaimplementowania: dodawanie, odejmowanie, mnożenie przez liczbę typu int, tworzenie.

Laboratorium

  1. (Przeniesione z ćwiczeń) Zaimplementuj liczby całkowite dowolnego rozmiaru. Operacje do zaimplementowania: dodawanie, odejmowanie, mnożenie przez liczbę typu int, tworzenie.
  2. Utwórz klasę Ulamek reprezentującą ułamek zwykły. Klasa ma udostępniać operacje dodawania, odejmowania, mnożenia, dzielenia oraz wypisywania ułamków (metoda toString()). Ułamki powinny być przechowywane w postaci uproszczonej (zadbaj o to w konstruktorze). W innej klasie napisz program, który wczyta 10 ułamków ze standardowego wejścia, a następnie policzy ich sumę oraz iloczyn.
  3. 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_ _ _

     _ _ _ _ _ _ _ _


    a) Utwórz klasy Plansza, PolePlanszy, Robot, Kierunek. Zaimplementuj metody odpowiedzialne za wypisywanie aktualnego stanu planszy. Pamiętaj, żeby we właściwy sposób podzielić odpowiedzialności między klasami.
    b) W każdej turze gry każdy robot wykonuje losowo obrót w prawo lub obrót w lewo. Napisz program, który symuluje 5 tur gry. Program powinien wypisywać stan planszy po zakończeniu każdej tury.

Praca domowa nr 4

Do wyboru: zadanie 1, zadanie 2 lub zadanie 3.

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

środa, 15 marca 2017

Tydzień 3: karty CRC, pakiety

Ćwiczenia

  1. Karty CRC (Class-Responsibility-Collaboration) dla systemu rezerwacji np. w zakładzie fryzjerskim.
  2. Karty CRC opisujące działanie bankomatu. Scenariusze:
    • Klient wypłaca z bankomatu gotówkę za pomocą karty bankomatowej i drukuje papierowe potwierdzenie transakcji. (Należy pamiętać o różnych możliwościach, np. brak pieniędzy na koncie klienta, kilkakrotnie podany błędny numer PIN, itp.)
    • Klient sprawdza w bankomacie saldo swojego konta.
    • (Opcjonalnie: wpłatomat) Klient wpłaca gotówkę za pomocą karty bankomatowej.
    • (Opcjonalnie) Obsługa panelu administracyjnego bankomatu.

Laboratorium

  1. Umieścić program HelloWorld w pakiecie. Skompilować i uruchomić program z linii poleceń.
  2. Zapoznać się ze środowiskiem Eclipse. Skompilować i uruchomić w Eclipse program HelloWorld.
  3. W Eclipse podpiąć źródła Javy.
  4. Probably a Fire Hazard (dzień 6 ze strony Advent of Code).
    Po zalogowaniu na stronie Advent of Code można pobrać przykładowe dane, na których można przetestować program. Po zrobieniu części 1 dostaje się dostęp do drugiej części zadania.
Podpowiedzi: 
  1. Czytanie ze standardowego wejścia:
    import java.util.Scanner;
    ...
    Scanner s = new Scanner(System.in);
    while (s.hasNextLine()) {
      s.nextLine();
    }
    s.close();
  2. Czytanie z pliku
    Scanner s = new Scanner(new File("sciezka_do_pliku"));
  3. Czytanie z pliku ze Scannera powoduje błąd kompilacji. Kompilator oczekuje, że obsłużymy wyjątki, które może rzucić Scanner. Na razie można dodać w metodzie main deklarację:
    public static void main(String[] args) throws Exception { ... }
    W dalszej części semestru nauczymy się, w jaki sposób właściwie obsługiwać wyjątki.
  4. Klasa String ma metodę replace, która zastępuje podany ciąg znaków innym:
    "Ala".replace("A","O");
  5. zamieni Alę w Olę.
  6. Klasa String ma metodę split, która dzieli podany napis w miejscach wystąpienia innego napisu:
    "Ala ma kota".split(" ");
    da w wyniku tablicę:
    {"Ala","ma", "kota"}
  7. Parsowanie napisu do liczby całkowitej:
    Integer.parseInt("123");

    Praca domowa nr 3

    Rozwiązanie zadania Probably a Fire Hazard ze strony Advent of Code (do wyboru: część 1 lub część 2).

    środa, 8 marca 2017

    Tydzień 2: modelowanie obiektowe, Java

    Ćwiczenia

    1. Model dziedziny dla wypożyczalni w bibliotece wydziałowej.
    2. Model dziedziny dla systemu kasowego

    Laboratorium

    1. Skompiluj i uruchom na swoim komputerze program HelloWorld.
    2. Napisz program wypisujący na ekran wszystkie argumenty z wiersza polecenia.
    3. Napisz program wyliczający wartość największego wspólnego dzielnika dwu zadanych wartości.
    4. Napisz program wypisujący rozkład zadanej liczby naturalnej większej od zera na czynniki pierwsze.
    5. Napisz program wypisujący pierwszych n liczb Fibonacciego.
    6. Napisz program wypisujący pierwszych n liczb pierwszych. Użyj sita Eratostenesa.
    7. Dla chętnych: zadania ze strony Advent of Code.
    Parametry działania programu należy wziąć z argumentów linii poleceń.

    Wskazówka:
    Konwersja napisu na liczbę:
    int number = Integer.parseInt("123");
    
    

    Praca domowa nr 2

    Do wyboru jedno zadanie spośród: zadanie 3, zadanie 4, zadanie 5, zadanie 6.

    Rozwiązanie należy wysłać mailem na adres kozubek (at) mimuw.edu.pl. Temat wiadomości to PO2