Jestliže nevidíte správně česká písmena, zvolte potřebné kódování češtiny manuálně.
V Booleově algebře existuje celkem 16 různých funkcí dvou proměnných BF(x,y):
Funkce č. |
Výsledek pro |
Výsledek pro |
Výsledek pro |
Výsledek pro |
Název funkce: |
0 |
0 |
0 |
0 |
0 |
generátor nuly |
1 |
0 |
0 |
0 |
1 |
AND |
2 |
0 |
0 |
1 |
0 |
|
3 |
0 |
0 |
1 |
1 |
x |
4 |
0 |
1 |
0 |
0 |
|
5 |
0 |
1 |
0 |
1 |
y |
6 |
0 |
1 |
1 |
0 |
XOR |
7 |
0 |
1 |
1 |
1 |
OR |
8 |
1 |
0 |
0 |
0 |
NOR |
9 |
1 |
0 |
0 |
1 |
ekvivalence |
10 |
1 |
0 |
1 |
0 |
NOT y |
11 |
1 |
0 |
1 |
1 |
implikace y=>x |
12 |
1 |
1 |
0 |
0 |
NOT x |
13 |
1 |
1 |
0 |
1 |
implikace x=>y |
14 |
1 |
1 |
1 |
0 |
NAND (Schäfferova fce) |
15 |
1 |
1 |
1 |
1 |
generátor 1 |
V tabulce 0 značí false a 1 true.
Povšimněte si, že očíslujeme-li funkce podle výše uvedené tabulky, udává
číslo funkce zapsané ve dvojkové soustavě svou kombinací bitů přímo výsledky pro
všechny 4 kombinace proměnných x
a y
.
Implementujte třídu BF
pro vyhodnocení obecné booleovské funkce.
Její konstruktor bude mít jeden parametr, jímž bude číslo funkce (0 až 15)
z výše uvedené tabulky. Dále implementujte funkci int eval(int x, int y)
,
která vyhodnotí hodnotu booleovské funkce zvolené konstruktorem pro zadanou dvojici
parametrů.
Například deklarujeme-li BF orf(7), schaf(14);
potom
orf.eval(x,y)
vyhodnotí
totéž jako x||y
a schaf.eval(x,y)
vyhodnotí Schäfferovu
funkci nad parametry x
a y
.
V hlavním programu main()
využijte funkci eval
k vytvoření
tabulky všech 16 booleovských funkcí podobnou tabulce uvedené na začátku tohoto
zadání (ovšem bez posledního vysvětlujícího sloupce).
boole.C
a po odladění na počítači aisa
zkopírujte do adresáře /export/e1/pb161/
váš_login/cvic8
. x
, y
funkce eval
nebudou 0 nebo 1,
pak použijte běžnou konvenci jazyka C, podle níž libovolné nenulové číslo se
interpretuje jako true
, tj. považuje ho za ekvivalentní 1. BF
bude mít jediný atribut, jímž bude číslo funkce podle
výše uvedené tabulky. Tento atribut bude soukromý. setw(počet_znaků)
.
(Pozor na to, že tento manipulátor platí jen pro bezprostředně následující
výstupní položku.) eval
nemusíte pro jednotlivé logické funkce vytvářet
žádnou strukturu switch
nebo zřetězené if
(ani složité
tabulky). Hodnotu funkce pro danou kombinaci parametrů můžete odvodit přímo
z čísla funkce pomocí bitových posunů a operací s bity, jak je naznačeno
v závěru odstavce Úvod do problematiky. Tělo funkce eval
tak
lze redukovat na jediný příkaz return
(!) eval
podle předchozího bodu bude
odměněna bonusem 1 bod. setw(počet_znaků)
.
(Pozor na to, že tento manipulátor platí jen pro bezprostředně následující
výstupní položku.) /home/jkucera/pb161/cvic8/boole
.![]() |
![]() |
![]() |