Jednorozměrné pole - konzole
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.