離散數(shù)學,邏輯學,命題公式求真值表_第1頁
離散數(shù)學,邏輯學,命題公式求真值表_第2頁
離散數(shù)學,邏輯學,命題公式求真值表_第3頁
離散數(shù)學,邏輯學,命題公式求真值表_第4頁
離散數(shù)學,邏輯學,命題公式求真值表_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、離散邏輯學實驗班級:10電信實驗班 學號:Q10600132 姓名:王彬彬一、實驗目的熟悉掌握命題邏輯中的聯(lián)接詞、真值表、主范式等,進一步能用它們來解決實際問題。二、實驗內(nèi)容1. 從鍵盤輸入兩個命題變元P和Q的真值,求它們的合取、析取、條件和雙條件的真值。(A)2. 求任意一個命題公式的真值表(B,并根據(jù)真值表求主范式(C)三、實驗環(huán)境C或C語言編程環(huán)境實現(xiàn)。4、 實驗原理和實現(xiàn)過程(算法描述)1.實驗原理(1)合?。憾}聯(lián)結詞。將兩個命題P、Q聯(lián)結起來,構成一個新的命題PQ, 讀作P、Q的合取, 也可讀作P與Q。這個新命題的真值與構成它的命題P、Q的真值間的關系為只有當兩個命題變項P =

2、 T, Q = T時方可PQ =T, 而P、Q只要有一為F則PQ = F。這樣看來,PQ可用來表示日常用語P與Q, 或P并且Q。(2)析?。憾}聯(lián)結詞。將兩個命題P、Q聯(lián)結起來,構成一個新的命題PQ, 讀作P、Q的析取, 也可讀作P或Q。這個新命題的真值與構成它的命題P、Q的真值間的關系為只有當兩個命題變項P = F, Q = F時方可PQ =F, 而P、Q只要有一為T則PQ = T。這樣看來,PQ可用來表示日常用語P或者Q。(3)條件:二元命題聯(lián)結詞。將兩個命題P、Q聯(lián)結起來,構成一個新的命題PQ, 讀作P條件Q, 也可讀作如果P,那么Q。這個新命題的真值與構成它的命題P、Q的真值間的關

3、系為只有當兩個命題變項P = T, Q = F時方可PQ =F, 其余均為T。(4)雙條件:二元命題聯(lián)結詞。將兩個命題P、Q聯(lián)結起來,構成一個新的命題PQ, 讀作P雙條件于Q。這個新命題的真值與構成它的命題P、Q的真值間的關系為當兩個命題變項P = T, Q =T時方可PQ =T, 其余均為F。(5)真值表:表征邏輯事件輸入和輸出之間全部可能狀態(tài)的表格。列出命題公式真假值的表。通常以1表示真,0 表示假。命題公式的取值由組成命題公式的命題變元的取值和命題聯(lián)結詞決定,命題聯(lián)結詞的真值表給出了真假值的算法。 真值表是在邏輯中使用的一類數(shù)學表,用來確定一個表達式是否為真或有效。(6)主范式:主析取范

4、式:在含有n個命題變元的簡單合取式中,若每個命題變元與其否定不同時存在,而兩者之一出現(xiàn)一次且僅出現(xiàn)一次,稱該簡單合取式為小項。由若干個不同的小項組成的析取式稱為主析取范式;與A等價的主析取范式稱為A的主析取范式。任意含n個命題變元的非永假命題公式A都存在與其等價的主析取范式,并且是惟一的。主合取范式:在含有n個命題變元的簡單析取式中,若每個命題變元與其否定不同時存在,而兩者之一出現(xiàn)一次且僅出現(xiàn)一次,稱該簡單析取式為大項。由若干個不同的大項組成的合取式稱為主合取范式;與A等價的主合取范式稱為A的主合取范式。任意含n個命題變元的非永真命題公式A都存在與其等價的主合取范式,并且是惟一的。5、 代碼設

5、計結果:6、 代碼:#include <stdio.h>#include <stdlib.h>#include <string.h>#include "conio.h"#include "math.h"#define N 50 void panduan(int bN,int f);/賦值函數(shù)int tkh (char szN, char ccuN, int icuN, int h0);/分級運算函數(shù)int fkh (char szN, char ccuN, int icuN, int h0);/主運算函數(shù)void zh

6、umain() int i1,i2,d=1,icuN,kh=0,jg,j=0,h0;/icuN用于存放變量值,kh括號計數(shù),jg存放結果 int bj=0,hqN,h=0,x=0,xqN;/hqN存放合取結果xqN存放析取結果 char szN,ccuN,sz0N,s;/szN存放式子,ccuN存放變量,sz0N也是用于存放式子 hq0=-1; xq0=-1; printf("*n");/標語 printf("* *n"); printf("* 歡迎進入邏輯運算軟件 *n"); printf("* (可運算真值表,主范式,支

7、持括號) *n"); printf("* *n"); printf("* 用!表示非 *n"); printf("* 用&表示與 *n"); printf("* 用|表示或 *n"); printf("* 用表示蘊含 *n"); printf("* 用表示等值 *n"); printf("* *n"); printf("*nn"); printf("請輸入一個合法的命題公式:n");/輸入式子 ge

8、ts(sz);/讀取式子 strcpy(sz0,sz);/復制式子 for(i1=0;i1<strlen(sz);i1+) if(szi1=')' | szi1='(')/存儲括號數(shù)量 kh+; if(szi1>='a' && szi1<='z' | szi1>='A' && szi1<='Z') for(i2=0;i2<j;i2+) /判斷并儲存變量。 if(ccui2=szi1)/去除重復變量 d=0; if(d=1) ccuj

9、=szi1; j+; d=1; printf("nd該式子中的變量個數(shù)為:%dn",j);/輸出變量個數(shù) h0=j; printf("n輸出真值表如下:n n"); /輸出真值表表頭 for(i1=0;i1<h0;i1+) printf(" %c ",ccui1); printf(" "); puts(sz); printf("n"); for(i1=0;i1<j;i1+) /先將所有的變量賦值為零。 icui1=0; for(i2=0;i2<j;i2+)/輸出真值表前項 pr

10、intf(" %d ",icui2); jg=tkh(sz,ccu,icu,h0); /用函數(shù)求結果 if(jg=0)/結果為0,合取加1 hqh+=bj; else /否則,析取加1 xqx+=bj; printf(" %dn",jg);/輸出運算結果 strcpy(sz,sz0); for(i1=0;i1<(int)pow(2,j)-1;i1+) +bj; panduan(icu,j-1); /賦值變量 jg=tkh(sz,ccu,icu,h0); if(jg=0)/結果為0,合取加1 hqh+=bj; else /否則,析取加1 xqx+=b

11、j; strcpy(sz,sz0); /恢復被修改的數(shù)組。 for(i2=0;i2<j;i2+) printf(" %d ",icui2);/輸出真值表前項 printf(" %dn",jg);/輸出運算結果 if(hq0=-1)/不存在合取范式時 printf("n該命題公式不存在主合取范式。n"); else printf("n該命題公式的主合取范式:nt"); for(i1=0;i1<h;i1+) if (i1>0)/判斷并添加符號 printf("/"); printf

12、("M(%d)",hqi1); /輸出主合取范式 if(xq0=-1)/不存在析取范式時 printf("n該命題公式不存在主析取范式。n"); else printf("nn該命題公式的主析取范式:nt"); for(i1=0;i1<x;i1+) if (i1>0)/判斷并添加符號 printf("/"); printf("m(%d)",xqi1);/輸出主析取范式 printf("n");void panduan(int bN,int f) / 二進制賦值。

13、int i; i=f; if(bf=0)/加1 bf=1; else/進位 bf=0; panduan(b,-i); int tkh (char szN,char ccuN,int icuN,int h0)/分級運算函數(shù) int i,j,h,s,kh=0,wzN,a; char xs1N,ckhN; /xs1用來保存括號內(nèi)的字符 ckh用來保存括號。 s=strlen(sz); for(i=0;i<s;i+) if(szi='(' | szi=')')/判斷括號 wzkh=i;/存儲括號位置 ckhkh=szi;/存儲括號類型 kh+; if(kh=0)

14、return fkh(sz,ccu,icu,h0);/如果無括號,直接運行 else for(i=0;i<kh;i+) if(ckhi=')')/找到第一個) break; for(j=wzi-1+1,h=0;j<wzi;j+,h+) /存儲最內(nèi)級括號中的內(nèi)容 xs1h=szj; xs1h='0' a=fkh(xs1,ccu,icu,h0);/運行最內(nèi)級括號的式子,得到結果 if(a=1)/判斷并存儲結果 szwzi-1=1; else szwzi-1=-2; for(j=wzi-1+1;j<s+wzi-1-wzi;j+)/將括號后內(nèi)容前移 s

15、zj=szj+wzi-wzi-1; szj='0' return tkh(sz,ccu,icu,h0);/循環(huán)執(zhí)行 int fkh(char szN,char ccuN,int icuN,int h0)/主運算函數(shù) int i,h=0,j=0,j1=0,j2=0,j3=0,j4=0,j5=0,i1,i2,p1=-1,p2=-1,s; char dtN; s=strlen(sz); if(s=1) if(sz0=-2)/判斷是否是最后一項 return 0; else return 1; /1 就是sz0的值、 else for(i=0;i<s-j;i+) /先處理非 if

16、(szi='!') for(i1=0;i1<h0;i1+) if(szi+1=ccui1)/將變量賦值并給P1 p1=icui1; if(szi+1=-2)/如果是前運算結果的0,則P1等于0 p1=0; if(p1=-1)/如果是數(shù)字,直接給P1 p1=szi+1; dtj+2=!p1;/非運算 szi=j+2; j+; p1=0; for(i1=i+1;i1<s-j;i1+) szi1=szi1+1;/將后續(xù)式子前移一項 p1=-1; j1=j; for(i=0;i<s-j1-2*j2;i+) / 處理與 if(szi='&') f

17、or(i1=0;i1<h0;i1+) if(szi-1=ccui1)/將變量賦值并給P1 p1=icui1; if(szi+1=ccui1)/將變量賦值并給P2 p2=icui1; for(i2=2;i2<j+2;i2+) if(szi-1=i2) /如果為前計算結果,將結果賦值并給P1 p1=dti2; if(szi+1=i2) /如果為前計算結果,將結果賦值并給P2 p2=dti2; if(szi-1=-2)/如果是前運算結果的0,則P1等于0 p1=0; if(szi+1=-2)/如果是前運算結果的0,則P2等于0 p2=0; if(p1=-1) /如果是數(shù)字,直接給P1 p

18、1=(int)(szi-1); if(p2=-1)/如果是數(shù)字,直接給P2 p2=(int)(szi+1); dtj+2=p1 && p2;/與運算 szi-1=j+2; j+; j2+; p1=-1; p2=-1; for(i1=i;i1<s-j1-2*j2;i1+)/將后續(xù)式子前移兩項 szi1=szi1+2; i=i-1; for(i=0;i<s-j1-2*j2-2*j3;i+) / 處理或。 if(szi='|') for(i1=0;i1<h0;i1+) if(szi-1=ccui1)/將變量賦值并給P1 p1=icui1; if(sz

19、i+1=ccui1)/將變量賦值并給P2 p2=icui1; for(i2=2;i2<j+2;i2+) if(szi-1=i2) /如果為前計算結果,將結果賦值并給P1 p1=dti2; if(szi+1=i2)/如果為前計算結果,將結果賦值并給P2 p2=dti2; if(szi-1=-2)/如果是前運算結果的0,則P1等于0 p1=0; if(szi+1=-2)/如果是前運算結果的0,則P2等于0 p2=0; if(p1=-1)/如果是數(shù)字,直接給P1 p1=szi-1; if(p2=-1)/如果是數(shù)字,直接給P2 p2=szi+1; dtj+2=p1 | p2;/或運算 szi-1

20、=j+2; j+; j3+; p1=-1; p2=-1; for(i1=i;i1<s-j1-2*j2-2*j3;i1+)/將后續(xù)式子前移兩項 szi1=szi1+2; i-; for(i=0;i<s-j1-2*j2-2*j3-2*j4;i+) / 處理蘊含。 if(szi='') for(i1=0;i1<h0;i1+) if(szi-1=ccui1)/將變量賦值并給P1 p1=icui1; if(szi+1=ccui1)/將變量賦值并給P2 p2=icui1; for(i2=2;i2<j+2;i2+) if(szi-1=i2) /如果為前計算結果,將結果

21、賦值并給P1 p1=dti2; if(szi+1=i2) /如果為前計算結果,將結果賦值并給P2 p2=dti2;if(szi-1=-2)/如果是前運算結果的0,則P1等于0 p1=0; if(szi+1=-2)/如果是前運算結果的0,則P2等于0 p2=0;if(p1=-1)/如果是數(shù)字,直接給P1 p1=szi-1;if(p2=-1)/如果是數(shù)字,直接給P2 p2=szi+1;dtj+2=!p1 | p2;/蘊含運算szi-1=j+2;j+;j4+;p1=-1;p2=-1; for(i1=i;i1<s-j1-2*j2-2*j3-2*j4;i1+)/將后續(xù)式子前移兩項 szi1=szi

22、1+2;i-; for(i=0;i<s-j1-2*j2-2*j3-2*j4-2*j5;i+) / 處理等值。 if(szi='') for(i1=0;i1<h0;i1+) if(szi-1=ccui1)/將變量賦值并給P1 p1=icui1; if(szi+1=ccui1)/將變量賦值并給P2 p2=icui1; for(i2=2;i2<j+2;i2+) if(szi-1=i2) /如果為前計算結果,將結果賦值并給P1 p1=dti2; if(szi+1=i2) /如果為前計算結果,將結果賦值并給P2 p2=dti2; if(szi-1=-2)/如果是前運算結果的0,則P1等于0 p1=0; if(szi+1=-2)/如果是前運算結果的0,則P2等于0 p2=0; if(p1=-1)/如果是數(shù)字,直接給P1 p1=szi-1; if(p2=-1)/如果是數(shù)字,直接給P2 p2=szi+1; dtj+

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論