否定論理積について – 情報処理技術者試験 – Home

通知
すべてクリア

[解決済] 否定論理積について


とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 22年前
投稿: 180
Topic starter  

平成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 ) )

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

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


引用未解決
トピックタグ
いもちぃ
 いもちぃ
(@いもちぃ)
ゲスト
結合: 22年前
投稿: 70
 

    Xtrue | Xfalse
Ytrue  ×    ●
Yfales  ●    ●

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 22年前
投稿: 1421
 

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 と同じになるのは、イですね。

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


返信引用
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 22年前
投稿: 180
Topic starter  

詳しくありがとうございます。
書いてもらった考え方でよくわかりました。

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


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 22年前
投稿: 1421
 

>ところで、ド・モルガンの定理ってプログラミングで使うんですか?

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

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

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


返信引用
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 22年前
投稿: 180
Topic starter  

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました