Comments 37
nB = (!(A & B)) | A
nC = (!C)
nA = (!(A | B)) & B
nB = (!(A | B)) & A
nC = (!C)
Итак, предположительно что-то вроде:
D = !(A|B|C)
E = !(A&B&C)
Тогда:
nA = (B|C|D)&(B|D)&(C|D)&(D|E)
или
nA = (B&C&E)|(B&E)|(C&E)|(D&E)
Ну и для nB, nC аналогично.
nB = (A|C|D)&(A|D)&(C|D)&(D|E)
или
nB = (A&C&E)|(A&E)|(C&E)|(D&E)
и для C:
nC = (A|B|D)&(A|D)&(B|D)&(D|E)
или
nC = (A&B&E)|(A&E)|(B&E)|(D&E)
Проверяйте.
— Но тут, по-моему — главное догадка, что два инвертора нужно использовать для инверсии («всего по и») и («всего по или»). А потом уже плясать от комбинаций из 5 входных бит.
Догадка или верна или нет. Частности — это просто время на проверки.
— Что любопытно, число входных сигналов неважно. Вот только с практической точки зрения преобразователь может оказаться неадекватно сложным.
Я могу доказать, что в любом верном решении один из инверторов будет использовать выход другого (возможно, опосредовано). В вашем решении это не так, так что дальше можно не смотреть, оно неверное.
Вспомнил ГПиМРМ и задачки в купе в 8-й главе… Мда. :)
А можно узнать, где описывается то, что «любом верном решении один из инверторов будет использовать выход другого»? Откуда такой частный вывод? Или для этого обязательно придется читать где-то все готовое решение?
Где описывается, не знаю, я это вывел сам. Идея такая: рассмотрим последовательность переходов 000 → 100 → 110 → 111 (три цифры — значения A, B и C). Эта последовательность монотонная (это значит, что в ней 1 никогда не заменяется на 0). Последовательность значений любой функции, использующая только операции И и ИЛИ, также будет монотонной. Если ни один из инверторов не использует значение другого, то последовательность входных значений будет монотонной — или константой, или сколько-то нулей, затем сколько-то единиц. То есть, будет максимум один переход, где 0 заменяется на 1. На выходе, соответственно, максимум 1 переход, где 1 заменяется на 0.
Итоговые значения (nA, nB и nC) являются монотонными функциями от A, B, C и выходов инверторов. Чтобы монотонная функция изменила значение с 1 на 0, нужно, чтобы один из параметров изменил значение с 1 на 0. В данной последовательности на каждом из трёх переходов одно из значений nA, nB и nC меняется с 1 на 0, при этом A, B и C не меняют значение с 1 на 0. Значит, это должны делать выходы инверторов, но их всего 2, и каждый меняет значение выхода с 1 на 0 максимум на одном из переходов. То есть, на одном из трёх переходов ни один из двух инверторов не меняет значение выхода с 1 на 0, и на этом переходе значение результата не может измениться с 1 на 0, то есть хотя бы на одном из этих четырёх наборов входных значений выходные значения будут неправильные.
Если один из инверторов использует значение другого, то это доказательство не работает (вход инвертора уже не является монотонной функцией), и задачу можно решить.
К сожалению, ваш текст я вроде бы прочитать могу, но для меня это перебор — у меня не хватает базы для составления такой цепочки.
Так что я пас, пожалуй… Я не могу объяснить для себя «на пальцах» математического смысла ваших выходов инверторов.
Возможно, придется все же посмотреть готовое решение…
E = !(A&B&C);
nA = (B|C|D)&(B|D)&(C|D)&(D|E);
nB = (A|C|D)&(A|D)&(C|D)&(D|E);
nC = (A|B|D)&(A|D)&(B|D)&(D|E);
При A=0,B=0,C=1 получается nA=0,nB=0,nC=0, продолжаем поиск.
Решил сам.
D = !((A&B)|(B&C)|(A&C))
E = !((D&(A|B|C))|(A&B&C))
nA = (D&E)|(D&(B|C))|(E&B&C)
nB = (D&E)|(D&(A|C))|(E&A&C)
nC = (D&E)|(D&(A|B))|(E&A&B)
DE2 = 112 - A - B - C
Зато лампу сэкономили.
Да. Забыл еще про усилители сигнала. А это тоже лампы :)
b:=a-b;
a:=a-b;(a-a+b=b)
b:=b+a;(a-b+b=a)
Не уверен, нужны ли там инверторы вообще.
не заходят, вероятно, если очень нужно будет, то даже посредственный электронщик найдет решение
«я то в советские времена… !»
Проблема популярна и в англоязычном Интернет. Вот, например, статья на EETimes, описывающая решение :-) — http://www.eetimes.com/document.asp?doc_id=1274508&page_number=2
XOR содержит один NOT. XOR = "^"
D = A ^ B
!A = D & B
!B = D & A
!C = !C
Как проинвертировать три сигнала двумя инверторами или их роль в истории ЭВМ