Úloha 2 – Použití cyklu while s podmínkou ukončení
| Stránky: | Moodle ZČU |
| Kurz: | Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný) |
| Kniha: | Úloha 2 – Použití cyklu while s podmínkou ukončení |
| Vytiskl(a): | Nepřihlášený host |
| Datum: | neděle, 18. října 2026, 13.20 |
Úvod do úlohy
Vedle klasického for cyklu je dalším základním nástrojem v JavaScriptu while cyklus. Ten se používá tehdy, když nevíme přesně, kolikrát se bude blok opakovat, ale máme nějakou podmínku, která rozhoduje o pokračování. while testuje logický výraz na začátku každého průchodu. Díky tomu se může stát, že smyčka se vůbec nespustí, pokud podmínka hned na začátku není splněná. Typickým příkladem je opakované čtení vstupu, čekání na událost nebo postupné procházení dat, dokud je co zpracovávat.
Teorie a principy
-
Tvar zápisu:
-
Vyhodnocování:
-
Před každým průchodem se zkontroluje logický výraz v závorce.
-
Pokud je
true, provede se blok uvnitř{ }. -
Pokud je
false, cyklus se ukončí.
-
-
Nemusí proběhnout ani jednou: Pokud podmínka není splněná už na začátku, kód uvnitř se vůbec nespustí.
-
Prevence nekonečné smyčky: V těle cyklu musí být krok, který časem způsobí, že podmínka přestane platit (např. inkrementace čítače). Bez toho by cyklus běžel donekonečna.
Praktické příklady kódu
1. Jednoduchý čítač s while
Vypíše čísla 0 až 4.
2. Cyklus, který nemusí proběhnout ani jednou
Podmínka start < 5 není splněna, takže tělo cyklu se neprovede ani jednou.
3. Praktické použití – dokud uživatel nezadá správné heslo
Smyčka se opakuje, dokud není splněna podmínka heslo !== spravne.
4. HTML příklad – snižování hodnoty do nuly
Typické chyby / záludnosti
-
Zapomenutý krok v těle cyklu – pokud nezměníte proměnnou z podmínky, cyklus nikdy neskončí (nekonečná smyčka).
-
Špatně zvolená podmínka – pokud je hned
false, kód se vůbec nespustí (někdy úmysl, někdy chyba). -
„O jedno“ chyba – nesprávně nastavené hranice (např.
i <= 5místoi < 5) způsobí jeden průchod navíc. -
Nevhodné použití – pokud dopředu víte přesný počet opakování, je vhodnější
for.whileje ideální pro neznámý počet.
Shrnutí
-
whiletestuje podmínku na začátku každého průchodu. -
Smyčka se spustí pouze, pokud je podmínka
true. Jinak se neprovede vůbec. -
Je nutné zajistit, aby podmínka časem přestala platit → jinak vznikne nekonečná smyčka.
-
Hodí se pro případy, kdy neznáme dopředu počet opakování.
-
Pro pevný počet průchodů je přehlednější použít
for.
Úloha
Zadání (kontext úlohy):
Napiš program, který si „myslí“ jedno číslo a uživatel jej musí uhodnout. Dokud neuhodne správně, program ho bude znovu a znovu žádat o vstup.
Cíl úlohy:
Procvičit použití cyklu while, naučit se pracovat s podmínkou, která se opakuje až do splnění cíle, a kombinovat ji s vnořenými příkazy if–else.
Vstupní podmínky:
-
Student pracuje pouze s nově vytvořeným souborem
script.js. -
Do proměnné
tajneCislonastav číslo (např. 7). -
Do proměnné
tipdej prázdnou hodnotu (např.null).
Požadovaný výstup:
-
Program opakovaně zobrazí
prompt("Hádej číslo 1–10:"). -
Pokud uživatel zadá méně než tajné číslo →
alert("Moc malé!"). -
Pokud zadá více než tajné číslo →
alert("Moc velké!"). -
Pokud zadá správně → cyklus skončí a vypíše
alert("Gratuluji, uhodl jsi!").
Doplňující pokyny:
-
V cyklu musíš neustále aktualizovat proměnnou
tip, jinak by program skončil v nekonečné smyčce. -
Porovnávej čísla správně →
promptvrací řetězec, takže použijNumber(...)pro převod. -
Přidej i pojistku: pokud uživatel stiskne Storno (
tip == null), program se ukončí s hláškoualert("Hra ukončena.").
Řešení úlohy
Co je zde splněno
-
Využit cyklus
while, který běží, dokud tip není správný. -
Použit
promptpro získání vstupu od uživatele. -
Ošetřeno stisknutí Storno (
null) → program se ukončí. -
Správně převeden řetězec z
promptna číslo pomocíNumber(). -
Přidány tři možné reakce: moc malé, moc velké, uhodl jsi.
Vylepšení oproti začátečnické verzi
-
Použito
constpro neměnné tajné číslo. -
Využit nekonečný cyklus
while (true)s explicitnímbreakpro větší kontrolu. -
Méně podmínek díky použití ternárního operátoru (
? :) pro rozhodnutí malé/velké. -
Kód je kratší a čitelnější, ale stále přehledný.
Poznámky
Pokud by se zapomnělo aktualizovat
tipuvnitř cyklu, program by skončil v nekonečné smyčce.Funkce
promptvždy vrací řetězec, proto je nutný převod na číslo.