利用真值表法求取主析取范式以与主合取范式的实现.doc

利用真值表法求取主析取范式以与主合取范式的实现.doc

ID:56273269

大小:242.00 KB

页数:26页

时间:2020-06-05

利用真值表法求取主析取范式以与主合取范式的实现.doc_第1页
利用真值表法求取主析取范式以与主合取范式的实现.doc_第2页
利用真值表法求取主析取范式以与主合取范式的实现.doc_第3页
利用真值表法求取主析取范式以与主合取范式的实现.doc_第4页
利用真值表法求取主析取范式以与主合取范式的实现.doc_第5页
资源描述:

《利用真值表法求取主析取范式以与主合取范式的实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、.实验报告(2016/2017学年第一学期)课程名称离散数学实验名称利用真值表法求取主析取范式以及主合取范式的实现..实验报告实验名称利用真值表法求取主析取范式以及主合取范式的实现指导教师实验类型验证实验学时4实验时间一、实验目的和要求内容:编程实现用真值表法求取任意数量变量的合式公式的主析取范式和主合取范式。要求:能够列出任意合式公式的真值表并给出相应主析取和主合取范式。二、实验环境(实验设备)X86架构计算机操作系统:Windows732bitIDE:CodeBlokcs16.02编程语言:C++编译器:GCC..三、实验原理及内容内容:编程

2、实现用真值表法求取任意数量变量的合式公式的主析取范式和主合取范式。原理:先将中缀表达式转换成后缀表达式,再将后缀表达式中每一个字母变量一一赋值,用递归枚举的方法枚举所有赋值情况,并且用map映射将每一个字母变量与当前被枚举的值一一映射,对每一种赋值情况调用后缀表达式计算函数计算后缀表达式的值,打印真假情况。如果是真,记录到名为zhen的vector不定长数组中,如果是假,记录到名为jia的vector不定长数组中。最后根据zhen和jia的不定长数组来打印主析取范式和主合取范式。此程序可以实现任意数量的字母变量的主析取范式求取和主合取范式求取,以

3、及真值表打印。..实验报告..第一步:预处理预处理,去除中缀表达式中条件->中的>,和双条件<=>中的=和>,这样,所有的运算符只是一个字符,后期处理起来更加方便。voidddd(){string::iteratori=zhong.begin();//string类迭代器,需在头文件加入#includeintflag=1;while(flag){flag=0;for(i=zhong.begin();i!=zhong.end();++i){if(*i=='>'){zhong.erase(i);flag=1;break;}if(*i=

4、='='){zhong.erase(i);..flag=1;break;}}}}第二步:将中缀表达式转换后缀表达式利用栈和优先级函数来将中缀表达式转换成后缀表达式,此函数另一个功能是将中缀表达式中所有出现过的字母变量都保存包名为alpha的string类中(string类为STL中的string,需要在头文件加入#include),并且alpha中不出现重复字母,这样,通过alpha.size()函数就可以得到所有字母变量的个数,并且方便后面枚举赋值映射。全局变量:stringzhong;//中缀表达式charhou[1000];

5、//后缀表达式stringalpha;//存放所有字母变量优先级函数:inticp(chara)//栈外优先级..{if(a=='#')return0;if(a=='(')return12;if(a=='!')return10;if(a=='&')return8;if(a=='

6、')return6;if(a=='-')return4;if(a=='<')return2;if(a==')')return1;}intisp(chara)//栈内优先级{if(a=='#')return0;if(a=='(')return1;if(a=='!')retu

7、rn11;if(a=='&')return9;if(a=='

8、')return7;if(a=='-')return5;if(a=='<')return3;if(a==')')return12;}..voidchange()//中缀表达式转换后缀表达式{intj=0;stacks;//定义临时栈,需要在头文件加入#includecharch,y;s.push('#');chart1,t2;stringstreamss(zhong);//字符串流,需要在头文件加入#includewhile(ss>>ch,c

9、h!='#'){if(isalpha(ch))//判断是不是字母,如果是,加入到alpha字符串中{hou[j++]=ch;//并且加入到后缀表达式字符串中if(alpha.find(ch)==-1){alpha.push_back(ch);}}elseif(ch==')'){..for(y=s.top(),s.pop();y!='(';y=s.top(),s.pop()){hou[j++]=y;}}else{for(y=s.top(),s.pop();icp(ch)<=isp(y);y=s.top(),s.pop()){hou[j++]=y;}

10、s.push(y);s.push(ch);}}while(!s.empty()){y=s.top();s.pop();if(y!='#'

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

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

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