這個網上文章怪多的,就不贅述了。
:been_you1997
csdn:寶寶丶0807
已對**進行盡可能的注釋,希望對你有幫助
因為本人才疏學淺,若有錯誤及不足之處,歡迎指正
#include
#include
using
namespace std;
class
truevaluetable
;// 輸入的字元的備份
char str2[40]
=;// 字尾表示式
char strofstack[40]
=;// 棧陣列
char proposition[10]
=;// 命題元素
int sizeofstr =0;
int sizeofstr2 =0;
int sizeofstack =0;
int sizeofproposition =0;
int priority =5;
// 棧頂元素的優先值
bool trueo***lse[10]
=;// 命題元素的真假值
public
:// 輸入字串,並製作備份
truevaluetable
(const string& strin)
getproposition()
;}// 獲取命題元素
void
getproposition()
}}// 將中綴表示式轉換為字尾表示式
void
infixtranssuffix()
else
stackpush
(str[i++])
; priority =
getpriority()
;break
;case
'*':
stackpush
(str[i++])
; priority =
getpriority()
;break
;case
'+':
if(priority <2)
while
(stacktop()
!='('
&&stacktop()
) str2[sizeofstr2++]=
stackpop()
;else
stackpush
(str[i++])
; priority =
getpriority()
;break
;case
'-':
if(priority <3)
while
(stacktop()
!='('
&&stacktop()
) str2[sizeofstr2++]=
stackpop()
;else
stackpush
(str[i++])
; priority =
getpriority()
;break
;case
'=':
if(priority <4)
while
(stacktop()
!='('
&&stacktop()
) str2[sizeofstr2++]=
stackpop()
;else
stackpush
(str[i++])
; priority =
getpriority()
;break
;case
'(':
stackpush
(str[i++])
; priority =
getpriority()
;break
;case
')':
while
(stacktop()
!='('
&&stacktop()
) str2[sizeofstr2++]=
stackpop()
;stackpop()
;if(stacktop()
=='!'
) str2[sizeofstr2++]=
stackpop()
; i++
; priority =
getpriority()
;break
;default
: i++
;break;}
while
(stacktop()
) str2[sizeofstr2++]=
stackpop()
;return;}
// 輸出真值表
void
outputtruevaluetable()
}// 將計算得到的真值輸出
cout <<
'\t'
<<
(stackpop()
==0?"false"
:"true"
)<< endl;
// 使命題元素的真值組合規律的發生變化
// 類似於二進位制的自加運算
changevalueofproposition()
;}}// 確定棧頂元素的優先值
intgetpriority()
else
switch
(strofstack[sizeofstack -1]
)}// 棧壓入資料
void
stackpush
(const
char
& charin)
// 棧彈出資料
char
stackpop()
// 返回棧頂元素
char
stacktop()
// 獲取命題的值
bool
getvalueofproposition
(const
char
& proposi)
// 讓命題的值按規律改變
void
changevalueofproposition()
else
}// 對棧頂元素進行非運算
void
non(
)// 對棧頂兩元素進行與運算
void
and(
)// 對棧頂兩元素進行或運算
voidor(
)// 對棧頂兩元素進行條件運算
void
condition()
// 對棧頂兩元素進行雙條件運算
void
dcondition()
};// 主函式
intmain()
離散數學中的命題表示式計算並生成真值表
雖然很簡單吧,但是畢竟算是除了刷題外第乙個自己寫出來的有一點用的 所以還是打算水一篇部落格 主要思路就是把式子轉化成字尾表示式,然後再用字尾表示式求值的方法來計算,其中每個命題變元的情況是用沒有剪枝的深搜列舉出來的 下面是 ps 第一版 的條件語句計算出了點問題,已經改了,順便加了個多組輸入 inc...
離散數學中的命題表示式計算並生成真值表
雖然很簡單吧,但是畢竟算是除了刷題外第乙個自己寫出來的有一點用的 所以還是打算水一篇部落格 主要思路就是把式子轉化成字尾表示式,然後再用字尾表示式求值的方法來計算,其中每個命題變元的情況是用沒有剪枝的深搜列舉出來的 下面是 ps 第一版 的條件語句計算出了點問題,已經改了,順便加了個多組輸入 inc...
C語言 命題公式真值表
掌握命題公式真值表的求解,並實現自動求解程式。輸入 任意命題公式 輸出 該命題公式的真值表 要求 輸入任意命題公式,要求用資料儲存命題公式的所有賦值及對應真值,並輸出該公式真值表 此題,難度稍大,對命題公式的表示的方式不一樣,實現過程略有不同,可查詢相關資料。比較長,還需要細心 有什麼意見還請大佬提...