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