個人專案四則運算生成程式進展 第二週

2022-08-19 15:24:12 字數 1214 閱讀 4814

我認為四則運算生成程式功能上分為兩大部分,隨機生成四則運算表示式+四則運算表示式的計算

開始的時候想從程式設計結構上劃分這兩部分,用逆波蘭表示式和棧的結構進行四則運算的計算,但是實現效果不太理想,程式設計到一半就編不下去了。

後來上網查閱了一些資料,並受到《編譯原理》書中表示式可以用樹的結構來表示的啟發,我採用了二叉樹的資料結構,並採用了生成表示式和計算表示式同時進行的方法,用遞迴運算的思想,重新編寫了這個程式。

至於生成算式的隨機性,則採用了控制表示式中數字個數的方法(葉子數量),來控制表示式的長度。

採用的資料結構如下:

其中每個單元儲存運算結果和運算子,葉子儲存的就是運算數字。

生成運算表示式和進行計算的過程結合在一起:自頂向下生成框架,填入運算子;然後自底向上填入數字,同時計算結果。

拿乙個例子進行說明:

得出的結果為:(1+2)*3/4=9/4=2'1/4

大致的設計思路和採用的資料結構就是這樣的

下面總結一下程式設計的時候解決的問題:

1)首先就是四則運算程式需要支援真分數的運算,為了一致性,我把整數寫成了真分數的形式,用乙個struct儲存分母和分子。

2)分數運算時要用到最小公倍數,約分時要用到最大公約數:最小公倍數=兩數之積/最大公約數

3)輸出到檔案的時候採用的是ofstream型別的物件,遇到了兩個問題:

首先,為了提高效率和減少**冗餘,我把螢幕上的輸出和到檔案的輸出放到乙個函式裡,只周遊樹一遍就完成了兩項工作。但是輸出到檔案就採用了遞迴的方式,但是輸出的順序有時會發生混亂,我採用了ofstream::flush()的方法解決。但是感覺這樣的方法還是不好,如果輸出邏輯再複雜一點,這個方法也許就不再適用了。

其次,我想在輸出之前清空檔案,如果採用ofstream物件,只好採用先開啟檔案再關閉它的方法,並加上清空檔案的引數。感覺這也並不是乙個好的方法,有點蠢......

總之,執行效果如下圖:

目前進度是這裡,通過做個人專案感覺自己對資料結構和演算法的掌握還是太差了,還有很長一段路要走啊(望天).......

個人專案四則運算生成程式進展 第三週

上個星期完成了基本功能後,我開始用mfc 進行擴充套件,將它變成乙個有圖形介面的軟體 擴充套件之後的程式的對話方塊和類 dialog 1 idd arithmetic dialog 介紹 開始介面,需要填入生成表示式的個數 數字 整數以及真分數分母 的範圍。功能 接收使用者傳入的引數 預設的引數均為...

個人專案(四則運算程式)總結

一.基本要求 將10 20道四則運算題目寫入文件,程式讀取並輸出題目,同時計算出正確結果。使用者對每道題目計算答案,答對進行提示,答錯輸出正確結果。分別記錄回答正確 錯誤的數目並輸出。四則運算題目基本要求 1.加減乘除四種運算全部出現 3.算式中要出現括號 2.出現真分數和假分數的運算 4.最少出現...

個人作業 四則運算生成

軟工的第一次作業在規定時間內並沒有完成所有要求的任務還是比較遺憾,預計還需要2 3天才能完善。psp2.1 personal software process stages time planning 計畫 estimate 估計這個任務需要多少時間 3 4days development 開發 a...