====== HW01 - Kalkulačka ======
Pro tento úkol využijte {{ :courses:b0b36pjv:hw:hw01_template.zip |následující template}}.
Odevzdat můžete celý projekt či pouze třídy z balíčku ''cz.cvut.fel.pjv.impl''. Třídy z jiných balíčků **neupravujte**! Nepřidávejte žádné nové soubory / třídy!
Vytvořte jednoduchou kalkulačku. Program se postupně uživatele dotáže na operaci tak, že 1 odpovídá součtu, 2 rozdílu, 3 součinu a 4 podílu. Po volbě operace se program dotáže na dva operandy, které korektně označí podle zvolené operace - tj. pro součet se dotáže na sčítance, pro rozdíl na menšence a menšitele, pro součin na činitele a pro podíl na dělence a dělitele. Posledním vstupem programu je počet desetinných míst, která se použijí na tisk výsledku (nikoliv na samotný výpočet).
U kalkulaček je poměrně důležitá přesnost výpočtů - zvažte tedy, jaké datové typy budete používat k reprezentaci dat. V případě nevhodného typu může dojít k drobným odchylkám oproti referenčnímu řešení.
Vystačit byste si měli s primitivními datovými typy - pro zájemce však existují i třídy [[https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/math/BigDecimal.html|BigDecimal]] a [[https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/math/BigInteger.html|BigInteger]] s "neomezenou" přesností.
Volba operace očekává celé číslo (1, 2, 3, 4). Operandy jsou reálná čísla. Počet desetinných míst je celé kladnénezáporné číslo.
Program musí ošetřit případné dělení nulou, či volbu nepodporované operace. **Veškerý výstup vypisujte do stdout, a neukončujte program manuálně (např. pomocí ''System.exit()'')!**
Formát výstupu je: "operand1 operátor operand2 = výsledek"
Tak, že operandy i výsledek jsou formátovány na zadaný počet desetinných míst, a výstup je **ukončen znakem nového řádku**.
Nezapomeňte, že po ukončení vašeho programu je třeba načítání vstupu řádně ukončit metodou ''close()'', jinak Vaše řešení nemusí v pořádku projít!
Na OS Windows s českou lokalizací je pro třídu ''Scanner'' u desetinných čísel defaultně nastavená desetinná čárka, nicméně v testovacích sadách najdete čísla s desetinnou tečkou. Máte dvě možnosti, buď si datové sady upravíte na desetinnou tečku anebo si nastavíte Scanner locale na US, viz. ukázka níže.
scanner.useLocale(Locale.US);
Pozn.: V brute se úkol vyhodnocuje v kontejneru na OS Linux a locale řešit nemusíte. Ten bude jednotný jak pro Vaše, tak referenční řešení. Jen nemusí sedět výpis Brute a výpis na Vašem počítači.
Program implementujte jako metodu pojmenovanou ''homework''() a zajistěte, že bude tato metoda volána po spuštění programu.
Dodržte prosím doporučené textové výpisy dle ukázek níže. Program bude automaticky zkontrolován v odevzdávacím systému.
Za textem výběru operace není mezera, naopak za textem zadávání operandů mezera je. Např.:
Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):
Zadej scitanec:_
Zadej scitanec:_
Zadej pocet desetinnych mist:_
Zde znak podtržítka "_" reprezentuje mezeru.
==== Příklad komunikace programu ====
Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):
10
Chybna volba!
Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):
1
Zadej scitanec:
10.1234
Zadej scitanec:
42
Zadej pocet desetinnych mist:
2
10.12 + 42.00 = 52.12
Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):
2
Zadej mensenec:
1.23456
Zadej mensitel:
12.345678
Zadej pocet desetinnych mist:
3
1.235 - 12.346 = -11.111
Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):
3
Zadej cinitel:
12.345678
Zadej cinitel:
1.23456
Zadej pocet desetinnych mist:
3
12.346 * 1.235 = 15.241
Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):
4
Zadej delenec:
10
Zadej delitel:
0
Pokus o deleni nulou!
Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):
4
Zadej delenec:
10
Zadej delitel:
2
Zadej pocet desetinnych mist:
5
10.00000 / 2.00000 = 5.00000
Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):
1
Zadej scitanec:
10.234
Zadej scitanec:
1
Zadej pocet desetinnych mist:
0
10 + 1 = 11
Vyber operaci (1-soucet, 2-rozdil, 3-soucin, 4-podil):
1
Zadej scitanec:
10
Zadej scitanec:
20
Zadej pocet desetinnych mist:
-1
Chyba - musi byt zadane kladne cislo!