Как расширить такие выражения, как (A OR B) AND C, до A AND C OR A AND B?

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


person user2167728    schedule 12.08.2013    source источник
comment
Пожалуйста, пишите I, когда речь идет о вас, а не о переменной i :)   -  person Maroun    schedule 12.08.2013
comment
((А && С) || (А && В)) ?   -  person Sw4Tish    schedule 12.08.2013
comment
Зачем тебе инструмент? Почему бы просто не отредактировать код?   -  person mbeckish    schedule 12.08.2013
comment
мне нужно расширить его, чтобы не оценивать его.   -  person user2167728    schedule 12.08.2013
comment
Может быть, он хочет создать инструмент, который может расширять логические выражения, и ему нужна визуальная обратная связь.   -  person GGrec    schedule 12.08.2013
comment
Вы делаете калькулятор? Зачем вам это нужно, и в какой структуре данных у вас есть выражение? Кроме того, вы уверены, что (A||B)&&C совпадает с (A&&C)||(A&&B)? :оП   -  person Xabster    schedule 12.08.2013
comment
у меня есть такое выражение (A OR B) AND C в строке, которую я хочу расширить, например, A AND C OR A AND B. больше ничего   -  person user2167728    schedule 12.08.2013
comment
Второй раз он задает тот же вопрос с той же информацией, прежде чем он получит -11.. как возможно, что теперь у него есть ответ с таким значением? Я думаю, это домашнее задание...   -  person Deckard27    schedule 12.08.2013
comment
Deckard27, это мой первый вопрос на этом сайте... извините, босс, я не профессионал, как вы!   -  person user2167728    schedule 12.08.2013
comment
Я не профессионал.... но я не повторяю вопросы... и если я почти повторяю вопросы, то получаю тот же результат...   -  person Deckard27    schedule 12.08.2013
comment
@ user2167728 Вы знаете, что люди могут видеть историю ваших вопросов?   -  person simont    schedule 12.08.2013
comment
нет я этого не знаю. Саймонт!   -  person user2167728    schedule 12.08.2013
comment
@user2167728 user2167728 Если вы нажмете на имя пользователя, вы увидите его профиль - вопросы и ответы, комментарии и т. д. Просто чтобы вы знали, что в следующий раз, так что это мой первый вопрос на этом сайте ... менее вопиющая ложь.   -  person simont    schedule 12.08.2013
comment
позвольте мне видеть, когда я задал свой первый вопрос, если это не первый!   -  person user2167728    schedule 12.08.2013
comment
@simont это первый вопрос, но он задавался два раза. Если вы не можете мне помочь, не тратьте на это время!   -  person user2167728    schedule 12.08.2013


Ответы (4)


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

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

person tkroman    schedule 12.08.2013

Это называется Правила Де Моргана. Я думаю, что лучший вариант — использовать для этого Карту Карно. Этот генератор таблиц истинности поможет вам в этом.

person Ruchira Gayan Ranaweera    schedule 12.08.2013
comment
Более общая булева алгебра. Де Морган - это всего лишь пара эквивалентностей, связанных с отрицанием, насколько мне известно. - person Martin Smith; 12.08.2013

(А ИЛИ В) И С к А И С ИЛИ А И В

Это неверно.... (A или B) и C равно (a и c) или (B и C)........

person Deckard27    schedule 12.08.2013
comment
так как я могу сделать это в java? - person user2167728; 12.08.2013
comment
добавьте немного кода, и мы можем попытаться вам помочь, здесь не место, где люди просят код, здесь люди ищут справку по своему коду.... - person Deckard27; 12.08.2013
comment
@Pshemo это второй раз, когда он задает один и тот же вопрос ... в первый раз он задает (A или B), а C равно (a и c) или (B и C)....... . - person Deckard27; 12.08.2013
comment
я новичок здесь, если вы не будете вести меня, как я буду учиться? И на самом деле новичок в программировании. я не прошу кого-то написать весь код для меня, но я прошу или намекает и т.д.... - person user2167728; 12.08.2013
comment
На самом деле в Java (A OR B) AND C равно A AND C OR B AND C, потому что И имеет более высокий приоритет, чем ИЛИ. Но да, вообще лучше писать в скобках. - person Pshemo; 12.08.2013

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

Эта форма называется "Полная дизъюнктивная нормальная форма"

person RiaD    schedule 12.08.2013