构造主析取范式
先上图。。。
主界面:
真值表:
主析取范式:
基本算法实现
(1)调用StartJFrame类的getTextField方法获取合适公式,将她转化为StringBuffer字符串test,便于处理操作。
(2)去掉多余的字符“=”,“>”,因此条件为“-”,双条件为“<”,对test进行一次遍历,遇到“=”和“>”,则删除字符“=”,“>”。存储为中缀表达式char[] infix。
(3)判断括号是否匹配(栈的应用,数据结构),合式公式是否正确(表达式各种不正确情况)
(4)计算合式公式中的变元个数,setNumber,这样不会受变元个数的影响,并且枚举真值的是可以采用2^number-1的二进制,当然也可以采用二叉树哦!有点麻烦,所有我就选择了二进制枚举。
例如:总共3个变元。利用二进制:
真值表:
0:0 0 0 4:1 0 0
1:0 0 1 5:1 0 1
2:0 1 0 6:1 1 0
3:0 1 1 7:1 1 1
二叉树:
每个结点有两个分支,根结点为-1,不加入真值表。
-1
0 1
0 1 0 1
(5)将中表达式转化为后缀表达式(数据结构有的),便于计算。
(6)枚举真值,计算每一种情况合式公式的真值。
(7)计算合式公式的真值。
(8)根据真值表构造主析取范式。
流程图
代码来了
主界面:
https://paste.ubuntu.com/p/Bc5HXn5HW8/