0

我会尽量描述我的问题。我正在尝试编写一个程序来处理以下等式:

F = (X∨A) ↔ (X∨B) ( (X OR A) is equivalent to (X OR B) )!

我必须用“X”来解决它,或者更好地说,写出析取和/或合取范式。

所以,理论上,它是这样的:

在此处输入图像描述

写真值表的时候,你要看看F什么时候等于1(重言式),写出合取/析取范式。

例如(给定表格的析取范式):对于 A=0,B=0 和 A=1,B=1,X 的值无关紧要,对于 A=0,B=1 AND A=1 ,B=0, X 必须为 1。

在此处输入图像描述

最后,X=A∨B。

由于我是用 C# 编写的,所以方程式是在 TextBox 中编写的。困扰我的是,我应该如何分离我的字符串以便我可以部分解决它?

4

2 回答 2

0

在 C# 中首先尝试 String 类的“Split()”方法(或其他方法)怎么样?首先,您最好推动您的用户在每对标记(例如 A AND B)之间插入一个空白(作为 Split() 的分隔符),这样您就可以专注于求解器的主要逻辑。

于 2015-06-14T12:49:49.323 回答
0

我懂了。它基本上是一个简化的计算器,它没有(必须)通过按钮进行顺序输入,而是在文本框中键入或粘贴现成的公式。

因此,您需要做的是

  • 以各种允许的符号(Λ、V、!、=、!= 等、+、*、-、=、↔ 等)定义一组允许的运算符(AND、OR、NOT、XOR 等)
  • 检查输入的语法是否正确;这意味着
    您可能必须首先从输入
    字符串中删除所有空格,然后对允许的构造使用正则表达式,这
    可能会很痛苦
  • 如果输入有效,首先检查括号以确定分组表达式
  • 根据布尔代数简化

或者简单地点击这个链接(Java但仍然): 布尔表达式求解器/简化器,使用工具 bc2cnf 或任何其他链接到那里的库,通过将允许的输入限制为所使用的库允许的输入,让自己省去很多麻烦。

希望这可以帮助。

于 2015-06-14T17:18:11.200 回答