4. C#

4.5. Minimum a maximum pole

Abychom mohli ve vektoru nalézt jeho nejmenší prvek, tj. minimum, musíme nejprve deklarovat metodu, která bude prohledávat a porovnávat prvky vektoru. Proto v regionu Operace s polem, která je součástí regionu Pomocné metody, budeme deklarovat metodu MinimumVPoli, která navrací celočíselnou hodnotu minima, a zároveň má tato metoda výstupní parametr (uvozený klíčovým slovem out), který obsahuje index prvku představující minimum - viz Kód 1. 

V metodě je deklarována lokální proměnná minimum, do níž je uložena hodnota nejmenšího prvku vektoru. Počátečním krokem metody je prohlášení prvního prvku s indexem 0 minimem , tzn. do výstupního parametru musí být uložen indexu minima je uložena 0. Dále jsou v cyklu s krokem 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.

/// <summary>
/// Metoda pro hledání nejmenšího prvku ve vektoru
/// </summary>
/// <param name="n">  počet prvků vektoru </param>
/// <param name="pole"> vektor </param>
/// <param name="indPrvku"> index prvku minima </param>
/// <returns> celočíselná hodnota minima </returns>
private int MinimumVPoli(int n, int[] pole, out int indPrvku)
{
    // Lokální proměnné: i - index prvku; minimum - hodnota minima
    int minimum;
    // Přiřazení hodnoty počátečního prvku vektoru do minima
    minimum = pole[0];
    // Přiřazení hodnoty 0 do indexu prvku minima (kdyby byl počáteční prvek minimem)
    indPrvku = 0;
    // Cyklus s pevným krokem - pro procházení prvků
    for (int i = 1; i < n; i++)
    {
        /* Pokud je nalezen prvek ve vektoru, jehož hodnota je menší 
         * než minimum... */
        if (pole[i] < minimum)
        {
            // Uložení hodnoty nalezeného prvku do minima
            minimum = pole[i];
            // Přiřazení indexu aktuálního prvku do indexu minima
            indPrvku = i;
        }
    }
    // Přiřazení hodnoty nalezeného minima do výstupu metody
    return minimum;
}

Kód 1: Deklarace metody s návratem pro hledání minima vektoru včetně jeho pozice (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>
/// Metoda pro hledání největšího prvku vektoru
/// </summary>
/// <param name="n">  počet prvků vektoru </param>
/// <param name="pole"> vektor </param>
/// <param name="indPrvku"> index prvku maxima </param>
/// <returns> celočíselná hodnota maxima </returns>
private int MaximumVPoli(int n, int[] pole, out int indPrvku)
{
    // Lokální proměnné: i - index prvku; maximum - hodnota maxima
    int maximum;
    // Přiřazení minimální možné hodnoty prvku vektoru do maxima
    maximum = int.MinValue;
    /* Přiřazení hodnoty 0 do indexu prvku maxima (nutné provést, jinak
     * kompilátor ohlásí chybu, že není přiřazena hodnota výstupnímu
     * prvku 'indPrvku' */
    indPrvku = 0;
    // Cyklus s pevným krokem - pro procházení prvků
    for (int i = 0; i < n; i++)
    {
        /* Pokud je nalezen prvek ve vektoru, jehož hodnota je větší 
         * než maximum, pak... */
        if (pole[i] > maximum)
        {
            // Uložení hodnoty nalezeného prvku do maxima
            maximum = pole[i];
            // Přiřazení indexu aktuálního prvku do indexu maxima
            indPrvku = i;
        }
    }
    // Přiřazení hodnoty nalezeného maxima do výstupu metody
    return maximum;
}

Kód 2: Deklarace metody s návratem pro hledání maxima vektoru včetně jeho pozice (MaximumVPoli)

Přemístíme se zpět do regionu Události a jeho části Operace s polem. V tomto regionu upravíme metodu obsluhy události stisknutí tlačítka BtnMinimum - viz Kód 3. V rámci těla metody budeme deklarovat lokální proměnnou minimum, do které uložíme návrat volané metody MinimumVPoli, které předáme tři parametry. První parametr je počet prvků vektoru uložený v datové složce třídy. Jako druhý parametr předáme vektor. Třetí výstupní parametr uvozený klíčovým slovem out představuje index nalezeného minima ve vektoru. Obdržené celočíselné hodnoty konvertujeme na text pomocí metody Format třídy string. Pro výpis hodnot použijeme indexaci prvků ve složených závorkách.

/// <summary>
/// Volání metody pro určení minima ve vektoru
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnMinimum_Click(object sender, RoutedEventArgs e)
{
    /* Lokální proměnné: indexMinima - index prvku minima ve vektoru;
     * minimum - hodnota minima ve vektoru */
    int minimum;
    /* Přiřazení výstupu metody pro určení minima do lokální proměnné a výstupní 
     * parametr určující index minima */
    minimum = this.MinimumVPoli(this.pocetPrvku, this.pole, out int indexMinima);
    /* Zobrazení textu spolu s hodnotou nejmenšího prvku a indexu prvku minima 
     * do objektu (TextBox) na formuláři */
    this.TxtVysledek.Text = string.Format("Minimum = {0} (index prvku = {1})", minimum, indexMinima);
}

Kód 3: Deklarace metody pro zavolání metody pro hledání minima a indexu tohoto minima - výpis na formuláři (BtnMinimum_Click)

Stejně jako u předchozí metody postupujeme v metodě BtnMaximum_Click umístěné ve stejném regionu - viz Kód 4.

/// <summary>
/// Volání metody pro určení maxima ve vektoru
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnMaximum_Click(object sender, RoutedEventArgs e)
{
    /* Lokální proměnné: indexMaxima - index prvku maxima ve vektoru;
     * maximum - hodnota maxima ve vektoru */
    int maximum;
    /* Přiřazení výstupu metody pro určení maxima do lokální proměnné a výstupní 
     * parametr určující pořadí maxima */
    maximum = this.MaximumVPoli(this.pocetPrvku, this.pole, out int indexMaxima);
    /* Zobrazení textu spolu s hodnotou nejmenšího prvku a indexem prvku maxima 
     * do objektu (TextBox) na formuláři */
    this.TxtVysledek.Text = string.Format("Maximum = {0} (index prvku = {1})", maximum, indexMaxima);
}

Kód 4: Deklarace metody pro zavolání metody pro hledání maxima a indexu tohoto maxima - výpis na formuláři (BtnMaximum_Click)