否定論理積について

[戻る]
とおりすがり 2002/03/29(金) 08:12:26
平成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 ) ) 

ド・モルガンの定理を用いないで答えを導く方法ありますでしょうか。

ド・モルガンの定理を使わなくてもできる問題が
ほとんどなので覚えない方針で勉強しています。

いもちぃ 2002/03/29(金) 13:39:40
    Xtrue | Xfalse
Ytrue  ×    ●
Yfales  ●    ●

という表を作って埋めていくとよいのでは?

dairygoods 2002/03/29(金) 13:51:16
 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 と同じになるのは、イですね。

ところで、プログラミングをするならば、
ド・モルガンの定理は結構頻繁に使います。
難しくないので、覚えても損はないと思います。

とおりすがり 2002/03/29(金) 14:14:56
[[解決]]
詳しくありがとうございます。
書いてもらった考え方でよくわかりました。

ところで、ド・モルガンの定理ってプログラミングで使うんですか?
私は使ったことないです。

dairygoods 2002/03/29(金) 14:39:46
>ところで、ド・モルガンの定理ってプログラミングで使うんですか?

複合条件文の否定を書きたいときに使います。

たとえば、
if (a>5 && a<10)

の否定を書きたいとき、
if (!(a>5 && a<10))
= if (!(a>5) || !(a<10))
= if (a<=5 || a>=10)

とおりすがり 2002/03/29(金) 17:13:11
わざわざ例をありあがとうございます。
でも、私はちょっとこのような例でif文を
変換しないと思います。
一番シンプルにわかりやすくif文を書くのが一番だと思います。
例えば、上記式なら
if( 5 < a && a < 10 )
ぱっとみで、5 < a < 10ってわかる。みたいな。
また複雑なif文も同様で複雑な式を書かない。または分割する。
っていう感じでプログラムを書いています。
なので、やっぱり私はド・モルガンは使わないです。
これって私が一般的ではないのかなぁ。

また、試験勉強で得た知識を活用してないなぁって思いました。
dairygoodsさんに言われるまで、この定理が使えるって思いませんでしたもん。(^^;

古いスレッドには追加発言できません。