一条很蛋疼的真值表问题…………
这是我们学校的数理逻辑上机题原题是
输入公式的符号说明:
! 非,相当于书面符号中的 “ ¬ ”
& 与,相当于书面符号中的 “ ∧ ”
| 或,相当于书面符号中的 “ ∨ ”
- 蕴含联结词,相当于书面符号中的 “ → ”
+ 等价联结词,相当于书面符号中的 “ ↔ ”
( 前括号
) 后括号
输入:命题公式的合式公式
输出:公式的主析取范式和主析取范式,输出形式为:“ mi ∨ mj ; Mi ∧ Mj” ,极小项和 ∨ 符号之间有一个空格,极大项和 ∧ 符号之间有一个空格;主析取范式和主合取范式之间用“ ; ”隔开,“ ; ”前后各有一个空格。 永真式的主合取范式为 1 ,永假式的主析取范式为 0 。
例如:
1、输入:a&b
输出:m3 ; M0∧M1∧M2
意思可以这样理解
a&b
a b
0 0 0 M0
0 1 0 M1
1 0 0 M2
1 1 1 m3
所以真值有一个m3
假值有三个 M1,M2,M3
所以输出
m3 ; M0∧M1∧M2
那么
a|b就有
a b
0 0 0 M0
0 1 1 m1
1 0 1 m2
1 1 1 m3
所以输出
m1∨m2∨m3 ; M0
!a就有
a
0 1 m0
1 0 M1
m0 ; M1
a有
a
0 0 M0
1 1 m1
m1 ; M0
a->b有
a b
0 0 1 m0
0 1 1 m1
1 0 0 m2
1 1 1 m3
m0∨m1∨m3 ; M2
a↔b有
a b
0 0 1 m0
0 1 0 m1
1 0 0 m2
1 1 1 m3
m0∨m3 ; M1∧M2
这些只是基本的式子
然后还因为有等号还有数个符号间的结合
所以我考虑用队列来做
但是队列部分学的不是太好
所以建了个数组a[i][j]
先输入一个字符串
一个if语句
如果是字母的话就会i值自增1 (j值+1)*2-1
但是这样的话会很麻烦而且空间会很大
然后考虑用栈
先计算最里面一对括号用switch语句判断符号然后用上面的基本句式判断
但是这样我就没办法判断我所求的值是第几个值了
各种纠结
编了二百多行一点用都没有
错误一堆
求帮忙啊
C学的不精好郁闷