關於四則運算運算式產生和答案校正的筆記

來源:互聯網
上載者:User

標籤:

軟體工程的個人項目是寫一個面向小學生的四則運算題目產生和校正工具。主要功能有兩個,一是產生四則運算題目,二是對給定的題目和答案,校正其中答案的正確性。

 

時間表格

 

前期構思的時間比較多,但是在編碼和測試中還是花費了不少的時間。

由於採用的c語言,在字串的處理和記憶體管理上花費了較多的時間。

PSP2.1

Personal Software Process Stages

Time

Planning

計劃

 

  · Estimate

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

 20h

Development

開發

 

  · Analysis

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

 6h

  · Design Spec

  · 產生設計文檔

 1h

  · Design Review

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

 1h

  · Coding Standard

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

 0.5h

  · Design

  · 具體設計

 2h

  · Coding

  · 具體編碼

 7h

  · Code Review

  · 代碼複審

 1h

  · Test

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

 4h

Reporting

報告

 

  · Test Report

  · 測試報告

 1h

  · Size Measurement

  · 計算工作量

 0.5h

  · Postmortem & Process Improvement Plan

  · 事後總結, 並提出流程改善計劃

 0.5h

 

合計

 24.5

 

題目分析和思路

主要問題:

1.算式查重
     非等價去重
     如果兩個運算式的數和操作符都一樣,我們認為這兩個運算式重複。
2.對大量資料的支援,支援1w個算式,考慮到查重需要順序檢索,使用結構體和鏈表3.答案校對需要支援對中綴運算式的計算  1)中綴運算式轉尾碼運算式——調度場演算法  2)尾碼運算式的計算4.真分數的四則運算(a!=0,b!=0)     擷取運算元:a,b,m,n     計算結果:k,l(k/l的形式)     1)加減法:m/a + n/b -> (bm+an)/ab          乘法:m/a × n/b ->mn/ab          除法:m/a ÷ n/b ->mb/na(n!=0)     2)輾轉相除法求得最大公約數,化簡分數(k/l)
if(k>l)    x=gcd(k,l);else    x=gcd(l,k);
int gcd(int k, int l){    if(k%l==0)        return l;    else        return gcd(l,k%l);}
     另:另記得處理化簡之後分母為1的情況5.括弧問題——產生帶括弧的算式     左括弧:第一個數/每一個操作符(不含最後一個),若沒有產生過左括弧,隨機一次是否產生左括弧。     右括弧:每一個操作符,若產生過左括弧沒有產生過右括弧,隨機一次是否產生右括弧。     結尾處:若已經有左括弧但是沒有右括弧,則補上右括弧。     備忘:先檢測右括弧,後檢測左括弧。6.c語言帶來的需要注意的問題:c風格式字串處理,記憶體管理。 代碼中遇到的問題 1.產生過程中的算式結果合法性檢查花費了大量的時間。很多時間花在對產生到一半的運算式進行處理使其成為能夠計算的運算式。 2.處理c風格式字串與生俱來的麻煩,這點在上一點中也有很大影響。 3.記憶體管理問題。為了簡化代碼,構寫了不少函數,傳參和傳回值基本採用char*類型,釋放記憶體的過程中產生了不少問題。 效能分析

ArithmeticProducer.exe -r 50 -n 20000

名稱

非獨佔樣本數

獨佔樣本數

非獨佔樣本數百分比

獨佔樣本數百分比

-  ArithmeticProducer.exe

1,159

624

100.00

53.84

+  produce

969

532

83.61

45.90

+  _strcmp

18

18

1.55

1.55

+  gcd

18

18

1.55

1.55

+  calc

152

16

13.11

1.38

+  convert

25

13

2.16

1.12

+  transToVulgarFrac

59

8

5.09

0.69

+  getRand

16

7

1.38

0.60

+  getGcd

22

4

1.90

0.35

+  _RTC_CheckEsp

2

2

0.17

0.17

+  getIntResult

109

2

9.40

0.17

+  @ILT+230

1

1

0.09

0.09

+  @ILT+240

1

1

0.09

0.09

+  _RTC_CheckStackVars

1

1

0.09

0.09

+  checkRange

91

1

7.85

0.09

+  __tmainCRTStartup

1,159

0

100.00

0.00

+  main

1,159

0

100.00

0.00

+  mainCRTStartup

1,159

0

100.00

0.00

其中produce()是用於產生算式的函數。

從上述效能分析資料來看,佔據CPU時間最多的produce()函數,佔比高達45.90%。

其它函數中,CPU時間主要耗費在計算上(gcd()用於遞迴計算最大公約數,clac()用於計算尾碼運算式的值,convert()用於將中綴運算式轉換為尾碼運算式以便計算)。

根據分析資料,produce()函數有很大的最佳化空間。

關於四則運算運算式產生和答案校正的筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.