版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实 验 报 告( / 学年 第 一 学期)课程名称离散数学实验名称利用真值表法求主析取范式及主合取范式的实现实验时间年月日指导单位指导教师学生姓名班级学号学院(系)专 业 推荐精选推荐精选实 验 报 告实验名称利用真值表法求主析取范式及主合取范式的实现指导教师实验类型上机实验学时4实验时间一、 实验目的和要求能够列出合式公式的真值表并给出相应主析取范式和主合取范式。二、实验环境(实验设备)硬件:PC机。软件:Code:Blocks (C+ )三、实验原理及内容 内容:编程实现用真值表法求任意含三个以内变量的合式公式的主析取范式和主合取范式。 原理:首先读入变元个数,然后读入合式公式,用堆栈的知
2、识将中缀表达式转化为后缀表达式,调用否定、析取、合取、条件、双条件的函数计算P、Q、R取不同真值时合式公式的真值,然后输出真值表,调用计算主析取范式和主合取范式的函数并输出。 推荐精选程序:#include<iostream>#include<string>#include<conio.h>#include<windows.h>using namespace std;string OriginalForm; /原式string Hequ; /主合取范式string Xiqu; /主析取范式class SeqStack/建立一个堆栈,利用将中缀表达
3、式转为后缀表达式public: SeqStack(int mSize); SeqStack(); char Top(); bool Push(char x); bool Pop();private: char *st; int top; int maxtop;推荐精选SeqStack:SeqStack(int mSize) maxtop = mSize - 1; top = -1; st = new charmSize;SeqStack:SeqStack() deletest;char SeqStack:Top() return sttop;bool SeqStack:Push(char x)
4、 if(top = maxtop) return false; st+top = x; return true;bool SeqStack:Pop()推荐精选 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 = stack.Top(); stack.Pop(); result = a = 1 ? 0 : 1; stack.Push(re
5、sult);void Or() /析取 result = a + b;推荐精选 result = result > 1 ? 1 : result; stack.Push(result);void And() /合取 result = a * b; stack.Push(result);void If() /条件,b->a result = (b = 1 && a = 0) ? 0 : 1; stack.Push(result);void Doubleif() /双条件 result = (b = a) ? 1 : 0; stack.Push(result);bool
6、 CanIn(char out)/优先级的判断 char in = stack.Top(); int i, o;推荐精选 switch(in) case '#':i = 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; cas
7、e ')':i = 12; break; switch(out) case '#':o = 0; break; case '(':o = 12; break; case '-':o = 2; break; case '>':o = 4; break; case '|':o = 6; break; case '&':o = 8; break; case '!':o = 10; break; case ')':o = 1; break; 推荐
8、精选 if(i < o) return true; else return false;void InfixToPostfix()/中缀表达式转后缀表达式 string tmp = "" stack.Push('#'); for(int i = 0; (unsigned)i <OriginalForm.length(); i+) if(OriginalFormi = 'P' | OriginalFormi = 'Q' |OriginalFormi = 'R' | OriginalFormi =
9、39;S' | OriginalFormi = 'T' | OriginalFormi = 'U') tmp=tmp+OriginalFormi; continue; if(CanIn(OriginalFormi) stack.Push(OriginalFormi); else if(OriginalFormi = ')') 推荐精选 while(stack.Top() != '(') tmp = tmp + stack.Top(); stack.Pop(); stack.Pop(); else do tmp = tmp
10、+ stack.Top(); stack.Pop(); while(!CanIn(OriginalFormi); stack.Push(OriginalFormi); while(stack.Top() != '#') tmp = tmp + stack.Top(); stack.Pop(); 推荐精选 stack.Pop(); OriginalForm = tmp;void Calculate()/计算主析取范式和主合取范式的函数 if(number = 3) for(int i = 0; (unsigned)i <OriginalForm.length(); i+)
11、if(OriginalFormi = 'P' | OriginalFormi = 'Q'| OriginalFormi = 'R') v = OriginalFormi = 'P' ? p : OriginalFormi= 'Q' ? q : r; stack.Push(v); continue; if(OriginalFormi != '!') a = stack.Top(); stack.Pop(); b = stack.Top();推荐精选 stack.Pop(); switch(Origin
12、alFormi) case '-':Doubleif(); break; case '>':If(); break; case '|':Or(); break; case '&':And(); break; case '!':Not(); break; if(number = 2) for(int i = 0; (unsigned)i <OriginalForm.length(); i+) if(OriginalFormi = 'P' | OriginalFormi = '
13、;Q') v = OriginalFormi = 'P' ? p : q; stack.Push(v); continue; 推荐精选 if(OriginalFormi != '!') a = stack.Top(); stack.Pop(); b = stack.Top(); stack.Pop(); switch(OriginalFormi) case '-':Doubleif(); break; case '>':If(); break; case '|':Or(); break; case &
14、#39;&':And(); break; case '!':Not(); break; void Print() if(number = 3) 推荐精选 cout << "Pt" <<"Qt" << "Rt" << "Z" << endl; for(p = 1; p >= 0; p-) for(q = 1; q >= 0; q-) for(r = 1; r >= 0; r-) Calculate(); if
15、(result = 1) Xiqu =Xiqu +"(" + (p = 1 ? "P" : "!P") + "&" +(q = 1 ? "Q" : "!Q") + "&" + (r = 1 ?"R" : "!R") + ")" + " | " else Hequ = Hequ +"(" + (p = 0 ? "P" : &
16、quot;!P") + "|" + (q= 0 ? "Q" : "!Q") + "|" + (r = 0 ?"R" : "!R") + ")" + " & " cout << p <<"t" << q << "t" << r <<"t" << result << e
17、ndl; 推荐精选 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" : "!P") + "&" + (q = 1 ?"
18、Q" : "!Q") + ")" + " | " else Hequ = Hequ + "(" + (p =0 ? "P" : "!P") + "|" + (q = 0 ? "Q" :"!Q") + ")" + " & " cout << p <<"t" << q << "t&quo
19、t; << result << endl; cout<<endl; if(Xiqu.length() != 0)推荐精选 Xiqu.erase(Xiqu.length() - 2); if(Hequ.length() != 0) Hequ.erase(Hequ.length() - 2);cout << "主析取范式:"<<Xiqu << endl << endl; cout << "主合取范式:" << Hequ << endl &l
20、t;< endl;int main()int flag=1; while(flag=1) SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN|FOREGROUND_BLUE); /设置绿色和蓝色相加(即青色) system("cls");/清屏 cout<<"-"<<endl; cout <<" 欢迎使用!"<<endl<<endl
21、; cout << " ! 表示否定" << endl<<endl; cout << " | 表示析取" << endl<<endl; cout << " & 表示合取" << endl<<endl;推荐精选 cout << " > 表示条件" << endl<<endl; cout << " - 表示双条件" << endl; cout<<"-"<<endl; cout <<endl<< " 输入你的变元数目:" cin >> number;cout<<" 请输入合式公式:" switch(number) case 2:cout << endl <<" 变元请用P、Q表示" << endl << endl; br
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东中山市菊城小学招聘后勤人员3人考试参考题库及答案解析
- 2026年巴中职业技术学院单招职业倾向性测试题库含答案详解(夺分金卷)
- 2026江苏南京大学实验室与设备管理处办公室文员笔试备考试题及答案解析
- 2026年广西城市职业大学单招职业适应性考试题库附答案详解(能力提升)
- 2026年广东舞蹈戏剧职业学院单招综合素质考试题库带答案详解(能力提升)
- 2026年山西省朔州市单招职业适应性测试题库及答案详解(真题汇编)
- 2025年AI教育评估数据的挖掘算法比较研究
- 2026中国移动通信集团陕西有限公司招聘(劳务派遣)笔试模拟试题及答案解析
- 2026年商丘学院单招职业技能考试题库及答案详解(夺冠系列)
- 2026年吉林省经济管理干部学院单招职业技能测试题库附答案详解(轻巧夺冠)
- JG/T 118-2018建筑隔震橡胶支座
- T/CCMA 0164-2023工程机械电气线路布局规范
- 香港公司意向协议书
- 《西藏自治区地质灾害危险性评估报告编制及审查技术要求(试行)》
- TCPQSXF006-2023消防水带产品维护更换及售后服务
- 2024年中国科学技术大学少年创新班数学试题真题(答案详解)
- 担保公司担保业务责任追究制度
- LightTools优化模块用户指南
- 2025年钳工(技师)职业技能鉴定理论考试题库(含答案)
- 玉米转基因技术及其安全性
- 工厂设备工程师转正述职报告
评论
0/150
提交评论