利用真值表法求主析取范式及主合取范式的实现_第1页
利用真值表法求主析取范式及主合取范式的实现_第2页
利用真值表法求主析取范式及主合取范式的实现_第3页
利用真值表法求主析取范式及主合取范式的实现_第4页
利用真值表法求主析取范式及主合取范式的实现_第5页
已阅读5页,还剩16页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验报告/学年第一学期课程名称离散数学实验名称 利用真值表法求主析取范式及主合取范式的实现实验时间年 月 日指导单位指导教师学生姓名班级学号学院系专业实验报告实验名称利用真值表法求主析取范式及指导教师主合取范式的实现实验类型 上机实验学时4实验时间一、实验目的和要求能够列出合式公式的真值表弁给出相应主析取范式和主合取范 式.、实验环境(实验设备)硬件:PC机.软件:Code:Blocks(C+ )三、实验原理及内容内容,编程实现用真值表法求任意含三个以内变量的合式公式的主板取 范式和主合取范式._遮理,首先读入变元仝数" 教后读入合式公或,一用堆栈的初识将由缀表_ _ 达式转化为后缀

2、表达式,调用否认、析取、合取、条件、双条件的函数计算 R_ _ R取不同真值时合式公式的真值一然后输出真值表.调用二比算主折取 范式和主合取范式的函数并输出.程序:#include<iostream>#include<string>#include<>#include<>using namespace std;string OriginalForm; /原式string Hequ; 主合取范式string Xiqu; /主析取范式class _SeqStack/_建立二仝堆栈,利用接电缀表达式转为后缀表达式public:SeqStack(int

3、mSize);-SeqStack();_char TopO;_bool Push(char x);bool Pop(),_private:一.char 为t;int top;int maxtop;);SeqSiack二SeqSiack(jnt mSjze)(maxtop = mSize - 1;top = -1;st = new charmSize;)SeqStack二SeqStack()(deletest;)char SeqStack:Top()(return sttop;)booL SeqStack:;Pus.h(char x).(_ _ _if(top. = maxtop)_return

4、 false;_ _ _st+top_=_ x;return true;)bool SeqStack:Pop()t ' T - TX if(top = -1)return false;top-;return true;)int p, q, r, s, t, u;int a, b, result;int v =0;int number;/ 用number表示变元的个数SeqStack stack(200);void Not./ 否认(a =();_();_result = a = 1 0 : 1;(result)j)vojd_Qr()/航取.(result = a + b;_ _ _re

5、suli_= .result _> _1 _ 1二 result;(result);)void And() / 合取(result = a * b;(result);)void If() / 条件,b->a(result = (b = 1 && a = 0) 0 : 1;(result);)Void_Doub!eifO_ _/双条件result = (b = a) 1 : 0;(result)j)booL CanLn(char .out)/级的光顺 _(char in =();int i, o;_ _ _switch(in)case '#':i =

6、0; break;case '(':i = 1; break;case '-':i = 3; break;case '>':i = 5; break;case '|':i = 7; break;case '&':i = 9; break;case '!':i = 11; break;case ')':i = 12; break;switch(out)case '#':o = 0; break;case :Cg = 12l break;case '

7、-':o = 2; break;case :>9 三 4; break;case '|':o = 6; break;case :&:o = 8; .break;case '!':o = 10; break;case '),:o = 1; break;_ _if(i < o_ return true;elsereturn false;)void InfixToPostfix()/中缀表达式转后缀表达式(string tmp =""('#'); IM MM for(int i = 0; (uns

8、igned)i <(); i+)if(OriginalFormi= 'P'| OriginalFormi = 'Q|OriginalFormi = 'R' | OriginalFormi = 'S' | OriginalFormi ='T' | OriginalFormi = 'U')_tmp=tmp+OriginalFormi;continue;if(CanLn(Origin.alEormiJ)(OriginalFormi);else if(OriginalFormi=')')whi

9、leQ一旦1Q(tmp = tmp + ();();)();)else(dotmp = tmp _+_();_(); while(!CanIn(OriginalFormi);(OrigjnalFormi) - while() != '#')_tmp = tmp + ();();();OriginalForm = tmp;)void Calculate()/计算主析取范式和主合取范式的函数(if(number = 3)(for(int i = 0; (unsigned)i <(); i+)(if(OriginalFormi= 'P'| OriginalFor

10、mi'Q'| OriginalFormi = 'R')v= OriginalFormi ='P' pOriginalFormi= 'Q' q : r;3continue;lif(OriginalFormi != !')£a =(); WK* Bl();b =();(); )switch(OriginalFormi)(case '-':Doubleif(); break;case '>':If(); break;case '|':Or(); break;case

11、 '&':And(); break;case '!':Not(); break; )if(number = 2)=.'Q')for(int i 三 0.;_(.unsigned)j w(X j+) - jf(Origina.iFormij=_'P' _ U _ QdginalFormLilv _=_Origin.alFormIi_= E'_p _:_q;(v);continue;jf(OrigjnaJFDrmi _!=,Qa =();();b =();();)switch(OriginalFormi)case &#

12、39;-':Doubleif(); break;case '>':If(); break;case '|':Or(); break;case '&':And(); break;case '!':Not(); break;)vojd_PrLnt()(if(number = 3)coUL<< "PAt"_ <<"Qt:'_<< "Rt" << :Z:'_<< endl4 for(p = 1

13、; p >= 0; p-)(for(q = 1; q >= 0; q-)(for(r = 1; r >= 0; r-)(Calculate();if(result = 1)Xiqu =Xiqu +"(" + (p = 1 "P" : "!P") +"&" +(q = 1 "Q" : "Q)+ "&"+ (r = 1 "R" : "!R") + ")" + " |

14、" elseHequ = Hequ +"(" + (p = 0 "P" : "!P")+ |" + (q= 0 "Q" : "!Q") + "|"+ (r = 0 "R" : "!R") + ")" + " & "cout<<_p_ <<"t" _<< q _<<_"t" _<

15、<_ r _«"、t"_ _ << result << endl;)_ _ _if(number 三=_2)(cout << "Pt" <<"Qt" << "Z" << endl;for(p = 1; p >= 0; p-)(for(q = 1; q >= 0; q-)(Calculate.;if(result = 1)Xiqu =Xiqu + "("+ (p = 1 "P"

16、: "!P") + "&"+ (q = 1 "Q" : "!Q") + ")" + " | "elseHequ= Hequ + "(" + (p =0 "P" : "!P") + "|"+ (q = 0 "Q" :"!Q") + ")" + " & "cout<< p <<&qu

17、ot;t" << q << "t" << result << endl;_ c.Qut<<endl;_if() != 0)()-2);if() != 0)_ Q-2Zcout << "主析取范式:"<<Xiqu << endl << endl;cout << "主合取范式:"<< Hequ << endl << endl;)int main()(int flag=1;wh

18、ile(flag=1)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUNDJNTENSITYFOREGROUND GREEN|FOREGROUND BLUE);_设置绿色和蓝色相加.(一即青鱼)system(".clsl');/S 屏一cout<<""<<endl;cout_<<'_熬迎使用-L'wendEwendK.cout_<<_ " J_表示杳定"_<<_ endl<&l

19、t;.endlL_coul_<<_'llzt 析取",<<_ endl<<.endlL_coul_<<_ " &一表示合取"_<<_ endl<<endlcout_<<_ " >_表示条件"_<<_ endl<<endl;_cout_<<_ "二_表示双住 _"_<< endl;_cout<<""<<endl;cout <<endl<< "输入你的变元数目:"cin >> number;cout<<"请输入合式公式:"switch(number)(case2:cout << endl <<"变元请用 P、Q表示"<< endl <<endl; break;case3:cout << endl &l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论