Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Перебор логических функций.


Автор: LLoid 10.10.2007, 17:24
На вход подается строка примерно следующего содержания: (1 or 0) and (not(0 and 1))  
и N - число переменных логич. функции. Требуется определить универсальную формулу вида (x1 or x2) and (not(x2 and x1)) .
Для 2-х переменных алгоритм ясен. Подскажите, как поступать дальше. Как именно осуществллять перебор?

Автор: SoWa 10.10.2007, 17:47
Если я правильно понял, тебе необходимо просто на вывод дать формулу без значений, а с переменными... Так их тогда всего четыре может быть 1,0,not1,not2
Просто подставлять.

Автор: _Y_ 11.10.2007, 09:56
Правильно ли я понял, что надо просто отпарсить текст, описываюший логическое уравнение произвольной длины? После чего выполнить записанные этим текстом операции?

Если да, то лет цать назад я писал такой парсер на VB3 еще. Нужно - поищу исходник.

Автор: LLoid 11.10.2007, 16:00
_Y_,  значение введённой функции высчитывается в программе сразу же. Требуется перебрать все возможные комбинации для получения универсальной формулы. например вот так:
N=3 - то есть в полученной формуле должно содержаться 3 переменных: x1, x2, x3
F=(1 or not(0)) and not(1 or 0 and 0 or 1) or 1 and not(1)
В результате должно получиться что-то вроде (x1 or not(x3)) and not(x2 or x3 and x1 or x2) or x1 and not(x1) ' это для x1=1, x2=1, x3=0

Проблема в том, что переменные могут быть расставлены как угодно! smile  Надо перебирать все возможные варианты или можно поступить как-нибудь иначе?  

Автор: esperant0 11.10.2007, 16:34
ничего не понял.


1) прочитайте принятые обозначения
2) сформулируйте задание на общепринятом суть понятном знающим людям языке.


пс: а в стиле "мои мысли мои скакуны"  лучще не писать  (с)

Автор: _Y_ 12.10.2007, 08:09
Действительно. Я тоже ничего не понял smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)