離散數學實驗1報告

2022-09-27 03:45:04 字數 2679 閱讀 3283

(實驗abc)

專業: 自動化

班級: ¥¥

學號: ¥¥¥

姓名:日期:2023年12月05日

1. 掌握離散數學中涉及的相關概念。

2. 培養學生的邏輯思維能力和演算法設計的思想。

3. 熟練掌握c/c++語言程式設計的基本方法和各種除錯手段。

4. 熟練掌握包括陣列、鍊錶以及鄰接表或鄰接矩陣等資料結構的建立和運用。

1. 從鍵盤輸入兩個命題變元p和q的真值,求它們的合取、析取、條件和雙條件的真值。(a)

2. 求任意乙個命題公式的真值表(b),並根據真值表求主正規化(c)

注意:題目型別分為a,b,c三類,其中a為基本題,完成a類題目可達到設計的基本要求,其他均為加分題,並按字母順序分數增加越高。

c或c++語言程式設計環境實現。

真值表是數理邏輯中的乙個重要概念,實踐證明運用真值表可以解答數理邏輯的絕大部分問題,也無須高深的知識和技巧,具有直觀明了的特點,儘管某些列表比較麻煩,但仍不失為是一種行之有效的好辦法。

為了實現二元合取、析取、條件和雙條件表示式的計算,可以充分利用聯接詞和邏輯運算子之間的相似性實現程式功能。

命題公式的主析(合)取正規化具有重要的意義,根據公式的主析(合)取正規化,不僅可以判斷兩個公式是否等價,而且還可以判斷乙個公式是否為永真式(重言式)或永假式(矛盾式)。

一般我們將公式中的命題變元放在真值表的左邊,將公式的結果放在真值表的右邊。命題變元可用數值變數表示,合適公式的表示及求真值表轉化為邏輯運算結果;可用一維數表示合式公式中所出現的n個命題變元,同時它也是乙個二進位制加法器的模擬器,每當在這個模擬器中產生乙個二進位制數時,就相當於給各個命題變元產生了一組真值指派。

本程式的一大特色就是開發者同時使用了c語言和c++語言來進行開發,用c語言來開發主程式和實驗標頭檔案,用c++語言來開發實驗標頭檔案,通過編譯實現了全部的功能。

在實驗a中,為了實現二元合取、析取、條件和雙條件表示式的計算,我充分利用聯接詞和邏輯運算子之間的相似性實現程式功能。

詳細說來,編寫了乙個用於判斷的函式,先將從鍵盤獲取的「t」或「f」的字元轉化為對應的1或0,然後運用c語言中的位運算符號進行相應運算,並且在顯示屏上輸出相應的真值。

值得注意的一點是,在本子程式中,開發者使用了「標誌號」的概念來進行程式控制。具體說來就是,在進行程式檢查時和退出實驗a功能介面時使用了標誌號進行程式的跳轉,同時還有在進行輸入判斷時對輸入函式進行控制。

例如,在每次呼叫判斷函式進行判斷前,對標誌號進行檢測。判斷函式是乙個根據標誌號來判斷是否迴圈的迴圈函式。一般情況下進行判斷時,標誌號為0,當每次判斷完成後,就會根據使用者相應的選擇來對標誌號進行置數;當使用者想要退出實驗a所實現的功能介面時,程式會根據使用者的鍵盤輸入值將標誌號置為1,那麼判斷函式再次迴圈之前,在對標誌號進行檢測時,程式會自動退出子函式呼叫,返回主介面。

實驗bc的實現演算法,開發者採用了指導老師所推薦的演算法邏輯,其具體說明如下:

(1)將二進位制加法模擬器賦初值0。

(2)計算模擬器中所對應的一組真值指派下合式公式的真值。

(3)輸出真值表中對應於模擬器所給出的一組真值指派及這組真值指派所對應的一行真值。

(4)產生下乙個二進位制數值,若該數值等於2n-1,則結束,否則轉(2)。

注意,在進行表示式求值的時候,可先將帶括號的中綴表示式利用棧結構轉換為不帶括號的字尾表示式(逆波蘭式),然後進行計算。

實驗bc的程式編寫思路大體上完全符合這樣的設計思路,通過對資料結構中「堆疊」的概念來進行設計。

具體說來,程式中定義了兩個重要的陣列,乙個用於表示式的計算,另外乙個用於指派真值。首先編寫了乙個將輸入的字串轉化為可計算的表示式的函式,之後定義聯結詞的棧內和棧外的優先順序,用於表示式的轉化。

然後,編寫了乙個計算函式,用於模仿實數加法器進行表示式計算,並且用陣列構建了乙個二進位制加法器,用於指派真值。為了提高程式的容錯能力,還編寫了乙個檢查輸入格式的函式。

最後,就是問題的解決函式了,首先將使用者輸入的表示式進行輸入格式的檢查,確認無誤後,將字串轉化為可計算的表示式,儲存在特定的堆疊中,之後,模仿實數加法器產生乙個真值,同時對表示式進行計算,輸出到真值表的顯示介面上,並且根據真值來入棧,成真指派入析合棧,成假指派入合析棧,最後根據析合棧和合析棧的內容來進行析合正規化與合析正規化的輸出。

這就是主程式控制的主介面。

當輸入數字「2」時 ,程式會顯示實現實驗bc的功能介面。

當輸入數字「3」時 ,程式會顯示退出介面。

當輸入其他字元時時 ,程式會在螢幕上顯示相應的提示語,要求使用者重新輸入。

當測試資料為「p=t和q=f」時,程式會顯示他們的合取、析取、條件和雙條件的真值。

當測試資料為「p=f和q=f」時,程式會顯示他們的合取、析取、條件和雙條件的真值。

當測試資料為「p=a和q=f」時,程式檢測出p是非法的輸入格式,會在螢幕上顯示相應的提示語,要求使用者重新輸入。

當測試資料為「p=t和q=a」時,程式檢測出q是非法的輸入格式,會在螢幕上顯示相應的提示語,要求使用者重新輸入。

當測試資料為「a&b|c#」時,程式會求出這個命題公式的真值表,並根據真值表求出主正規化。

當測試資料為「(a>b)|(c&d)#」時,程式會求出這個命題公式的真值表,並根據真值表求出主正規化。

當測試資料為「(a>b)|(c&d)」時,程式檢測出表示式的後面沒有「#」,判斷此次是非法的輸入格式,會在螢幕上顯示相應的提示語,要求使用者重新輸入。

當測試資料為「a&b|c」時,程式檢測出表示式的後面沒有「#」,判斷此次是非法的輸入格式,會在螢幕上顯示相應的提示語,要求使用者重新輸入。

離散數學實驗報告

1.掌握離散數學中涉及的相關概念。2.培養學生的邏輯思維能力和演算法設計的思想。3.熟練掌握c c 語言程式設計的基本方法和各種除錯手段。4.熟練掌握包括陣列 鍊錶以及鄰接表或鄰接矩陣等資料結構的建立和運用。1.求有限集上給定關係的自反 對稱和傳遞閉包。有兩種求解方法,只做一種為a,兩種都做為b 2...

離散數學實驗報告

南京工程學院 實驗報告 課程名稱離散數學 實驗專案名稱命題邏輯 實驗學生班級 k多 111 實驗學生姓名朱在吉 學號 240111338 同組學生姓名 實驗時間 2012.10.25 實驗地點 實驗成績評定 指導教師簽字年月日 一 實驗目的和要求 真值表是命題邏輯中的乙個十分重要的概念,利用它幾乎可...

離散數學實驗指導書

通常人們對離散數學教學的認識就是概念 定理 公式和解題。但是,離散數學不僅僅是這些,還有實驗。在理論教學過程中,學生的活動只是 智力活動 或更為直接地說是解題活動,教師在上面講離散數學,而學生則每天在課堂上聽課並在紙上做題目。這樣,對多數學生而言,離散數學的發現探索活動沒有能夠真正開展起來。離散數學...