1. Téma 03 - Rozhodování Cíl látky Seznámit se a prakticky si vyzkoušet zápis rozhodování v jazyce Java
1.1. Úvod Jednou z nejčastěji používanou konstrukcí při programování je rozhodování. Právě této problematice je věnováno toto téma.
1.2. Teorie Více informací k této problematice je uvedeno v podpůrných materiálech k předmětu Základy programování v kapitole 6.
1.3. Ukázkové úlohy 1.3.1. Úloha na neúplné rozhodování Zadání úlohy Napište program pro rozhodování, zda je možné provést výběr z účtu na základě porovnání hodnoty vybírané částky a zůstatku na účtu. Hodnotu vybírané částky i zůstatku generujte jako náhodná čísla i intervalu <100, 120>.
Řešení úlohy Do metody main() zapíšeme zdrojový kód pro řešení této úlohy. Výpis 1.1. Zdrojový kód úlohy na neúplné rozhodování public class Ucet { public static void main(String[] args) { long zustatek = Math.round(Math.random() * 100 + 20); long vyber = Math.round(Math.random() * 100 + 20);
}
}
System.out.println("Zustatek na uctu: " + zustatek); System.out.println("Pozadovany vyber: " + vyber); if (vyber <= zustatek) { zustatek -= vyber; System.out.println("Vybrano: " + vyber + " korun"); } System.out.println("Zustatek po vyberu: " + zustatek);
1
První řádek v programu uvádí název třídy, v tomto případě Ucet a úvodní složená závorka pro zápis členů třídy. Název třídy je samozřejmě volitelný, dle konvencí jazyka ale vždy začíná velkým písmenem. Druhý řádek obsahuje zápis úvodního řádku metody main(), pomocí níž dojde ke spuštění zapsaného programu. Opět musí být uvedeny úvodní složené závorky pro zápis obsahu metody main(). Název metody volitelný není a proto tento řádek budeme ve všech vytvářených programech zapisovat stejně. Deklarace i s inicializací proměnné pro zůstatek na účtu. Hodnota je náhodně generována z intervalu <100, 120> s využitím metody random() z třídy Math. Generovaná hodnota je následně zaokrouhlena na celé číslo. Deklarace i s inicializací proměnné pro výběr z účtu. Hodnota je náhodně generována z intervalu <100, 120> s využitím metody random() z třídy Math. Generovaná hodnota je následně zaokrouhlena na celé číslo. Příkaz pro výpis hodnoty zůstatku na obrazovku. Příkaz pro výpis hodnoty vybírané částky na obrazovku. Rozhodování o tom, zda je možné výběr z účtu uskutečnit - záleží na generovaných hodnotách zůstatku a hodnotě požadované vybírané částky. Pokud je podmínka vyhodnocena kladně, dojde k vykonání příkazů mezi složenými závorkami na řádku 7 a 10. Realizace výběru v podobě odečtení vybírané částky od zůstatku na účtu. Výpis informace o provedení výběru. Ukončovací složené závorky rozhodování. Výpis informace o zůstatku na účtu po provedení výběru - tato informace bude vypsána vždy bez ohledu na to, jak dopadne vyhodnocení podmínky na řádku 7. Koncové složené závorky metody main(). Koncové složené závorky třídy Ucet.
1.3.2. Úloha na úplné rozhodování Zadání úlohy Napište program pro rozhodování, zda je možné provést výběr z účtu na základě porovnání hodnoty vybírané částky a zůstatku na účtu. Pokud nebude možné výběr realizovat, tak vypište uživateli informaci o tom, že nebylo možné výběr provést. Hodnotu vybírané částky i zůstatku generujte jako náhodná čísla i intervalu <100, 120>.
Řešení úlohy Do metody main() zapíšeme zdrojový kód pro řešení této úlohy. Výpis 1.2. Zdrojový kód úlohy na úplné rozhodování public class Ucet { public static void main(String[] args) { long zustatek = Math.round(Math.random() * 100 + 20); long vyber = Math.round(Math.random() * 100 + 20);
2
}
}
System.out.println("Zustatek na uctu: " + zustatek); System.out.println("Pozadovany vyber: " + vyber); if (vyber <= zustatek) { zustatek -= vyber; System.out.println("Vybrano: " + vyber + " korun"); } else { System.out.println("Vyber nebylo mozne realizovat"); } System.out.println("Zustatek po vyberu: " + zustatek);
První řádek v programu uvádí název třídy, v tomto případě Ucet a úvodní složená závorka pro zápis členů třídy. Název třídy je samozřejmě volitelný, dle konvencí jazyka ale vždy začíná velkým písmenem. Druhý řádek obsahuje zápis úvodního řádku metody main(), pomocí níž dojde ke spuštění zapsaného programu. Opět musí být uvedeny úvodní složené závorky pro zápis obsahu metody main(). Název metody volitelný není a proto tento řádek budeme ve všech vytvářených programech zapisovat stejně. Deklarace i s inicializací proměnné pro zůstatek na účtu. Hodnota je náhodně generována z intervalu <100, 120> s využitím metody random() z třídy Math. Generovaná hodnota je následně zaokrouhlena na celé číslo. Deklarace i s inicializací proměnné pro výběr z účtu. Hodnota je náhodně generována z intervalu <100, 120> s využitím metody random() z třídy Math. Generovaná hodnota je následně zaokrouhlena na celé číslo. Příkaz pro výpis hodnoty zůstatku na obrazovku. Příkaz pro výpis hodnoty vybírané částky na obrazovku. Rozhodování o tom, zda je možné výběr z účtu uskutečnit - záleží na generovaných hodnotách zůstatku a hodnotě požadované vybírané částky. Pokud je podmínka vyhodnocena kladně, dojde k vykonání příkazů mezi složenými závorkami na řádku 7 a 10. Realizace výběru v podobě odečtení vybírané částky od zůstatku na účtu. Výpis informace o provedení výběru. Ukončovací složená závorka bloku if. V případě nesplnění podmínky na řádku 7 budou realizovány příkazy v bloku else. V tomto případě se jedná o jeden příkaz na řádku 11. Výpis informace o tom, že nebyl na účtu dostatečný zůstatek a nebylo tedy možné výběr z účtu realizovat. Ukončovací složená závorka bloku else. Výpis informace o zůstatku na účtu po provedení výběru - tato informace bude vypsána vždy bez ohledu na to, jak dopadne vyhodnocení podmínky na řádku 7. Ukončovací složené závorky metody main(). Ukončovací složené závorky třídy Ucet.
1.3.3. Úloha na rozšířenou úplnou podmínku Zadání úlohy Napište program pro rozhodování o výši úrokové sazby dle zůstatku na účtu, přičemž platí následující pravidla:
3
• Pokud je zůstatek na účtu menší nebo roven 10 000 Kč, je úroková míra 1,0 procento. • Pokud je zůstatek na účtu menší nebo roven 50 000 Kč, je úroková míra 2,0 procenta. • Pokud je zůstatek na účtu větší než 50 000 Kč, je úroková sazba 2,4 procenta. Hodnotu zůstatku na účtu generujte náhodně z intervalu <0, 70000> Kč.
Řešení úlohy Do metody main() zapíšeme zdrojový kód pro řešení této úlohy. Výpis 1.3. Zdrojový kód úlohy na úplné rozhodování public class Uroceni { public static void main(String[] args) { int zustatek = (int) (70001 * Math.random()); double urok = 0.0; if (zustatek <= 10000) { urok = 0.010; } else if (zustatek <= 50000) { urok = 0.020; } else { urok = 0.024; }
}
}
System.out.println("Pro zustatek " + zustatek + " Kc je uplatnen urok " + (urok * 100) + " procenta");
První řádek v programu uvádí název třídy, v tomto případě Uroceni a úvodní složená závorka pro zápis členů třídy. Název třídy je samozřejmě volitelný, dle konvencí jazyka ale vždy začíná velkým písmenem. Druhý řádek obsahuje zápis úvodního řádku metody main(), pomocí níž dojde ke spuštění zapsaného programu. Opět musí být uvedeny úvodní složené závorky pro zápis obsahu metody main(). Název metody volitelný není a proto tento řádek budeme ve všech vytvářených programech zapisovat stejně. Deklarace i s inicializací proměnné pro zůstatek na účtu. Hodnota je náhodně generována z intervalu <0, 70000> s využitím metody random() z třídy Math. Generovaná hodnota je přetypována na celé číslo. Deklarace i s inicializací proměnné pro úrokovou sazbu. Rozhodování pro případ kdy bude hodnota zůstatku menší případně rovna hodnotě 10 000 Kč. Nastavení úrokové sazby na 1 procento. Rozhodování pro případ kdy bude hodnota zůstatku menší případně rovna hodnotě 50 000 Kč - to znamená, že hodnota zůstatku je v intervalu (10000, 50000>.
4
Nastavení úrokové sazby na 2 procenta. Pro všechny ostatní zůstatky bude uplatněna větev else. Nastavení úrokové sazby na 2,4 procenta. Ukončovací složená závorka bloku if. Výpis informace o zůstatku na účtu a o výši úrokové sazby.
1.3.4. Úloha na vícenásobné rozhodování Zadání úlohy Napište program pro převod mezi číselnou hodnotou <1,7> na dny v týdnu, kdy číslu 1 odpovídá pondělí a číslu 7 odpovídá neděle.
Řešení úlohy Do metody main() zapíšeme zdrojový kód pro řešení této úlohy. Výpis 1.4. Zdrojový kód úlohy na úplné rozhodování public class PrevodCisloDen { public static void main(String[] args) { int den = 1 + (int) (Math.round(Math.random() * 7)); System.out.print(den + ". den v tydnu je "); switch (den) { case 1: System.out.println("pondeli"); break; case 2: System.out.println("utery"); break; case 3: System.out.println("streda"); break; case 4: System.out.println("ctvrtek"); break; case 5: System.out.println("patek"); break; case 6: System.out.println("sobota"); break; case 7: System.out.println("nedele"); break; 5
}
}
}
První řádek v programu uvádí název třídy, v tomto případě PrevodCisloDen a úvodní složená závorka pro zápis členů třídy. Název třídy je samozřejmě volitelný, dle konvencí jazyka ale vždy začíná velkým písmenem a každé další slovo názvu rovněž začíná velkým písmenem. Druhý řádek obsahuje zápis úvodního řádku metody main(), pomocí níž dojde ke spuštění zapsaného programu. Opět musí být uvedeny úvodní složené závorky pro zápis obsahu metody main(). Název metody volitelný není a proto tento řádek budeme ve všech vytvářených programech zapisovat stejně. Deklarace i s inicializací proměnné pro číslo dne. Hodnota je náhodně generována z intervalu <1, 7> s využitím metody random() z třídy Math. Generovaná hodnota je přetypována na celé číslo. Výpis informace o vygenerované hodnotě čísla dne. Příkaz switch pro vícenásobné rozhodování. Návěští case pro případ, kdy je hodnota v proměnné den rovna číslu 1. Výpis textové informace o dnu. Příkaz break pro ukončení příkazu switch. Pokud by zde příkaz break nebyl uveden, docházelo by k dalšímu vyhodnocování návěští case. Návěští case pro další čísla dnů - tato sekvence je již stejná pro další dny úterýneděle.
1.4. Úlohy k řešení 1.4.1. Zadání úlohy 1 Napište program pro výpočet reálných kořenů kvadratické rovnice, kde koeficienty a, b, c jsou datového typu double a budou generovány náhodně pomocí metody random().
1.4.2. Zadání úlohy 2
6