środa, 14 czerwca 2017

Tydzień 14: egzamin, strumienie

Ćwiczenia

Genom (egzamin z roku 2015/2016)

Laboratorium

  1. Napisz program, który wypisuje na ekran zawartość 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. 

Inne egzaminy

System finansowy (egzamin z roku 2007/2008)
Żaba (egzamin z roku 2008/2009).
Egzamin z PO (egzamin z roku 2009/2010)
Klasyfikacja (egzamin z roku 2010/2011) 
Sprawdzanie egzaminu z PO (egzamin z roku 2011/2012)
Platforma eTam (egzamin z roku 2012/2013).
Wycieczka objazdowa (Egzamin z roku 2013/2014) 
Portal sprzedaży nieruchomości (egzamin z roku 2014/2015)

środa, 7 czerwca 2017

Tydzień 13: kolekcje, egzamin

Ćwiczenia

Portal sprzedaży nieruchomości - egzamin z roku 2014/2015.

Laboratorium

  1. Proszę sprawdzić, czy wszystkie małe prace domowe, które Państwo wysłali są uwzględnione w arkuszu Małe zadania domowe.
  2. 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ę.
    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.

ś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.

środa, 26 kwietnia 2017

Tydzień 8: interfejsy

Ćwiczenia

Gra w Blackjacka (nasze Oczko, czy Dwadzieścia-jeden) jest grą karcianą, polegającą na zbieraniu kart tak, by uzbierać więcej oczek na kartach niż rywale, ale nie więcej niż 21. Dokładne reguły gry bywają różne, my przyjmiemy w tym zadaniu pewne ich uproszczenie.

Zasady gry

W grę gra co najmniej jeden gracz (liczba graczy jest ograniczona tylko liczbą dostępnych kart, w naszym programie zakładamy, że jeśli graczy jest zbyt wielu i dla któregoś nie starczy kart, to program ma prawo przerwać działanie).
Gra składa się z wielu rozdań. Rozdanie rozpoczyna się od potasowania kart. Następnie każdy gracz dostaje kolejne karty z talii (po jednej) tak długo, jak długo chce je brać lub do momentu, gdy suma oczek w kartach na ręku przekroczy 21. Gracz nie widzi karty, którą ma dostać (oczywiście od momentu dołożenia karty do ręki może już ją oglądać). Po zakończeniu każdego rozdania gracze, którzy zdobyli najwięcej oczek (ale nie więcej niż 21), dostają po 1 punkcie. Może się zdarzyć, że w danym rozdaniu żaden z graczy nie dostanie punktu. Grę wygrywa ten z graczy (lub ci gracze), który zdobędzie najwięcej punktów.
Liczby oczek na poszczególnych kartach:
  • karty 2-10: taka sama liczba oczek jak na karcie,
  • karty W, D, K: po 10 oczek każda,
  • as to 11 oczek.

Struktura programu

Na podstawie treści zadania należy zaprojektować i zaimplementować następujące interfejsy  oraz klasy:
  • interfejs Gracz,
  • klasy:
    • Krupier - bierze kolejne karty póki ma mniej niż 17 oczek na ręku,
    • Limitowy - ma zadany limit oczek, dobiera kolejne karty tylko wtedy, gdy suma oczek na reku jest mniejsza od limitu,
    • Losowy - zawsze losuje (z prwdp. 50%), czy wziąć kolejną kartę,
    • Ostrożny - bierze kolejną kartę tylko wtedy, gdy ma pewność, że po jej wzięciu nie przekroczy limitu 21 oczek w ręku,
    • Śpiący - śpi i nigdy nie dobiera żadnej karty.

Zanim zaczniesz implementować te klasy zastanów się, jak powinny być zadeklarowane. Możesz dodać tu jeszcze jakieś klasy, jeśli uznasz to za potrzebne. Możesz też dodać jeszcze inne typy graczy.

Laboratorium

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. Wskazówka: użyj polimorfizmu, żeby reprezentować puste węzeł.

Praca domowa nr 8

Zadanie o drzewie BST. Zasady:
  • Rozwiązanie w należy wysłać mailem na adres kozubek (at) mimuw.edu.pl do 9 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 PO8.

środa, 12 kwietnia 2017

Tydzień 7: wyrażenia cz. 2

Ć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).

Dla chętnych: klasówka z zeszłego roku

Chętne osoby w ramach przygotowania do klasówki mogą rozwiązać zadanie Aukcje (klasówka z roku 2015/2016). Rozwiązania (np. zeskanowane) można przysłać mailem do środy 19 kwietnia włącznie. Postaram się sprawdzić nadesłane rozwiązania do 23 kwietnia.

środa, 5 kwietnia 2017

Film: Inheritance, Polymorphism, & Testing

Ciekawe wideo o programowaniu bez if-ów, również na przykładzie wyrażeń:

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

Bezszachy - klasówka z roku 2007/2008.

Praca domowa nr 7

Zadanie Bezszachy. Zasady:
  • Rozwiązanie w należy wysłać mailem na adres kozubek (at) mimuw.edu.pl do 11 kwietnia 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 PO7.

Przypominam o zadaniu na porównanie szybkości działania programów w Javie i innym języku programowania.

Rozwiązanie należy umieścić na forum w moodle'u do 24 kwietnia 2017 r. Proszę o przysłanie mailem linka do Państwa wypowiedzi na forum.

ś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
     

    wtorek, 28 lutego 2017

    Tydzień 1: wstęp do obiektowości

    Ćwiczenia

    Abstrakcyjne typy danych: stos, kolejka, graf.

    Laboratorium

    1. Przygotować w programie Dia model dziedziny dla gry w szachy.
    2. Przygotować w programie Dia model dziedziny dla wydziałowej biblioteki.

    Praca domowa nr 1

    Przygotować model dziedziny dla biblioteki. Wydrukowane modele podpisane imieniem i nazwiskiem proszę przynieść na następne zajęcia.