1. 程式人生 > >結對作業---四則運算(Core 第四組)

結對作業---四則運算(Core 第四組)

IT acc bsp 表達式樹 clas 寫博客 cal 二叉樹 inter

----by core 第四組 ( 鄒衛其 範力 )

一.項目介紹

1. 能自動生成小學四則運算題目並給出答案,生成題目時可以選擇下列參數:

  1)生成題目數量

  2)每道題目中運算數數量

  3)運算數數值範圍

  4)運算符種類( + - * / ^ )

  5)運算數類型(整數,小數,分數)

  6)運算數精度(保留到小數點後幾位)

2. 將四則運算的計算功能包裝在一個模塊中( Class或DLL)

3. 將Core模塊通過一定的API 接口( Application Programming Interface ) 來和其他組的模塊( UI )交流

4. UI組測試所有 Core 組 DLL 後,Core 組需根據 UI 組的測試結果進行反饋優化

5. 項目管理和撰寫博客

二.功能分析

1. 創建類Core的一個對象 cal ,根據 UI 傳進來的數據配置對象 cal 的相關參數 ,將生成的題目和答案以string串的形式傳遞給 UI

2. 生成算數表達式時我們采用了二叉樹的結構。算術表達式樹的樹枝天然是運算符,樹葉是操作數,先隨機的生成一顆運算符樹,再將樹葉補全即可。

3. 在用戶選擇乘方時我們將 ‘^‘ 運算符沈到運算符樹底,保證算術表達式不會過於復雜

4. 重載 Core 類的成員函數,實現加,減,乘,除,乘方運算

5. 在運算的過程中要保證任何中間步驟都不會出現負數,有意思的是,在所有的運算符中只有減號會使表達式非法,此時左子樹的值大於右子樹,但只要交換減號的左右子樹即可

6. 計算算數表達式的值並返回 string串

三.代碼實現

1. 定義 Core 類

技術分享圖片
 1 class Core
 2 {
 3 private:
 4     int que_num = 100;  //題目數量
 5     int data_num = 10;  //操作數數量
 6     int range = 5;      //計算的數值範圍 
 7     int opr_type = 3;   //操作符種類  0.加減  1.加減乘  2.加減乘除  3.加減乘除乘方 
 8     int data_type = 1;  //0整數  1小數  2分數
 9     int accuracy = 2
; 10 string* que = new string[que_num + 1]; 11 string* ans = new string[que_num + 1]; 12 public: 13 void set_que_num(int a) { que_num = a; } 14 void set_data_num(int a) { data_num = a; } 15 void set_range(int a) { range = a; } 16 void set_opr_type(int a) { opr_type = a; } 17 void set_data_type(int a) { data_type = a; } 18 void set_accuracy(int a) { accuracy = a; } 19 int get_que_num() { return que_num; } 20 int get_data_num() { return data_num; } 21 int get_range() { return range; } 22 int get_opr_type() { return opr_type; } 23 int get_data_type() { return data_type; } 24 int get_accuracy() { return accuracy; } 25 string *getQue(); 26 string *getAns(); 27 private: 28 string expstring(Node *root); 29 Node *creatOptree(); 30 Node calc(Node *root); 31 void previsite(Node *head); 32 char operat(); 33 char int_operat(); 34 int get_factor(int a); 35 };
View Code

2. 設置類的參數並調用示例

技術分享圖片
 1 int main()
 2 {
 3     Core cal;
 4     string *q, *a;
 5 
 6     cal.set_data_num(10);
 7     cal.set_que_num(100);
 8     cal.set_range(10);
 9     cal.set_opr_type(3);
10     cal.set_data_type(1);
11     cal.set_accuracy(3);
12 
13     q = cal.getQue();
14     a = cal.getAns();
15     for (int i = 1; i <= cal.get_que_num(); i++)
16     {
17         cout << q[i] <<  " = " << a[i] << endl << endl;
18     }
19 
20     system("pause");
21     return 0;
22 }
View Code

四.測試

以下測試樣例約定生成20道題目,每題10個運算數,數值範圍0~10,在加,減,乘,除,乘方模式

1. 整數

技術分享圖片
 1 ( 3 - 8 / 4 ) * ( 10 + 1 ^ 3 ) + 4 ^ 4 - ( 2 + 4 )
 2  = 261
 3 5 / 1 + 1 - 5 + 9 * 10 - ( 10 + 5 - 4 * 2 )
 4  = 84
 5 ( 6 - 4 + 8 ) * ( 10 - ( 5 ^ 1 - 2 ) ) + 5 + 9 + 3
 6  = 87
 7 5 * ( 10 * 7 - 7 ) - 2 / 1 + 9 + 4 ^ 4 + 4
 8  = 582
 9 9 * 3 ^ 2 + 4 * 3 + 7 * ( 9 + ( 10 - 7 ) * 2 )
10  = 198
11 6 * ( 6 * 9 - 5 ) * 9 + ( 8 * 10 + 8 - 4 ) * 10
12  = 3486
13 ( 2 + 7 ) * ( 6 - 4 ) + ( 10 / 5 + 10 - 4 ) * 9 * 6
14  = 450
15 ( 3 + 4 * 4 ) * 4 + 1 ^ 1 * ( 7 / 1 + 1 / 1 )
16  = 84
17 10 - 7 / 1 - ( 9 - 8 ) + 4 ^ 5 * ( 8 - 3 / 1 )
18  = 5122
19 1 * 5 - 1 - 9 / 3 + 2 / 1 * 4 * 1 ^ 3
20  = 9
21 3 / 1 + 10 + 3 / 1 + 2 * 10 + 4 - ( 8 + 6 )
22  = 26
23 3 * 2 * ( 4 / 2 + 5 ) + 3 - ( 6 - 3 ) + 9 - 1
24  = 50
25 2 * ( 8 - 4 + 1 ) + 1 ^ 5 + 3 + 8 * 4 - 7
26  = 39
27 7 + 10 - 4 - 2 + ( 10 + 6 ) * ( 1 ^ 3 + 4 / 2 )
28  = 59
29 ( 1 + 9 - 7 / 1 ) * 9 * 10 + 7 * 6 * ( 6 - 2 )
30  = 438
31 2 * ( 7 - 2 ) - ( 5 - 9 / 3 ) + 1 * 5 * 3 * 3
32  = 53
33 9 + 4 + 2 / 1 * 4 / 2 + 2 * 9 - 9 / 3
34  = 32
35 ( 2 ^ 4 + 7 / 1 ) * ( 2 + 9 * 9 ) + 2 * ( 4 + 4 )
36  = 1925
37 ( 5 + 4 ^ 1 ) * 2 ^ 4 * 4 + 3 + 8 + 5 / 1
38  = 592
39 9 * 9 / 3 + ( 8 + 3 + 9 ) * ( 3 / 1 - 10 / 5 )
40  = 47
View Code

2. 小數(精度為3)

技術分享圖片
 1 ( 1.05 - 1 ^ 3 ) / ( 1.75 * ( 6.1 - 3.2 ) ) + 3.4 + 3.1 + 6.15 + 8.9
 2  = 21.559
 3 ( 6.85 + 4.1 ) * 7.2 + 1.65 / ( 6 ^ 5 * 2.9 + 1.45 + 5.6 + 8.05 )
 4  = 78.840
 5 ( 9.55 / ( 7.95 - 7.4 ) - 0.65 ) / 7.3 + ( 0.1 + 1.8 ) / ( 9.8 - 3.4 / 6.7 )
 6  = 2.494
 7 1.2 / ( 6.15 + 5.15 - 9.75 - 0.45 ) + 2.9 / ( 9.9 / 9.9 ) * 1.1 / 1.9
 8  = 2.769
 9 ( 3.8 - 1.05 ) * 3.75 / 2 ^ 5 + ( 9.25 + 4.4 ) * 7.85 * 6 ^ 4
10  = 138870
11 ( 4.1 / ( 5.05 * 9.3 ) + 9.25 - 0.4 ) * 2 ^ 2 + 1.1 - ( 2.5 - 2.2 )
12  = 36.549
13 3.7 + 6 ^ 4 + 9.6 * 4 + ( 8.6 - 7.15 - 0.1 ) * ( 1.6 + 6.25 )
14  = 1348.7
15 4.7 + 8.55 + 3.2 - 2.55 + ( 4.35 - 0.5 ) * ( 5.75 + ( 4.1 + 4.35 ) / 2.15 )
16  = 51.168
17 ( 2 ^ 5 - 7.65 ) * 2 ^ 4 + 7.85 / 5.4 / ( 0.05 * 9.65 * 7 )
18  = 390.03
19 7.95 - 6.45 + 1 ^ 3 + 8.15 * 5.55 + ( 3.75 + 7.1 ) / ( 8.75 - 1.05 )
20  = 49.141
21 3 ^ 4 - 0.55 / 3.9 + 6.6 / 1 ^ 3 * ( 7 + 6.75 ) / 7.25
22  = 93.376
23 ( 2 ^ 4 - 0.05 ) / ( 3.15 - 0.2 ) + 8.55 - 8.2 + 1.6 * 8.75 + 5.65
24  = 25.406
25 3.6 / ( ( 8.45 - 1.15 ) / 8.5 + 1.4 * ( 7.15 - 3.15 ) ) + ( 1.05 + 4.4 ) * 9.4
26  = 51.787
27 ( 1.25 + 7.45 ) / ( 3 ^ 2 / 2 ^ 2 ) + 5 ^ 5 * 5 ^ 1
28  = 15628.9
29 5 ^ 5 - ( 4.45 + 2.65 + 2.15 ) + 0.1 * ( 8.45 - ( 9.6 - 7.25 ) * 0.4 )
30  = 3116.5
31 2 ^ 1 + 5.5 - ( 4.1 - 1.95 ) + ( 7.05 - 4.45 ) * 9.4 - ( 1.4 - 0 )
32  = 28.39
33 4 ^ 3 - 8.2 - ( 3.3 - 0.8 ) + 6.55 * 5.9 * 7.05 / ( 4.05 - 1.5 )
34  = 160.142
35 3.3 + 9.8 / 7.9 + 2.9 * 4.9 + 9.6 - ( 3.9 + 2.4 ) * 8.75 / 6.8
36  = 20.243
37 4.45 - ( 9.25 + 0.75 - ( 4.65 + 5 ) ) + ( 8.95 + 9.1 ) * 1.3 - 8.05 / 7.9
38  = 26.546
39 8.1 / 0.75 / 3 ^ 1 + ( 8.35 - 6.6 ) * 2 ^ 4 / 5 ^ 2
40  = 4.72
View Code

3.分數

技術分享圖片
 1 ( 3|3 - 9|7 / 8|6 ) / ( 2|7 * ( 10|8 - 3|10 ) ) + 4|5 + 3|2 + 5|4 + 2|2
 2  = 1779|380
 3 2|7 * 9|4 / 1|10 + 5|4 * 7|5 + 7 / ( 1 ^ 4 + 9|9 + 10|3 )
 4  = 1063|112
 5 2 - 7|5 - ( 3|2 - 5|6 ) * 6|7 + ( 8|8 - 2|8 ) * 8|8 * ( 6|4 - 10|10 )
 6  = 113|280
 7 7 * ( 10|9 - 5|9 ) + ( 9|10 - 1|9 ) * 5|2 - ( 9|8 + 4|9 * 2|8 ) * 8|9
 8  = 1543|324
 9 9|4 / 9 * ( 9|10 - 8|10 ) / 9|7 / 1|9 + 3|3 - 3|9 / ( 9|8 - 1|10 )
10  = 4181|4920
11 ( 10|3 - 7|8 ) / ( 1|3 * 4 ) + 9|2 + 10|2 + ( 3|4 - 3|6 ) * ( 8|8 - 7|9 )
12  = 3283|288
13 ( 8|10 + 10|7 - ( 8|6 - 7|7 ) ) * ( 5|6 + 2|5 + 9|6 ) + 4|4 / 6|6 + 2|7
14  = 10184|1575
15 4|10 + 6 ^ 4 + 9|3 * 8|9 + 2|9 + 6|3 + 5|5 + 3|5 - 5|8
16  = 93763|72
17 3|3 + 8 - 5|7 - 2|6 - ( 3|4 - 4|6 ) + 4|6 * 1|2 * 1|5 / 4
18  = 276|35
19 1 ^ 1 * 8|7 * 9|4 + 5 ^ 3 / ( ( 8|6 + 9|10 ) / ( 3 * 4|3 ) )
20  = 106206|469
21 ( 4 - 9|9 ) / ( 9 * 4|10 + 8|6 ) + 4 ^ 3 - 1|2 * 1 ^ 2
22  = 2372|37
23 10|4 - 6|10 - ( 7|3 - 4|6 ) + ( 5|5 - 3|5 ) / ( ( 3|10 + 8|4 ) * ( 6|2 - 9|8 ) )
24  = 15|46
25 6|7 * ( 4 - 2|9 ) / ( 6|6 * 3|3 ) * 5|8 * 3|9 + 7|4 * ( 4 - 3|6 )
26  = 3427|504
27 2|5 + 10|4 + 10|8 - 3|9 + 6 ^ 1 + ( 8|2 - 4|4 * 5|3 ) * 5|4
28  = 191|15
29 1 ^ 5 + 2|4 + 3 ^ 1 * 8|9 + 3|4 + 7|3 * 3|10 / 6|10
30  = 73|12
31 1 ^ 5 + 10|4 - ( 3|9 - 1|9 ) + ( 10 - 7|9 ) / 9|2 * ( 1 + 8|9 )
32  = 10423|1458
33 5|6 * ( 4|6 + 7|3 ) * ( 4|7 / 5|10 - 3|9 ) + 7|6 / 2|7 * 6|3 / 7|6
34  = 379|42
35 5|4 / 5|4 * 7|4 * 2 ^ 1 + 9 * ( 6 / 5|2 + 4|7 - 3|10 )
36  = 964|35
37 9|10 + 2 + 10|6 - 8|9 / ( 2|9 * 4|10 + 2 ) + 6|6 / 10 * 8|5
38  = 30323|7050
39 4 / ( 5|9 - 1|9 ) / ( 5|6 + 4|2 ) + 4|8 + 10|9 + 7|4 - ( 6|9 + 10|7 )
40  = 19031|4284
View Code

4. 樣例分析

可以看到,我們隨機生成的表達式比較均勻,括號匹配無誤,計算結果正確

五.DLL封裝和對接

六.結對編程感悟

七.PSP表格

  

結對作業---四則運算(Core 第四組)