




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實 驗 報 告( / 學年 第 一 學期)課程名稱離散數學實驗名稱利用真值表法求主析取范式及主合取范式的實現實驗時間年月日指導單位指導教師學生姓名班級學號學院(系)專 業 實 驗 報 告實驗名稱利用真值表法求主析取范式及主合取范式的實現指導教師實驗類型上機實驗學時4實驗時間一、 實驗目的和要求能夠列出合式公式的真值表并給出相應主析取范式和主合取范式。二、實驗環境(實驗設備)硬件:PC機。軟件:Code:Blocks (C+ )三、實驗原理及內容 內容:編程實現用真值表法求任意含三個以內變量的合式公式的主析取范式和主合取范式。 原理:首先讀入變元個數,然后讀入合式公式,用堆棧的知識將中綴表達式轉
2、化為后綴表達式,調用否定、析取、合取、條件、雙條件的函數計算P、Q、R取不同真值時合式公式的真值,然后輸出真值表,調用計算主析取范式和主合取范式的函數并輸出。 程序:#include<iostream>#include<string>#include<conio.h>#include<windows.h>using namespace std;string OriginalForm; /原式string Hequ; /主合取范式string Xiqu; /主析取范式class SeqStack/建立一個堆棧,利用將中綴表達式轉為后綴表達式publ
3、ic: SeqStack(int mSize); SeqStack(); char Top(); bool Push(char x); bool Pop();private: char *st; int top; int maxtop;SeqStack:SeqStack(int mSize) maxtop = mSize - 1; top = -1; st = new charmSize;SeqStack:SeqStack() deletest;char SeqStack:Top() return sttop;bool SeqStack:Push(char x) if(top = maxtop
4、) return false; st+top = x; return true;bool SeqStack:Pop() if(top = -1) return false; top-; return true;int p, q, r, s, t, u;int a, b, result;int v =0;int number;/用number表示變元的個數SeqStack stack(200);void Not() /否定 a = stack.Top(); stack.Pop(); result = a = 1 ? 0 : 1; stack.Push(result);void Or() /析取
5、result = a + b; result = result > 1 ? 1 : result; stack.Push(result);void And() /合取 result = a * b; stack.Push(result);void If() /條件,b->a result = (b = 1 && a = 0) ? 0 : 1; stack.Push(result);void Doubleif() /雙條件 result = (b = a) ? 1 : 0; stack.Push(result);bool CanIn(char out)/優先級的判斷
6、char in = stack.Top(); int i, o; switch(in) case '#':i = 0; break; case '(':i = 1; break; case '-':i = 3; break; case '>':i = 5; break; case '|':i = 7; break; case '&':i = 9; break; case '!':i = 11; break; case ')':i = 12; break;
7、 switch(out) case '#':o = 0; break; case '(':o = 12; break; case '-':o = 2; break; case '>':o = 4; break; case '|':o = 6; break; case '&':o = 8; break; case '!':o = 10; break; case ')':o = 1; break; if(i < o) return true; else
8、 return false;void InfixToPostfix()/中綴表達式轉后綴表達式 string tmp = "" stack.Push('#'); for(int i = 0; (unsigned)i <OriginalForm.length(); i+) if(OriginalFormi = 'P' | OriginalFormi = 'Q' |OriginalFormi = 'R' | OriginalFormi = 'S' | OriginalFormi = '
9、T' | OriginalFormi = 'U') tmp=tmp+OriginalFormi; continue; if(CanIn(OriginalFormi) stack.Push(OriginalFormi); else if(OriginalFormi = ')') while(stack.Top() != '(') tmp = tmp + stack.Top(); stack.Pop(); stack.Pop(); else do tmp = tmp + stack.Top(); stack.Pop(); while(!Can
10、In(OriginalFormi); stack.Push(OriginalFormi); while(stack.Top() != '#') tmp = tmp + stack.Top(); stack.Pop(); stack.Pop(); OriginalForm = tmp;void Calculate()/計算主析取范式和主合取范式的函數 if(number = 3) for(int i = 0; (unsigned)i <OriginalForm.length(); i+) if(OriginalFormi = 'P' | OriginalFo
11、rmi = 'Q'| OriginalFormi = 'R') v = OriginalFormi = 'P' ? p : OriginalFormi= 'Q' ? q : r; stack.Push(v); continue; if(OriginalFormi != '!') a = stack.Top(); stack.Pop(); b = stack.Top(); stack.Pop(); switch(OriginalFormi) case '-':Doubleif(); break; ca
12、se '>':If(); break; case '|':Or(); break; case '&':And(); break; case '!':Not(); break; if(number = 2) for(int i = 0; (unsigned)i <OriginalForm.length(); i+) if(OriginalFormi = 'P' | OriginalFormi = 'Q') v = OriginalFormi = 'P' ? p :
13、q; stack.Push(v); continue; if(OriginalFormi != '!') a = stack.Top(); stack.Pop(); b = stack.Top(); stack.Pop(); switch(OriginalFormi) case '-':Doubleif(); break; case '>':If(); break; case '|':Or(); break; case '&':And(); break; case '!':Not();
14、 break; void Print() if(number = 3) cout << "Pt" <<"Qt" << "Rt" << "Z" << endl; for(p = 1; p >= 0; p-) for(q = 1; q >= 0; q-) for(r = 1; r >= 0; r-) Calculate(); if(result = 1) Xiqu =Xiqu +"(" + (p = 1 ? "P
15、" : "!P") + "&" +(q = 1 ? "Q" : "!Q") + "&" + (r = 1 ?"R" : "!R") + ")" + " | " else Hequ = Hequ +"(" + (p = 0 ? "P" : "!P") + "|" + (q= 0 ? "Q" :
16、"!Q") + "|" + (r = 0 ?"R" : "!R") + ")" + " & " cout << p <<"t" << q << "t" << r <<"t" << result << endl; if(number = 2) cout << "Pt" <<
17、"Qt" << "Z" << endl; for(p = 1; p >= 0; p-) for(q = 1; q >= 0; q-) Calculate(); if(result = 1) Xiqu =Xiqu + "("+ (p = 1 ? "P" : "!P") + "&" + (q = 1 ?"Q" : "!Q") + ")" + " | " el
18、se Hequ = Hequ + "(" + (p =0 ? "P" : "!P") + "|" + (q = 0 ? "Q" :"!Q") + ")" + " & " cout << p <<"t" << q << "t" << result << endl; cout<<endl; if(Xiqu.le
19、ngth() != 0) Xiqu.erase(Xiqu.length() - 2); if(Hequ.length() != 0) Hequ.erase(Hequ.length() - 2);cout << "主析取范式:"<<Xiqu << endl << endl; cout << "主合取范式:" << Hequ << endl << endl;int main()int flag=1; while(flag=1) SetConsoleTextAttr
20、ibute(GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN|FOREGROUND_BLUE); /設置綠色和藍色相加(即青色) system("cls");/清屏 cout<<"-"<<endl; cout <<" 歡迎使用!"<<endl<<endl; cout << " ! 表示否定" << endl<<endl; cou
21、t << " | 表示析取" << endl<<endl; cout << " & 表示合取" << endl<<endl; cout << " > 表示條件" << endl<<endl; cout << " - 表示雙條件" << endl; cout<<"-"<<endl; cout <<endl<< " 輸入你的變元數目:" cin >> number;cout<<" 請輸入合式公式:" switch(number) case 2:cout << endl <<" 變元請用P、Q表示&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具售后部管理制度
- 家電維修業管理制度
- 應急戰備庫管理制度
- 彩箱包裝廠管理制度
- 律師駐法院管理制度
- 心理測量室管理制度
- 快遞健康碼管理制度
- 快餐廳公司管理制度
- 急診手麻醉管理制度
- 成品庫規章管理制度
- 江蘇省蘇州市2024-2025學年高一歷史下學期期末考試試題含解析
- 安徽省馬鞍山市2024-2025學年高一生物下學期期末考試試題
- 蔬菜農藥殘留檢測合同
- YY 0117.1-2024外科植入物骨關節假體鍛、鑄件第1部分:Ti6Al4V鈦合金鍛件
- 任務6.4 IBP盤認知與操作課件講解
- 2024年首屆全國“紅旗杯”班組長大賽考試題庫800題(含答案)
- 基于3D打印技術的個性化正畸矯治器設計
- 國際化競爭格局下的動漫游戲行業發展策略
- 河南省鄭州市中原區2023-2024學年八年級下學期期末歷史試卷
- GB/T 44087-2024北斗三號區域短報文通信用戶終端技術要求與測試方法
- 資本論在中國智慧樹知到期末考試答案2024年
評論
0/150
提交評論