离散数学真值表(c语言编程实现)

xiaoxiao2025-12-02  6

#include <stdio.h> #include <string.h> #include <algorithm> #include <iostream> #include<cmath> #define ll long long using namespace std; struct node { int a[5000]; int flag[5000]; }r[5000]; int b[5000]; char zimu[5000]; int main() { int n; cout<<"请输入变量个数:"<<endl; cin>>n; int sum=pow(2,n); char c[5000]; cout<<"请输入 "<<sum<<" 个字符(用T或F表示):"; for(int i=0;i<sum;i++) { cin>>c[i]; } for(int i=0;i<sum;i++) { if(c[i]=='F') b[i]=0; else b[i]=1; } for(int i=0;i<n;i++) { zimu[i]='P'+i; } for(int i=0;i<n;i++) { int k=i; for(int j=0;j<n;j++) { int x=k%2; r[i].a[j]=x; k/=2; } r[i].flag[0]=0; r[i].flag[1]=1; } cout<<endl; cout<<"请输出公式对应的真值表:"<<endl; cout<<"------------------------"<<endl; for(int i=0;i<n;i++) { cout<<zimu[i]<<"\t"; } cout<<"A"<<endl; for(int i=0;i<sum;i++) { for(int j=n-1;j>=0;j--) { cout<<(r[i].a[j]==0?'F':'T')<<"\t"; } cout<<(b[i]==0?'F':'T')<<"\t"; cout<<endl; } int flag1,flag2; for(int i=0;i<sum;i++) { if(b[i]==1) flag1=i; else flag2=i; } cout<<"请输出主析取范式:"<<endl; for(int i=0;i<sum;i++) { if(b[i]==0) continue; cout<<"<"; for(int j=n-1;j>=0;j--) { if(r[i].a[j]==1) cout<<zimu[n-j-1]; else cout<<"┐"<<zimu[n-j-1]; if(j!=0) cout<<" ∧"; } cout<<">"; if(i!=flag1) cout<<" ∨"; } cout<<endl<<endl; cout<<"请输出主合取范式:"<<endl; for(int i=0;i<sum;i++) { if(b[i]==1) continue ; cout<<"<"; for(int j=n-1;j>=0;j--) { if(r[i].a[j]==1) cout<<zimu[n-j-1]; else cout<<"┐"<<zimu[n-j-1]; if(j!=0) cout<<" ∨"; } cout<<">"; if(i!=flag2) cout<<" ∧"; } return 0; }

转载请注明原文地址: https://www.6miu.com/read-5040208.html

最新回复(0)