#include <iostream>
#include <cmath>
using namespace std;
char value[100];
int output_valuetable(int x)
{
int i,j,t;
for(i=x;i>0;i--)
{
cout<<"\t"<<"P"<<i;
}
cout<<"\t"<<"T/F "<<endl;
for(i=0;i<(int)pow(2,x*1.0);i++)
{
cout<<"\t";
t=i;
for(j=0;j<x;j++)
{
if(t%2==0)
{
cout<<"F"<<"\t";
}else
{
cout<<"T"<<"\t";
}
t=t/2;
}
cout<<value[i]<<"\t"<<endl;
}
}
int output_zhq(int x)
{
int i,j,k;
for(i=0;i<(int)pow(2,x*1.0);i++)
{
k=i;
if(value[i]=='F')
{
cout<<"(";
for(j=x;j>0;j--)
{
if(k%2==0)
{
if(j==1)
{
cout<<"P"<<j;
}else
{cout<<"P"<<j<<"V";}
}else
{
if(j==1)
{
cout<<"~P"<<j;
}else
{cout<<"~P"<<j<<"V";}
}
k=k/2;
}
cout<<")";
cout<<"^";
}
}
}
int output_zxq(int x)
{
int i,j,k;
for(i=0;i<(int)pow(2,x*1.0);i++)
{
k=i;
if(value[i]=='T')
{
cout<<"(";
for(j=x;j>0;j--)
{
if(k%2==0)
{
if(j==1)
{
cout<<"~P"<<j;
}else
{cout<<"~P"<<j<<"∧";}
}else
{
if(j==1)
{
cout<<"P"<<j;
}else
{cout<<"P"<<j<<"∧";}
}
k=k/2;
}
cout<<")";
cout<<"V";
}
}
}
int main()
{
int i,n;
//char a[100];
cout<<"請輸入變元個數:"<<endl;
cin>>n;
cout<<"請輸入運算式的真值:"<<endl;
for(i=0;i<(int)pow(2,n);i++)
{
cin>>value[i];
}
cout<<"真值表如下:"<<endl;
output_valuetable(n);
cout<<"\n";
cout<<"主合取范式如下:"<<endl;
output_zhq(n);
cout<<"\n";
cout<<"主析取范式如下:"<<endl;
output_zxq(n);
cout<<endl;
return 0;
}
運行后總是多輸出一個^或者V,
為什么用cout<<"\b";不會洗掉最后一個字符;
uj5u.com熱心網友回復:
用string記錄答案,然后多余的在string后面刪轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71257.html
標籤:基礎類
