.PAGE/NUMPAGES实验报告〔2016/2017学年第一学期〕课程名称离散数学实验名称利用真值
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
法求取主析取式以及主合取式的实现实验报告实验名称利用真值表法求取主析取式以及主合取式的实现指导教师实验类型验证实验学时4实验时间实验目的和要求容:编程实现用真值表法求取任意数量变量的合式
公式
小学单位换算公式大全免费下载公式下载行测公式大全下载excel公式下载逻辑回归公式下载
的主析取式和主合取式。要求:能够列出任意合式公式的真值表并给出相应主析取和主合取式。二、实验环境(实验设备)X86架构计算机操作系统:Windows732bitIDE:CodeBlokcs16.02编程语言:C++编译器:GCC三、实验原理及容容:编程实现用真值表法求取任意数量变量的合式公式的主析取式和主合取式。原理:先将中缀表达式转换成后缀表达式,再将后缀表达式中每一个字母变量一一赋值,用递归枚举的方法枚举所有赋值情况,并且用map映射将每一个字母变量与当前被枚举的值一一映射,对每一种赋值情况调用后缀表达式计算函数计算后缀表达式的值,打印真假情况。如果是真,记录到名为zhen的vector不定长数组中,如果是假,记录到名为jia的vector不定长数组中。最后根据zhen和jia的不定长数组来打印主析取式和主合取式。此程序可以实现任意数量的字母变量的主析取式求取和主合取式求取,以及真值表打印。实验报告第一步:预处理预处理,去除中缀表达式中条件->中的>,和双条件<=>中的=和>,这样,所有的运算符只是一个字符,后期处理起来更加方便。voidddd(){string::iteratori=zhong.begin();//string类迭代器,需在头文件参加#include
intflag=1;while(flag){flag=0;for(i=zhong.begin();i!=zhong.end();++i){if(*i=='>'){zhong.erase(i);flag=1;break;}if(*i=='='){zhong.erase(i);flag=1;break;}}}}第二步:将中缀表达式转换后缀表达式利用栈和优先级函数来将中缀表达式转换成后缀表达式,此函数另一个功能是将中缀表达式中所有出现过的字母变量都保存包名为alpha的string类中〔string类为STL中的string,需要在头文件参加#include〕,并且alpha中不出现重复字母,这样,通过alpha.size()函数就可以得到所有字母变量的个数,并且方便后面枚举赋值映射。全局变量:stringzhong;//中缀表达式charhou[1000];//后缀表达式stringalpha;//存放所有字母变量优先级函数:inticp(chara)//栈外优先级{if(a=='#')return0;if(a=='(')return12;if(a=='!')return10;if(a=='&')return8;if(a=='|')return6;if(a=='-')return4;if(a=='<')return2;if(a==')')return1;}intisp(chara)//栈优先级{if(a=='#')return0;if(a=='(')return1;if(a=='!')return11;if(a=='&')return9;if(a=='|')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,ch!='#'){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;}s.push(y);s.push(ch);}}while(!s.empty()){y=s.top();s.pop();if(y!='#'){hou[j++]=y;}}hou[j]='#';}第三步:递归枚举每一个字母变量的取值情况用深度优先搜索〔dfs〕的思想进展递归枚举,如果当前递归深度已经到达字符串长度,就说明所有字母已经取值成功,字母的“值〞用map进展映射〔需要在头文件参加#include