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