3. C#

3.1. Rozměr pole

První statickou volanou metodou v hlavním programu je metoda RozmerPole. Vzhledem k tomu, že zdrojový kód programu obsahuje větší množství jednotlivých metod, je vhodné metody rozdělit do jednotlivých sekcí - regionů. Tyto sekce lze sbalit kliknutím na tlačítko − umístěné napravo od čísel řádek zdrojového kódu (tím se schovají jednotlivé metody umístěné v této sekci). Sekci lze zpětně rozbalit kliknutím na tlačítko +. Počáteční značka regionu je psána s mřížkou, tj.  #region. Za ní uvedeme název regionu - viz Kód 1.

#region Nastavení atributů pole

Kód 1: Počáteční značku regionu

Koncová značku bloku regionu je #endregion - viz Kód 2.

#endregion

Kód 2: Koncová značku regionu

Dále je vhodné umístit nad jednotlivé deklarace metod značky pro dokumentaci :

  • Metody
  • Formálních parametrů metody 
  • Návratu metody 

Tyto popisky se budou zobrazovat v malém okně při volání metody a programátorovi pomohou rychle se orientovat v podstatě volané metody. Pro umístění značky do zdrojového kódu stačí vepsat nad metodu tři lomítka za sebou a Visual Studio nám automaticky doplní značky k dokumentaci ve formě XML prvků přidaných ke zdrojovému kódu. První vygenerovanou značkou je dokumentace k metodě, kde mezi počáteční značkou /// <summary> a konečnou značkou </summary> uvedeme za trojité lomítko poznámku o podstatě metody. Pokud je popis víceřádkový, stačí mezi počáteční a koncovou značku umístit kurzor a stisknout klávesu Enter. Visual Studio do značky přidá další řádku s trojitým lomítkem, kam lze umístit další popis.

/// <summary>
/// Metoda s celočíselným návratem - navrací velikost pole (počet prvků vektoru)
/// </summary>

Kód 1: Dokumentace k metodě

Další poznámkou uváděnou v kódu ve formě XML značky ve zdrojovém kódu je popisek podstaty formálního parametru metody - viz Kód 2. Tento popisek je v našem případu uváděn mezi značkou parametru s názvem n, tj. /// <param name="n"> a konečnou značkou </param>. 

/// <param name="n"> aktuální velikost vektoru (počet prvků) </param>

Kód 2: Dokumentace k parametru

Poslední značkou uvedenou nad deklarací metody RozmerPole je značka popisku výstupu (návratu) metody (neplatí pro metody bez návratu). Popisek výstupu metody je umístěn mezi značky /// <returns> a </returns> - viz Kód 3. 

/// <returns> Velikost vektoru </returns>

Kód 2: Dokumentace k výstupu metody

Podstata algoritmu byla nastíněna v kapitole Analýza a návrh řešení, není proto nutné detailně popisovat podstatu zdrojového kódu. 

Metoda RozmerPole obsahuje dva formální celočíselné parametry:

  • n - aktuální velikost vektoru (počet prvků) 
  • max - maximální rozměr vektoru

Metoda navrací velikost vektoru, podle níž bude generován objekt - vektor. Pro metodu jsou deklarovány následující celočíselné lokální proměnné:

  • zmena - informace (celé číslo), zda má být provedena změna rozměru pole
  • novaHodnota - nový rozměr vektoru

Uživateli je nejprve vypsána stávající velikost vektoru (počet jeho prvků, které může po naplnění obsahovat). První cyklus s podmínkou na konci je určen pro načtení celočíselné informace (0...Ne, 1...Ano), zda chce uživatel změnit stávající rozměr (ten byl nastaven v hlavním programu na maximální možný. Hodnota této konstanty z hlavního programu je v metodě uložena ve formálním parametru max). Načtení hodnoty je provedeno pomocí metody TryParse s výstupním parametrem zmena. V řídící podmínce cyklu je testováno, zda byla zadána validní hodnota této proměnné. Pokud ne, celé tělo cyklu je opakováno.

Další cyklus s podmínkou na konci je určen pro načtení nové hodnoty velikosti vektoru. Pokud nová hodnota není validní, je jí přiřazena maximální přípustná velikost vektoru uložena v parametru max. Pokud nová hodnota byla validní a není stejná jako stávající velikost vektoru, je tato hodnota uložena do formálního parametru n, který je následně přiřazen výstupu funkce RozmerPole - viz Kód 3. 

/// <summary>
/// Metoda s celočíselným návratem - navrací velikost pole (počet prvků vektoru)
/// </summary>
/// <param name="n"> aktuální velikost vektoru (počet prvků) </param>
/// <param name="max"> maximální rozměr vektoru </param>
/// <returns> Velikost vektoru </returns>
static int RozmerPole(int n, int max)
{
    /* Deklarace: 'zmena' ... informace (celé číslo), zda má být provedena změna rozměru 
     * pole; 'novaHodnota' ... nový rozměr vektoru */
    int zmena, novaHodnota;
 
    // Vypsání stávajícího rozměru vektoru
    Console.WriteLine("Počet prvků: {0}", n);
    do
    {
        // Výzva ke změně rozměru vektoru
        Console.Write("Změnit počet prvků vektoru (0...Ne, 1...Ano): ");
 
        // Načtení hodnoty, zda má dojít ke změně
        int.TryParse(Console.ReadLine(), out zmena);
 
        // Pokud načtená hodnota nebyla validní, cyklus zadání je znovu opakován
    }
    while ((zmena < 0) || (zmena > 1));
 
    // Pokud byl zadán index pro změnu ...
    if (zmena == 1)
    {
        // Výzva k zadání rozměru vektoru
        Console.Write("Zadejte počet prvků vektoru (1 - {0}): ", max);
 
        // Načtení rozměru vektoru
        int.TryParse(Console.ReadLine(), out novaHodnota);
 
        // Pokud nová hodnota je větší než maximum, nebo menší než 1 ...
        if ((novaHodnota > max) || (novaHodnota < 1))
        {
            // Přiřazení maximálního rozměru vektoru do lokální proměnné určující počet prvků vektoru
            novaHodnota = max;
        }
 
        // Pokud nový rozměr vektoru není stejný jako stávající počet prvků vektoru ...
        if (novaHodnota != n)
        {
            // Uložení nového rozměru pole do proměnné
            n = novaHodnota;
        }
 
        // Výpis nového zadaného rozměru vektoru
        Console.WriteLine("Rozměr pole: {0}", n);
    }
 
    // Návrat metody
    return n;
}

Kód 3: Deklarace statické metody s celočíselným návratem s názvem RozmerPole