- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计报告
数据结构课程设计报告
班级:191131班
学号:20131000806
姓名:
指导老师:
日期:2015/07/13
题号9 题目:计算命题演算公式的真值
所谓命题演算公式是指由逻辑变量(其值为TRUE 或FALSE)和逻辑运算符∧(AND)、∨(OR)和┐(NOT)按一定规则所组成的公式(蕴含之类的运算可以用∧、∨和┐来表示)。公式运算的先后顺序为┐、∧、∨,而括号()可以改变优先次序。已知一个命题演算公式及各变量的值,要求设计一个程序来计算公式的真值。
要求:
(1)程序运行有菜单选择。
(2)利用二叉树来计算公式的真值。首先利用堆栈将中缀形式的公式变为后缀形式;然后根据后缀形式,从叶结点开始构造相应的二叉树;最后按后序遍历该树,求各子树之值,即每到达一个结点,其子树之值已经计算出来,当到达根结点时,求得的值就是公式之真值。
(3)逻辑变元的标识符不限于单字母,而可以是任意长的字母数字串。
(4)根据用户的要求显示表达式的真值表。
需求分析
1) 由逻辑变量(其值为TRUE或FALSE)【实际操作使用,0代表FALSE,1代表TRUE)】和逻辑运算符∧(AND)、∨(OR)和┐(NOT)【实际操作使用代表AND,|代表OR,~代表NOT】按一定规则所组成的公式。公式运算的先后顺序为┐、∧、∨,而括号()可以改变优先次序。输入输出
2) 以人机对话的方式让用户输入要计算的命题表达式;计算出最后的真值并输到屏幕上。
基本思想:
①利用二叉树计算公式的真值:
第一步:利用堆栈将中缀形式的公式变为后缀形式;
第二步:根据后缀形式,从叶结点开始构造相应的二叉树;
第三步:按后序遍历该树,求各子树之值,即每到达一个结点,其子树之值已经计算出来,当到达根结点时,求得的值就是公式之真值;
②逻辑变元的标识符不限于单字母,而可以是任意长的字母数字串;
③根据用户的要求显示表达式的真值表。
2.设计
程序入口概要设计
程序入口
等待用户
等待用户输入
有误检查输入是否有错误
有误
检查输入是否有错误
无误
无误
将中辍表达式
将中辍表达式转化为后缀表达式
借助后缀表达式构造
借助后缀表达式构造二叉树
打印二叉树
打印二叉树
根据变量真值
根据变量真值计算表达式真值
否
否
是否退出
是否退出
是
是
退出
退出程序
2.1 设计思想
(1)数据结构设计
包括逻辑结构设计和存储结构设计
用于中辍转换后缀的栈结构:
抽象为模板类:
templatetypename Typeclass Stack
{
public:
Stack(){};
~Stack(){};
void Push(const Type item);
Type Pop(void);
Type Top(void)const;
bool IsEmpty(void)const;
private:
std::vectorType m_Items;
};
用于从后缀表达式计算真值的二叉树
如算式:(abc*def)|(gh123(as45|qw45))转化后构造的二叉树如下:
二叉树抽象为:
class Bitree//二叉树类
{
private:
BitreeNodemyData *m_Root;
void Print(BitreeNodemyData *node, int level)const;
void Destroy(BitreeNodemyData * node);
public:
Bitree();
~Bitree();
void Visit(BitreeNodemyData *node)const;
void Print()const;
void Destroy();
void MakeBitree(myData data, BitreeNodemyData *left,
BitreeNodemyData *right, BitreeNodemyData *parent,bool sym);
void MakeBitree(BitreeNodemyData *root);
bool IsEmpty()const;
};
(2)算法设计
中缀表达式变成后缀表达式:
void Fomula::Transfer();
在将中缀表达式变成后缀表达式的时候会用到堆栈,因此首先需要初始化一个堆栈。又由于逻辑变元可能是字符也可能是字符串,所以它又不同于将单字符的逻辑变元的中缀表达式变成后缀表达式。我的设计是这样的,我将中缀表达式变成后缀表达式的过程分成了两部:化简(将一维的复杂的中缀表达式变成一维的简单的中缀表达式,并将字符串逻辑变元存放在二维数组中),转化(将化简后的中缀表达式变成后缀表达
原创力文档


文档评论(0)