ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:200.01KB ,
资源ID:25115116      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25115116.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用真值表法求主析取范式及主合取范式的实现解析.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用真值表法求主析取范式及主合取范式的实现解析.docx

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

2、然后读入合式公式,用堆栈的知识将中缀表达式转化为后缀表达式,调用否定、析取、合取、条件、双条件的函数计算P、Q、R取不同真值时合式公式的真值,然后输出真值表,调用计算主析取范式和主合取范式的函数并输出。 程序:#include#include#include#includeusing namespace std;string OriginalForm; /原式string Hequ; /主合取范式string Xiqu; /主析取范式class SeqStack/建立一个堆栈,利用将中缀表达式转为后缀表达式public: SeqStack(int mSize); SeqStack(); cha

3、r 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) if(top = maxtop) return false; st+top = x; return true;

4、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(result);void Or() /析取 result = a + b; result = result 1 ? 1 :

5、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 CanIn(char out)/优先级的判断 char in = stack.Top(); int i, o; switch(in) case #:i = 0;

6、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 (:o = 12; break; case -:o = 2; break; case :o = 4; break; case |:o = 6; break; case &:o = 8; break; case !:

7、o = 10; break; case ):o = 1; break; 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 = S | OriginalFormi = T | Origi

8、nalFormi = 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 + stack.Top(); stack.Pop(); while(!CanIn(OriginalFormi); stack.Push(OriginalFormi);

9、 while(stack.Top() != #) tmp = tmp + stack.Top(); stack.Pop(); stack.Pop(); OriginalForm = tmp;void Calculate()/计算主析取范式和主合取范式的函数 if(number = 3) for(int i = 0; (unsigned)i :If(); break; case |:Or(); break; case &:And(); break; case !:Not(); break; if(number = 2) for(int i = 0; (unsigned)i :If(); brea

10、k; case |:Or(); break; case &:And(); break; case !:Not(); break; void Print() if(number = 3) cout Pt Qt Rt Z = 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) + ) + | ; else Hequ = Hequ +( + (

11、p = 0 ? P : !P) + | + (q= 0 ? Q : !Q) + | + (r = 0 ?R : !R) + ) + & ; cout p t q t r t result endl; if(number = 2) cout Pt Qt Z = 0; p-) for(q = 1; q = 0; q-) Calculate(); if(result = 1) Xiqu =Xiqu + (+ (p = 1 ? P : !P) + & + (q = 1 ?Q : !Q) + ) + | ; else Hequ = Hequ + ( + (p =0 ? P : !P) + | + (q

12、= 0 ? Q :!Q) + ) + & ; cout p t q t result endl; coutendl; 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 endl;int main() int flag=1; while(flag=1) SetConsoleTextAttribute(GetStdHandle (STD_

13、OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN|FOREGROUND_BLUE); /设置绿色和蓝色相加(即青色) system(cls);/清屏 cout-endl; cout 欢迎使用!endlendl; cout ! 表示否定 endlendl; cout | 表示析取 endlendl; cout & 表示合取 endlendl; cout 表示条件 endlendl; cout - 表示双条件 endl; cout-endl; cout endl number;cout 请输入合式公式:; switch(number) ca

14、se 2:cout endl 变元请用P、Q表示 endl endl; break; case 3:cout endl 变元请用P、Q、R表示 endl str; OriginalForm=str; InfixToPostfix(); Print(); coutendlflag; return 0; 流程图: N举例使用:四、实验小结(包括问题和解决方法、心得体会、意见与建议等) 刚开始思考如何写这个程序的时候,我不知道该如何处理输入进来的合式公式,在翻阅了数据结构书籍之后我才忽然反应过来,可以用堆栈的知识,将输入进来的中缀表达式转化为后缀表达式,这样就方便计算合式公式的真值了。这次离散数学实

15、验中,我成功地将所学习得C+的编程知识和数据结构里的堆栈的知识运用了起来,虽然中途遇到了一些困难,但最终都很好地解决了。这次实验让我学会了利用编程语言来求主析取范式和主合取范式,更加深刻地理解了这两种范式,并且也让我对C、C+等编程语言有了更强的运用能力,让我明白了离散数学和编程知识是息息相关、密不可分的。以后我将更加认真学习离散数学,并且更多地将编程的知识运用起来。 五、指导教师评语 成 绩批阅人日 期古今名言敏而好学,不耻下问孔子业精于勤,荒于嬉;行成于思,毁于随韩愈兴于诗,立于礼,成于乐孔子己所不欲,勿施于人孔子读书破万卷,下笔如有神杜甫读书有三到,谓心到,眼到,口到朱熹立身以立学为先,

16、立学以读书为本欧阳修读万卷书,行万里路刘彝黑发不知勤学早,白首方悔读书迟颜真卿书卷多情似故人,晨昏忧乐每相亲于谦书犹药也,善读之可以医愚刘向莫等闲,白了少年头,空悲切岳飞发奋识遍天下字,立志读尽人间书苏轼鸟欲高飞先振翅,人求上进先读书李苦禅立志宜思真品格,读书须尽苦功夫阮元非淡泊无以明志,非宁静无以致远诸葛亮熟读唐诗三百首,不会作诗也会吟孙洙唐诗三百首序书到用时方恨少,事非经过不知难陆游问渠那得清如许,为有源头活水来朱熹旧书不厌百回读,熟读精思子自知苏轼书痴者文必工,艺痴者技必良蒲松龄 声明访问者可将本资料提供的内容用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本文档及相关权利人的合法权利。谢谢合作!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1