Úloha 3 – Kombinace logických operátorů

Site: Moodle ZČU
Course: Sada úloh pro procvičení v předmětu KVD/PGM1P (BP Vítek Dolný)
Book: Úloha 3 – Kombinace logických operátorů
Printed by: Gast
Date: Sunday, 18 October 2026, 11:30 AM

Úvod do úlohy

Umět používat logické operátory jednotlivě je první krok, ale skutečná síla se projeví až ve chvíli, kdy je dokážeme kombinovat do složitějších podmínek. Programy často potřebují rozhodovat na základě více faktorů – například zda je uživatel přihlášen, má dostatečná oprávnění a současně není jeho účet zablokován. Podobně v cyklech chceme pokračovat jen tehdy, pokud platí kombinace několika pravidel. Proto je důležité nejen psát podmínky správně, ale i přehledně, aby jim rozuměl i někdo jiný, kdo kód čte.

Teorie a principy

  • Kombinace operátorů:

    • && (AND) a || (OR) se dají spojovat do řetězců složitých logických podmínek.

    • Priorita: ! má přednost před &&, a && má přednost před ||. Přesto je vhodné používat závorky, aby byla logika jasná.

  • Negace (!):

    • Negace umožňuje vyjádřit opak podmínky.

    • Dvojitá negace !! převádí libovolnou hodnotu na čistý boolean (true / false).

  • Zjednodušování výrazů:

    • !(a && b) je totéž co !a || !b (De Morganovy zákony).

    • !(a || b) je totéž co !a && !b.

    • Tyto přepisy pomáhají vyjadřovat podmínky čitelněji a bez zbytečných složitostí.

Praktické příklady kódu

1. Kombinace v if podmínce

2. Použití v cyklu

3. Přepis pomocí De Morganových zákonů (Štěpán, J., 1995, prohlíženo 20. 9. 2025)

Typické chyby / záludnosti

  • Chybějící závorky – studenti spoléhají na prioritu operátorů a výraz pak nedává očekávaný výsledek.

  • Nadměrné používání negací – složité if (!(a && !b)) se dají přepsat na srozumitelnější varianty.

  • Nepřehledné podmínky – příliš dlouhý řádek s více && a || bez komentářů či rozdělení znesnadňuje čtení.

  • Zapomínání na možnost zjednodušení – studenti někdy píšou výraz jako if (a === true && b === false) místo prostého if (a && !b).

Shrnutí

  • Logické operátory lze kombinovat a tvořit složité podmínky v if, cyklech i jiných výrazech.

  • Priorita: ! > && > ||, ale používej závorky pro srozumitelnost.

  • Negace pomáhá vyjádřit opak, ale je vhodné podmínky zjednodušovat pomocí De Morganových zákonů.

  • Piš podmínky přehledně, aby byly snadno čitelné i pro ostatní.

Úloha

Zadání (kontext úlohy)

Spravuješ systém, který rozhoduje o přístupu uživatele.
Přístup má být povolen pouze tehdy, když je uživatel přihlášen, má roli „správce“ a současně není blokovaný.


Cíl úlohy

Procvičíš si:

  • kombinování více logických operátorů (&&, ||, !),

  • použití závorek pro přehlednost,

  • přepis podmínek podle De Morganových zákonů.


Vstupní podmínky
  • Pracuješ pouze s nově vytvořeným souborem script.js.


Požadovaný výstup
  1. Vytvoř proměnné:

    • prihlasen (boolean),

    • role (řetězec),

    • blokovan (boolean).

  2. Pokud je uživatel:

    • přihlášen &&

    • má roli "správce" &&

    • není blokovaný,
      vypiš do konzole: Máš plný přístup

     
  3. Ve všech ostatních případech vypiš: Přístup omezen

  4. Bonus:

    • Přepiš původní podmínku tak, aby místo složité negace
      !(prihlasen && role === "správce" && !blokovan)
      byla použita srozumitelnější varianta podle De Morganových zákonů,
      například rozdělením do dílčích podmínek spojených ||.


Doplňující pokyny
  • Používej závorky, aby byla logika jasně čitelná.

  • Neboj se rozdělit podmínku na více řádků pro lepší přehlednost.

  • Komentuj, proč jsi zvolil konkrétní přepis u bonusového řešení.

Řešení úlohy

Co je zde splněno

  • Vytvořeny proměnné prihlasen, role, blokovan.

  • Podmínka vyžaduje, aby uživatel byl přihlášen, měl roli „správce“ a nebyl blokovaný.

  • V ostatních případech se vypíše „Přístup omezen“.

  • Bonus: přidána alternativa s využitím De Morganových zákonů pro čitelnější zápis negace.

Poznámky

  • Použití závorek v podmínce zvyšuje čitelnost a pomáhá předcházet logickým chybám.

  • Druhá varianta je často přehlednější, protože přímo vyjmenovává důvody, proč přístup není povolen.