2013-08-12 3 views
3

Я пробовал Javaluator, который помог мне в оценке выражений вроде (A OR B) AND C. Но теперь я только хочу расширить выражение (A OR B) AND C до A AND C OR A AND B может ли любой орган рассказать мне, как я могу это сделать в Java любой API или любую другую помощь?Как я могу расширить выражения типа (A ИЛИ B) и C до A и C ИЛИ A и B?

+3

Пожалуйста, напишите ** I **, когда это ты, а не переменная 'i' :) – Maroun

+2

((A && C) || (A && B))? – Sw4Tish

+1

Зачем вам нужен инструмент? Почему бы просто не отредактировать код? – mbeckish

ответ

2

Если вам не нужно это делать самостоятельно, вы можете использовать Wolfram | Alpha API, он имеет множество функций, связанных с булевой алгеброй, например, преобразование в различные нормальные формы и так далее. Если это домашнее задание, и вы должны изобрести свое собственное колесо, вы можете использовать некоторые инструменты разбора (или изобрести свое колесо) снова, чтобы токенизировать строку, а затем применить установленные правила логической алгебры: http://mathworld.wolfram.com/BooleanAlgebra.html

Я думаю, что я должен сделать это более конкретное - вы не можете решить эту проблему в общем случае без написания этого набора правил в своем коде (hardcoding it). Самый сжатый способ - использовать что-то вроде ANTLR, чтобы создать язык с ограничениями, зависящими от правил, а затем просто подать на него свои входы.

1

Это называется правилами Де Моргана. Я думаю, что лучший вариант - использовать Karnaugh Map для этого. Это truth table generator поможет вам на вашем пути.

+1

В более общем смысле булева алгебра. Де Морган - всего лишь пара эквивалентов, связанных с отрицанием AFAIK. –

+0

@MartinSmith да, вы правы –

1

(А или В) и С к А и С или А и В

Это неверно .... (А или В) и С равна (а и в) или (В и С) ........

+1

так как я могу это сделать в java? – user2167728

+0

поместите код, и мы можем попытаться вам помочь, здесь не место, где люди просят код, здесь люди ищут помощь по их коду .... – Deckard27

+0

@Почему это второй раз, когда он задает тот же вопрос ...в первый раз он просит (A или B), а C равен (a и c) или (B и C) ........ – Deckard27

0

Если число переменных не очень велико, вы можете проверить выражение для каждого набора переменных. И если это правда на множестве A = true, B = false, C = true добавить результат OR (A and !B and C)

Эта форма называется «Full disjunctive normal form»

Смежные вопросы