środa, 16 kwietnia 2014

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

Ćwiczenia

Probówki (klasówka poprawkowa z roku 2009/2010).

Z powodu świąt i przyszłotygodniowej klasówki w tym tygodniu nie ma pracy domowej. 

środa, 9 kwietnia 2014

Tydzień 8: klasówka przygotowawcza, interfejsy

Przypomnienie: 23 kwietnia (środa po świętach) na wykładzie jest klasówka.

Ćwiczenia

Aukcje (klasówka poprawkowa z roku 2008/2009).

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,...). Wskazówka: trzeba odpowiednio reprezentować puste drzewo przy pomocy polimorfizmu/interfejsów.
  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 żądanym priorytetem.
    • String[] pobierz() – pobiera z kolejki wszystkie napisy obiekty o najmniejszej wartości priorytetu (może być 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ę wystapień litery a w napisie.

Praca domowa nr 7 

Arimaa (klasówka poprawkowa z roku 2011/2012). Rozwiązanie należy oddać w wersji papierowej, napisane ręcznie. Termin oddania: 16 kwietnia 2014 r. Tej pracy domowej nie można poprawiać.

środa, 2 kwietnia 2014

Tydzień 7: wyrażenia cz. 2

Ćwiczenia

Kontynuujemy zadanie o wyrażeniach z poprzedniego tygodnia. Dziś dodamy upraszczanie wyrażeń. Chcemy, aby wyrażenia tworzyły się w postaci uproszczonej zgodnie z takimi regułami:

  • stała + stała → stała
  • 0 + wyrażenie → wyrażenie
  • wyrażenia + 0 → wyrażenie
  • stała * stała → stała
  • 1 * wyrażenie → wyrażenie
  • wyrażenie * 1 → wyrażenie

Laboratorium

Laboratorium jest odwołane z powodu Olimpiady Informatycznej.

środa, 26 marca 2014

Film: Inheritance, Polymorphism, & Testing

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

Tydzień 6: dziedziczenie

Ć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

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.

Praca domowa nr 6

Zadanie o tramwajach. Termin oddania: 9 kwietnia 2014 r.

środa, 19 marca 2014

Tydzień 5: klasy

Ćwiczenia

Zaimplementuj liczby całkowite dowolnego rozmiaru. Operacje do zaimplementowania: dodawanie, odejmowanie, mnożenie przez liczbę typu int, tworzenie.

Laboratorium

Zaimplementuj klasę Wielomian. Wielomian powinien mieć:
  • konstruktor bezargumentowy tworzący wielomian zerowy;
  • konstruktor tworzący jednomian;
  • konstruktor tworzący wielomian na podstawie tablicy współczynników; nie marnujemy pamięci – trzymamy tablice długości stopień wielomianu + 1;
  • metodę liczącą wartość wielomianu w punkcie;
  • metody dodaj(Wielomian) i odejmij(Wielomian) zwracającą nowy wielomian będący sumą (różnicą) pierwszego i drugiego argumentu;
  • (dla chętnych) metodę pomnóż(Wielomian) zwracającą iloczyn pierwszego i drugiego argumentu.
W nowym pakiecie utwórz klasę Program korzystającą z Wielomianu. Program bierze jako argumenty wiersza poleceń listę współczynników pierwszego wielomianu, nastepnie symbol działania, a potem listę współczynników drugiego wielomianu. Program wypisuje podanego wynik działania na standardowe wyjście. Np.
java main.Program 1 0 1 + 1 1 -1 1
daje w wyniku
2+x^1+x^3

Praca domowa nr 5

Zadanie o wielomianie. Termin oddania: 26 marca 2014 r.

środa, 12 marca 2014

Tydzień 4: proste 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 by przechowywała 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. Zdefiniuj klasę opisującą datę. Zastanów się nad wyborem wewnętrznej reprezentacji dat. Zdefiniuj metody pozwalające na odczytywanie bieżącej daty i przestawianie jej o jeden tydzień w przód i w tył. Zadbaj o dobranie odpowiednich modyfikatorów dostępu do składowych.
  3. Zdefiniuj klasę Liczba, która przechowuje w tablicy cyfry liczby dziesiętnej. Zdefiniuj operacje wypisywania liczby, nadawania jej wartości (w postaci parametru konstruktora będącego napisem) oraz mnożenia przez liczbę typu int. W przypadku gdy w czasie mnożenia okaże się, że tablica jest za mała, procedura mnożąca powinna kopiować jej zawartość do większej. Zdefiniuj wreszcie metodę silnia, która policzy silnię zadanej jako parametr liczby typu int.

 Laboratorium

Na forum Szybkość programów w Javie w moodle'u należy umieścić wynik porównania programu napisanego w Javie oraz w innym języku programowania. Termin oddania: 26 marca 2014 r. To zadanie warte jest jeden punkt.
  1. Skompiluj i uruchom w Eclipse program HelloWorld z poprzednich zajęć. Podepnij w Eclipse źródła Javy.
  2. Napisz klasę Osoba. Każda osoba ma imię, nazwisko oraz płeć. W innej klasie napisz program, który wczytuje listę 10 osób, a następnie wypisuje ich dane w odwrotnej kolejności. Skompiluj i uruchom program a) pod Eclipse b) z linii komend.
  3. Zmień klasę Osoba z poprzedniego zadania tak, aby każda osoba miała matkę i ojca. Stwórz kilka osób i powiązań pomiędzy nimi. Dodaj metodę, która zwraca imię i nazwisko ojca lub napis „Nieznany”, jeśli referencja do ojca jest nullem. Dodaj metodę, która przyjmuje parametr typu Osoba i zwraca informacje, czy podane osoby mają tę sama matkę.
  4. 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. Skompiluj i uruchom program a) pod Eclipse b) z linii komend.

Praca domowa nr 3

Do wyboru zadanie 2+3 lub zadanie 4.  Termin oddania: 19 marca 2014 r.