předchozí - obsah části -
obsah - další |
dotazy/odpovědi Vyhledávací a řadicí algoritmy + rozhraní
Úloha je obdobou té předchozí. Jde o to zmodifikovat třídy z předchozí úlohy, aby:
- třídy LinearSearcher a BinarySearcher byly umístěny v balíku cz.muni.fi.{vaslogin}.searching2
- a obě implementovaly rozhraní Searcher a ReadableFromKbd.
- obě rozhraní jsou zatím v balíku tomp.searching2, přesuňte je do cz.muni.fi.{vaslogin}.searching2
- (zdrojové kódy rozhraní najdete nav balíku searching2
- rozhraní ReadableFromKbd předepisuje jedinou metodu void readFromKbd(), která načte z klávesnice pole hodnot typu float a nastaví si je "do sebe" pomocí void set(float[] p). Hlídejte, aby se v případě BinarySearcher načítala skutečně vzestupně uspořádaná posloupnost hodnot - nebudeme už tedy spoléhat na uživatele, že to ví!.
- pro opakované načítání z klávesnice se inspirujte např. vDokud není zadáno
jako společného předka těchto tříd v hierarchii dědičnosti použijte třídy AbstractSearcher, která:
- bude (asi neúplně, protože je abstraktní) implementovat rozhraní Searcher
- pozor na to, že AbstractSearcher nemůže implementovat ReadableFromKbd, neboť čtení je třeba realizovat odlišně pro LinearSearcher a BinarySearcher (u druhého jmenovaného musíme hlídat uspořádanost načítané posloupnosti!)
Dále zmodifikujte třídy XXXMinMax z předchozí úlohy, aby:
- byly také umístěny v balíku cz.muni.fi.{vaslogin}.searching2
- obě implementovaly rozhraní SearcherMinMax a ReadableFromKbd
- povšimněte si, že rozhraní SearcherMinMax rozšiřuje Searcher.
Jak postupovat:
- Upravte třídy z předchozí úlohy, aby dělaly, co mají.
- Uložte je do patřičného balíku.
- Do stejného balíku uložte také třídu Demo z http://www.fi.muni.cz/~tomp/java/ucebnice/javasrc/tomp/searching2/Demo.java
- Třídy pro vyhledávání vyzkoušejte spuštěním vaší třídy Demo.
Poznámky k načítání do pole, doporučený postup:
- můžete to realizovat tak, že se nejprve uživatele zeptáte, kolik chce zadávat hodnot, poté
- vytvoříte pomocí new float[x] nové pole s místem na x prvků
- do vytvořeného pole načtete prvky (s hlídáním jejich správnosti)
- načtené pole nastavíte do objektu vyhledávače pomocí set(pole).
Druhá úloha bude spočívat v realizaci třídy SelectSorter umístěné v balíku cz.muni.fi.{vaslogin}.sorting2.
Třída bude rozšířením třídy LinearSearcherMinMax, bude dále implementovat rozhraní Sorter. Řazení bude provádět metodou opakovaného výběru minima (a prohozením minima na první místo právě řazeného úseku).
Poznámky:
- rozhraní Sorter je zatím v tomp.sorting2, přesunete si je jako obvykle do cz.muni.fi.{vaslogin}.sorting2
- zdrojový kód rozhraní Sorter naleznete jako obvykle vBalík tomp.sorting2
- z praktických důvodů je vhodné nadeklarovat ve třídě SelectSorter pomocnou metodu void swap(int i, int j), která prohodí v poli hodnoty na indexech i, j. Kontrolní otázka: Jaký přístupový modifikátor by tato metoda měla mít?
Na závěr reimplementujte do balíku cz.muni.fi.{vaslogin}.sorting2 také třídy BubbleSorter a QuickSorter tak, aby obě také implementovaly rozhraní Sorter. Při reimplementaci můžete s výhodou využít společného abstraktního předka - třídu AbstractSorter, která bude částečně implementovat rozhraní Sorter - bude implementovat ty metody, jež ve třídách BubbleSorter, QuickSorter a SelectSorter vycházejí naprosto stejné.
K reimplementovaným třídám sami vytvořte vhodné demo, které ukáže, že jsou funkční.
Poznámky:
- situace je obdobná jako u vyhledávání s abstraktním předkem.
Obecné informace
pozn: Pokud cvičící zadání modifikuje, je to OK. Tohle je vzorové minimální zadání.
za tyto úlohy dohromady získáte max. 4 body.
předchozí - obsah části -
obsah - další |
dotazy/odpovědi
Slidy předmětu byly navštíveny
krát.