2

次の質問が表示されました。

次の表は、3つの入力値a、b、およびcを使用したブール関数の出力dを示しています。

 a  b  c  |  d 
----------+----
 0  0  0  |  1 
 0  0  1  |  1 
 0  1  0  |  1 
 0  1  1  |  0 
 1  0  0  |  0 
 1  0  1  |  0 
 1  1  0  |  0 
 1  1  1  |  0 

AND、OR、XOR、NOT、NAND、NOR、またはXNORの適切な組み合わせを使用して、このブール関数を指定します。

正解はなぜですか。

d := (((NOT a) AND (NOT b)) AND (NOT c)) OR
(((NOT a) AND (NOT b)) AND c) OR
(((NOT a) AND b) AND (NOT c))

私の答え。(((NOT a)AND(NOT b))AND(NOT c))

a   b   c     d
===============
0   0   0     1      
.
. 
.

これはどのように導き出されますか?

4

5 に答える 5

2

あなたが与える答えは、積和(SOP) 式と呼ばれます。OR で結合された 3 つの大きな項を見てください。

  • ((NOT a) AND (NOT b)) AND (NOT c))
  • ((NOT a) AND (NOT b)) AND c)
  • ((NOT a) AND b) AND (NOT c)

ここで真理値表を見てください。ちょうど 3 行のd列に 1 があります。これらの 3 行のそれぞれは、3 つの用語の 1 つに対応します。

のように、より簡潔な答えを構成することはできますがd := (NOT a) AND (NOT(b AND c))、それらはあなたが与えた積和式ではありません。

于 2012-06-03T13:37:33.207 に答える
1

3 つの変数の場合、8 つのエントリ (2^3)は、3 つの変数、、の間で可能なすべての変数の完全な組み合わせを表します。変数は (見てわかるように) 関数 say の出力です。abcdf(x)

ここで、8 つのエントリには考えられるすべてのバリエーションが含まれているため、特定の組み合わせが発生した場合にのみ出力dがブール値になると推測できます。1結果は0他のすべての場合にあります。

したがって、出力が であるすべての行を単純に結合します1。あなたが持っている結果はこれに従います。

手順は簡単です。

  • 出力が のすべての行を取得します1
  • 行ごと1に、変数の値の結果になる式を出力します。
    • ANDすべての変数。いずれかの変数に value がある場合は0、それをing するNOT前に。AND
  • OR上記のステップで見つかった 8 つの式すべて。
于 2012-06-03T13:38:24.960 に答える
1
  • 表の上半分を確認してください。atrue であるためには false でfunなければなりません。
  • また、 と の両方bを同時にc使用することはできませんtrue。だから、それはする必要があります!(b && c)
  • これは要約funすると!a && !(b && c)
  • De Morgan の定理を 2 番目の部分に適用して使用できます!b || !ca、それでも偽である必要があるため、!a && (!b || !c)最終的には次のようになります。
于 2012-06-03T13:37:02.053 に答える
1

(完全な) 真理値表から関数を導き出す最も簡単な方法は、結果として 1 (または 0) を含む行のみを読み取り、選言(または連結) 正規形を書き留めることです。

あなたのテーブルでは、結果 1 が 0 よりも少ないため、選言正規形は短くなります。表からわかるdように、正確に 3 つのケースで 1 になります。

  • a=0、b=0、c=0
  • a=0、b=0、c=1
  • a=0、b=1、c=0

これらをまとめると、次のようになります: (! = not, & = and, v = or)

d = (!a & !b & !c) v (!a & !b & c) v (!a & b & !c)

このフォームは、他のすべてのケースを自動的に除外します。この式を単純化することもできます。真理値表をよく見ると、とのc両方が 0 の場合、 の値は問題にならないことがわかります。したがって、最初の 2 つの部分を折りたたんで、次の選言形式を取得できます: (もはや通常の形式ではありません)ab

d = (!a & !b) v (!a & b & !c)

分配性を適用すると、さらに短くなる可能性があります。

d = !a & (!b v (b & !c))

ほぼ完了しました:

d = !a & (!b v b) & (!b v !c)   | applying (x v !x) == 1 and (1 & y) == y
  = !a & (!b v !c)              | applying De Morgan (!a v !b) == !(a & b)
  = !a & !(b & c)

終わり。

于 2012-06-03T13:55:15.237 に答える