离散数学真值表计算
#include <iostream>
#include<cstdio>
#include<cstring>
#include <stack>
using namespace std;
stack<int>s;//建立栈s,用来储存数字
stack<int>r;//建立栈r ,用来粗存符号
int qie(int x,int y){
if(x == 1 && y == 1)
return 1;
else return 0;
}
int huo(int x,int y){
if(x == 0 && y == 0)
return 0;
else return 1;
}
int fei(int x){
if(x == 1)
return 0;
else return 1;
}
int dengzhi(int x,int y){
if(x == y)
return 1;
else return 0;
}
int yunhan(int x, int y){
if(x == 1 && y == 0)
return 0;
else return 1;
}
int priority(char flag){//设置优先级
if(flag == ')')
return -1;
else if(flag == '<' || flag == '-')
return 0;
else if(flag=='&'||flag=='|')
return 1;
else if(flag=='!')
return 2;
else if(flag == '(')
return 3;
else return -2;
}
int main()
{
int len, i, t, x, y, j = 0, k, flag, c[100], temp, n;
char b[100], a[100];
gets(a);
len = strlen(a);
for(i = 0; i < len; i ++)//比较所有字符
//如果不是运算符号就记录下来
if(a[i]!='('&&a[i]!=')'&&a[i]!='<'&&a[i]!='>'&&a[i]!='&'&&a[i]!='|'&&a[i]!='!'&&a[i]!='-'){ flag = 0;
for(k = 0; k < j; k ++)
if(a[i] == b[k]){//如果该字母已经存在丢弃
flag = 1;
break;
}
if(flag == 0){//如果该字母不存在就记录下来
b[j] = a[i];
printf("%c ", b[j]);
j ++;//记录字母个数
}
}
printf("\n");
flag = 1;
for(i = 0; i < j; i ++)
flag *= 2;
for(n = 0; n < flag; n ++){//建立真值表
temp = n;
t = -3;
for(k = 0; k < j; k ++){
c[j-k-1] = temp % 2;
temp /= 2;
}
for(k = 0; k < j; k ++)
printf("%d ", c[k]);
a[len] = ')';
for(i = 0; i <= len; i ++)
if(a[i]=='('||a[i]==')'||a[i]=='<'||a[i]=='&'||a[i]=='|'||a[i]=='!'||a[i]=='-')//字符进入r栈 {
while(t >= priority(a[i]) && t != 3)
{
if(r.top() == '(')//r.top栈r的栈顶元素
{
}
else if(r.top() == '!')
{
if(a[i] != '!'){
r.pop();//销毁栈顶元素,即将符号!取出来
x = fei(s.top());//将s栈顶元素进行非运算
s.pop();//销毁s的栈顶元素(已经进行了非运算) s.push(x);//将进行非运算的结果x加入s的栈顶
}
else break;
}
else if(r.top() == '&')
{
r.pop();
y = s.top();
s.pop();
x = s.top();
s.pop();
x = qie(x,y);
s.push(x);
}
else if(r.top() == '|')
{
r.pop();
y = s.top();
s.pop();
x = s.top();
s.pop();
x = huo(x,y);
s.push(x);
}
else if(r.top() == '<')
{
r.pop();
y = s.top();
s.pop();
x = s.top();
s.pop();
x = dengzhi(x,y);
s.push(x);
}
else if(r.top() == '-')
{
y = s.top();
s.pop();
x = s.top();
s.pop();
x = yunhan(x,y);
s.push(x);
}
if(r.empty())
t = -3;
else t = priority(r.top());
}
r.push(a[i]);
if(t == 3 && a[i] == ')'){//如果()之间没有符号就直接丢弃两个括号 r.pop();
r.pop();
}
if(r.empty())//如果符号栈的元素没有了,让优先级t为最小优先级 t = -3;
else t = priority(r.top());
if(a[i]=='&' || a[i]=='|' || a[i]=='<' || a[i]=='-')//如果遇到由两个符号组成的运算符只要前面的符号
i++;
}
else
for(k = 0; k < j; k ++)//数字进入s栈
if(a[i] == b[k]){
s.push(c[k]);
break;
}
printf("%d\n", s.top());
s.pop();
r.pop();
}
system("pause");
}
…… 此处隐藏:554字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [外语考试]管理学 第13章 沟通
- [外语考试]07、中高端客户销售流程--分类、筛选讲
- [外语考试]2015-2020年中国高筋饺子粉市场发展现
- [外语考试]“十三五”重点项目-汽车燃油表生产建
- [外语考试]雅培奶粉培乐系列适用年龄及特点
- [外语考试]九三学社入社申请人调查问卷
- [外语考试]等级薪酬体系职等职级表
- [外语考试]货物买卖合同纠纷起诉状(范本一)
- [外语考试]青海省实施消防法办法
- [外语考试]公交车语音自动报站系统的设计第3稿11
- [外语考试]logistic回归模型在ROC分析中的应用
- [外语考试]2017-2021年中国隔膜泵行业发展研究与
- [外语考试]神经内科下半年专科考试及答案
- [外语考试]园林景观设计规范标准
- [外语考试]2018八年级语文下册第一单元4合欢树习
- [外语考试]分布式发电及微网运行控制技术应用
- [外语考试]三人行历史学笔记:中世纪人文主义思想
- [外语考试]2010届高考复习5年高考3年联考精品历史
- [外语考试]挖掘机驾驶员安全生产责任书
- [外语考试]某211高校MBA硕士毕业论文开题报告(范
- 用三层交换机实现大中型企业VLAN方案
- 斯格配套系种猪饲养管理
- 涂层测厚仪厂家直销
- 研究生学校排行榜
- 鄱阳湖湿地景观格局变化及其驱动力分析
- 医学基础知识试题库
- 2010山西省高考历年语文试卷精选考试技
- 脉冲宽度法测量电容
- 谈高职院校ESP教师的角色调整问题
- 低压配电网电力线载波通信相关技术研究
- 余额宝和城市商业银行的转型研究
- 篮球行进间运球教案
- 气候突变的定义和检测方法
- 财经大学基坑开挖应急预案
- 高大支模架培训演示
- 一种改进的稳健自适应波束形成算法
- 2-3-鼎视通核心人员薪酬股权激励管理手
- 我国电阻焊设备和工艺的应用现状与发展
- MTK手机基本功能覆盖测试案例
- 七年级地理教学课件上册第四章第一节




