4it101»Zadani Kalkulacka

Zadani Kalkulacka

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ávesametodakomentář
0 až 9cislicehodnota klávesy se předává jako číselný parametr
+plus 
-minus 
*nasobeni 
/deleniceločíselné dělení či desetinné dělení v závislosti na typu kalkulačky
Modmodulozbytek po celočíselném dělení
Cvymazvýmaz kalkulačky (zapomenou se i případné navkládané operace)
CEvymazCislavýmaz posledního vkládaného čísla, případné vložené operace zůstanou zachovány
=rovnaSe 
MCmClearvýmaz hodnoty v paměti (nastavení na hodnotu 0)
MRmRestorezískání hodnoty z paměti
MSmSaveuložení aktuálního čísla do paměti
M+mPluspřičtení aktuálního čísla k hodnotě v paměti
+/-znamenkozměna znaménka
pipihodnota pi
1/xprevracenaHodnotavýpočet převráceného hodnoty,
,carkadesetinná čárka,
x^2mocninadruhá mocnina
x^3tretiMocninatřetí mocnina
?getAuthor, getVerzepo 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í:

  1. 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ě,
  2. 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áveshodnota na displeji
2 525
2 5 C0
2 5 + 1 2 =37
2 5 + 12 = 33
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:

NedostatekMožná bodová ztráta
Zpoždění při odevzdání úlohy do odevzdávárny3 body za každý započatý týden zpoždění
Nedodržení konvencí1-10 bodů
Chybějící popis funkčnosti6 bodů
Popis funkčnosti nedoplněný o nové operace3 body
Chybějící nebo neúplné testy1-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čnosti1-8 bodů
Neschopnost vysvětlit jakoukoli část kódu doplněnou studentem do třídy Kalkulator1-14 bodů