离散数学实验——求真值表

离散数学实验——求真值表

ID:31646701

大小:79.55 KB

页数:16页

时间:2019-01-16

离散数学实验——求真值表_第1页
离散数学实验——求真值表_第2页
离散数学实验——求真值表_第3页
离散数学实验——求真值表_第4页
离散数学实验——求真值表_第5页
资源描述:

《离散数学实验——求真值表》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一实验目的1二实验内容1三实验环境1四实验原理和实现过程(算法描述)1五实验数据及结果分析;3六源程序清单;5七其他收获和体会。14一实验目的熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决实际问题。二实验内容1.从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值。(A)2.求任意一个命题公式的真值表(B,并根据真值表求主范式(C))三实验环境C或C++语言编程环境实现。四实验原理和实现过程(算法描述)A:首先提示用户输入真值指派,然后判断用户输入的是否是0或者1,如果不是则利用while语句提示错误,然后提示重新输入直至输入正确,再根据用户输入的真值

2、给代表合取,析取,蕴含,双条件的变量赋值,再以两行表格形式输出所得结果。最后提示按#键退出,否则继续循环求真值。B:主要思路:首先提示用户输入表达式,然后编写并调用一个函数将表达式转换为逆波兰式,在转换的同时,插入部分语句将表达式中的变量名存储到数组bianl[N]中,然后输出存好的各变量名及用户输入的表达式(建立表头),将每次的真值指派存在数组zhi[]中,编写函数zzhi()每次调用zzhi()时都使数组zhi□中的真值加1,(利用递推实现加一时可能的进位,)然后编写并调用一函数qiuzhi()计算每次真值指派下的逆波兰表达式的值,再输出各真值指派和求出的表达式的真值,然后调用函数zzhi

3、O将真值指派的数组加1,最后外围利用while语句循环输出每个不同的真值指派和该指派下表达式的值。将表达式转换成逆波兰式并将变量提取的算法:首先需要分配2个栈,一个作为临时存储运算符的栈fu[],—个作为输入逆波兰式的栈nibol:],从中缀式的左端开始取字符,逐序进行如下步骤:(1)若取出的字符是字母,则该字母直接送入nibol[]栈。同时为了找出所有变量,将该变量名与数组bianl[]中已有的元素比较,如果bianl□中还没有该字母,则该字母是新出现的变量,将其录入数组bianl[]中。(2)若取出的字符是“(”,则直接送入fu□栈栈顶。(3)若取出的字符是“)”,则将距离fu[]栈栈顶最

4、近的“(”之间的运算符,逐个出栈,依次送入nibol[]栈,此时抛弃“(”。(4)若取出的字符是运算符,则将该运算符与fu□栈栈顶元素比较,如果该运算符优先级大于fu□栈栈顶运算符优先级,(此处是编写程序时自己判断好优先级了再按不同情况处理)则将该运算符进fu□栈,否者,将fu□栈的栈顶运算符弹岀,送入nibol[]栈中,直至fu□栈栈顶运算符低于(不包括等于)该运算符优先级,则将该运算符送入fu[]栈。(5)重复上面的广4步,直至处理完所有的输入字符(6)最后将残留在符号栈fu□中的运算符依次出栈。由于是用数组做的栈,所以,使用逆波兰式求值时只需直接从数组nibol[]的笫一个元素nibol

5、[0]开始依次读取就行了。计算逆波兰式的值的算法:把转换好的逆波兰式从nibol[0]^始依次读取,如果是字母,则先判断字母是第几个变量,将数组zhi[](存放了真值指派)中对应的真值zhi[i]放入数组result[](作为一个栈)中,遇到双目运算符就将result:]中栈顶的两个元素出栈,执行运算,得到的结果再入栈,如果是单目运算符!,则只将一个元素岀栈并计算和入栈。增值:用一个数组存放每一次的真值指派,并用递推实现真值的加1进位:zzhi(intn)//数组zhi存每次的真值指派,调用zzhi(bl+l);时给n赋值为变量数加1,以防止最后一个输出完时再增值时溢出if(zhi[n]==O

6、)zhi[n]=l;elseif(zhi[n]=l){zhi[n]=O;zzhi(n-1);//递推,实现进位}}C:在B的基础上加了两个二维数组biao[],biao2[],将真值为1和0的真值指派分别存在数组biao[][]和biao2[][]中,然后按合取和析取主范式的不同定义,用循环将对应真值的变量以原或反变量形式输出期间也输出合取、析取符和括号,使之成为主范式再编写好主要的功能之后,我又在源程序基础上加了一些判断输入错是的提示和处理。具体见实验数据分析和源程序的注释五实验数据及结果分析;A:当输入的真值不为0或者1时提示错误并要求重新输入可循环输入直到输入#才退出,如图所示,以表格的

7、形式输出结果,并且真值都正确首先提示输入表达式(合取、析取、蕴含、双条件分别用&,!,>,=表示),然后如果输入的是止确的表达式则以表格形式输出该表达式的真值表、主析取范式和主合取范式,如下图所示,所得真值表和主范式是正确的当输入错误的表达式格式时,提示错误,并让用户选择是否继续输入表达式(按#退出)然后返回原界面,继续求真值表和主范式。如下图所示:当输入P&Q!R(!R前漏写运算符)时,提示表达

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。