====== 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!