1、
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
40h |
Development |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
8h |
· Design Spec |
· 生成设计文档 |
1h |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0 |
· Design |
· 具体设计 |
5h |
· Coding |
· 具体编码 |
3h |
· Code Review |
· 代码复审 |
2h |
· Test |
· 测试(自我测试,修改代码,提交修改) |
1h |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
0.5h |
· Size Measurement |
· 计算工作量 |
0.5h |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
0.5h |
合计 |
21.5h |
2、
PSP2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
40h |
Development |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
4h |
· Design Spec |
· 生成设计文档 |
2h |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
0.5h |
· Design |
· 具体设计 |
10h |
· Coding |
· 具体编码 |
5h |
· Code Review |
· 代码复审 |
0 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
0.5h |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
0.3h |
· Size Measurement |
· 计算工作量 |
0.2h |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
0.2h |
合计 |
22.7h |
3、我改进程序性能上花费了两个小时。在检查是否是相同式子时,最初只是看结果是否相同,经过改进后,我现在除了比较结果,还观察运算数是否相同,运算符号是否相同,只有都相同的才认为是相同的式子。这样更大程度保证了误判的情况,而且这样兼顾了效率。
另一个改进的地方是,为了实现算式的计算,我使用了中缀转后缀的方法,为了更好地在一个栈里存数字和负号,将数字类中增加一个符号的属性,一般时候也不使用这个属性。只有中缀转后缀时候使用。
4、(1)输入n=r=10
生成表达式:
1. 4 + 9 =
2. 0 + 6'2/7 - 5'5/8 =
3. 8 ÷ 3 × 10 + 4'1/4 =
4. 5 - 3'1/2 + ( 1 + 5'7/8 ) =
5. ( 4 ÷ 3/4 ) + 5'2/3 =
6. 6'7/9 - 10'2/5 ÷ ( 10'3/7 + 5'3/5 ) =
7. 6'1/4 + ( 3/4 × 6'1/3 ) =
8. 7'1/4 × ( 9'1/2 ÷ 6/7 ) - 8 =
9. 6'6/7 × 6'7/8 ÷ 1'6/7 × 9'7/9 =
10. 6'2/3 + 4'1/2 =
生成答案:
1. 13
2. 37/56
3. 30'11/12
4. 8'3/8
5. 11
6. 6'217/1683
7. 11
8. 72'17/48
9. 248'8/39
10. 11'1/6
分析:对于生成的表达式中,整数、分子、分母都小于10,生成了10个式子。经过计算,结果也是对的。
(2)输入上面生成的文件
match.txt中,输出
Correct: 10(1,2,3,4,5,6,7,8,9,10)
Wrong: 0()
这显然是正确的。
(3)输入:r=3,n=100
生成题目:
1. 2'1/2 - 1 =
2. 2 + ( 2 + 2 ) =
3. ( 0 × 2 ) × 1 =
4. 2'1/2 ÷ 1/2 + 1'1/2 ÷ 2 =
5. 0 + ( 2 - 2 ) × 2 =
6. 2 ÷ 2 =
7. 0 + 1'1/2 × 0 =
8. 2'1/2 ÷ 2 =
9. 2 + 0 =
10. 1 ÷ 1'1/2 =
11. ( 2'1/2 ÷ 1/2 ) ÷ 2 =
12. 0 × 0 ÷ 2 =
13. 3 × 0 =
14. 0 ÷ 1'1/2 + 0 =
15. 2'1/2 × 1 =
16. 1 ÷ 3 - 1 ÷ 3 =
17. 2 - ( 2 × 1 ) ÷ 2 =
18. 1 ÷ ( 1 - 1/2 ) × 2 =
19. 2 - 1'1/2 ÷ ( 1 + 1 ) =
20. 3 ÷ 1 =
21. 3 + ( 2 + 3 ) - 1 =
22. 1 + 1'1/2 =
23. 2 × ( 2 × 2 ) =
24. 1 - 1 =
25. 1 + 1 =
26. 2 × 2 + ( 2 + 2 ) =
27. 1 - 1/2 ÷ ( 2 × 2 ) =
28. 1 - 1 + 1 =
29. ( 2 + 2'1/2 ) × 2'1/2 ÷ 2'1/2 =
30. 1 + 2 =
31. 2 + 1/2 × 1/2 =
32. 2'1/2 ÷ 1 =
33. 1'1/2 + 1 + 1 =
34. 2 + 1 × 2 + 2 =
35. 2'1/2 × 3 - 1'1/2 ÷ 2 =
36. 1 + 2 + 0 =
37. 1 × 2 + 1 =
38. 1 + 2 × 2 + 0 =
39. 0 + 1 =
40. 2'1/2 - 2 =
41. 1 × 1 =
42. 2'1/2 × ( 1 × 0 ) =
43. 2 × 1 =
44. 3 × 1 × 1/2 - 0 =
45. 0 × ( 2 + 2 ) =
46. 0 ÷ ( 1/2 × 2 ) ÷ 3 =
47. 1'1/2 ÷ 2 =
48. ( 2 + 2 ) ÷ 1 =
49. 2 - 1'1/2 × 2 ÷ 2 =
50. 0 + ( 1/2 + 1/2 ) =
51. 2 - 1'1/2 =
52. 1 ÷ 1 =
53. 2 + 2 + 2 - 2 =
54. 1/2 ÷ 1 =
55. 1/2 ÷ 2'1/2 × 2 =
56. 2 × 0 + ( 0 ÷ 1'1/2 ) =
57. 2'1/2 + 0 + 1 =
58. 3 ÷ 1/2 - ( 2 × 2 ) =
59. 1 - ( 2'1/2 × 0 ) =
60. 1 - ( 0 ÷ 1 ) ÷ 2'1/2 =
61. 3 ÷ 1/2 =
62. ( 1 × 1 ) + 3 =
63. 0 ÷ ( 1 - 0 ) × 2'1/2 =
64. 1 + ( 1'1/2 × 0 ) + 2 =
65. 2'1/2 × 2 =
66. 0 ÷ ( 2 - 0 ) + 1 =
67. 0 ÷ 1 =
68. 2 + 2 + ( 2 ÷ 2 ) =
69. 0 + 0 =
70. 0 + 2'1/2 - 1/2 × 0 =
71. 1 ÷ 1 ÷ 2 =
72. 1/2 + 0 =
73. 2 ÷ 1 × 2 =
74. 1/2 + ( 2'1/2 + 2'1/2 ) =
75. 1'1/2 ÷ 1 + 2'1/2 ÷ 2'1/2 =
76. 0 ÷ ( 3 + 3 ) ÷ 1 =
77. 1 × 0 × 1'1/2 =
78. 1/2 × 1'1/2 =
79. ( 1/2 ÷ 2 ) × 3 =
80. 2 - 0 =
81. 2 ÷ 1/2 =
82. ( 1 + 2 ) - 0 =
83. 2 ÷ ( 2'1/2 + 2'1/2 ) - 0 =
84. 3 + 2'1/2 + 1/2 =
85. 0 - 0 =
86. 0 - 0 ÷ ( 3 - 0 ) =
87. 0 - 1/2 × ( 0 - 0 ) =
88. 2 - 1 + 0 × 2 =
89. 2 + ( 1'1/2 ÷ 2 ) ÷ 1 =
90. 1/2 + 2 - 2 =
91. 2 × 0 =
92. 2 × 2 - 0 =
93. 1 × 0 =
94. 1 - ( 1 × 1 ) =
95. 2 + 2 × ( 2 + 1 ) =
96. 1/2 × 1 =
97. 1 × 1 × 1/2 ÷ 2 =
98. 1 ÷ 2 =
99. 1 ÷ 2'1/2 + ( 1 + 1 ) =
100. 2 - 1 + 1 =
生成答案:1. 1'1/2
2. 6
3. 0
4. 5'3/4
5. 0
6. 1
7. 0
8. 1'1/4
9. 2
10. 2/3
11. 2'1/2
12. 0
13. 0
14. 0
15. 2'1/2
16. 0
17. 1
18. 4
19. 1'1/4
20. 3
21. 7
22. 2'1/2
23. 8
24. 0
25. 2
26. 8
27. 7/8
28. 1
29. 4'1/2
30. 3
31. 2'1/4
32. 2'1/2
33. 3'1/2
34. 6
35. 6'3/4
36. 3
37. 3
38. 5
39. 1
40. 1/2
41. 1
42. 0
43. 2
44. 1'1/2
45. 0
46. 0
47. 3/4
48. 4
49. 1/2
50. 1
51. 1/2
52. 1
53. 4
54. 1/2
55. 2/5
56. 0
57. 3'1/2
58. 2
59. 1
60. 1
61. 6
62. 4
63. 0
64. 3
65. 5
66. 1
67. 0
68. 5
69. 0
70. 2'1/2
71. 1/2
72. 1/2
73. 4
74. 5'1/2
75. 2'1/2
76. 0
77. 0
78. 3/4
79. 3/4
80. 2
81. 4
82. 3
83. 2/5
84. 6
85. 0
86. 0
87. 0
88. 1
89. 2'3/4
90. 1/2
91. 0
92. 4
93. 0
94. 0
95. 8
96. 1/2
97. 1/4
98. 1/2
99. 2'2/5
100. 2
观察没有可通过交换律变成同一个式子的表达式。程序正确。
(4)以上数据进行match,答案
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()
明显这是正确的。
(5)输入n=3,r=10
表达式:
1. 4'1/2 × 3'1/2 =
2. ( 7'5/7 + 3'1/2 ) ÷ 7'5/6 =
3. 8'5/9 × 9 =
结果:
1. 15'3/4
2. 1'142/329
3. 77
(6)输入表达式同(5)输出的,
输入结果为
1. 0
2. 1'142/329
3. 77
输出为:
Correct: 2(2,3)
Wrong: 1(1)
因为修改了一个,所以这是正确的。
(7)输入n=r=2
生成表达式:
1. ( 0 × 1 ) ÷ 1 =
2. ( 0 ÷ 1 ) - 0 =
生成结果:
1. 0
2. 0
(8)输入表达式
1. ( 0 × 1 ) ÷ 1 =
2. ( 0 ÷ 1 ) - 0 =
输入结果
Correct: 0()
Wrong: 2(1,2)
(9)输入n=5,r=20
生成表达式:
1. 4 × 20'2/5 =
2. 7'11/15 + 19'1/4 =
3. 4'1/2 × 4'1/3 =
4. 5 + ( 20 - 4'1/11 ) =
5. 3'9/19 × 17'2/3 =
生成结果:
1. 81'3/5
2. 26'59/60
3. 19'1/2
4. 20'10/11
5. 61'7/19
(10)输入(9)的结果,match
输出
Correct: 5(1,2,3,4,5)
Wrong: 0()
综上,我的程序时正确的。
5、
在个人项目中,我学会了c++的基本编程能力。以前从来没有用过c++,这次在四天之内,用c++写了一个近700行的程序,使用了很多编程的语法,对c++有了一定的掌握。
同时我对软件工程有了一定的了解,掌握了软件工程的基本步骤,懂得了复审、测试的技巧。