Booleova algebra

Z Kiwiki
Verzia z 23:20, 28. február 2020, ktorú vytvoril Matej.F (diskusia | príspevky)
Skočit na navigaci Skočit na vyhledávání

Slúži na matematický opis zákonov a pravidiel výrokovej logiky, ktorá rieši vzťahy medzi pravdivými a nepravdivými výrokmi. Pravdivému výroku prideľujeme logickú hodnotu 1 a nepravidelnému výroku logickú hodnotu 0. Nositeľom elementárnej informácie o pravdivosti alebo nepravdivosti výroku je logická premenná, ktorá môže nadobúda dve hodnoty 0 a 1.[1]

Základné operácie

Logický súčin (AND)

Odborne nazývaný logická konjukcia. Označuje sa symbolom ∧ alebo . ,prípadne * (v jazyku c/c++ je označená symbolom && pri podmienkach a symbolom & pri bitovom súčte), alebo sa používa pojem "a súčasne". Jeho výsledná hodnota Y je log. 1, ak oba vstupy A aj B sú log. 1, inak je výsledkom log. 0. Pri počítaní Booleových rovníc má logický súčin prednosť pred logickým súčtom.

A B Y = A ∧ B
0 0 0
0 1 0
1 0 0
1 1 1

Logický súčin


Logický súčet (OR)

Odborne nazývaný logická disjunkcia. Označuje sa symbolom ∨ alebo + (v jazyku c/c++ je označená symbolom || pri podmienkach a symbolom | pri bitovom súčine), alebo sa používa pojem "alebo". Jeho výsledná hodnota Y je log. 1, ak aspoň jeden vstup A alebo B sú log. 1, inak je výsledkom log. 0.

A B Y = A ∨ B
0 0 0
0 1 1
1 0 1
1 1 1

Logický súčet


Logická negácia (NOT)

Označuje sa symbolom [math]\neg[/math] alebo apostrofom ' (v jazyku c/c++ je označená symbolom ! pri podmienkach a symbolom ~ pri bitovej negácii).. Jeho výsledná hodnota Y je log. 1, ak vstup A je log.0, inak je výsledkom log. 1.

A Y = [math]\neg[/math]A
0 1
1 0


Zložitejšie logické operácie

Negovaný logický súčin (NAND)

Dá sa vyjadriť pomocou základných logických operácií: Y = [math]\neg[/math](A ∧ B)

A B Y = [math]\neg[/math](A ∧ B)
0 0 1
0 1 1
1 0 1
1 1 0


Negovaný logický súčet (NOR)

Dá sa vyjadriť pomocou základných logických operácií: Y = [math]\neg[/math](A ∨ B)

A B Y = [math]\neg[/math](A ∨ B)
0 0 1
0 1 0
1 0 0
1 1 0


Exkluzívny logický súčet (XOR)

Odborne nazývaný exkluzívna disjunkcia. Označuje sa symbolom ⊕ (v jazyku c/c++ je označená symbolom != pri podmienkach a symbolom ^ pri bitovom súčine), alebo sa používa pojem "nerovná sa". Jeho výsledná hodnota Y je log. 1, ak sa vstup A nerovná vstupu B, inak je výsledkom log. 0. Dá sa vyjadriť pomocou základných logických operácií: A ⊕ B = A ∧ [math]\neg[/math]B ∨ [math]\neg[/math]A ∧ B

A B Y = A ⊕ B
0 0 0
0 1 1
1 0 1
1 1 0


Negovaný exkluzívny logický súčet (XNOR)

V jazyku c/c++ sa používa označenie == v podmienkach, alebo sa používa pojem "rovná sa". Dá sa vyjadriť pomocou základných logických operácií: Y = [math]\neg[/math](A ⊕ B)

A B Y = [math]\neg[/math](A ⊕ B)
0 0 1
0 1 0
1 0 0
1 1 1


Zákony Booleovej algebry

Pre zjednodušenie práce s rovnicami v Booleovej algebre je možné používať tieto zákony:

Zákon súčtu Zákon súčinu
Zákon idempotencie A ∨ A = A A ∧ A = A
Zákon absorpcie A ∨ A ∧ B = A A ∧ (A ∨ B) = A
Zákon absorpcie negácie A ∨ ([math]\neg[/math]A ∧ B) = A ∨ B A ∧ ([math]\neg[/math]A ∨ B) = A ∧ B
Komutačný zákon A ∨ B = B ∨ A A ∧ B = B ∧ A
Asociatívny zákon A ∨ (B ∨ C) = (A ∨ B) ∨ C A ∧ (B ∧ C) = (A ∧ B) ∧ C
Distributívny zákon A ∨ (B ∧ C) = (A ∨ B) ∧ (A ∨ C) A ∧ (B ∨ C) = A ∧ B ∨ A ∧ C
Neutrálnosť nuly a jednotky A ∨ 0 = A A ∧ 1 = A
Agresívnosť nuly a jednotky A ∨ 1 = 1 A ∧ 0 = 0
Zákon vylúčeného tretieho A ∨ [math]\neg[/math]A = 1 A ∧ [math]\neg[/math]A = 0
Zákon negácie [math]\neg[/math]0 = 1 [math]\neg[/math]1 = 0
Zákon dvojitej negácie [math]\neg[/math][math]\neg[/math]A = A
De Morganove zákony [math]\neg[/math](A ∨ B) = [math]\neg[/math]A ∧ [math]\neg[/math]B [math]\neg[/math](A ∧ B) = [math]\neg[/math]A ∨ [math]\neg[/math]B

[2]

Príklad v jazyku C

Tento príklad zobrazuje, ako používať Booleovu algebru v jazyku C. Vstupy Booleovej algebry sú výrazy (A > B), (B > 2). Na začiatku programu je potrebné zadať dve čísla A a B, ktoré sa porovnávajú v daných výrazoch.

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4 	int A = 0;
 5 	int B = 0;
 6 	printf("Zadaj cisla pre porovnanie: ");
 7 	scanf("%d %d", &A, &B); //načítanie dvoch čísiel
 8 
 9 	//ak A > B a súčasne B > 2
10 	if ((A > B) && (B > 2)) printf("(A > B) && (B > 2) je pravda\n");
11 	else printf("(A > B) && (B > 2) je nepravda\n");
12 
13 	//ak A > B alebo B > 2
14 	if ((A > B) || (B > 2)) printf("(A > B) || (B > 2) je pravda\n");
15 	else printf("(A > B) || (B > 2) je nepravda\n");
16 
17 	//ak (A > B) negované
18 	if (!(A > B)) printf("!(A > B) je pravda\n");
19 	else printf("!(A > B) je nepravda\n");
20 
21 	return 0;
22 }

Zdroje