Programovanie, algoritmy, zložitosť 2008

2008/09/23

Oznamy

Úvod a podmienky na zápočet

Teoretické cvičenia

Cvičenie 1 (17. 9. 2008)

Úvod k Jave. Triedy a objekty. Objekty majú stav (inštančné premenné) a chovanie (metódy).

Prezentácia

Prezentácia PDF

Cvičenie 2 (1. 10. 2008)

Privátne inštančné premenné. Gettery a settery. Preťažené metódy. Konštruktory. Polia a zoznamy. Metódy toString(), equals() a hashCode().

Prezentácia

Prezentácia PDF

Cvičenie 3 (8. 10. 2008)

Reprezentácia dát. Referencie, null. Balíčky. Výnimky.

Prezentácia

Prezentácia PDF

Cvičenie 4 (15. 10. 2008)

Kompozícia a dedičnosť. Dedičnosť a prekrývanie metód. Polymorfizmus na príklade. Abstraktné triedy a metódy.

Prezentácia

Prezentácia PDF

Cvičenie 5 (22. 10. 2008)

Modifikátory viditeľnosti. Dedičnosť inštančných premenných. Dedičnosť konštruktorov. Pretypovanie. Výnimky II. Prezentácia

Prezentácia PDF

Cvičenie 6 (29. 10. 2008)

Výnimky III. Runtime výnimky. Pohadzovanie výnimiek. Prezentácia

Prezentácia PDF

Cvičenie 7 (5. 11. 2008)

Výnimky IV - dedičnosť vo výnimkách a výnimky v dedičnosti. Interfejsy. Statické metódy a premenné. Prezentácia

Prezentácia PDF

Cvičenie 8 (12. 11. 2008)

Test. Test

Test PDF

Cvičenie 9 (21. 11. 2008)

Grafické používateľské rozhrania vo Swingu Prezentácia Prezentácia PDF Ukážková aplikácia: prehrávač MP3 súborov

Cvičenie 10 (28. 11. 2008)

Grafické používateľské rozhrania vo Swingu 2 - layout managery. %red% Obsahuje aj slajdy, ktoré na prednáške neboli. Prezentácia Prezentácia PDF

Cvičenie 11 (10. 12. 2008)

Vlákna Prezentácia

Praktické cvičenia

Cvičenie 1 (29. 9. 2008)

Šialený vedec vykonáva vo svojom laboratóriu rôzne experimenty na rybičkách. Zakúpil si viacero akvárií, do ktorého nasadil po jednom druhu rybičiek. V každom akváriu prebieha samostatný experiment (ožarovanie žiarením z CRT monitora, púšťanie MC Erika a Barbary či Immortalu, kŕmenie fastfoodovym jedlom…). Po skončení experimentu sa môžu stať nasledovné veci:

Popri tom sa berie do úvahy kapacita akvária. Ak v akváriu ostane jediná rybička, populácia vymiera. Ak počet rybičiek presiahne kapacitu akvária, populácia klesne na štvrtinu.

Navrhnite vhodný objektový model a implementujte vhodné triedy, ktoré budú zodpovedať tomuto informačnému systému – teda budú simulovať experiment na viacerých akváriách.

Cvičenie 2 (6. 10. 2008)

Namiesto abstraktných rybičiek, ktoré sú v akváriu reprezentované počtom, chceme evidovať konkrétne jedince. Zmeňte akvárium tak, aby sme v ňom videli konkrétne rybičky. Rovnako zmeňte experimenty tak, aby zmenšovali/zväčšovali populáciu rybičiek.

Úlohu pošlite v ZIP súbore s názvom meno2 (príklad: novotnyr2-zip) do nedele 12. 6. mailom.

Cvičenie 3 (13. 10. 2008)

Naprogramujte simulátor Turingovho stroja.

Turingov stroj je, voľne povedané, teoretický model počítača, ktorý umožňuje simulovať beh ľubovoľného algoritmu. Jestvuje viacero variantov modelu, ale my budeme používať nasledovný: Turingov stroj pozostáva z

Turingov stroj sa môže nachádzať v jednom zo stavov, ktoré majú význam pri jeho programovaní. Program pre Turingov stroj je sada inštrukcií, ktoré sú v nasledovnom tvare:

stav čítanýSymbol novýSymbol novýStav posunHlavy

Inštrukcia znamená, že ak je Turingov stroj v danom stave a hlava je na políčku s čítaným symbolom, má najprv zapísať na políčko nový symbol a následne posunúť hlavu buď doľava alebo doprava na vedľajšie políčko.

Príkladom inštrukcie je q_0 0 1 q_1 R. Znamená to, že ak je Turingov stroj v stave q_0 a hlava číta symbol 0, má zapísať na políčko symbol 1, prejsť do stavu q_1 a posunúť sa doprava (R = right, vpravo).

Príkladom inštrukcií pre Turingov stroja, ktorý vyrobí na páske striedavo nuly a jednotky (až do nekonečna) je:

q_0 0 1 q_1 R
q_1 0 0 q_0 R

Takýto Turingov stroj sa nezastaví. Na začiatku je totiž v stave q_0, načíta 0 z pásky, zapíše 1 a posunie hlavu doprava a prejde do stavu q_1. V ďalšom kroku načíta 0, zapíše 1, posunie hlavu doprava a prejde do stavu q_0. Stavy q_0 a q_1 sa vzájomne striedajú (v stave q_0 zapisujeme jednotky a v stave q_0 zapisujeme 0). Všimnime si, že inštrukcie sa nevykonávajú zhora nadol, ako v klasickom Java programe, ale na základe toho, v akom stave sa Turingov stroj nachádza.

Iným príkladom Turingovho stroja je stroj, ktorý zapíše na pásku tri jednotky je:

q_0 0 1 q_1 R
q_1 0 1 q_2 R
q_2 0 1 q_3 R

Po skončení ostane Turingov stroj v stave q_3.

V simulátore reprezentujte stavy číslami, 0 a 1 možno reprezentovať booleanom. Hlava sa môže hýbať len vpravo a vľavo, čo je možné reprezentovať tiež booleanom.

Pre jednoduchosť zatiaľ berte do úvahy len také sady inštrukcií, ktoré sa garantovane zastavia (teda neujdú na páske do nekonečna ani nebudú „prešľapovať" na mieste).

Cvičenie 4 (20. 10. 2008)

Návrat k akváriu z predminulého cvičenia. Referenčná implementácia projektu je tu.

V akváriu chceme evidovať nielen rybičky, ale aj ďalšie špeciálne živočíchy.

Okrem toho zabezpečte načítavanie populácie akvária z textového súboru.

Cvičenie 5 (27. 10. 2008)

Dokončenie predošlej úlohy. Domácu úlohu je potrebné zaslať mailom.

Cvičenie 6 (4. 11. 2008)

Do akvária chceme pridávať rôzne okrasné hračičky - kamene, rastliny, umelohmotnú vežičku… Okrasné veci nemajú na experimenty žiadny efekt, iba zaberajú miesto. Príklad: kamen zaberá miesto pre 2 rybičky. Zabezpečte podporu okrasných vecí pre akvárium.

Načítavajte okrasné veci zo súboru.

Rozumne ošetrite výnimky v celom projekte. Zatiaľ sa chybové stavy vypisovali v catch bloku na konzolu. Zamyslite sa a prepracujte ošetrovanie chýb.

Cvičenie 7 (10. 11. 2008)

Na akvarijných rybičkách chceme po skončení experimentu vykonávať rôzne štatistiky: vypisovať ryby podľa váhy, podľa Body Mass Indexu, veľkosti a pod. Chceme tiež nájsť najväčšiu a najmenšiu rybu. Zabezpečte podporu pre túto funkcionalitu.

Vráťme sa k Turingovmu stroju. Dopracujte rozumné vyhadzovanie výnimiek na Turingovom stroji a zabezpečte podporu aj pre programy, ktoré sa nezastavia alebo prešľapujú na mieste.

Cvičenie 8 (24. 11. 2008)

Grafické používateľské rozhranie. Stiahnite si kostru GUI súčastí: [Tester](http://ics.upjs.sk/~novotnyr/home/skola/programovanie_algoritmy_zlozitost/2008/akvarium-gui/MainForm.java | formulár]] a [[http://ics.upjs.sk/~novotnyr/home/skola/programovanie_algoritmy_zlozitost/2008/akvarium-gui/Tester.java ).

Vo formulári sa zatiaľ nachádza panel (JPanel), a dva gombíky (JButton): pre načítavanie a pre krok experimentu.

Dopracujte nasledovnú funkcionalitu:

// this je inštancia okna (typu JFrame alebo dedičov)
JOptionPane.showMessageDialog(this, "Text správy.");

Riešenie zašlite mailom do 7. 12. 2008.

Mimoriadne praktické cvičenia

Cvičenie 1 (1. 10. 2008)

Algebraik chce načítavať matice z textového súboru a chce ich vedieť vypisovať na konzolu a zapisovať do súboru. Okrem toho ich chce vedieť sčítavať a násobiť.

Vytvorte triedy a príslušné metódy.

Práca so vstupno-výstupnými metódami je samostatnom článku.

Cvičenie 2 (9. 10. 2008)

Firma Prachy s.r.o. chce zarobiť na kurzových machináciách s použitím internetu. Ich cieľom je každý deň sledovať kurzové lístky viacerých bánk a zisťovať pre každú menu najvýhodnejší kurz pre predaj a nákup devíz.

Vytvorte informačný systém, ktorý obíde kurzové lístky bánk a zistí pre každú z mien najnižšiu cenu pre predaj a najvyššiu cenu pre nákup valút. Kurzové lístky sa môžu nachádzať buď na Internete alebo môžu byť načítané zo súboru.

Za začiatku predpokladáme len jedinú banku, Národnú banku Slovenska, ktorej kurzové lísky sú na adrese http://www.nbs.sk/KL/KLSL2008/KL081009.SDF.

Vytvorte informačný systém, ktorý podporuje načítavanie lístkov z rôznych zdrojov v rôznych formátoch a umožňuje sledovať vývin kurzu v priebehu času.

Cvičenie (20. 11. 2008)

Doprogramujte GUI na základe kostry aplikácie. Zabezpečte, aby sa dáta načítavali z načítavača.

Inšpirujte sa tiež kostry aplikácie.

>> Home