Как преобразовать логическое выражение из AND и OR только в NAND - PullRequest
4 голосов
/ 23 марта 2012

У меня есть задача, которая сводит меня с ума, потому что я понятия не имею, с чего начать.

Задача состоит в следующем: преобразовать данное логическое выражение так, чтобы оно содержало только операции NAND и никаких отрицаний.

c * b * a + /c * b * /a

Я предполагаю, что это возможно,: D, но я понятия не имею, как это сделать, и потратил несколько часов только на то, чтобы крутиться по кругу.

Может кто-нибудь указать мне правильное направление?

С уважением,
askin

Обновление:

благодаря ответам, я думаю, я нашел решение:

c*b*a = /(/(c*b*a)*/(c*b*a)) = A; 

/c*b*/a = /(/(/(a*a)*b*/(c*c))*/(/(a*a)*b*/(c*c))) = B; 

c*b*a+/c*b*/a = A + B = /(/(A*A)*/(B*B))

Ответы [ 3 ]

1 голос
/ 24 марта 2012

Для хорошего подробного обсуждения того, как создавать логические выражения только с одним типом функции / логического элемента (в данном случае NOR, но просто изменить его на NAND), посмотрите

Журнал Pragmatic Programmer 2012-03: Машина NOR

1 голос
/ 24 марта 2012
c * b * a + /c * b * /a

только NAND

/( /(c * b * a)  *  /( /(c * c) * b * /(a * a) ) )

NAND( NAND(c,b,a) , NAND( NAND(c,c), b, NAND (a, a)))

Так что вам нужно, два 3 вентиля NAND, три 2 вентиля NAND.

NOT (A) = NAND (A, A)

A ИЛИ B = NAND (NAND (A, A), NAND (B, B))

1 голос
/ 23 марта 2012

Это описание того, как строить другие логические элементы через NAND.Должно быть простым приложением:

http://en.wikipedia.org/wiki/NAND_logic

Например, C = A И B эквивалентно

C = NOT (A NAND B)  
or
C' = (A NAND B)
C = C' NAND C'   (effectively NOT'ing A NAND B)
...