构造任意合式公式的真值表(可编辑修改word版)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
}
int bds(string A,intN,Thesisa[])//识别输入的表达式并计算真值
{
Thesis answer,Temp;
char d[5]={'!','|','&','>','<'};//定义运算符号集合int L;
int i=0;
L=strlen(&A[0]);//表达式长度while(i<L)
{
if(A[i]=='(')
{
int k=1;
for(int j=i+2;j<L;j++)
{
if(k!=0)
{
if(A[j]=='(') k++; if(A[j]==')')
k--;
}
if(k==0)
{
int l=j-i-1;
char *p=new char[l+1]; string B;
for(int m=0;m<l;m++) p[m]=A[i+1+m];
cout<<A<<"的真值表为:"<<endl;
for(int j=0;j<M;j++) cout<<char(a[j].getvalue())<<"";cout<<"真值"<<endl; assignment(A,N,M,&a[0]);
system("pause"); return 0;
}
#include"thesis.h"
i++;
continue;
}
else if(A[i]=='<')
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=answer<Temp;
i++;
continue;
}
else if(A[i]=='>')
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=answer>Temp;
构造任意合式公式的真值表
#include "stdio.h" #include"thesis.h" int main()
{
Thesisa[30];char x='1'; inti=0,N;
cout<<"请输入命题变元(不超过30个)(输入'0'结束
输入):"<<endl; while(int(x)!=48)
i++;
continue;
}
else if(A[i]=='|')
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=answer|Temp;
i++;
continue;
}
else if(A[i]=='&')
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=answer&Temp;
{
cin>>x; if(i>19)
{cout<<"Error:变元个数太多!"<<endl;break;}
if(x!='0')
{
a[i].inname(x); i++;
}
}
N=i;
intM;
M=N;
string A;
cout<<"请输入命题公式(否定:!,合取:&,析取:
| )"<<endl; cin>>A;
}
}
}
}
}
return answer.getvalue();
}
int run(string A,int &i,int L,int N,Thesis a[])
{
Thesis Temp;
if(A[i+1]=='(')
{
int k=1;
for(int j=i+2;j<L;j++)
{
if(k!=0)
{
if(A[j]=='(') k++; if(A[j]==')')
p[l]='\0';
B=p;
}
}
else
{
delete p; Temp.invalue(bds(B,N,&a[0])); if(i==0)
answer.invalue(Temp.getvalue()); i=j+1;
break;
}
if(A[i]=='!')//否定的计算
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=!Temp;
return p;}
friend Thesis operator >(Thesis &p,Thesis &q)
{if(p.getvalue()==1&&q.getvalue()==0) p.invalue(0);
else p.invalue(1);
return p;}
friend Thesis operator <(Thesis &p,Thesis &q)
break;
}
}
}
else
{
int j=0; while(j<L)
{
if(A[i+1]==char(a[j].getname()))
{
i++;
Temp=a[j]; break;
}
j++;
}
}
return Temp.getvalue();
}
#endif
};
void assignment(string A,int N,intM,Thesisa[]);//声明函数
int bds(string A,int N,Thesis a[]);
int run(string A,int &i,int L,int N,Thesis a[]);
void assignment(string A,int N,int M,Thesis a[])//命题赋值并计算真值
{p.invalue((p.getvalue()+q.getvalue())/2); return p;} friend Thesis operator |(Thesis &p,Thesis &q)
{if(p.getvalue()+q.getvalue()>0) p.invalue(1); else p.invalue(0);
i++;
continue;
}
else
{
for(int j=0;j<N;j++)
{if(A[i]==char(a[j].getname()))
{
Temp.invalue(a[j].getvalue()); if(i==0)
answer.invalue(Temp.getvalue()); i++;
break;
{
for(int j=0;j<2;j++)
{
a[N-1].invalue(j); if(N>1)
{
assignment(A,N-1,M,&a[0]);
}
else
{
for(int i=0;i<M;i++)
{
cout<<a[i].getvalue()<<"";
}
cout<<bds(A,M,&a[0])<<endl;
#ifndef THESIS_H #define THESIS_H #include<string>
#include<stdlib.h> #include<iostream> using namespace std;
class Thesis//命题类
{
intvalue;charname;//value:命题的真值(0/1)name:命题名
{if(p.getvalue()==q.getvalue())p.invalue(1);elsep.invalue(0);
reBiblioteka Baiduurn p;}
voidinvalue(int x){value=x;}//输入value voidinname(char x){name=x;}//输入nameintgetvalue(){return value;}//获取真值intgetname(){return name;}//获取命题名
public:
Thesis(){value=2;name='A';}; friend Thesis operator !(Thesis &q)
{q.invalue(1-q.getvalue());returnq;}//重
载逻辑运算符
friend Thesis operator &(Thesis &p,Thesis &q)
k--;
}
if(k==0)
{
int l=j-i-1;
char *p=new char[l+1]; string B;
for(int m=0;m<l-1;m++) p[m]=A[i+2+m];
p[l-1]='\0';
B=p;
delete p;
Temp.invalue(bds(B,N,&a[0])); i=i+j;
}
}
int bds(string A,intN,Thesisa[])//识别输入的表达式并计算真值
{
Thesis answer,Temp;
char d[5]={'!','|','&','>','<'};//定义运算符号集合int L;
int i=0;
L=strlen(&A[0]);//表达式长度while(i<L)
{
if(A[i]=='(')
{
int k=1;
for(int j=i+2;j<L;j++)
{
if(k!=0)
{
if(A[j]=='(') k++; if(A[j]==')')
k--;
}
if(k==0)
{
int l=j-i-1;
char *p=new char[l+1]; string B;
for(int m=0;m<l;m++) p[m]=A[i+1+m];
cout<<A<<"的真值表为:"<<endl;
for(int j=0;j<M;j++) cout<<char(a[j].getvalue())<<"";cout<<"真值"<<endl; assignment(A,N,M,&a[0]);
system("pause"); return 0;
}
#include"thesis.h"
i++;
continue;
}
else if(A[i]=='<')
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=answer<Temp;
i++;
continue;
}
else if(A[i]=='>')
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=answer>Temp;
构造任意合式公式的真值表
#include "stdio.h" #include"thesis.h" int main()
{
Thesisa[30];char x='1'; inti=0,N;
cout<<"请输入命题变元(不超过30个)(输入'0'结束
输入):"<<endl; while(int(x)!=48)
i++;
continue;
}
else if(A[i]=='|')
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=answer|Temp;
i++;
continue;
}
else if(A[i]=='&')
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=answer&Temp;
{
cin>>x; if(i>19)
{cout<<"Error:变元个数太多!"<<endl;break;}
if(x!='0')
{
a[i].inname(x); i++;
}
}
N=i;
intM;
M=N;
string A;
cout<<"请输入命题公式(否定:!,合取:&,析取:
| )"<<endl; cin>>A;
}
}
}
}
}
return answer.getvalue();
}
int run(string A,int &i,int L,int N,Thesis a[])
{
Thesis Temp;
if(A[i+1]=='(')
{
int k=1;
for(int j=i+2;j<L;j++)
{
if(k!=0)
{
if(A[j]=='(') k++; if(A[j]==')')
p[l]='\0';
B=p;
}
}
else
{
delete p; Temp.invalue(bds(B,N,&a[0])); if(i==0)
answer.invalue(Temp.getvalue()); i=j+1;
break;
}
if(A[i]=='!')//否定的计算
{
Temp.invalue(run(A,i,L,N,&a[0])); answer=!Temp;
return p;}
friend Thesis operator >(Thesis &p,Thesis &q)
{if(p.getvalue()==1&&q.getvalue()==0) p.invalue(0);
else p.invalue(1);
return p;}
friend Thesis operator <(Thesis &p,Thesis &q)
break;
}
}
}
else
{
int j=0; while(j<L)
{
if(A[i+1]==char(a[j].getname()))
{
i++;
Temp=a[j]; break;
}
j++;
}
}
return Temp.getvalue();
}
#endif
};
void assignment(string A,int N,intM,Thesisa[]);//声明函数
int bds(string A,int N,Thesis a[]);
int run(string A,int &i,int L,int N,Thesis a[]);
void assignment(string A,int N,int M,Thesis a[])//命题赋值并计算真值
{p.invalue((p.getvalue()+q.getvalue())/2); return p;} friend Thesis operator |(Thesis &p,Thesis &q)
{if(p.getvalue()+q.getvalue()>0) p.invalue(1); else p.invalue(0);
i++;
continue;
}
else
{
for(int j=0;j<N;j++)
{if(A[i]==char(a[j].getname()))
{
Temp.invalue(a[j].getvalue()); if(i==0)
answer.invalue(Temp.getvalue()); i++;
break;
{
for(int j=0;j<2;j++)
{
a[N-1].invalue(j); if(N>1)
{
assignment(A,N-1,M,&a[0]);
}
else
{
for(int i=0;i<M;i++)
{
cout<<a[i].getvalue()<<"";
}
cout<<bds(A,M,&a[0])<<endl;
#ifndef THESIS_H #define THESIS_H #include<string>
#include<stdlib.h> #include<iostream> using namespace std;
class Thesis//命题类
{
intvalue;charname;//value:命题的真值(0/1)name:命题名
{if(p.getvalue()==q.getvalue())p.invalue(1);elsep.invalue(0);
reBiblioteka Baiduurn p;}
voidinvalue(int x){value=x;}//输入value voidinname(char x){name=x;}//输入nameintgetvalue(){return value;}//获取真值intgetname(){return name;}//获取命题名
public:
Thesis(){value=2;name='A';}; friend Thesis operator !(Thesis &q)
{q.invalue(1-q.getvalue());returnq;}//重
载逻辑运算符
friend Thesis operator &(Thesis &p,Thesis &q)
k--;
}
if(k==0)
{
int l=j-i-1;
char *p=new char[l+1]; string B;
for(int m=0;m<l-1;m++) p[m]=A[i+2+m];
p[l-1]='\0';
B=p;
delete p;
Temp.invalue(bds(B,N,&a[0])); i=i+j;