4IT101 - zadání semestrální úlohy Kalkulačka
Vaším úkolem je dokončit zadanou kalkulačku. Existuje několik variant zadání, každý student získá svoji variantu výběrem tématu v ISISu nebo přidělenou od cvičícího. Všechna zadání navazují na úlohu řešenou na třetím a čtvrtém cvičení kursu 4IT101 - na cvičení se řeší jednoduchá celočíselná kalkulačka se čtyřmi funkčními klávesami (plus, minus, rovná se a výmaz), zadání je rozšířeno o další funkční klávesy případně o desetinná čísla. Při řešení kalkulačky není potřeba řešit přetečení číselných rozsahů. Pokud chcete získat prémiové body můžete se rozhodnout pro složitější variantu, k dispozici jsou kalkulačky pracující s římskými číslicemi, různými číselnými soustavami a komplexními čísly. V případě, že kalkulačka pracuje s desetinnými čísly, dochází k nepřesnostem při jejich ukládání. Tento problém nemusíte řešit a testy pro tento typ kalkulačky napište tak, aby nepřesnosti připouštěly.
1. Popis zadání
Každá kalkulačka je rozdělena do tří částí - třídy Kalkulacka a GrafikaKalkulacky a rozhraní Kalkulator. V každém zadání je navíc vytvořena i jednoduchá implementace rozhraní Kalkulatorpojmenovaná MaketaKalkulatoru, která slouží k otestování funkčnosti grafického rozhraní kalkulačky. Kalkulačka se spouští vytvořením instance třídy Kalkulacka a zavoláním metody show(). Instance třídy GrafikaKalkulacky obsluhuje grafické uživatelské rozhraní. Po stisknutí libovolné klávesy se volá příslušná metoda v instanci třídy implemetující rozhraní Kalkulator (např. po stisknutí klávesy "+" se zavolá metoda plus(), po stisknutí číslice se zavolá metoda cislice() s hodnotou stisknuté číslice jako parametr apod.). Poté instance GrafikaKalkulacky získá aktuální hodnotu k zobrazení zavoláním metody getHodnotaKZobrazení() ve třídě implementující Kalkulator. Je tedy definováno rozhraní Kalkulator a úkolem studentů je vytvořit implementaci tohoto rozhraní tzn. vytvořit novou třídu implementující rozhraní Kalkulator a ne upravovat implementaci třídy MaketaKalkulatoru. Studenti musí také vytvořit testovací třídu ke své implementaci rozhraní Kalkulator, jaké testy musi obsahovat viz bod "Co je třeba odevzdat".
Pro řešení úlohy postačuje znalost jednoduchého testování, základních datových typů (čísel), operací s nimi a příkazu if. Není potřebná znalost cyklů či dalších tříd Javy.
Přehled kláves a odpovídajících metod:
Každá varianta obsahuje pouze některé z níže uvedených kláves
klávesa | metoda | komentář |
0 až 9 | cislice | hodnota klávesy se předává jako číselný parametr |
+ | plus | |
- | minus | |
* | nasobeni | |
/ | deleni | celočíselné dělení či desetinné dělení v závislosti na typu kalkulačky |
Mod | modulo | zbytek po celočíselném dělení |
C | vymaz | výmaz kalkulačky (zapomenou se i případné navkládané operace) |
CE | vymazCisla | výmaz posledního vkládaného čísla, případné vložené operace zůstanou zachovány |
= | rovnaSe | |
MC | mClear | výmaz hodnoty v paměti (nastavení na hodnotu 0) |
MR | mRestore | získání hodnoty z paměti |
MS | mSave | uložení aktuálního čísla do paměti |
M+ | mPlus | přičtení aktuálního čísla k hodnotě v paměti |
+/- | znamenko | změna znaménka |
pi | pi | hodnota pi |
1/x | prevracenaHodnota | výpočet převráceného hodnoty, |
, | carka | desetinná čárka, |
x^2 | mocnina | druhá mocnina |
x^3 | tretiMocnina | třetí mocnina |
? | getAuthor, getVerze | po stisku této klávesy se na kalkulačce zobrazí autor a verze (návratové hodnoty metody getAuthor a getVerze ve třídě Kalkulator) |
Upozornění:
Zadání jsou napsána jako projekty v BlueJ s kódováním UTF-8, při vypracování se předpokládá, že studenti budou též používat toto vývojové prostředí. Pokud některý ze studentů preferuje jiné vývojové prostředí, musí se vypořádat se následujícími problémy:
- aplikace neobsahuje metodu main pro spuštění z příkazové řádky,
- existují tři způsoby oddělování řádků v textových souborech - způsob CRLF (DOS), LF (Unix) a CR (Mac). Nejsme schopni garantovat, že všechny zdrojové soubory půjdou bez problémů otevřít ve všech běžných textových editorech ve Vašem operačním systému. Editory napsané v Javě s různými konci řádků nemají problémy.
- v BlueJ je zakomponována podpora JUnit s možností nahrávání testů, vytvoření testů v jiném vývojovém nástroji je složitější, je nutné je celé naprogramovat.
2. Co je třeba odevzdat
Odevzdáním úlohy se rozumí:
- Uložení úlohy v archivu zip do odevzdávárny v ISIS. Archiv bude obsahovat
- soubor Readme.txt s následujícím obsahem:
- popis programu (zadání úlohy),
- jméno autora,
- označení verze,
- případné další komentáře k vytvořenému programu,
- soubor s popisem funkčnosti - viz dále
- testovací třída s testy vycházejícími s tabulky s popisem funkčnosti - viz dále
- soubory se zdrojovým kódem (soubory .java), program musí splňovat konvence pro psaní programů v Javě,
- Osobní předvedení funkčnosti programu cvičícímu v konzultačních hodinách nebo za tímto účelem vypsaných termínech.
Popis funkčnosti:
Kalkulačka může různým způsobem pracovat s různými kombinacemi operací. Vzhledem k tomu, že neznáte formální jazyky, popište do samostatného souboru chování Vaší kalkulačky na níže uvedených příkladech kombinací kláves (ke každé kombinaci doplníte výsledek dle Vaší kalkulačky). Prvních pět kombinací má předepsané výsledky (tj. Vaše kalkulačka musí dojít k těmto výsledkům). Ke každému dalšímu matematickému operátoru, který je na klávesnici vaší kalkulačky doplňte do tabulky tři řádky s popisem chování při použití této operace. Na základě každého řádku výsledné tabulky napište jeden JUnit test.
kombinace kláves | hodnota na displeji |
2 5 | 25 |
2 5 C | 0 |
2 5 + 1 2 = | 37 |
2 5 + 12 = 3 | 3 |
2 5 + 2 + 3 = | 30 |
25 + 12 + | |
2 5 + + | |
2 5 + = | |
2 5 + + = | |
2 5 + 1 2 - = | |
2 5 - 1 2 = | |
2 5 - 1 2 - = | |
2 5 = = | |
2 5 - - | |
2 5 + 1 2 = = | |
2 5 + + 1 2 = | |
2 5 - - 1 2 = | |
2 5 - 2 + 3 = | |
3. Body za první semestrální úlohu
Za semestrální úlohu Kalkulačka mohou studenti získat 14 bodů. V případě správného řešení složitější varianty cvičící přidělí i prémiové body. Při řešení nesmí student změnit odpovědnosti tříd GrafikaKalkulacky a implementace rozhraní Kalkulator (GrafikaKalkulacky odpovídá za komunikaci s uživatelem, třída implementující rozhraní Kalkulator odpovídá za vlastní výpočty).
Body se odečítají za následující nedostatky:
Nedostatek | Možná bodová ztráta |
Zpoždění při odevzdání úlohy do odevzdávárny | 3 body za každý započatý týden zpoždění |
Nedodržení konvencí | 1-10 bodů |
Chybějící popis funkčnosti | 6 bodů |
Popis funkčnosti nedoplněný o nové operace | 3 body |
Chybějící nebo neúplné testy | 1-10 bodů |
Chybějící základní funkcionalita (nefunkčnost některé klávesy) | 3 body za každou nefunkční klávesu |
Drobné chyby ve funkčnosti | 1-8 bodů |
Neschopnost vysvětlit jakoukoli část kódu doplněnou studentem do třídy Kalkulator | 1-14 bodů |