2. Analýza a návrh řešení

2.5. Minimum a maximum pole

Velmi často potřebujeme ze zaznamenaných hodnot v jednorozměrném poli nalézt nejmenší, nebo největší hodnotu, tj. minimum, nebo maximum. Mějme např. vektor s názvem pole a v něm chceme nalézt minimum a maximum - viz Obrázek 1. 

Minimum a maximum jednorozměrného pole

Obrázek 1: Minimum a maximum jednorozměrného pole

Abychom nalezli minimum, je zapotřebí nejprve přiřadit minimu počáteční hodnotu. V našem algoritmu minimu přiřadíme hodnotu prvního prvku. Dále tuto hodnotu porovnáváme s každým dalším prvkem vektoru až porovnáme minimum s posledním prvkem vektoru. Toto porovnání tedy proběhne n-1-krát - viz Obrázek 2. Samozřejmě je také možné procházet prvky opačným směrem, tj. od posledního prvku směrem k počátečnímu prvku a porovnávat tyto prvky s minimem, nebo maximem. 

Hledání minima jednorozměrného pole

Obrázek 2: Hledání minima jednorozměrného pole

Zkusme si popsat podprogram MinimumVPoli ve formě funkce, která navrací minimum vektoru - viz Obrázek 3. Tato funkce přijímá dva parametry - první definuje velikost vektoru a do druhého parametru je uložen vektor, ve kterém hledáme nejmenší hodnotu. Ve funkci deklarujeme následující lokální proměnné:

  •  minimum - nalezená minimální hodnota ve vektoru
  • i - index (pozice) prvku vektoru

Jako první krok je zapotřebí přiřadit proměnné minimum hodnotu počátečního prvku. Následně pro procházení dalších prvků využijeme cyklu s krokem, který bude procházet jednotlivé prvky v pořadí od druhého do posledního prvku. Uvnitř cyklu je provedeno porovnání hodnoty aktuálního prvku s dosud nalezeným minimem. Pokud je nalezen prvek, jehož hodnota je menší než minimum, je tato hodnota prohlášena novým minimem, tj. hodnota prvku je přiřazena do proměnné minimum. Návratu funkce je přiřazeno nalezené minimum ze všech prvků.

Podprogram MinimumVPoli - funkce pro navrácení minima jednorozměrného pole

Obrázek 3: Podprogram MinimumVPoli - funkce pro navrácení minima jednorozměrného pole

Obdobným postupem bychom procházeli jednotlivé prvky vektoru, pokud bychom hledali maximum. Zásadní rozdíl je v tom, že bychom porovnávali, zda je aktuálně procházený prvek větší, než dosud nalezené maximum. Pokud ano, přiřadíme tuto hodnotu do maxima - viz Obrázek 4.

Podprogram MaximumVPoli - funkce pro navrácení maxima jednorozměrného pole

Obrázek 4: Podprogram MaximumVPoli - funkce pro navrácení maxima jednorozměrného pole

Dalším možným přístupem při hledání minima je před prohledáváním vektoru si uložit maximální možnou hodnotu do minima (tím je zajištěno, že při procházení jednotlivých prvků, bude jejich hodnota menší, nebo rovna hodnotě uložené v minimu). Pokud bude hodnota aktuálního prvku menší než dosud nalezené minimum, přiřadíme minimu hodnotu aktuálního prvku. Toto porovnání proběhne n-krát (porovnání všech prvků vektoru s minimem).

Hledání minima jednorozměrného pole - jiný postup

Obrázek 5: Hledání minima jednorozměrného pole - jiný postup

Vzhledem k tomu, že ještě potřebujeme nalézt index hledaného minima, či maxima ve vektoru, je zapotřebí definovat funkci, které předáme prvek, který má být ve vektoru vyhledán spolu s vektorem. Tato funkce, kterou pojmenujeme IndexPrvku, nám navrátí index hledaného prvku - viz Obrázek 6. Funkce bude volána v hlavním programu ve výpisu s nalezenou hodnotou minima a maxima vektoru.

Podprogram IndexPrvku - funkce pro navrácení indexu hledaného prvku v poli

Obrázek 6: Podprogram IndexPrvku - funkce pro navrácení indexu hledaného prvku v poli