离散数学真值表计算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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(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]=='-')//如果遇到由两个符号组成的运算符只要前面的符号
}
else if(r.top() == '-')
{
r.pop();
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(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的栈顶元素
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 ++){//建立真值表
}
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){//设置优先级
}
else break;
}
else if(r.top() == '&')
{
r.pop();
y = s.top();
s.pop();
x = s.top();
Hale Waihona Puke Baidus.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);
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]!='!'&&a[i]!='-'){
flag = 0;
for(k = 0; k < j; k ++)
if(a[i] == b[k]){//如果该字母已经存在丢弃
{
break;
}
else if(r.top() == '!')
{
if(a[i] != '!'){
r.pop();//销毁栈顶元素,即将符号!取出来
x = fei(s.top());//将s栈顶元素进行非运算
s.pop();//销毁s的栈顶元素(已经进行了非运算)
s.push(x);//将进行非运算的结果x加入s的栈顶
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;
#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){
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");
}
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(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]=='-')//如果遇到由两个符号组成的运算符只要前面的符号
}
else if(r.top() == '-')
{
r.pop();
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(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的栈顶元素
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 ++){//建立真值表
}
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){//设置优先级
}
else break;
}
else if(r.top() == '&')
{
r.pop();
y = s.top();
s.pop();
x = s.top();
Hale Waihona Puke Baidus.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);
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]!='!'&&a[i]!='-'){
flag = 0;
for(k = 0; k < j; k ++)
if(a[i] == b[k]){//如果该字母已经存在丢弃
{
break;
}
else if(r.top() == '!')
{
if(a[i] != '!'){
r.pop();//销毁栈顶元素,即将符号!取出来
x = fei(s.top());//将s栈顶元素进行非运算
s.pop();//销毁s的栈顶元素(已经进行了非运算)
s.push(x);//将进行非运算的结果x加入s的栈顶
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;
#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){
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");
}