3. C#

3.5. Minimum a maximum pole

Pro vyhledání nejmenšího prvku v poli je použita metoda MinimumVPoli s celočíselným návratem nalezeného minima. Počátečním krokem metody je prohlášení prvního prvku minimem. Dále jsou procházeny další prvky, které jsou porovnány s nejmenším dosud nalezeným prvkem, jehož hodnota je uložena v proměnné minimum. Podstata metody tkví v podmínce, že pokud aktuálně procházený prvek je menší než minimum, je hodnota tohoto prvku uložena do proměnné minimum. Po ukončení průchodu všemi prvky vektoru je hodnota minima přiřazena výstupu metody - viz Kód 1.

/// <summary>
/// Návrat hodnoty minima vektoru - nejmenší prvek
/// </summary>
/// <param name="n"> počet prvků vektoru </param>
/// <param name="pole"> prohledávaný vektor </param>
/// <returns> Minimum vektoru </returns>
static int MinimumVPoli(int n, int[] pole)
{
    // Deklarace: 'minimum' ... nalezená minimální hodnota ve vektoru; 'i' ... index (pozice) prvku vektoru
    int minimum;
 
    // Hodnotu prvního prvku prohlásíme minimem
    minimum = pole[0];
 
    // Pro všechny prvky od '1' (druhého prvku) do 'n-1'-tého (posledního) prvku
    for (int i = 1; i < n; i++)
    {
        // Pokud je aktuálně procházený prvek menší než minimum ...
        if (pole[i] < minimum)
        {
            // Uložené aktuálního prvku do minima
            minimum = pole[i];
        }
    }
 
    // Přiřazení minima návratu metody
    return minimum;
}

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

Stejnou podstatu používá metoda MaximumVPoli, která však porovnává všechny prvky s dosud nejvyšší nalezenou hodnotu ve vektoru uloženou do proměnné s názvem maximum - viz Kód 2.

/// <summary>
/// Návrat hodnoty maxima vektoru - největší prvek
/// </summary>
/// <param name="n"> počet prvků pole </param>
/// <param name="pole"> prohledávaný vektor </param>
/// <returns> Maximum vektoru </returns>
public static int MaximumVPoli(int n, int[] pole)
{
    // Deklarace: 'maximum' ... nalezená maximální hodnota ve vektoru; 'i' ... index (pozice) prvku vektoru
    int maximum;
 
    // První prvek prohlásíme maximem
    maximum = pole[0];
 
    // Pro všechny prvky od '1' (druhého prvku) do 'n-1'-tého (posledního) prvku
    for (int i = 1; i < n; i++)
    {
        // Pokud je aktuálně procházený prvek větší než maximum ...
        if (pole[i] > maximum)
        {
            // Uložené hodnoty nalezeného prvku do maxima
            maximum = pole[i];
        }
    }
 
    // Přiřazení maxima návratu metody
    return maximum;
}

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

Vzhledem k tomu, že má být uživateli vypsáno pořadí nalezeného minima a maxima, je zapotřebí deklarovat další metodu IndexPrvku, která navrací index hledaného prvku, který byl metodě předán jako parametr - viz Kód 3. V cyklu s krokem implementovaným v těle metody je použita v řídící podmínce hodnota horní meze vyjádřená jako pole.Length. Tato metoda přidružená k poli navrací velikost pole (počet prvků pole). Základním kamenem metody je podmínka, v níž je porovnána hodnota aktuálně procházeného prvku s hodnotou hledaného prvku na rovnost. Pokud nastane rovnost, je zaznamenáná do lokální proměnné index. Je také vhodné upozornit, že proměnná index bude v sobě mít uloženou hodnotu posledního výskytu hledané hodnoty. Pokud bychom chtěli hledat pouze první výskyt hledaného prvku, museli bychom za příkaz přiřazení indexu aktuálně procházeného prvku i do proměnné index umístit příkaz break, který by ukončil cyklus pro procházení jednotlivých prvků vektoru. Hodnota uložená v proměnné index je návratem metody IndexPrvku.  

/// <summary>
/// Metoda s návratem - návrat indexu hledaného prvku vektoru
/// </summary>
/// <param name="prvek"> prvek, jehož index má být vyhledán </param>
/// <param name="pole"> prohledávaný vektor </param>
/// <returns> Návrat posledního indexu hledaného prvku (prvek nebyl nalezen návrat -1) </returns>
static int IndexPrvku(int prvek, int[] pole)
{
    // Deklarace: 'index' ... index nalezeného prvku ve vektoru; 'i' ... index (pozice) prvku vektoru
    int index;
 
    // Inicializace - žádný prvek nenalezen, tj. index = -1
    index = -1;
 
    /* Pro všechny prvky od počátečního prvku do posledního (index zjištěn pomocí návratu funkce 
     * rozměru pole) prvku */
    for (int i = 0; i < pole.Length; i++)
    {
        // Pokud je aktuálně procházený prvek shodný s předaným prvkem ...
        if (pole[i] == prvek)
        {
            // Přiřazení indexu aktuálního prvku do indexu hledaného prvku 
            index = i;
        }
    }
    // Přiřazení idnexu prvku do návratu metody
    return index;
}

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

Asi si říkáte, že tuto metodu jsme nemuseli vůbec používat. Na rozdíl od Flowgorithm, totiž metoda v C# umožňuje návrat více hodnot. Stačilo tedy přímo v metodě MinimumVPoli uložit pořadí do nějaké deklarované celočíselné proměnné v případě, že bylo nalezeno nové minimum. Pořadí bychom pak mohli deklarovat jako výstupní parametr metody MinimumVPoli. To samé platí i pro metodu MaximumVPoli.