逻辑函数真值表生成程序
- 格式:docx
- 大小:72.44 KB
- 文档页数:4
逻辑函数真值表生成程序
(一)实验任务:
设计一个能生成具有13个输入逻辑变量的逻辑函数真值表生成程序。
功能要求:
规定函数文本的书写方式,将逻辑函数写入文本文件中(如
logic_funs.txt);
2,程序从包含有逻辑函数表达式的文本文件(如logic_funs.txt)中读入变量个数和函数
3,函数运算优先顺序的识别与函数运算转换
4,得到函数输出结果
5,将真值表存入文本文件(如truth_table.txt)中。
6,逻辑函数表达式的文本文件及真值表文本文件的文件名应能独立输入。
扩展设计:
将原要求实现的过程扩展为具有8个函数处理能力的程序。
(二)实验方法:
(三)功能实现:
1. 函数文本的书写方式:函数值+函数体,注意函数以分号结束,如:
F=(A+B'+C*D*E*(F*G+H+I))*X+Y*W*Z*(A+B+C*H*F);
2.采用文件流形式从文本文件读入函数表达式,并将真值表写入文本文
件中,文件地址既可采用当前目录的默认地址,也可采用自定义的路
径。
3. 函数运算优先顺序的识别与函数运算转换通过两个顺序栈(sk1存储
运算符,sk2存储操作数)来实现。
算法描述:
从左到右扫表达式,如读入的是操作数,则压入操作数栈sk2;入读入的是操作符,则需按一下规则进一步判断:
1) 若读入的是左括号“(”,或读入的运算符优先级大于栈顶运算符优先
级,则将读出的符号进运算符栈,然后依次读下一个符号,注意括号并
未参与运算符优先级比较,故需特别判断;
2) 若读出的符号为表达式结束符“;”,且运算符栈顶也是表达式结束符
“;”,则表达式处理结束;
3) 非运算符“‘”直接对操作数栈顶元素运算,运算结果进操作数栈,非
运算符不进栈;
4) 若读出的符号为右括号“)”,且运算符栈顶是左括号“)”,则表示
括号内的表达式处理结束,将左括号“)出栈,然后依次读入下一个符
号;
5) 如读入的运算符优先级不大于栈顶运算符优先级,则从操作数栈依次推
出两个操作数,从运算符栈退出一个运算符,将这两个操作数按这种运
算符做相应运算,并将运算结果压入操作数栈。注意在这种情况下,当
前读出的操作符下次将重新考虑,即(不再读下一个符号);
例如:对函数表达式F=(X+Y+Z)*X'*Y;
a.初始状态
b.读出(、X、+、Y
topp->
OPS topv-> OVS OPS OPS
C .计算T1=X+Y d.重新考虑+,将+入栈
e .读入Z
f.计算T2=T1+Z,
h .读入*,X
i.直接对X ‘进行运算,结果入栈
OPS
OPS
topp->
OPS
OPS
OPS
tovp->
OVS
tovp->
OPS
tovp->
OPS
OPS
tovp->
OPS
OPS
j .计算T4=T3+T2Y 入栈
4. 用循环的方法(while (getline (ifstream&in ,string s )))读入函数表达式,故
可生成任意多个函数的真值表。
附件:程序代码(VS 编译通过)digtal.cpp
真值码表logic_funs.txt ,My_Trurh_Table.txt
tovp-> OPS
OPS
tovp->
OPS
OPS
tovp-> l .计算T5=T4+Y ’操作符栈顶相同,运算结束 T5