Booleovská algebra. Pravdivostní tabulka. Karnaughova mapa. Booleovské n-krychle. Základní zákony. Unární a binární funkce. Podmínky. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. 1 / 45
Obsah přednášky 1 Booleovská funkce 2 Přehled unárních booleovských funkcí 3 Přehled binárních booleovských funkcí 4 Stavební prvky algoritmu 5 Blok příkazů 6 Podmíněný příkaz 2 / 45
Booleovská funkce 1. Úvod Spojité veličiny: Proměnné veličiny, které nabývají nekonečného množství hodnot. Lze je popsat spojitými proměnnými a vyjádřit reálnými datovými typy. Diskrétní veličiny: Proměnné veličiny, které nabývají konečného množství hodnot. Lze je popsat diskrétními proměnnými a vyjádřit celočíselnými datovými typy. Booleovská algebra: Proměnné veličiny nabývají hodnot 0,1. Hodnotu 0 lze interpretovat jako nepravda, hodnotu 1 jako pravda. V informatice hraje velmi výraznou roli při konstrukci relací. 3 / 45
Booleovská funkce 2. Booleovská funkce Booleovská funkce f je libovolná funkce, pro kterou platí f (x) : B n B, kde B = {0, 1}, a x = (x 1,..., x n). Nejčastější používané varianty: Příklady: n = 1, unární Jednoprvková booleovská algebra, B 1. Např. f (x 1 ): f (0) = 1, f (1) = 0. n = 2, binární Dvouprvková booleovská algebra, B 2. Např. f (x 1, x 2 ) : f (0, 0) = f (1, 1) = 0, f (0, 1) = f (1, 0) = 1. n = 3, ternární Tříprvková booleovská algebra, B 3. B 1 = {0, 1}, B 2 = {0, 1} 2 = {0, 1} {0, 1} = {{0, 0}, {0, 1}, {1, 0}, {1, 1}},... B n = {0, 1} n = {0, 1} {0, 1}... {0, 1} = {{0,..., 0}, {0,..., 1},..., {0,..., 0}, {0,..., 1}}. Počet prvků (uspořádaných entic): k = 2 n. Počet booleovských funkcí f :m = 2 k = 2 2n. Znázornění: Pravdivostní tabulka, Karnaughova mapa, Booleovská n-krychle. 4 / 45
3. Základní pojmy Minterm: součin kombinace n proměnných, např. m = x 1 x 2 x 3. Maxterm: součet kombinace n proměnných, např. M = x 1 + x 2 + x 3. Součtový tvar (SoMi), častější: Součinový tvar (PoMa): M i = m i = (x 1... x n) = x 1 +... + x n. 2 n 1 y = f (x 1,..., x n) = y i m i = i=1 2 n 1 y = f (x 1,..., x n) = (y i + M i ) = i=1 2 n 1 j:y j =1 m j. 2 n 1 j:y j =0 M j. On-set: množina všech mintermů mapovaných na 1 f 1 = {x i B n f (x i ) = 1}. Off-set: množina všech mintermů mapovaných na 0 f 0 = {x i B n f (x i ) = 0}.
Booleovská funkce 4. Pravdivostní tabulka: B 1 B 3 Schematické znázornění prvků a funkčních hodnot. Sousední prvky se liší právě o 1 hodnotu. Použitelné pro n 5, pak neefektivní. x 1 y = f (x 1 ) x 1 f 1 x 1 f 2 x 1 x 2 y = f (x 1, x 2 ) x 1 x 2 f 1 x 1 x 2 f 2 x 1 x 2 f 3 x 1 x 2 f 4 x 1 x 2 x 3 y = f (x 1, x 2, x 3 ) x 1 x 2 x 3 f 1 x 1 x 2 x 3 f 2 x 1 x 2 x 3 f 3 x 1 x 2 x 3 f 4 x 1 x 2 x 3 f 5 x 1 x 2 x 3 f 6 x 1 x 2 x 3 f 7 x 1 x 2 x 3 f 8 6 / 45
5. Ukázka součtového/součinového tvaru Funkce y = f (x 1, x 2 ) daná tabulkou (disjunkce): x 1 x 2 y m j M j 0 0 0 m 1 M 1 0 1 1 m 2 M 2 1 0 1 m 3 M 3 1 1 1 m 4 M 4 Součtový tvar: y = 0 m 1 + 1 m 2 + 1 m 3 + 1 m 4, = m 2 + m 3 + m 4, = (2, 3, 4), = x 1 x 2 + x 1 x 2 + x 1 x 2.. Součinový tvar: y = (0 + M 1 )(1 + M 2 )(1 + M 3 )(1 + M 4 ), = M 1, = (1), = x 1 + x 2. On/off set: f 1 = {{0, 1}, {1, 0}, {11}}, f 0 = {0, 1}.
6. Karnaughova mapa: B 1 B 3 Efektivnější reprezentace Booleovské funkce. Lze ji chápat jako speciální uspořádání pravdivostní tabulky. Indexy po hranách lze interpretovat jako souřadnice. B 1 : vektor, B 2 : matice, B 3 : projekce krychle. Sousední prvky v obou směrech se liší právě o 1 hodnotu. Lze použít pro minimalizaci výrazů bez znalosti booleovské algebry. x 1 x 1 x 2 0 1 0 x 1 x 2 x 1 x 2 x 1 1 x 1 x 2 x 1 x 2 x 3 00 01 11 10 0 x 1 x 2 x 3 x 1 x 2 x 3 x 1 x 2x 3 x 1 x 2x 3 x 1 1 x 1 x 2 x 3 x 1 x 2 x 3 x 1 x 2 x 3 x 1 x 2 x 3 x 2 Pro dimenze n > 4 komplikované. x 2 x 3 x 2 x 1 x 1
Booleovská funkce 7. Booleovské n-krychle: B 1 B 3 Grafická reprezentace. Každou booleovskou fci v B n lze znázornit n rozměrnou krychlí. Vrcholy představují mintermy ( ). Každá m-podkrychle tvořena 2 m mintermy, m < n. Hrany spojují prvky lišící se o 1. (x x x ) 1 2 3 (x 1, x 2, x 3 ) (x 1 x 2) (x 1 x 2) (x x x ) 1 2 3 (x x x ) 1 2 3 (x 1 ) (x 1) x 2 x 3 (x x x ) 1 2 3 (x 1 x 2 x 3 ) (x x ) (x x ) 1 2 1 2 (x x x ) (x x x ) 1 2 3 1 2 3 x 2 x 1 x 1 x 1 9 / 45
Booleovská funkce 8. Ukázka: B 2 Funkce: y = f (x 1, x 2 ) = x 1x 2 + x 2. Reprezentace tabulkou, Karnaughovou mapou a n-krychlemi. x 1 x 2 y x 1 /x 2 0 1 0 0 1 0 1 1 0 1 1 1 0 1 1 0 0 1 1 1 01 11 00 10 Tmavý uzel: 1. 10 / 45
9. Ukázka: B 3 Funkce: y = f (x 1, x 2, x 3 ) = x 1x 2 + x 1 x 3 + x 2 x 3. Reprezentace tabulkou, Karnaughovou mapou a n-krychlemi. x 1 x 2 x 3 y 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 x 1 /x 2 x 3 00 01 11 10 0 0 0 1 0 1 0 0 1 0 011 111 001 101 000 100 010 110
Booleovská funkce 10. Priorita booleovských operací Udává, v jakém pořadí jsou jednotlivé booleovské operace prováděny. Analogie s běžnými aritmetickými operacemi. Vyhodnocování výrazu z leva do prava. Pravidlo priority operací: Pravidlo priority operací platí následujícím způsobem: 1 Negace. 2 Konjunkce. 3 Disjunkce. Změna priorit operací: Pořadí vyhodnocování booleovských operací lze změnit prostřednictvím závorek. Příklad: platí následující ekvivalence?: f (x, y, z) : x (y + z x) = (x y) + z x. Neplatí. f (x, y, z) : ((x y) + z x) = x y + z x. Platí. 12 / 45
Booleovská funkce 11. Booleovské unární zákony Zákon dvojí negace: Zákon vyloučení třetí možnosti: Zákon sporu: Zákony opakování (idempotence): Zákony neutrálnosti: Zákony agresivnosti: ( x ) = x (1) x + x = 1 (2) x x = 0 (3) x + x = x (4) x x = x (5) x + 0 = x (6) x 1 = x (7) x + 1 = 1 (8) x 0 = 0 (9) 13 / 45
Booleovská funkce 12. Booleovské binární zákony (1/2) Komutativní zákony: x 1 + x 2 = x 2 + x 1 (10) x 1 x 2 = x 2 x 1 (11) Asociativní zákony: x 1 + (x 2 + x 3 ) = (x 1 + x 2 ) + x 3 (12) x 1 (x 2 x 3 ) = (x 1 x 2 ) x 3 (13) Distributivní zákony: x 1 (x 2 + x 3 ) = x 1 x 2 + x 1 x 3 (14) x 1 + (x 2 x 3 = (x 1 + x 2 ) (x 1 + x 3 ) (15) 14 / 45
Booleovská funkce 13. Booleovské binární zákony (2/2) De Morganovy zákony: (x 1 + x 2 ) = x 1 x 2 (16) (x 1 x 2 ) = x 1 + x 2 (17) Adsorpční zákony: x 1 + (x 1 x 2 ) = x 1 (18) x 1 (x 1 + x 2 ) = x 1 (19) Zákony adsorpce negace: x 1 + (x 1 x 2) = x 1 + x 2 (20) x 1 (x 1 + x 2) = x 1 x 2 (21) 15 / 45
Booleovská funkce 14. Minimalizace Booleovské funkce Vycházíme z Boolevských zákonů nebo používáme KM. Dva výrazy v SOM se liší v 1 proměnné v přímém/komplementárním tvaru y = a f (x) + a f (x),. = f (x) (a + a ), = f (x), tzv. Uniting Theorem. Dva výrazy v POS se liší v 1 proměnné v přímém/komplementárním tvaru y = (a + f (x)) (a + f (x)) = a a + a f (x) + a f (x) + f (x) f (x), = 0 + f (x) + f (x), = f (x). Vede k Shannon Expansion Theoremu Důsledek: f (x 1, x 2,..., x n) = x 1 f (1, x 2,..., x n) + x 1 f (0, x 2,..., x n), = x 1 g(x 2,..., x n) + x 1 h(x 2,..., x n). Každou Booleovskou funkci lze vyjádřit prostřednictvím konjunkce, disjunkce, negace. 16 / 45
Booleovská funkce 15. Příklady Součet sousedních mintermů (UT): Vyjádření maxtermu: y = f (x 1, x 2, x 3 ) = m 1 + m 2, = x 1 x 2 x 3 + x 1 x 2 x 3, = x 2 x 3. M 1 = (x 1 + x 2 + x 3 ) (x 1 + x 2 + x 3). = x 1 + x 2. Minimalizace Boleovské funkce v B 2 : y = f (x 1, x 2 ) = ([(x 1 x 2 ) + (x 1 x 2 )] + x 1, = [(x 1 x 2 ) ] (x 1 x 2 ) + x 1 (18) = (x 1 x 2 ) (x 1 x 2 ) + x 1 (2), = 0 + x 1 (4), = x 1. 17 / 45
Booleovská funkce 16. Minimalizace f s využitím Karnaughových map Efektivní způsob minimalizace Booleovských funkcí. Využití UT sousední mintermy v K-M se liší v 1 proměnné. Použitelné zpravidla pro n < 5. Výpočetně: Hledáme sousedy x j±1,k±1 k x j,k v K-M, kde f (x j±1,k±1 ) = 1 (n-tice). Na sousedy aplikován UT. Graficky: Hledáme, zda každá N-tice sousedů leží v x i, nebo v doplňku x i. Vyjádření s využitím SET (součet součinů). Pokud je většina prvků v K-M nenulová, lze pracovat s inverzní variantou K-M. Zjednodušení lze provést i bez znalostí Booleovských zákonů. 18 / 45
Booleovská funkce 17. Ukázka zjednodušení funkce (1/2) Dána funkce f (x 1, x 2, x 3 ) = (2, 4, 6), = x 1 x 2 x 3 + x 1 x 2 x 3 + x 1 x 2 x 3. x 2 x 3 x 00 01 11 10 1 0 1 0 0 1 f 1 = x 1 x 2 x 3 + x 1 x 2 x 3 = x 1 x 3 x 2 x 3 x 00 01 11 10 1 0 1 0 0 1 x 1 1 0 1 0 0 f 2 = x 1 x 2 x 3 + x 1 x 2 x 3 = x 2 x 3 1 0 1 0 0 00 01 11 10 x 1 x 2 x 3 1 0 00 01 11 10 x 1 x 2 x 3 1 0 00 01 11 10 x 1 x 2 x 3 1 0 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 x 3 x 3 x 2 f 1 = x 1 x 3 f 2 = x 2 x 3 19 / 45
Booleovská funkce 18. Ukázka zjednodušení funkce (2/2) Číselně: První n-tice Druhá n-tice Pak f 1 (x 1, x 2, x 3 ) = x 1 x 2 x 3 + x 1 x 2 x 3, = x 1 x 3. f 2 (x 1, x 2, x 3 ) = x 1 x 2 x 3 + x 1 x 2 x 3, = x 2 x 3. f (x 1, x 2, x 3 ) = f 1 (x 1, x 2, x 3 ) + f 2 (x 1, x 2, x 3 ), = x 1 x 3 + x 2 x 3. Graficky: První n-tice: vně x 1 (v x 1 ), uvnitř x 3, protíná x 2 (neuplatní se): f 1 (x 1, x 2, x 3 ) = x 1 x 3. Druhá n-tice: protíná x 1 (neuplatní se), vně x 2 (v x 2 ), uvnitř x 3 : f 2 (x 1, x 2, x 3 ) = x 2 x 3. 20 / 45
Booleovská funkce 19. Tautologie, kontradikce, ekvivalence Tautologie Kontradikce Splnitelnost Ekvivalence f, g f 1 = B n, f 0 =. f 0 = B n, f 1 =. f 0 B n. f (x) = g(x), x B n. 21 / 45
Booleovská funkce 20. Tautologie Představuje booleovskou formuli, která je vždy pravdivá. Pro libovolnou kombinaci argumentů nabývá hodnoty pravda. Unárních / binární zákony představují tautologie. Tautologie používány při posuzování identity vztahů, důkazech, atd. Nejjednodušší tautologie: zákon dvojí negace (x ) = x. Při navrhování podmínek v cyklu/rekurze se vyhýbejme tautologiím. Jinak vzniknou nekonečný cyklus či nekonečná rekurze. 22 / 45
Booleovská funkce 21. Kontradikce Booleovskou funkce, která je vždy nepravdivá. Pro libovolnou kombinaci argumentů nabývá hodnoty nepravda. Kontradikce je negací tautologie, tautologie je negací kontradikce. Jednoduchá kontradikce: zákon sporu x x = 0. Při navrhování podmínek v cyklu/rekurze se vyhýbejme kontradikcím. Jinak vzniknou nekonečný cyklus či nekonečná rekurze. 23 / 45
22. Příklad Ověřte, zda f (x) je tautologie/kontradikce: f (x) = x (x + (x + x )), = x (x + 1) 3, = x (1 ) 9, = x 0 10, = 0. Funkce f (x) je kontradikcí. Ověřte, zda f (x 1, x 2 ) je tautologie/kontradikce: f (x 1, x 2 ) = [ ((x 1 x 2 ) + x 1 ) (x 1 (x 2 + x 1 ) ], = [ ((x 1 x 2 ) + x 1 ) (x 1 ) ] 20, = (x 1 x 1 ) 19, = 0 4, = 1. Funkce f (x 1, x 2 ) je tautologií.
Přehled unárních booleovských funkcí 23. Unární booleovská funkce Unární booleovská funkce pracuje pouze s jednou proměnnou f (x) : B 1 B, x = x 1 Definiční obor unární funkce dán 2 1 hodnotami. Existuje 2 21 unárních booleovských funkcí. x 1 f 1 (x 1 ) f 2 (x 1 ) f 3 (x 1 ) f 4 (x 1 ) 0 0 1 0 1 1 0 0 1 1 Přehled unárních booleovských funkcí: Falsum. Negace. Aserce. Verum. 25 / 45
24. Falsum Přehled unárních booleovských funkcí Funkci y = f 1 (x) nazýváme falsum, jestliže platí f 1 (x 1 ) {0}. Tato funkce libovolné hodnotě x přiřazuje hodnotu nepravda. Pravdivostní tabulka funkce f 1 (x): x f 1 (x) 0 0 1 0 26 / 45
25. Negace Přehled unárních booleovských funkcí Funkci y = f 2 (x) nazýváme negací, jestliže platí { 1, pro x 1 = 0, f 2 (x 1 ) = 0, pro x 1 = 1.. Negace je nejznámější a nejčastěji používanou unární funkcí. Přiřazuje hodnotě f (x 1 ) opačnou hodnotu proměnné x 1. Označení negace: x 1. Hodnota x 1 je doplňkem (complement) k x 1 (a naopak). Pravdivostní tabulka negace: x f 1 (x) 0 1 1 0 V programovacích jazycích odvozených od jazyka C bývá negace označována symbolem!. 27 / 45
26. Aserce Přehled unárních booleovských funkcí Funkci y = f 3 (x) nazýváme asercí, jestliže platí { 1, pro (x 1 ) = 1, f 3 (x 1 ) = 0, pro (x 1 ) = 0.. Aserce přiřazuje hodnotě f (x 1 ) hodnotu proměnné x 1. Pravdivostní tabulka aserce: x f 1 (x) 0 0 1 1 Tato funkce se v praxi příliš nepoužívá. 28 / 45
27. Verum Přehled unárních booleovských funkcí Funkci y = f 4 (x) nazýváme verum, jestliže platí f 4 (x 1 ) {1}. Tato funkce libovolné hodnotě x 1 přiřazuje hodnotu True. Pravdivostní tabulka verum: x f 1 (x) 0 1 1 1 Tato funkce se v praxi příliš nepoužívá. 29 / 45
Přehled binárních booleovských funkcí 28. Binární booleovská funkce Unární booleovská funkce pracuje pouze s dvěma proměnnými f (x) : B 2 B, x = {x 1, x 2 } Definiční obor binární funkce dán 2 2 hodnotami. Existuje 2 212 = 16 binárních booleovských funkcí. Nejčastěji používané booleovské binární funkce: Konjunkce. Disjunkce. Negace konjunkce. Negace disjunkce. Ekvivalence. Nonekvivalence. Implikace. 30 / 45
Přehled binárních booleovských funkcí 28. Binární booleovská funkce Unární booleovská funkce pracuje pouze s dvěma proměnnými f (x) : B 2 B, x = {x 1, x 2 } Definiční obor binární funkce dán 2 2 hodnotami. Existuje 2 212 = 16 binárních booleovských funkcí. Nejčastěji používané booleovské binární funkce: Konjunkce. Disjunkce. Negace konjunkce. Negace disjunkce. Ekvivalence. Nonekvivalence. Implikace. 31 / 45
Přehled binárních booleovských funkcí 30. Přehled Booleovských funkcí v B 2 x 1 x 2 f 1 f 2 f 3 f 4 f 5 f 6 f 7 f 8 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 1 0 1 x 1 x 2 f 9 f 10 f 11 f 12 f 13 f 14 f 15 f 16 0 0 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 1 0 1 32 / 45
31. Konjunkce Přehled binárních booleovských funkcí Konjunkcí neboli logickým součinem nazýváme takovou funkci f popsanou následující pravdivostní tabulkou: x 1 x 2 f (x 1, x 2 ) 0 0 0 0 1 0 1 0 0 1 1 1 Funkční hodnota je rovna jedné pouze v případě, kdy jsou oba vstupní argumenty x 1, x 2 rovny jedné. Logický součin označujeme znakem, zápis a b čteme jako a i b. Pro vyjádření konjunkce používáme logickou spojku AND. V programovacích jazycích odvozených od jazyka C bývá konjunkce označována symbolem &&. 33 / 45
Tomáš V Bayer programovacích bayertom@natur.cuni.cz jazycích (Katedra aplikované odvozených Booleovská geoinformatiky algebra. aod kartografie, jazyka Přírodovědecká C bývá fakulta disjunkce UK.) 34 / 45 32. Disjunkce Přehled binárních booleovských funkcí Disjunkcí neboli logickým součtem nazýváme takovou funkci f popsanou následující pravdivostní tabulkou: x 1 x 2 f (x 1, x 2 ) 0 0 0 0 1 1 1 0 1 1 1 1 Poslední řádkem tabulky se disjunkce liší od obyčejného součtu. Funkční hodnota je rovna nule pouze v případě, kdy jsou oba vstupní argumenty x 1, x 2 rovny nule. Logický součet označujeme znakem +, zápis a + b čteme jako a nebo b. Pro vyjádření disjunkce používáme logickou spojku OR.
Přehled binárních booleovských funkcí 33. Negace konjunkce Negaci logického součinu nazýváme takovou funkci f popsanou následující pravdivostní tabulkou. x 1 x 2 f (x 1, x 2 ) 0 0 1 0 1 1 1 0 1 1 1 0 Funkční hodnota nabývá jedné v případě, kdy oba argumenty x 1, x 2 nejsou rovny jedné. Tuto funkci nazýváme Shefferovou funkcí. Pro její vyjádření používáme logickou spojku NAND. 35 / 45
Přehled binárních booleovských funkcí 34. Negace disjunkce Negaci logického součtu nazýváme takovou funkci f popsanou následující pravdivostní tabulkou: x 1 x 2 f (x 1, x 2 ) 0 0 1 0 1 0 1 0 0 1 1 0 Funkční hodnota nabývá jedné v případě, kdy oba argumenty x 1, x 2 nejsou jsou rovny nule. Tuto funkci nazýváme Pierceovou funkcí. Pro její vyjádření používáme logickou spojku NOR. 36 / 45
Přehled binárních booleovských funkcí 35. Nonekvivalence Nonekvivalencí nazýváme takovou funkci f popsanou následující pravdivostní tabulkou: x 1 x 2 f (x 1, x 2 ) 0 0 0 0 1 1 1 0 1 1 1 0 Funkce je analogií sčítání, označujeme ji znakem. Její hodnota je pravdivá pokud se oba argumenty x 1, x 2 liší. Pro její vyjádření používáme XOR= exlucive OR. 37 / 45
36. Implikace Přehled binárních booleovských funkcí Implikací nazýváme takovou funkci f popsanou následující pravdivostní tabulkou: x 1 x 2 f (x 1, x 2 ) 0 0 1 0 1 1 1 0 0 1 1 1 U implikace je důležité pořadí argumentů x 1, x 2, x 1 je p edpoklad a x 2 je tvrzení. Lze interpretovat jako Jestliže platí x 1, pak platí x 2. Funkční hodnota nabývá False, pokud je první výrok pravdivý a druhý nepravdivý. 38 / 45
Stavební prvky algoritmu 37. Stavební prvky programu Základní stavební prvky programu: příkazy. Dělení příkazů: Jednoduché příkazy Základní stavební jednotka programu, neobsahují další příkazy. Přiřazovací příkaz, prázdný příkaz, příkaz skoku, příkaz podprogramu (procedury, funkce). Strukturované příkazy Tvořeny jednoduchými či dalšími příkazy. Složený příkaz (blok), příkaz pro větvení programu (podmínka), příkaz pro opakování (cyklus). Umožňují realizovat více operací nad datovými položkami. Vzájemně mohou být kombinovány. Implementovány prakticky ve všech programovacích jazycích. 39 / 45
Blok příkazů 38. Blok příkazů Používají se v případech, kdy je nutno provádět více akcí. Posloupnost kroků, které jsou prováděny postupně v zadaném pořadí. Jednotlivé kroky mohu/nemusí být elementární. Označován jako složený příkaz. V Pythonu uvozen : odsazení tabelátorem, uvnitř libovolný počet příkazů. V jiných jazycích (C/C++/Java) použity {}. if x < 0: # Nasleduje blok a = 10 b = 2.0 * a; c = a * a + b * b; print (c) #Ackoliv promenna deklarovana v bloku, #lze ji pouzit i jinde 40 / 45
Podmíněný příkaz 39. Příkazy pro větvení programu Příkazy pro větvení bývají často označovány jako tzv. řídící struktury. Patří k nejčastěji používaným konstrukcím. Ovlivňují, které příkazy budou provedeny v závislosti na hodnotách booleovských výrazů. Bývají proto nazývány podmíněnými příkazy. Realizují větvení algoritmu, reagují na situace, ke kterým dochází v průběhu zpracování programu. O tom, která z větví se bude provádět, rozhoduje pravdivostní hodnota podmínky. Typy podmínek: neúplná podmínka. úplná podmínka. 41 / 45
Podmíněný příkaz 40. Neúplná podmínka Pokud výraz nabývá pravdivé hodnoty, provede se příkaz resp. blok příkazů. Neřeší, co se bude dělat v případě nesplnění podmínky. if vyraz: prikaz1 prikaz2... Pokud je to možné, podmínky neuvádíme v negaci, ale v kladné formě. Příklady: if x > 0: x += 10 Vnořená podmínka: podmínka uvnitř těla jiné podmínky if x < 0: if y > 0: x -= 10 if (x < 0) & (y > 0): x -= 10 #Vnorena podminka #Spojeni obou podminek do jedne 42 / 45
41. Úplná podmínka Podmíněný příkaz Úplná podmínka vznikne rozšířením neúplné podmínky o konstrukci else. Provedena, pokud podmínka nebude splněna. Umožňuje konstruovat složitější podmínky. Jednoduchý příkaz v těle podmínky: Příklady: if vyraz: prikaz1 prikaz2... else: prikaz3 prikaz4... if x > 0: x += 10 else: x -= 10 43 / 45
Podmíněný příkaz 42. Kombinace více podmínek Pro kombinaci více podmínek používán příkaz elif. Umožňuje realizovat složitější větvení (>2 varianty) if vyraz1: prikaz1 prikaz2... elif vyraz2: prikaz3 prikaz4... elif vyraz3: prikaz5 prikaz6... else: prikaz7 prikaz8... 44 / 45
43. Příklad: kvadratická rovnice import math from math import sqrt a = int(input("a: ")) b = int(input("b: ")) c = int(input("c: ")) #Standardni vstup D = b * b - 4. * a * c #Diskriminant if D < 0: #0 reseni print ("Nema reseni v R.") elif D == 0: #1 reseni x = (-b + sqrt(d))/(2. * a) print ("Dvojnasobny koren: ", x) else: #2 reseni x1 = (-b - sqrt(d))/(2. * a) x2 = (-b + sqrt(d))/(2. * a) print ("Dva koreny: ", x1, " a", x2)