KalkulackaVyvolaniVyjimky_Main
Requisitos de finalización
- Zadání: Zkuste navrhnout hlavní statickou metodu programu KalkulackaVyvolaniVyjimky, která řeší základní aritmetické operace podle zadaného číselného kódu (1 … sčítání, 2 … odečítání, 3 … násobení a 4 … dělení) u dvou uživatelem zadaných čísel a a b. Rozhodování o provedení aritmetické operaci bude provedeno pomocí vícenásobného větvení proměnné kod. Výsledek aritmetické operace vypište v hlavním programu. Vytvořte následující metody:
KodOperace – metoda s návratem, která definuje zvolený validní číselný kód operace
ValidaceKoduOperace - metoda pro validaci formálního parametru kodOperace. Pokud není kód validní, je vyvolána výjimka typu ArgumentOutOfRangeException
Operand – metoda se formálním parametrem text datového typu string a výstupním parametrem cislo, který představuje reálné číslo typu double operandu (čísla) aritmetické operace. Pokud zadané číslo nelze konvertovat pomocí příkazu TryParse bude vyvolána výjimka typu FormatException
AritmetickaOperace – metoda bez návratu, která provede zvolenou příslušnou operaci na základě zvoleného kódu aritmetické operace pomocí vícenásobného větvení a vypíše výsledek aritmetické operace
- Řešení:
- Hlavní program - Main:
static void Main(string[] args) { //Deklarace lokálních proměnných int kod; double a, b; //Potenciálně nebezpečný kód, který může způsobit výjimku try { //Načtení validního kódu operace kod = KodOperace(); //Načtení validního reálného čísla prvního operandu Operand("Zadejte A: ", out a); //Načtení validního reálného čísla druhého operandu Operand("Zadejte B: ", out b); //Volání metody provádějící požadovanou aritmetickou operaci AritmetickaOperace(kod, a, b); //Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); } //Handler chyby při konverzi s parametrem handleru catch (FormatException exFormat) { //Výpis parametru handleru Console.WriteLine("Chyba při konverzi: {0}", exFormat.ToString()); } //Handler pro kontrolu rozsahu platných hodnot argumentu s parametrem handleru catch (ArgumentOutOfRangeException exArgument) { //Výpis parametru handleru Console.WriteLine("Kód operace: {0}", exArgument.ToString()); } //Obecná výjimka typu Exception (nemusíme specifikovat typ výjimky) catch (Exception ex) { Console.WriteLine("Nastala jiná výjimka: {0}", ex.ToString()); } }
- Podprogramy:
- KodOperace:
//Metoda s návratem načteného validního kódu operace od uživatele static int KodOperace() { //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í): "); //Načtení kódu operace včetně jeho validace return ValidaceKoduOperace(int.Parse(Console.ReadLine())); }
- ValidaceKoduOperace:
//Metoda pro validaci načteného kódu operace od uživatele static int ValidaceKoduOperace(int kodOperace) { //Pokud je kód operace větší nebo rovno 1 a zároveň menší nebo rovno 4 if ((kodOperace >= 1) && (kodOperace <= 4)) return kodOperace; else //Vyvolání výjimky typu argument je mimo rozsah hodnot throw new ArgumentOutOfRangeException("Neplaný číselný kód operace"); }
- Operand:
//Metoda pro načtení validního operandu static void Operand(string text, out double cislo) { string cisloText; //Výpis výzvy se vstupním textem Console.Write(text); //Načtení prvního zadaného čísla cisloText = Console.ReadLine(); /*Test zda dojde ke konverzi, pokud ano je výstupní parametr cislo, pokud ne, je vyvolána výjimka*/ if (double.TryParse(cisloText, out cislo) == false) //Vyvolání výjimky throw new FormatException("Špatně zadané reálné číslo"); }
- AritmetickaOperace:
/*Metoda provádějící aritmetické operace na vstupních operandech podle čísla kódu*/ static void AritmetickaOperace(int kod, double a, double b) { //Deklarace lokální proměnné double c; //Potenciálně nebezpečný kód, který může způsobit výjimku switch (kod) { //Operace sečtení case 1: //Sečtení dvou zadaných čísel c = a + b; //Ukonč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í default: //Podíl dvou zadaných čísel c = a / b; break; } //Výpis textu s hodnotou výsledku Console.WriteLine("Výsledek C: {0}", c); }
- 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ě parametru handleru
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): bflm
Chyba při konverzi: System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(ReadOnlySpan`1 str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(ReadOnlySpan`1 s, NumberStyles style, NumberFormatInfo info)
at System.Int32.Parse(String s)
at KalkulackaVyvolaniVyjimky.Program.KodOperace() in C:\Users\...\Programy\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\Program.cs:line 52
at KalkulackaVyvolaniVyjimky.Program.Main(String[] args) in C:\Users\fox\...\Programy\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\Program.cs:line 16
- Výstup programu 3: Ukázka výsledku při porušení rozsahu platných hodnot argumentu
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 5
Kód operace: System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: Neplaný číselný kód operace
at KalkulackaVyvolaniVyjimky.Program.ValidaceKoduOperace(Int32 kodOperace) in C:\Users\fox\OneDrive\TI\TI_Nove\Prednasky\Podklady\Programy\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\Program.cs:line 64
at KalkulackaVyvolaniVyjimky.Program.KodOperace() in C:\Users\fox\...\Programy\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\Program.cs:line 52
at KalkulackaVyvolaniVyjimky.Program.Main(String[] args) in C:\Users\fox\...\Podklady\Programy\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\Program.cs:line 16
- Výstup programu 4: Ukázka výsledku při načtení špatné hodnoty operandu
Zadejte kód operace (1 ... sčítání, 2 ... odečítání, 3 ... násobení, 4 ... dělení): 3
Zadejte A: bflm
Chyba při konverzi: System.FormatException: Špatně zadané reálné číslo
at KalkulackaVyvolaniVyjimky.Program.Operand(String text, Double& cislo) in C:\Users\...\Podklady\Programy\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\Program.cs:line 79
at KalkulackaVyvolaniVyjimky.Program.Main(String[] args) in C:\Users\...\Podklady\Programy\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\KalkulackaVyvolaniVyjimky\Program.cs:line 18
Última modificación: domingo, 2 de febrero de 2020, 17:02