內容:ios
針對給定的包含任意個變量的真值表,編程實現用真值表法求取其所對應的主析取範式和主合取範式。編程
要求:數組
可以掌握經過真值表求取相應主析取和主合取範式的方法及原理。測試
代碼:spa
/* * Author: Tob_yuhong * Function: 針對給定的包含任意個變量的真值表,編程實現用真值表法求取其所對應的主析取範式和主合取範式。 * 運行環境:Code::Blocks 13.12 */ #include <iostream> #include <cstdio> #include <cstdlib> #include <vector> #include <cstring> #include <cmath> #include <fstream> using namespace std; const int LEN = 140 + 10; //定義數組長度 char arr[LEN]; //用來存放2^n次方個字符,n表示變量個數 int brr[LEN][4+10]; //brr用來存放真值表 int beg = 80; //字符P對應的ASCII碼 int sta1 = 0, sta2 = 0; //sta1表示真值爲T的個數,sta2表示真值爲F的個數 int main() { // freopen("datain.txt", "r", stdin); memset(brr, 0, sizeof(brr)); int num; //變量個數 cout << "請輸入變量個數 : "; cin >> num; cout << endl; int sum = pow(2, num); //2^n cout << "請輸入"<< sum << "個字符(用T 或 F表示) : "; for(int i = 1; i <= sum; i++) { cin >> arr[i]; if(arr[i] == 'T') sta1++; else sta2++; } cout << endl; //處理真值表 int cnt1 = 0, cnt2 = 1; for(int i = sum-1; i >= 0; i--) { cnt1 = 0; int val=i; while(cnt1 < num) { cnt1++; brr[cnt2][cnt1] = val%2; val = val/2; } cnt2++; } cout << "輸出公式對應的真值表 : " << endl; for(int i = 1; i <= num ;i++) { cout << char(beg++) << " "; } cout << 'A'; cout << endl; cout << "———————————" << endl; beg = 80; for(int i = 1; i <= sum; i++) { for(int j = num; j >= 1; j--) { if(brr[i][j] == 1) cout << 'T' << " "; else cout << 'F' << " "; } cout << arr[i]; cout << endl; } cout << endl; int k = 0; cout << "輸出主析取範式:" << endl; for(int i = 1; i <= sum; i++) { if(arr[i] == 'T') { k++; cout << '('; for(int j = num; j >= 1; j--) { if(brr[i][j] == 1) { cout << (char)(beg++); } else { cout << "┓" << (char)(beg++); } if(j != 1) cout << "∧"; } cout << ')'; if(k < sta1) cout << "∨"; } beg = 80; } cout << endl << endl; cout << "輸出主合取範式:" << endl; for(int i = 1; i <= sum; i++) { if(arr[i] == 'F') { k++; cout << '('; for(int j = num; j >= 1; j--) { if(brr[i][j] == 0) { cout << (char)(beg++); } else { cout << "┓" << (char)(beg++); } if(j != 1) cout << "∨"; } cout << ')'; if(k < sta2) cout << "∧"; } beg = 80; } cout << endl; return 0; }
運行結果示意:code
測試數據:ci
/*string
3
T F F T F F F T
io
*/
class