2. NejvetsiZe2CiselVcetneRovnosti

2.2. C# kód

Následující zdrojový kód hlavní statické metody v C# pro konzolovou aplikaci je transformací algoritmu NejvetsiZe2CiselVcetneRovnosti - viz Kód 1.  V těle hlavní metody je po deklaraci a výzvě k zadání prvního celého čísla demonstrován 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. Informace o provedení bezchybné konverze pomocí metody TryParse (implementované ve třídě týkající se celých čísel a nejen nich) je uložena do booleanovské logické proměnné konverze (datový typ bool). 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 obou čísel je v hlavní metodě provedeno porovnání včetně testování rovnosti obou zadaných celých čísel. Výsledek tohoto porovnání je následně vypsán.

Ve zdrojovém kódu hlavní metody je použito volání metody VetsiRovno. Této metodě s celočíselným návratem většího ze dvou přijímaných celých čísel jsou předány v hlavní metodě čtyři skutečné parametry. První dva parametry slouží pro předání hodnot uložených v lokální proměnných hlavní metody a další dva slouží pro určení identifikátoru (názvu) proměnné, abychom byli schopni identifikovat, kde je uložena větší hodnota (pozor záleží na pořadí předávaných parametrů). Výpisy největší hodnoty jsou realizovány pomocí indexování jednotlivých proměnných v příkazu výpisu (na rozdíl od předchozího příkladu, kde byl použit operátor + pro spojování textových řetězců a hodnot). 

Další volanou metodou je přetížená metoda (metoda se stejným názvem, ale jiným počtem parametrů) s výstupními parametry, které jsou inicializovány uvnitř metody. Pro tento účel byly v hlavní metodě deklarovány další lokální proměnné: celočíselná proměnná max - slouží pro uložení hodnoty většího čísla a druhá nazevMax, která slouží pro uložení názvu proměnné, ve které je uložena větší hodnota.

Poslední volanou metodou v hlavní metodě je metoda VetsiRovno2Vystupy. Tato metoda navrací dva výstupy, které jsou v hlavní metodě uloženy do proměnných nazevMax a Max. 

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;
       * 'max' ... hodnota většího čísla  */
      int a, b, max;
      // Deklarace: 'text' ... textový řetězec pro uložení prvního výstupu metody se 2 výstupy  
      string nazevMax;
 
      // 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");
          // 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");
          // Ukončení programu
          return;
      }
 
      // Výpis textu pro oddělení porovnání v hlavním programu
      Console.WriteLine("Porovnání dvou čísel v hlavním programu:");
      // Test, zda první číslo je větší než druhé
      if (a > b)
      {
          // První číslo je větší než druhé
          Console.WriteLine("Největší je a = {0}", a);
      }
      else
      {
          // Test, zda zadaná čísla jsou si rovny
          if (a == b)
          {
              // Rovnost obou zadaných čísel
              Console.WriteLine("Největší je a = b = {0}", b);
          }
          else
          {
              /* První zadané číslo 'a' není rovné druhému číslu 'b' 
               * a zároveň druhé číslo 'b' je větší než první 'a' */
              Console.WriteLine("Největší je b = {0}", b);
          }
      }
 
      // Výpis textu pro oddělení porovnání provedeného pomocí zavolání metody s návratem
      Console.WriteLine("Porovnání dvou čísel pomocí metody s návratem:");
 
      // Vypsání textu spolu s návratem funkce (výsledek porovnání)
      Console.WriteLine("Největší je {0}", VetsiRovno(a, b, "a", "b"));
 
      // Výpis textu pro oddělení porovnání provedeného pomocí zavolání metody se dvěma návraty
      Console.WriteLine("Porovnání dvou čísel pomocí metody s dvěma návraty:");
 
      // Volání metody se 2 návraty a přiřazení do proměnných
      (nazevMax, max) = VetsiRovno2Vystupy(a, b, "a", "b");
 
      // Vypsání textu spolu s návratem názvu proměnné a její hodnoty (výsledek porovnání)
      Console.WriteLine("Největší je {0}{1}", nazevMax, max);
 
      // Výpis textu pro oddělení porovnání provedeného pomocí zavolání metody s výstupními parametry
      Console.WriteLine("Porovnání dvou čísel pomocí metody s výstupními parametry:");
 
      // Volání metody se 2 návraty a přiřazení do proměnných
      VetsiRovno(a, b, "a", "b", out nazevMax, out max);
 
      // Vypsání textu spolu s návratem názvu proměnné a její hodnoty (výsledek porovnání)
      Console.WriteLine("Největší je {0}{1}", nazevMax, max);
 
      // Čekání na stisk klávesy -> ukončení programu
      Console.ReadKey();
  }

Kód 1: Program NejvetsiZe2CiselVcetneRovnosti - deklarace hlavní statické metody Main 

Metoda VetsiRovno navrací textovou lokální proměnnou identifikatorHodnotaVetsiho obsahující identifikátory proměnných, které byly načteny v hlavní metodě. Díky tomu jsme schopni identifikovat, ve kterém parametru (předaného názvu proměnné z hlavního programu) je uložena větší hodnota. Tento návratový textový řetězec také obsahuje hodnotu většího z obou předaných celých čísel. V těle příkazu pro rozhodování jsou v závislosti na rozhodovacích podmínkách výstupu přiřazeny jednotlivé identifikátory, včetně hodnoty většího čísla.  Pokud jsou si hodnoty rovny, jsou v textu uvedeny oba názvy parametrů.

// Metoda s celočíselným návratem
/* 'x' ... hodnota prvního celého čísla; 'y' ... hodnota druhého celého čísla;
 * 'identifikatorPrvniCislo' ... identifikátor prvního celého čísla uloženého 
 * do formálního parametru metody; 'identifikatorDruheCislo' ... identifikátor 
 * druhého celého čísla */
 
static string VetsiRovno(int x, int y, string identifikatorPrvniCislo, 
    string identifikatorDruheCislo)
{
    string identifikatorHodnotaVetsiho;
 
    // Test, zda první číslo je větší než druhé
    if (x > y)
    {
        // První číslo je větší než druhé číslo
        identifikatorHodnotaVetsiho = identifikatorPrvniCislo + " = " + x;
    }
    else
    {
        // Test, zda zadaná čísla jsou si rovny
        if (x == y)
        {
            // Rovnost obou zadaných čísel
            identifikatorHodnotaVetsiho = identifikatorPrvniCislo + " = " + identifikatorDruheCislo + " = " + y;
        }
        else
        {
            // První zadané číslo není rovné druhému číslu (a zároveň druhé číslo je větší než první)
            identifikatorHodnotaVetsiho = identifikatorDruheCislo + " = " + y;
        }
    }
 
    // Návrat názvu a hodnoty většího čísla
    return identifikatorHodnotaVetsiho;
}

 Kód 2: Deklarace statické metody s návratem s názvem VetsiRovno

Další metoda bez návratu s výstupními parametry, tentokrát přetížená metoda, která nese stejný název jako předchozí metoda, ale obsahuje jiný počet parametrů - viz Kód 3. Na rozdíl od předchozí metody obsahuje navíc výstupní parametr identifikatorMax, který obsahuje název proměnné. Výstupní parametr max obsahuje hodnotu většího čísla. Jak vidíme, metoda je bez návratu (klíčové slovo void), proto v těle metody není použito klíčové slovo return, ale jsou pouze uvnitř metody inicializovány výstupní parametry uvedené klíčovým slovem out.

// Přetížená metoda s výstupními parametry
static void VetsiRovno(int x, int y, string identifikatorPrvniCislo,
    string identifikatorDruheCislo, out string identifikatorMax, out int max)
{
    // Test, zda první číslo je větší než druhé
    if (x > y)
    {
        // Přiřazení názvu ve formálnímu parametru výstupnímu parametru 
        identifikatorMax = identifikatorPrvniCislo + " = ";
        // Přiřazení hodnoty většího čísla výstupnímu parametru (první číslo je větší)
        max = x;
    }
    else
    {
        // Test, zda zadaná čísla jsou si rovnym
        if (x == y)
        {
            // Přiřazení názvu ve formálnímu parametru výstupnímu parametru 
            identifikatorMax = identifikatorPrvniCislo + " = " + identifikatorDruheCislo + " = ";
            // Přiřazení hodnoty většího čísla výstupnímu parametru (obě čísla jsou si rovna)
            max = y;
        }
        else
        {
            // Přiřazení názvu ve formálnímu parametru výstupnímu parametru 
            identifikatorMax = identifikatorDruheCislo + " = ";
            // Přiřazení hodnoty většího čísla výstupnímu parametru (první číslo je větší)
            max = y;
        }
    }
}

Kód 2: Deklarace přetížené statické metody Vetsi s výstupními parametry

Poslední deklarovanou metodou VetsiRovno2Vystupy je metoda se dvěma návraty - viz Kód 3. V prvním návratu datového typu string je uložen název parametru a v druhém typu int je uložena hodnota většího čísla. 

//Metoda se dvěma návraty
static (string, int) VetsiRovno2Vystupy(int x, int y, string identifikatorPrvniCislo,
    string identifikatorDruheCislo)
{
    // Test, zda první číslo je větší než druhé
    if (x > y)
    {
        // Návrat názvu a hodnoty většího čísla(první číslo je větší)
        return (identifikatorPrvniCislo + " = ", x);
    }
    else
    {
        // Test, zda zadaná čísla jsou si rovny
        if (x == y)
        {
            // Návrat názvu a hodnoty většího čísla (rovnost obou zadaných čísel)
            return (identifikatorPrvniCislo + " = " + identifikatorDruheCislo + " = ", y);
        }
        else
        {
            // Návrat názvu a hodnoty většího čísla (druhé číslo je větší)
            return (identifikatorDruheCislo + " = ", y);
        }
    }
}

Kód 3: Deklarace statické metody se dvěma návraty s názvem VetsiRovno2Vystupy