個人專案終極部落格 四則運算題目生成程式分析

2022-08-05 04:00:17 字數 4031 閱讀 5895

四則運算題目生成程式分析

13061184 馬騰躍

psp2.1

personal software process stages

time

planning

計畫

· estimate

·估計這個任務需要多少時間

15hdevelopment

開發

· analysis

·需求分析(包括學習新技術)

2h· design spec

·生成設計文件

1h· design review

·設計複審(和同事審核設計文件)

0.5h

· coding standard

·**規範(為目前的開發制定合適規範)

1h· design

·具體設計

4h· coding

·具體編碼

4h· code review

·**複審

1h· test

·測試(自我測試,修改**,提交修改)

3.5h

reporting

報告

· test report

·測試報告

1h· size measurement

·計算工作量

1h· postmortem & process improvement plan

·事後總結,並提出過程改進計畫

0.5h

合計19.5h

在第一次的程式分析中可以發現,類expression的使用比例非常之小,而且他的函式作用與program類有所重複,所以在改進時將expression類進行刪除,並且將原先由它實現的功能整合到其它類中進行實現。

經過改進後可以發現,每個函式的均衡性得到了一定的提公升。

測試用例:在生成數量方面,測試了從1道至10000道的資料,所有資料都能夠正常輸出,但是在數量很大的時候執行速度會比較緩慢。

在數值上限方面:程式在執行20以下的四則運算時能夠正常輸出,但是在數字比較大的時候會出現數字溢位的問題。

在匹配答案的時候,首先進行生成的題目和答案進行匹配,與其輸出結果應當為全部正確,然後再改變某些答案進行匹配,能夠測試出答案不正確。

具體測試用例如下(輸入為命令列引數,輸出為檔案輸出,由於輸出題目很多,以第一道題目以及答案作為樣例):

-n 10 –r 10

1. 8 × 8'1/3 ÷ 7 ÷ 2'1/4

1. 1. 4'44/189

-n 100 –r 10

1. 3 ÷ 2/9

1. 13'1/2

-n 10000 –r 10

1. 1'7/9 × (2'1/6 - 5/7 + 7'2/7)

1. 15'101/189

-n 100 –r 20

1. 13'2/9 - 15'1/3 ÷ 11'1/5

1. 11'215/252

-n 10000 –r 20

1. 1/4 + 18'15/19 + 19'15/17

1. 38'1191/1292

-n 10000 –r 1000

1. 36'1/11 × 77'29/65 ÷ 11'61/92 - 2'39/74

1. 237'195757/1534390

-e d:\exercises.txt -a d:\answers.txt (輸出到grade.txt)

如果兩個檔案是由程式生成的題目和答案,那麼輸出結果為:

correct: 100 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)

wrong: 0

如果手動更改答案檔案中某幾道題目答案的數值,那麼輸出結果為:

correct: 88 (1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94, 95, 96, 98, 99, 100)

wrong: 12 (5, 10, 14, 19, 24, 34, 40, 52, 60, 74, 87, 97)

-n 100 –r 100 –n 100 (引數個數錯誤):

控制台輸出:error: wrong number of arguments

-n 100 –e 100 (引數個數正確,但是引數名稱不正確)

控制台輸出:error: invalid arguments

-n abc –r abc (引數的內容格式不符合要求)

控制台輸出:error: 輸入字串的格式不正確。

1、鍛鍊了用c#語言的程式設計能力,對vs程式設計環境有了更深入的了解;

2、第一次接觸編寫乙個完整軟體的工作流程,邁出了熟悉部落格操作流程的第一步;

3、了解了程式效能分析的方法,隨時督促自己進行程式改進;

4、認識到了了解分析使用者需求的重要性,明白了乙個軟體不必苛求完美,而是要足夠好,穩定耐用即可。

效能分析圖:

程式消耗最大的函式:

由上面的可可以進行分析:main函式中消耗最大的函式為generate函式,然後generate函式呼叫中消耗最大的是number和random的建構函式,而number建構函式消耗最大的是其中呼叫的random類的建構函式。由此分析得,整個程式消耗最高的就是random類的建構函式。

程式執行緩慢:為了避免生成的隨機數重複,以前採用的方法是在每次生成隨機數之前將程序暫停一段時間thread.sleep(10),這樣就會導致程式生成10000道題目的時候執行時間很長。另外,由於效能分析的時候可以發現,random類的構造方法占用了執行時間的很大部分,所以可以考慮在整個函式執行的過程中只構造一次random類(設定為static型別變數)用於生成隨機數,可以大幅度減少執行時間。

數字溢位的問題:數字一出的問題主要存在於帶分數的運算中:如果整數部分很大的話,一旦進行通分或者乘除法,會導致結果的分子或者分母過大。至於如何解決,可以在number類的計算方法中,在進行通分或者乘除運算時,預先判斷是否會產生溢位的問題,如果產生溢位,則丟擲異常。

個人作業1 四則運算題目生成

一 題目要求 寫乙個能自動生成小學四則運算題目的命令列 軟體 滿足以下需求 1.除了整數以外,還要支援真分數的四則運算,真分數的運算,例如 1 6 1 8 7 24 2.運算子為 3.並且要求能處理使用者的輸入,並判斷對錯,打分統計正確率。4.要求能處理使用者輸入的真分數,如 1 2,5 12 等 ...

個人作業 四則運算題目生成程式

這個作業屬於哪個課程 這個作業要求在 這個作業的目標 寫乙個能自動生成小學四則運算題目的程式,然後在此基礎上擴充套件 學號 3190704143 import random op n1,n2,n3,n4 0,0,0,0 用作全域性變數,用來生成隨機數 count 0 def maxgys m1,m2...

四則運算題目生成程式

a.需求分析 看了大家對於本課程的目標和規劃,很多同學都希望能提高自己的實踐能力,沒有捷徑可走,就是練習 練習再練習!那麼就從第乙個個人專案開始吧,用一周的時間完成乙個基於控制台的四則運算程式,實現乙個自動生成小學四則運算題目的命令列程式 從 構建之法 第一章的 程式 例子出發,像阿超那樣,花二十分...