Největší číslo
3. NejvetsiZe3Cisel
3.1. Analýza a návrh řešení
Podle zadání příkladu máme načíst tři celá čísla, která budeme porovnávat pomocí pěti různých podprogramů, které budou vypisovat hodnotu maxima a jednotlivé výpisy podprogramů mají být od sebe odděleny - viz Obrázek 1.
Obrázek 1: Hlavní program NejvetsiZe3Cisel pro porovnání tří zadaných čísel včetně rovnosti
Pokud bychom analyticky řešili problém porovnání tří celých čísel, nejprve si porovnáme první dva členy mezi sebou a vítěze tohoto porovnání porovnáme se zbývajícím číslem:
pokud a > b potom
pokud a > c potom
"a je největší";
jinak
"c je největší";
jinak
pokud b > c potom
"b je největší";
jinak
"c je největší";
Toto řešení však nezahrnuje případy rovnosti všech tří čísel. Pokud uvažujeme 3 relační operátory "Větší/Rovno/Menší", pak již vzniká celkem 9 možných případů v závislosti na relačních operátorech (>, = , <) - viz Tabulka 1.1. porovnání | 2. porovnání | Výsledek |
A > B | A > C | A |
| A = C | A, C |
| A < C | C |
A = B | A > C | A, B |
| A = C | A, B, C |
| A < C | C |
A < B | B > C | B |
| B = C | B, C |
| B < C | C |
Tabulka 1: Největší ze tří
Tuto tabulku lze implementovat různými způsoby např.:
- Vnořený rozhodováním - viz Obrázek 2
- Kaskádováním - viz Obrázek 3
Obrázek 2: Podprogram VetsiRovnoVerze1 - vnořené rozhodování
Další možností implementace porovnání tří celých čísel podle předchozí tabulky je využití kaskády podmínek, kde jsou jednotlivé části podmínky v rozhodovacím bloku spojeny pomocí logického operátoru a zároveň (logický součin) - viz Obrázek 3.
Obrázek 3: Podprogram VetsiRovnoVerze2 - kaskádování
Při 4 proměnných je už 27 možností porovnání z čehož plyne, že v tomto případě již předchozí způsoby nejsou efektivní. Vhodnější cesta je deklarace podprogramu VetsiRovno (funkce) pro porovnání dvou čísel, který bude navracet větší z nich. Této funkci předáme dva celočíselné parametry, které představují porovnávané hodnoty - viz Obrázek 4. Pokud si budou hodnoty rovny, vybereme jako větší první parametr.

Obrázek 4: Podprogram (funkce) VetsiRovno
Tento podprogram bude volán v následující verzi podprogramu VetsiRovnoVerze3 - viz Obrázek 5. Podprogram VetsiRovnoVerze3 přijímá 3 parametry, ze kterých pomocí dvojitého volání funkce VetsiRovno získá největší - maximum - ze všech tří předaných čísel.
Obrázek 5: Podprogram VetsiRovnoVerze3 - porovnání s maximem
Principem aplikovaného přístupu je, že prvním voláním funkce VetsiRovno(a, b) získáme návrat v podobě většího čísla z těchto dvou čísel - viz Obrázek 6.

Obrázek 6: Princip dvojitého volání metody VetsiRovno - 3 parametry
Dalším voláním této funkce, tj. VetsiRovno(VetsiRovno(a, b), c) je této funkci předán jako první vstup právě ono větší číslo získané z předchozího volání (tj. větší z a a b). Toto číslo je pak porovnáno v metodě se třetím číslem c. Toto maximum je pak v metodě VetsiRovnoVerze3 porovnáno na rovnost pomocí tří podmínek s jednotlivým čísly. Výhodou tohoto přístupu je, že řeší i případ, že jsou si všechna tři čísla rovna.
Pokud se podíváme na další obrázek zjistíme, že tento princip lze využít i u většího počtu porovnávaných proměnných např. u 4 proměnných a, b, c, d - viz Obrázek 7.

Obrázek 7: Princip volání metody VetsiRovno - 4 parametry
Další podprogram je modifikací předchozí verze podprogramu. Zde však porovnáme, pomocí podmínky, návrat funkce VetsiRovno, které byly předány první dvě čísla. Tento výstup ve formě většího čísla porovnáme se zbývajícím třetím číslem - viz Obrázek 8. V tomto a dalším podprogramu již nevypisujeme název proměnné, ve které je maximum uloženo. Vypíšeme pouze seznam zadaných čísel.
Obrázek 8: Podprogram VetsiRovnoVerze4 - porovnání návratu funkce VetsiRovno se třetím číslem
Posledním podprogram je VetsiRovnoVerze5 - viz Obrázek 9. Tento podprogram obsahuje pouze jeden výpis, ve kterém je využito dvojité volání podprogramu VetsiRovno, které do výpisu navrátí maximum ze tří čísel - stejná podstata jako u VetsiRovnoVerze3. Vidíme, že program lze velice zkrátit v závislosti na specifikaci požadovaného výsledku. Ve výpisu použijeme vypsání hodnot všech tří předaných čísel.
Obrázek 9: Podprogram VetsiRovnoVerze5 - použití dvojitého volání funkce VetsiRovno přímo ve výpisu





