Největší číslo
3. NejvetsiZe3Cisel
3.2. C# kód
Následující zdrojový kód hlavní statické metody v C# pro konzolovou aplikaci je transformací algoritmu NejvetsiZe3Cisel - viz Kód 1. V těle hlavní metody je po deklaraci a výzvě k zadání prvního celého čísla proveden test konverze zadaných číslic uživatelem a následný převod na celé číslo uložené do první proměnné a, která je zároveň parametrem jednotlivých volaných metod. Pokud nastala chyba při konverzi, je vypsána chybová hláška a hlavní metoda je ukončena pomocí příkazu return. Po provedení testu konverze u všech tří načtených čísel je v hlavní metodě provedeno volání jednotlivých podprogramů pro porovnání zadaných celých čísel. Výsledky porovnání jsou vypsány uvnitř jednotlivých volaných metod. Jednotlivé sekce porovnání zadaných čísel jsou od sebe odděleny výpisy, abychom věděli, která část zdrojového kódu byla pro porovnání použita.
static void Main(string[] args) { /* Deklarace: 'a' ... první zadané celé číslo; 'b' ... druhé zadané celé číslo * 'c' ... třetí zadané celé číslo */ int a, b, c; // Výzva k zadání prvního celého čísla Console.Write("Zadejte a: "); /* Načtení prvního celého čísla a test, zda proběhla konverze celého * čísla (návrat metody konverze je boolean) */ bool konverze = int.TryParse(Console.ReadLine(), out a); // Pokud neproběhla konverze if (konverze == false) { // Výpis chyby při konverzi Console.WriteLine("Chyba při konverzi na celé číslo"); // Čekání na stisk klávesy Console.ReadKey(); // Ukončení programu return; } // Výzva k zadání druhého celého čísla Console.Write("Zadejte b: "); // Test, zda neproběhla konverze celého čísla (návrat metody konverze je boolean) if (int.TryParse(Console.ReadLine(), out b) == false) { // Výpis chyby při konverzi Console.WriteLine("Chyba při konverzi na celé číslo"); // Čekání na stisk klávesy Console.ReadKey(); // Ukončení programu return; } // Výzva k zadání třetího celého čísla Console.Write("Zadejte c: "); // Test, zda neproběhla konverze celého čísla (návrat metody konverze je boolean) if (int.TryParse(Console.ReadLine(), out c) == false) { // Výpis chyby při konverzi Console.WriteLine("Chyba při konverzi na celé číslo"); // Čekání na stisk klávesy Console.ReadKey(); // Ukončení programu return; } // Výpis textu pro oddělení porovnání provedeného pomocí zavolání metody bez návratu 'VetsiRovnoVerze1' Console.WriteLine("Porovnání tří čísel pomocí metody 'VetsiRovnoVerze1':"); /* Volání metody 'VetsiRovnoVerze1' - výpis názvu proměnné obsahující maximum a hodnotu maxima * je proveden uvnitř metody - vnořené rozhodování */ VetsiRovnoVerze1(a, b, c); // Výpis textu pro oddělení porovnání provedeného pomocí zavolání metody 'VetsiRovnoVerze2' Console.WriteLine("Porovnání tří čísel pomocí metody 'VetsiRovnoVerze2':"); /* Volání metody 'VetsiRovnoVerze2' bez návratu - výpis názvu proměnné obsahující maximum a hodnotu * maxima je proveden uvnitř metody - princip kaskádování rozhodování */ VetsiRovnoVerze2(a, b, c); // Výpis textu pro oddělení porovnání provedeného pomocí zavolání metody 'VetsiRovnoVerze3' Console.WriteLine("Porovnání tří čísel pomocí metody 'VetsiRovnoVerze3':"); /* Volání metody 'VetsiRovnoVerze3' bez návratu (porovnání s maximem obdrženého z dvojitého * volání metody 'VetsiRovno') - výpis maxima a zadaných hodnot je proveden uvnitř metody */ VetsiRovnoVerze3(a, b, c); // Výpis textu pro oddělení porovnání provedeného pomocí zavolání metody 'VetsiRovnoVerze4' Console.WriteLine("Porovnání tří čísel pomocí metody 'VetsiRovnoVerze4':"); /* Volání metody 'VetsiRovnoVerze4' bez návratu (využití volání metody 'VetsiRovno') - výpis * maxima a zadaných hodnot je proveden uvnitř metody */ VetsiRovnoVerze4(a, b, c); // Výpis textu pro oddělení porovnání provedeného pomocí zavolání metody 'VetsiVerze5' Console.WriteLine("Porovnání tří čísel pomocí metody 'VetsiRovnoVerze5':"); /* Volání metody 'VetsiRovnoVerze5' bez návratu (využití dvojitého volání metody 'VetsiRovno') - * výpis maxima a zadaných hodnot je proveden uvnitř metody */ VetsiRovnoVerze5(a, b, c); // Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); }
Kód 1: Program NejvetsiZe3Cisel - deklarace hlavní statické metody Main
První volanou metodou bez návratu je metoda VetsiRovnoVerze1. Tato metoda (jako všechny ostatní metody) přijímá tři celočíselné parametry a využívá vnořeného rozhodování pro porovnání jednotlivých hodnot mezi sebou. Toto rozhodování odpovídá tabulce různých variant probírané v předchozí kapitole. V jednotlivých výpisech (9 variant) je uveden identifikátor/y nalezeného maxima a hodnota tohoto maxima - viz Kód 2.
/* Metoda bez návratu - výpis názvu parametru obsahující maximum a hodnota * maxima - vnořené rozhodování */ static void VetsiRovnoVerze1(int a, int b, int c) { // Porovnání prvního a druhé předaného čísla if (a > b) // Vnořené rozhodování if (a > c) // Výpis názvu maxima a hodnoty maxima Console.WriteLine("Největší je a = " + a); else if (a == c) Console.WriteLine("Největší je a = c = " + a); else Console.WriteLine("Největší je c = " + c); else if (a == b) if (a > c) Console.WriteLine("Největší je a = b = " + a); else if (a == c) Console.WriteLine("Největší je a = b = c = " + a); else Console.WriteLine("Největší je c = " + c); else if (b > c) Console.WriteLine("Největší je b = " + b); else if (b == c) Console.WriteLine("Největší je b = c = " + b); else Console.WriteLine("Největší je c = " + c); }
Kód 2: Deklarace statické metody bez návratu s názvem VetsiRovnoVerze1
Druhou deklarovanou metodou bez návratu je VetsiRovnoVerze2. V této metodě je využit princip kaskádování jednotlivých podmínek. Každá z devíti podmínek se skládá z jednotlivých částí, které jsou spojeny logických operátorem a zároveň (v C# se operátor značí &&) - viz Kód 3.
/* Metoda bez návratu - výpis názvu parametru obsahující maximum a hodnoty maxima - * kaskádování (pomocí spojování podmínek) */ static void VetsiRovnoVerze2(int a, int b, int c) { // Spojení dvou podmínek pomocí 'a zároveň' if (a > b && a > c) // Výpis názvu maxima a hodnoty maxima Console.WriteLine("Největší je a = " + a); else if (a > b && a == c) Console.WriteLine("Největší je a = c = " + a); else if (a > b && a < c) Console.WriteLine("Největší je c = " + c); else if (a == b && a > c) Console.WriteLine("Největší je a = b = " + a); else if (a == b && a == c) Console.WriteLine("Největší je a = b = c = " + a); else if (a == b && a < c) Console.WriteLine("Největší je c = " + c); else if (a < b && b > c) Console.WriteLine("Největší je b = " + b); else if (a < b && b == c) Console.WriteLine("Největší je b = c = " + b); else if (a < b && b < c) Console.WriteLine("Největší je c = " + c); else Console.WriteLine("Někde je chyba!"); }
Kód 3: Deklarace statické metody bez návratu s názvem VetsiRovnoVerze2
Než se dostaneme k deklaraci další verze metody bez návratu, musíme se nejprve nadeklarovat metodu, která bude v rámci této metody volána. Tato jednoduchá metoda s celočíselným návratem VetsiRovno přijímá dva celočíselné parametry a ve svém těle porovnává jejich hodnoty - viz Kód 4. Návratem metody je větší z těchto hodnot (oproti vývojovému diagramu jsme vypustili zbytečnou lokální proměnnou z, která měla sloužit pouze pro uložení větší hodnoty a měla být přiřazena jako návrat funkce).
/* Metoda s celočíselným návratem většího čísla ze dvou přijímaných čísel * Parametry: 'x' ... první předané celé číslo; 'y' ... druhé předané celé číslo */ static int VetsiRovno(int x, int y) { // Test, zda první předané číslo je větší, nebo rovno druhému if (x >= y) // První číslo je větší, nebo rovno druhému, výsledek metody je první nalezené číslo return x; else // Druhé číslo je větší než první, výsledek metody je druhé číslo return y; }
Kód 3: Deklarace statické metody s návratem s názvem VetsiRovno
Metoda s návratem s názvem VetsiRovnoVerze3 využívá dvojité volání metody VetsiRovno čímž získá největší ze všech tří předaných čísel - maximum (prvním voláním získává větší ze dvou čísel uložených v a a b). Tuto hodnotu většího čísla, použijeme jako vstup pro vnější volání metody VetsiRovno, čímž se provede porovnání se třetím zbývajícím číslem uloženým v parametru c - viz Kód 4.
// Metoda bez návratu - výpis názvu názvu parametru obsahující maximum a hodnoty maxima static void VetsiRovnoVerze3(int a, int b, int c) { /* Deklarace: 'max' ... hodnota největšího předaného čísla (maxima); * 's' ... text výsledného výpisu */ int max; string s = "Největší je "; // Získání hodnoty maxima max = VetsiRovno(VetsiRovno(a, b), c); // Test rovnosti prvního předaného čísla s maximem if (a == max) // První číslo je maximem s += ("a = "); // Test rovnosti druhého předaného čísla s maximem if (b == max) // Druhé číslo je maximem s += ("b = "); // Test rovnosti třetího předaného čísla s maximem if (c == max) // Třetí číslo je maximem s += ("c = "); // Výpis názvu maxima a hodnoty maxima Console.WriteLine(s + max); }
Kód 4: Deklarace statické metody bez návratu s názvem VetsiRovnoVerze3
Předposlední statickou metodou bez návratu je metoda VetsiRovnoVerze4. Metoda ve svém prvním příkazu if také využívá volání metody VetsiRovno s návratem, pomocí něhož získá větší číslo z prvních dvou předaných čísel této metodě. Toto číslo porovná se třetím číslem a vypíše výslednou hodnotu - viz Kód 5.
// Metoda bez návratu s výpisem maxima a zadaných hodnot - využití metody 'VetsiRovno' static void VetsiRovnoVerze4(int a, int b, int c) { /* Volání metody 'VetsiRovno' - návrat metody obsahuje vyšší (nebo stejné) číslo z prvních * dvou předaných čísel -> návrat metody (větší číslo) je porovnán se 3. předaným číslem */ if (VetsiRovno(a, b) >= c) // Výpis největší hodnoty Console.WriteLine("Největší je {0} z čisel {1}, {2}, {3}", VetsiRovno(a, b), a, b, c); // Největší je 3. předané číslo else // Výpis největší hodnoty, tj. 3. předaného čísla Console.WriteLine("Největší je {0} z čísel {1}, {2}, {3}", c, a, b, c); }
Kód 5: Deklarace statické metody bez návratu s názvem VetsiRovnoVerze4
Poslední volanou metodou je VetsiRovnoVerze5, která obsahuje pouze jeden příkaz výpisu, v němž je umístěno dvojité volání metody s návratem VetsiRovno. Tímto způsobem nám metoda přímo do výpisu navrátí hodnotu maxima ze všech tří čísel - viz Kód 6.
// Metoda bez návratu s výpisem maxima a zadaných hodnot - dvojité volání metody 'VetsiRovno' static void VetsiRovnoVerze5(int a, int b, int c) { /* Výpis největší hodnoty - využití dvojitého volání metody 'VetsiRovno' - první návrat metody * obsahuje vyšší číslo z prvních dvou předaných čísel -> porovnání návratu metody se třetím * předaným číslem -> získání maxima */ Console.WriteLine("Největší je {0} z čísel {1}, {2}, {3}", VetsiRovno(VetsiRovno(a, b), c), a, b, c); }
Kód 6: Deklarace statické metody bez návratu s názvem VetsiRovnoVerze5