根据给出的命题数n与对应的真值写出真值表
#include <iostream>
#include <math.h>
using namespace std;
void shuru(char *p,int s);//输入T or F
void shuchu(char *p,int s);//输出真值表
void shizi(char *p,int s);//输出对应的主析取式,主合取式
int main()
{
int n;
cout<<"input the value of n"<<endl;
cin>>n;
cout<<"input"<<pow(2,n)<<"个 T or F"<<endl;
char a[100];
shuru(a,n);
char b[10]={'p','q','r','s','d','m','n','l','j','k'};
cout<<"----------------------"<<endl;
for(int i=0;i<n;i++){//根据命题数输出命题符号?
cout<<b[i]<<" ";
}
cout<<"VALUE"<<endl;
shuchu(a,n);
shizi(a,n);
}
void shuru(char *p,int s){
for (int i=0;i<pow(2,s);i++)//判断输入的是否为F或者T,若是,存入数组a,反之,跳过?
{
char h;
while(1)
{
cin>>h;
if(h=='T' || h=='F')
{
p[i]=h;
break;
}
else
{
getchar();
}
}
}
}
void shuchu(char *p,int s){
int k=0,c[2]={0,1};
while(k<pow(2,s))//输出每个命题的真值?
{
for(int i=0;i<s;i++){
cout<<int(k/pow(2,s-i-1))%2<<" ";
}
cout<<p[k]<<endl;
k++;
}
cout<<endl;
}
void shizi(char *p,int s){
cout<<"主析取范式为:";
int flag=0;
for(int i=0;i<pow(2,s);i++)
{
if(p[i]=='T'){
if(flag==1)
cout<<"\\/";
cout<<"m"<<i;
flag=1;
}
}
cout<<endl<<"主合取范式为:";
flag=0;
for(int i=0;i<pow(2,s);i++)
{
if(p[i]=='F'){
if(flag==1)
cout<<"/\\";
cout<<"M"<<i;
flag=1;
}
}
}
运行结果: