Ú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 <= 5 místo i < 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. while je ideální pro neznámý počet.

Shrnutí

  • while testuje 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é tajneCislo nastav číslo (např. 7).

  • Do proměnné tip dej 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ě → prompt vrací řetězec, takže použij Number(...) pro převod.

  • Přidej i pojistku: pokud uživatel stiskne Storno (tip == null), program se ukončí s hláškou alert("Hra ukončena.").

Řešení úlohy

Co je zde splněno

  • Využit cyklus while, který běží, dokud tip není správný.

  • Použit prompt pro získání vstupu od uživatele.

  • Ošetřeno stisknutí Storno (null) → program se ukončí.

  • Správně převeden řetězec z prompt na čí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 const pro neměnné tajné číslo.

  • Využit nekonečný cyklus while (true) s explicitním break pro 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 tip uvnitř cyklu, program by skončil v nekonečné smyčce.

  • Funkce prompt vždy vrací řetězec, proto je nutný převod na číslo.