В качестве домашнего задания я должен написать xy+xz+yz, используя только порт NANDS. Я буду использовать обозначение NAND (x, y) - или другие типы скобок, чтобы прояснить ситуацию - под моей попыткой, а затем объяснение каждого шага. Я хотел бы знать, правильно ли я делаю это и есть ли способы сделать это лучше.

Мое решение

NAND[NAND(NAND(NAND(x,y),NAND(x,z)),NAND(NAND(x,y),NAND(x,z))),NAND(NAND(NAND(y,z),NAND(y,z)),NAND(NAND(y,z),NAND(y,z))))]`

Я знаю, что это действительно невозможно читать и отслеживать. Простите, не знала, как сделать это красивее. Надеюсь, мое объяснение прояснит ситуацию.

Я разделил xy+xz+yz на две группы: xy+xz и yz

Первая группа:

xy+xz = NAND(NAND(x,y),NAND(xz)) = NOT[NOT(xy)*NOT(xz)] = xy+xz

Вторая группа:

yz = NAND(NAND(y,z),NAND(y,z)) = NOT(NOT(yz)*NOT(yz)) = yz (since yz+yz = yz)

Теперь мне нужно объединить первую группу со второй, для удобства чтения я назову первую группу (в NAND как g1 ) и вторую g2 ;

g1+g2= NAND[NAND(g1,g1),NAND(g2,g2)] = NOT[NOT(g1)*NOT(g2)] = g1+g2

Итак, в конце:

xy+xz+yz= NAND[NAND(NAND(NAND(x,y),NAND(x,z)),NAND(NAND(x,y),NAND(x,z))),NAND(NAND(NAND(y,z),NAND(y,z)),NAND(NAND(y,z),NAND(y,z))))]

Мои рассуждения верны? Есть способ попроще?

Большое спасибо, ребята

1
J Alan 11 Мар 2018 в 01:06

1 ответ

Лучший ответ

Ваш ответ правильный (хотя у вас пропущены некоторые знаки препинания - пара запятых и скобки). Вы можете подтвердить это, сгенерировав таблицу истинности всех возможных выходов. Для подтверждения я написал несколько строк кода на C. Что касается вашего второго вопроса о том, есть ли более простой способ, я не знаю. Может кто-нибудь еще может помочь.

x   y   z   xy+xz+yz     nands
------------------------------
0   0   0      0           0
0   0   1      0           0
0   1   0      0           0
0   1   1      1           1
1   0   0      0           0
1   0   1      1           1
1   1   0      1           1
1   1   1      1           1

1
MFisherKDX 11 Мар 2018 в 01:32