Oznamy
- Mimoriadne cvičenia sú vo štvrtok 13.30 v P7.
- Podmienky na zápočet sú uvedené v prvej prezentácii.
- Každý študent je povinný byť na práve jednom praktickom cvičení a na teoretickom cvičení
Úvod a podmienky na zápočet
-
teoretické cvičenie - streda, 10.00, P8
-
cvičenie pri počítačoch
- pondelok, 7.20, P3
- piatok, 9.00, P3
- cvičenie v piatok o 14.00 zrušené pre nedostatok záujmu.
-
podmienky na zápočet
- účasť na praktických cvičeniach (20%)
- domáce úlohy (raz za dve cvičenia) (30%)
- záverečný projekt (30%)
- test po precvičení dedičnosti (20%)
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).
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()
.
Cvičenie 3 (8. 10. 2008)
Reprezentácia dát. Referencie, null
. Balíčky. Výnimky.
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.
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
Cvičenie 6 (29. 10. 2008)
Výnimky III. Runtime výnimky. Pohadzovanie výnimiek. Prezentácia
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
Cvičenie 8 (12. 11. 2008)
Test. Test
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:
- experiment bol úspešný, rybičky sa rozmnožia na dvojnásobok
- experiment bol neúspešný, polovica populácie vymrela
- experiment nemal na populáciu efekt, nestalo sa nič. Experimenty prebiehajú po kolách. Šialený vedec vykoná na každom akváriu jeden experiment a po dobehnutí pokusov na akváriách ich vyhodnotí. Následne pustí ďalší experiment.
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.
- Vytvorte triedu
Rybicka
majúcu hmotnosť, veľkosť, druh a identifikátor. - Vytvorte v nej metódu
nakrmSa()
, ktorá náhodne zmení hmotnosť a veľkosť jedinca. Hmotnosť sa môže zvýšiť o hodnotu medzi nulou a polovicou pôvodnej hmotnosti. Veľkosť sa môže zvýšiť o hodnotu medzi nulou a štvrtinou pôvodnej veľkosťi. - Jedince v akváriu udržiavajte v zozname
ArrayList
. Experimenty nech vyhadzujú rybičky zo zoznamu alebo nech pridávajú rybičky do zoznamu. - Dodajte do triedy
Rybicka
konštruktor, ktorý nastaví rybičke druh a ostatné hodnoty nastaví automaticky (meno) alebo náhodne (hmotnosť a veľkosť). - Vylepšite experiment tak, aby pri vytváraní nových jedincov náhodne určil dvoch, ktorí budú rodičmi nového jedinca. (Druh rybičky nech je vytvorený z názvov druhov jeho rodičov.) Zabezpečte, aby si rybička vedela pamätať svojich rodičov.
Ú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
- nekonečnej pásky, ktorá je rozdelená na políčka. Páska je jednosmerne nekonečná, teda má začiatok a nekonečnú dĺžku. Na každom z políčok sa môže nachádzať buď 0 alebo 1.
- hlavy, ktorá sa pohybuje nad páskou. V každom momente sa hlava nachádza nad jedným políčkom pásky. Hlava vie čítať hodnotu z políčka a zapisovať doň novú hodnotu.
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).
- Domácu úlohu s Turingovym strojom je potrebné poslať do 25. 10. 2008.
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.
- žravá ryba sa vyznačuje tým, že s každým kŕmením sa zväčší minimálne o polovicu svojej hmotnosti a maximálne zdvojnásobí svoju hmotnosť. Rovnako zväčší svoju dĺžku minimálne o polovicu svojej dĺžky a maximálne jednonásobok svojej dĺžky. Navyše, žravá ryba pri svojom kŕmení zožerie polovicu obyvateľov akvária.
- urýchľovač rastu pridaný do akvária spôsobí to, že experiment vždy spôsobí nárast počtu populácie.
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:
- gombík pre načítavanie po stlačení načíta sadu rybičiek zo súboru (načítavanie už má byť hotové). Pre každú rybičku vytvorí v paneli jeden gombík
JButton
na náhodnej pozícii. Dajte pozor na to, aby boli gombíky viditeľné. Panel má totiž rozmery 625 x 400 pixelov. - gombík pre krok spustí jeden krok experimentu. Upravte následne počty gombíkov: ak pribudli rybičky, pridajte gombíky. Ak rybičky ubudli, príslušné gombíky odoberte.
- po kliknutí na gombík zodpovedajúci rybičke zobrazte stručné informácie o nej (meno, rodičia, výška váha). Použite na to dialógové okno správy analogickým spôsobom k:
// 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