#NOI1992B. 逻辑表达式

逻辑表达式

当前没有测试数据。

Description

由英文字符和符号和符号~、*、+、()组成逻辑表达式,英文字母表示变

量,变量有两种可能的取值,False或True;~、*、+。括号()可改变表达式的运算次序,且可以嵌套。

逻辑“非”运算的公式如下表:

A ~A
TRUE FALSE
FALSE TRUE

逻辑“与”和逻辑“或”的运算公式如下表:

A B A*B A+B
FALSE FALSE FLASE FLASE
TRUE TRUE
TRUE FALSE
TRUE

两个逻辑表达式等价,当且仅当两个公式中相同名字的变量取任何一种值时两

个公式的值都相同。如:

A*(B+C) 与 AB+AC 等价

A*(~A+B) 与 A*B 等价

(~A+A)*BC 与 B+C 等价

AB+A~B 与 A 等价

而:

A+B 与 A*B 不等价

AB+~C 与 AE+~F 不等价

现要求你编程解决下列问题:

任务1 用键盘输入一个逻辑表达式,判断这个表达式的合法性;

**任务2 **将键盘输入的表达式化简,化简的表达式为

a1a2aN+b1**b2bM+…+x1x2*…*xL

其中ai、bj、…xk(i=1,2,…n; j=1,2,…m; k=1,2,…1)表示一个变量或一个变量的逻辑非;

任务3 将任务2中的化简的表达式化为最简形式。所谓最简有如下两个条件:

(1)表达式中的"+"号最少;

(2)满足的条件下"+"号最少。