KalkulackaTypyVyjimek_Main
Requisitos de finalización
- Zadání: Zkuste v hlavní statické metodě Main v programu KalkulackaVicenasobneVetveni_Main implementovat pomocí příkazů try, catch ošetření různých typů výjimek. Aplikujte ošetření try na potřebný zdrojový kód. Dané výjimky otestujte. Jedná se o následující typy výjimek:
- DivideByZeroException - dělení nulou
- FormatException - chyba při konverzi
- Exception - obecná výjimka
- Řešení:
- Hlavní program - Main:
static void Main(string[] args) { /*Deklarace proměnných: 'kod' ... celočíselný kód aritmetické operace, * 'a' ... první zadané číslo, 'b' ... druhé zadané číslo; * 'c' ... výsledek aritmetické operace*/ int kod; double a, b, c; //Výpis výzvy k zadání operace Console.Write("Zadejte kód operace (1 ... sčítání, 2 ... odečítání, " + "3 ... násobení, 4 ... dělení): "); //Potenciálně nebezpečný kód try { //Načtení kódu operace kod = int.Parse(Console.ReadLine()); //Výpis výzvy k zadání prvního čísla Console.Write("Zadejte A: "); //Načtení prvního zadaného čísla a = double.Parse(Console.ReadLine()); //Výpis výzvy k zadání druhého čísla Console.Write("Zadejte B: "); //Načtení druhého zadaného čísla b = double.Parse(Console.ReadLine()); //Přepnutí do příslušné sekce podle hodnoty 'kod' switch (kod) { //Operace sečtení case 1: //Sečtení dvou zadaných čísel c = a + b; //Ukonnčení sekce pro kod == 1 break; //Operace odečtení case 2: //Odečtení dvou zadaných čísel c = a - b; break; //Operace násobení case 3: //Násobení dvou zadaných čísel c = a * b; break; //Operace dělení case 4: //Podíl dvou zadaných čísel c = a / b; break; //Zadání špatného číselného kódu operace default: //Výpis chyby v zadávání kódu Console.WriteLine("Zadali jste špatný číselný kód!"); //Zamezení provádění dalších příkazů - opuštění metody return; } //Výpis textu s hodnotou výsledku Console.WriteLine("Výsledek C: {0}", c); } //Handler pro dělení nulou bez parametru handleru catch (DivideByZeroException) { //Výpis chyby Console.WriteLine("B nesmí být 0"); //Zamezení provádění dalších příkazů - opuštění metody return; } //Handler chyby při konverzi s parametrem handleru catch (FormatException exFormat) { //Výpis parametru handleru Console.WriteLine("Chyba při konverzi: {0}", exFormat.ToString()); } //Obecná výjimka typu Exception (stačilo by pouze catch) – používat obezřetně catch (Exception ex) { Console.WriteLine("Nastala jiná výjimka: {0}", ex.ToString()); } //Čekání na stisk klávesy -> Ukončení programu Console.ReadKey(); }
- Výstup programu 1: Ukázka výsledku podílu
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: 5
Zadejte B: 2
Výsledek C: 2,5
- Výstup programu 2: Ukázka výsledku při chybné konverzi včetně popisu chyby
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: bflm
Chyba při konverzi: System.FormatException: Vstupní řetězec nemá správný formát.
v System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
v System.Double.Parse(String s)
v KalkulackaTypyVyjimek.Program.Main(String[] args) v C:\Users\...\Programy\Kalkulacka_nove\KalkulackaTypyVyjimek\KalkulackaTypyVyjimek\KalkulackaTypyVyjimek\Program.cs:řádek 29
- Výstup programu 3: Ukázka výsledku nekonečno
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: 5
Zadejte B: 0
Výsledek C: ?
- Výstup programu 4: Ukázka výsledku Not a Number
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: 0
Zadejte B: 0
Výsledek C: NaN
- Výstup programu 5: Výjimka typu DivideByZeroException
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 4
Zadejte A: 5
Zadejte B: 0
B nesmí být 0
Última modificación: domingo, 2 de febrero de 2020, 17:02