平成13年午前問4ですが
X と Y の否定論理積 X NAND Y は、NOT ( X AND Y ) として定義される。
X OR Y を NAND だけを使って表した論理式はどれか?
ア ( ( X NAND Y ) NAND X ) NAND Y
イ ( X NAND X ) NAND ( Y NAND Y )
ウ ( X NAND Y ) NAND ( X NAND Y )
エ X NAND ( Y NAND ( X NAND Y ) )
ド・モルガンの定理を用いないで答えを導く方法ありますでしょうか。
ド・モルガンの定理を使わなくてもできる問題が
ほとんどなので覚えない方針で勉強しています。
Xtrue | Xfalse
Ytrue × ●
Yfales ● ●
という表を作って埋めていくとよいのでは?
X | Y | XnY
---+---+-----
0 | 0 | 1
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
これをもとに実際に計算してみます。
( n は NAND とします)
ア)
XnY | X | (XnY)nX
-----+---+---------
1 | 0 | 1
1 | 0 | 1
1 | 1 | 0
0 | 1 | 1
(XnY)nX | Y | ((XnY)nX)nY)
--------+---+--------------
1 | 0 | 1
1 | 1 | 1
0 | 0 | 1
1 | 1 | 0
イ)
X | X | XnX
---+---+----
0 | 0 | 1
0 | 0 | 1
1 | 1 | 0
1 | 1 | 0
Y | Y | YnY
---+---+-----
0 | 0 | 1
1 | 1 | 0
0 | 0 | 1
1 | 1 | 0
XnX | YnY | (XnX)n(YnY)
-----+-----+-------------
1 | 1 | 0
1 | 0 | 1
0 | 1 | 1
0 | 0 | 1
ウ)
XnY | XnY | (XnY)n(XnY)
-----+-----+-------------
1 | 1 | 0
1 | 1 | 0
1 | 1 | 0
0 | 0 | 1
エ)
Y | XnY | Yn(XnY)
---+-----+---------
0 | 1 | 1
1 | 1 | 0
0 | 1 | 1
1 | 0 | 1
X | Yn(XnY) | Xn(Yn(XnY))
---+---------+-------------
0 | 1 | 1
0 | 0 | 1
1 | 1 | 0
1 | 1 | 0
結果が X OR Y と同じになるのは、イですね。
ところで、プログラミングをするならば、
ド・モルガンの定理は結構頻繁に使います。
難しくないので、覚えても損はないと思います。
詳しくありがとうございます。
書いてもらった考え方でよくわかりました。
ところで、ド・モルガンの定理ってプログラミングで使うんですか?
私は使ったことないです。
>ところで、ド・モルガンの定理ってプログラミングで使うんですか?
複合条件文の否定を書きたいときに使います。
たとえば、
if (a>5 && a<10)
の否定を書きたいとき、
if (!(a>5 && a<10))
= if (!(a>5) || !(a<10))
= if (a<=5 || a>=10)
わざわざ例をありあがとうございます。
でも、私はちょっとこのような例でif文を
変換しないと思います。
一番シンプルにわかりやすくif文を書くのが一番だと思います。
例えば、上記式なら
if( 5 < a && a < 10 )
ぱっとみで、5 < a < 10ってわかる。みたいな。
また複雑なif文も同様で複雑な式を書かない。または分割する。
っていう感じでプログラムを書いています。
なので、やっぱり私はド・モルガンは使わないです。
これって私が一般的ではないのかなぁ。
また、試験勉強で得た知識を活用してないなぁって思いました。
dairygoodsさんに言われるまで、この定理が使えるって思いませんでしたもん。(^^;