Paradigmata programování 3
Aplikaci PP-Polyglot, kterou budeme používat na cvičení, lze stáhnout v tomto odkazu odkazu.
Seznam úkolů
Úkol 4. Protypy
Z časových důvodů bude tento úkol dobrovolný, přičemž dané téma se bude moci objevit u zkoušky (více se dozvíte od doc. Krupky).
zadání úkolu naleznete v dokumentu 10_lecture.pdf k desáté přednášce v sekci 'Otázky a úkoly na cvičení'. Pokud chcete zpětnou vazbu ke svému kódu k tomuto úkolu, pošlete mi jej na email (do konce zápočtového týdne).
Ze zadání jsou úkoly 1-8 jsou lehčí (ideálně zkuste udělat všechny) a příklady 9-13 jsou složitější (stačí třeba 2).
Úkol 3. Inspektor
zadání úkolu inspector-window naleznete v dokumentu 08_lecture.pdf k osmé přednášce jako 10. úkol na cvičení.
Nejzazší datum pro odevzdání je 7.12. ve 23:59. Odevzdávejte pouze soubor s příponou .lisp (pojmenování souboru příjmení_jméno.lisp), který obsahuje pouze Váš kód k tomuto úkolu (tj. bez objektové knihovny).
Link pro odevzdání: zde (heslo je pp3)
Úkol 2. Křižovatka
Definujte třídu semaphore (zvolte pro ni vhodného předka), jejíž instance budou simulovat dopravní semafor. Požadavky:
- Vlastnost
itemsnebude nastavitelná uživatelem. - Světla semaforu budou instancemi třídy light ze souboru 06_light_example.lisp.
- Semafor bude mít nastavitelnou vlastnost
semaphore-types možnými hodnotami (minimálně):pedestriana:vehicle. - Instance třídy
semaphorese budou vykreslovat jako jednoduchý obrázek semaforu (správný počet koleček v obdélníku). - Semafor se může nacházet v jedné z několika fází, podle svého typu. Např. semafor pro vozidla bude mít čtyři fáze (červená, červená + oranžová, zelená, oranžová). Aktuální barvy světel semaforu musí odpovídat jeho fázi. Číslo fáze bude uložené v nastavitelné vlastnosti
current-phase. Počet fází bude uložen ve vlastnostiphase-count. Fáze se číslují od nuly. - Pro přechod k následující fázi bude semafor implementovat metodu
next-phase.
Definujte třídu crossroads (zvolte pro ni vhodného předka), jejíž instance budou představovat obrázky křižovatky. Požadavky:
- Vlastnost
itemsbude nastavitelná uživatelem. Může obsahovat libovolné grafické objekty, z nichž některé mohou být semafory. - Třída definuje vlastnost
semaphores(jen ke čtení), která bude obsahovat seznam všech semaforů v křižovatce. - Křižovatka se podobně jako semafor může nacházet v různých fázích. Jednotlivé fáze křižovatky se budou opět přepínat zprávou
next-phasea budou uloženy ve vlastnosticrossroads-phase. Počet fází bude uložen ve vlastnostiphase-count. - Fáze křižovatky určují, v jakých fázích jsou její semafory. To je zadáno nastavitelnou vlastností program, která obsahuje program semaforu. To je seznam seznamů. Jeho délka udává počet fází, i-tý podseznam programu určuje stav křižovatky v její i-té fázi. Každý podseznam má délku rovnou počtu semaforů v křižovatce a pro každý semafor obsahuje číslo jeho fáze. Příklad: pro křižovatku o třech semaforech a programem
((0 0 0) (0 1 0) (0 2 1))platí, že je-li křižovatka ve fázi 2, je její první semafor ve fázi 0, druhý ve fázi 2 a třetí ve fázi 1.
Do kódu (zakomentovaného) napište testovací scénář křižovatky, která obsahuje alespoň 3 semafory (:vehicle i :pedestrian).
Úkol je opravován pomocí automatických testů, proto dbejte na správné pojmenování metod a tříd!
Nejzazší datum pro odevzdání je 21.11. ve 23:59. Odevzdávejte pouze soubor s příponou lisp (pojmenování souboru příjmení_jméno.lisp), který obsahuje pouze Váš kód k tomuto úkolu.
Link pro odevzdání: zde (heslo je pp3)
Úkol 1. Halloween
Naprogramujte funkce make-ghost a display-halloween-window (viz. přiložený obrázek), kde:
1) make-ghost color scale-coeff => picture
Tato funkce vrátí instanci třídy picture, která vyobrazuje ducha z Pac-Mana dané barvy a zvětšeného o zadaný koeficient. Duch o velikosti 1 má 150x200 pixelů. Nově vytvořený duch bude mít střed na souřadnících [0,0].
2) display-halloween-window ghost-count => window
Tato funkce vytvoří okno, jehož pozadí je černé a slot shape obsahuje instanci picture se zadaným počtem duchů. Tito duchové:
- mají náhodnou barvu (např. z 5 různých),
- mají náhodné umístění v rámci okna,
- jsou otočení o náhodný úhel,
- jejich velikost je náhodně zvolená mezi 1/4 až 1/2.
Pozn. pro náhodný faktor použijte funkci random, kterou lze například použít i s konstantou pi pro získání double-float čísla z rozsahu [0,pi].
Pokud odevzdaný zdrojový kód nebude v souladu se zadáním, principy OOP, nebo při jeho kompilování nastane error/warning, pak Vám bude úkol vrácen k přepracování.
Všechny vaše duchy budu potřebovat na halloween, proto nejzazší datum odevzdání je 31.10. ve 23:59. Odevzdávejte pouze soubor s příponou .lisp (pojmenování souboru příjmení_jméno.lisp). Soubor lze nahrát vicekrát, pokud například chcete něco opravit, vždy ale se stejným jméném!
Link pro odevzdání: zde (heslo je pp3)
Zápočet
- docházka na cvičeních sice nebude vyžadována, ale je silně doporučená
- v průběhu semestru budou zadány
4 domácí úkoly3 domácí úkoly, které všechny musíte splnit: - nestačí přístup "ono to funguje" – aby byl úkol uznán, musí splňovat principy OOP (hlavní smysl tohoto předmětu)
- úkol může být vrácen k přepracování v případě chyby, warningu nebo porušení principů OOP
- způsob odvezdávání úkolů bude upřesněm při zadání prvního úkolu
- zadání úkolů bude postupně aktualizováno na těchto stránkách.
Plagiátorství a odevzdvání úkolů
“Pokud se student dopustí plagiátorství, opisování při písemném testu, opisování při práci na domácím úkolu nebo se jiným způsobem pokusí o podvod, zahájí s ním vedoucí katedry kárné řízení. Pokud se takové jednání studenta opakuje, vedoucí katedry navrhne děkanovi fakulty vyloučit studenta ze studia.” – viz web katedry
Zadaní z prvního cvičení
Vytvořte datové struktury (například pomocí property seznamů) pro geometrické objekty:
point(bod v rovině), který má dvě hodnoty souřadnic'xa'ycircle, který má svůj střed'centerreprezentovaný bodem a poloměr'radiuspolygon, který se skládá z bodů v seznamu'items
Dále máme tyto požadavky:
- Napište konstruktory, selektory a mutátory pro tyto datové struktury.
- Napište funkci, která zjistí o struktuře jakého je typu.
- Napište funkci
move, která posune zadaný geometrický objekt o hodnoty x a y. - Zamyslete, jak bychom museli upravit tyto struktury, aby měli nějakou společnou vlastnost. Například pokud by každy geometrický objekt měl obsahovat informaci o své barvě.
- Zamyslete se, jaké problémy bychom museli řešit, pokud bychom chtěli přidat další strukturu pro trojúhelník.