3. NejvetsiZe3Cisel

3.3. Výsledný kód

Následující zdrojový kód je kompletací předešlých kódů programu NejvetsiZe3Cisel, který je umístěn v souboru Program.cs - viz Kód 1.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace NejvetsiZe3Cisel
{
    class Program
    {
        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();
        }
 
        /* 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);
        }
 
        /* 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!");
        }
 
        /* 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;
        }
 
        // 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);
        }
 
        // 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);
        }
 
        // 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 1: Program NejvetsiZe3Cisel - deklarace hlavní statické metody Main včetně deklarací dalších metod


Výstup programu

Na následujícím výstupu programu vidíme výpis největší hodnoty ze tří porovnaných hodnot - viz Výstup programu 1 - Kód 1. Jednotlivá porovnání jsou rozdělena do různých sekcí, abychom věděli, pomocí které metody s návratem byla získána největší hodnota a v prvních třech volaných metodách je také uveden název parametru, ve kterém je uloženo maximum. Po provedení výpisu konzolová aplikace čeká na stisk klávesy, aby po stisku klávesy byla následně ukončena. Na prvním výstupu v konzole vidíme, že největší číslo je třetí zadané číslo. 


Výstup programu 1 - Kód 1: Ukázka výpisu největší hodnoty v hlavní statické metodě programu NejvetsiZe3Cisel

Pokud byla zadána např. dvě stejná čísla, je pomocí prvních tří metod vypsána rovnost obou čísel (u čtvrté a páté je vypsán pouze seznam zadaných čísel) - viz Výstup programu 2 - Kód 1.


Výstup programu 2 - Kód 1: Ukázka výpisu dvou stejných hodnot v hlavní statické metodě programu NejvetsiZe3Cisel

Pokud uživatel zadal špatný číselný vstup (např. text "bflm") návrat metody TryParse nabývá hodnoty false a je spuštěn příkaz výpisu chybové hlášky. Abychom si mohli přečíst chybovou hlášku, je za příkaz výpisu v kódu umístěn příkaz pro načtení znaku. Po stisku klávesy následuje ukončení programu pomocí příkazu return - viz Výstup programu 3 - Kód 1.


Výstup programu 3 - Kód 1: Ukázka výpisu chyby při konverzi v hlavní statické metodě programu NejvetsiZe3Cisel