课程设计介绍及真值表-新

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
说明
本课程的参考代码用C++语言编写,以演示思路为目的 建议同学后续学习数据结构和算法设计两门课程加深理解
命题公式的真值表——题目
例子:输入字符串为Q|(P|R)&!S,打印真值表
命题公式的真值表——题目
为了简化问题,规定:
公式中没有空格 命题:单个大写字母 !:否定 &:合取 |:析取 -:蕴涵 =:等价
命题公式的真值表——思路
请大家自己思考:
如何处理命题变元 如何遍历所有命题变元的可能取值 如何打印表头及各层公式的真值 如何判断字符串是合式公式
参考代码说明
使用栈求后缀表达式 再利用栈和后缀表达式求公式的计算结果 只判断了括号是否匹配
确定联结词是否进行计算, 需要比较其与后出现的联结词的优先级 数据结构——栈:先进后出 Q|(P|R)&!S
!
Q (P|R) S
& |
命题公式的真值表——思路
确定联结词是否进行计算, 需要比较其与后出现的联结词的优先级
数据结构——栈:先进后出 另一个例子:P|Q|R
||
后续符号|优先级, 小于等于栈顶符号| 可以直接计算
命题公式的真值表——思路
例子:输入字符串为Q|(P|R)&!S 计算次序: (Q|((P|R)&(!S)))
从左向右依次扫描字符串 Q |(( P | R ) & ! S)
命题公式的真值表——思路
例子:输入字符串为Q|(P|R)&!S 计算次序: (Q|((P|R)&(!S)))
从左向右依次扫描字符串 (Q | ( ( P | R ) & ! S ) )
命题公式的真值表——思路
确定联结词是否进行计算, 需要比较其与后出现的联结词的优先级
数据结构——栈:先进后出
Q|(P|R)&!S
) &!
|
PR
(
|
命题公式的真值表——思路
确定联结词是否进行计算, 需要比较其与后出现的联结词的优先级
数据结构——栈:先进后出
Q|(P|R)Байду номын сангаас!S
&!
(P|R) |
命题公式的真值表——思路
显然计算过程中,是先算层次低的公式,后算层次高的公式
命题公式的真值表——思路
为了确定联结词的计算次序, 需要比较其与后出现的联结词的优先级 数据结构——栈:先进后出
命题公式的真值表——思路
确定联结词是否进行计算, 需要比较其与后出现的联结词的优先级
数据结构——栈:先进后出 Q|(P|R)&!S
| ( | ) &!
PQ R
命题公式的真值表——思路
算法总结:
优先级从低到高:=、-、|、&、!、( 从左向右扫描字符串,字母按顺序排列,联结词需要进出栈 遇到 ! 和 ( ,直接进栈 如果符号优先级高于栈顶符号,将该符号入栈 如果符号不是右括号,且优先级低于栈顶符号,则将栈中比该符号优先级高的 符号依次弹出,进行计算,直至遇到左括号或者栈空为止。最后将该符号入栈 如果符号是右括号,则将栈中符号依次弹出,进行计算,直至左括号为止。并 将括号从栈中弹出。 最后将所有栈内符号弹出,进行计算
离散数学-课程设计
离散数学课程的历史
各部分内容的研究历史都超过百年
数理逻辑:布尔 …… 集合论:康托尔 …… 代数结构:伽罗瓦 …… 图论:欧拉 ……
离散数学课程的出现只有几十年
1980年代,以计算机支撑课程开始出现
课程设计题目
编写程序,实现以下功能
1. 打印给定命题公式的真值表(数理逻辑) 2. 实现拓扑排序算法(集合论) 3. 实现Huffman算法(图论)
从左向右依次扫描字符串 Q | ( P | R )& ! S
&优先级比|高,因此需要先计算后续公式 !是右结合,直接计算!S
命题公式的真值表——思路
例子:输入字符串为Q|(P|R)&!S 计算次序: (Q|((P|R)&(!S)))
从左向右依次扫描字符串 Q | ( P | R )& ! S
字符扫描完毕,依次从右向左计算即可 因为右侧的联结词优先级高
命题公式的真值表——思路
例子:输入字符串为Q|(P|R)&!S 计算次序: (Q|((P|R)&(!S)))
从左向右依次扫描字符串 Q|(P|R )
(优先级比|高,因此需要先计算后续公式 ()优先级最高,出现)时,先计算()内公式
命题公式的真值表——思路
例子:输入字符串为Q|(P|R)&!S 计算次序: (Q|((P|R)&(!S)))
相关文档
最新文档