软件工程-东北师大战-第四次作业(3)
2017-10-11 13:40
274 查看
程序基本信息:
语言:C#
工具:VS2013
环境:windows 7 32位
功能:四则运算
代码git地址:https://git.coding.net/xushaobin/task_4.git
要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,博客是分别完成的)。 (1) 给出每个功能的重点、难点、编程收获。(2)给出结对编程的体会,以及 (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)
功能1. 四则运算(不支持括号)
重点:随机生成四个数字并且随机选择三个运算符。
难点:避免除不尽,或者除数为零的情况,和表达式如何正确计算。
编程收获:学习了C#随机生成数的算法,和逆波兰、堆栈等知识
代码:
运行截图:
功能2. 四则运算(支持括号)
重点:表达式中序变后序。
难点:如何随机使括号成对出现在表达式,这里人为规定的了10种情况的,证明改程序支持有括号的四则运算。另外如何避免带括号的除数为零的情况,比如:2/(1+1-2)。
编程收获:进一步理解逆波兰去括号,最后变为后序的工作原理。
代码:
运行截图:
功能3. 限定题目数量,"精美"打印输出,避免重复
重点:按规定格式进行打印输出test.txt文件
难点:避免重复,限定题目数量。
编程收获:复习了文件读写操作和获取主函数传入的参数并处理。
代码:
运行截图:
逆波兰表达式解数学运算参考博客:
http://blog.csdn.net/liuyuxusuixiang/article/details/25289715
结对编程的体会:
结对编程用两个人的力量编写一个程序,常常产生1+1>2的情况,开发效率较高。另外锻炼了自己与人交流,与人合作的能力,同时增进的我与我的队友蔺依铭同学的革命友谊。
在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。
1、讨论逆波兰的实现原理。
2、讨论如何避免除不尽和除数为零的情况。
3、讨论如何获取主函数参数并获取其中用户想要生成的题目个数。
4、讨论如何避免题目重复的情况
5、讨论功能四是否能短时间完成。
要求2 给出照片1张,包括结对的2位同学、工作地点、计算机,可选项包括其他能表达结对编程工作经历的物品或场景。 (5分)
照片:
工作地点:计算机二楼实验室
计算机:个人笔记本电脑
要求3 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果。(5分)
代码git地址:https://git.coding.net/xushaobin/task_4.git
语言:C#
工具:VS2013
环境:windows 7 32位
功能:四则运算
代码git地址:https://git.coding.net/xushaobin/task_4.git
要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,博客是分别完成的)。 (1) 给出每个功能的重点、难点、编程收获。(2)给出结对编程的体会,以及 (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)
功能1. 四则运算(不支持括号)
重点:随机生成四个数字并且随机选择三个运算符。
难点:避免除不尽,或者除数为零的情况,和表达式如何正确计算。
编程收获:学习了C#随机生成数的算法,和逆波兰、堆栈等知识
代码:
//功能一 随机生成支持出题4个数的四则运算题目(无括号) static void requirement1(int nn) { int right_num = 0; //答对题目数目 Random rd = new Random(); int[] num = new int[4]; char[] fourOptions = new char[] { '+', '-', '*', '/' };//四则运算符 int i, j; int[] charnum = new int[3]; for (i = 0; i < nn; i++) { num[0] = rd.Next(0, 10); num[1] = rd.Next(0, 10); num[2] = rd.Next(0, 10); num[3] = rd.Next(0, 10); //随机生成四个数 for (j = 0; j < 3; j++) { int n = rd.Next(0, 4); charnum[j] = n; if (n == 3) //如果有除法,出发后面的数字在1,2,4,5,8里面选择。 { int[] divisor = { 1, 2, 4, 5, 8 }; Random rd1 = new Random(); num[j + 1] = divisor[rd1.Next(0, 5)]; } } //Console.WriteLine(num1 + fourOptions[0] + num2 + fourOptions[1] + num3 + fourOptions[2] + num4); string expression = num[0] + "" + fourOptions[charnum[0]] + num[1] + fourOptions[charnum[1]] + num[2] + fourOptions[charnum[2]] + num[3]; Console.WriteLine(expression); Console.Write("?"); String str = Console.ReadLine(); // Console.WriteLine(expression + " = " + Calucate(expression)); if (Math.Abs(Calucate(expression) - GetValue(str)) < 1e-7) { Console.WriteLine("答对了,你真是个天才!"); right_num++; } else { Console.WriteLine("再想想吧,答案似乎是" + Calucate(expression) + "喔!"); } } Console.WriteLine("你一共答对" + right_num + "道题,共20道题。"); }
运行截图:
功能2. 四则运算(支持括号)
重点:表达式中序变后序。
难点:如何随机使括号成对出现在表达式,这里人为规定的了10种情况的,证明改程序支持有括号的四则运算。另外如何避免带括号的除数为零的情况,比如:2/(1+1-2)。
编程收获:进一步理解逆波兰去括号,最后变为后序的工作原理。
代码:
//功能二 随机生成支持出题4个数的四则运算题目(有括号) static void requirement2(int nn) { int right_num = 0; //答对题目个数 Random rd = new Random(); int[] num = new int[4]; char[] fourOptions = new char[] { '+', '-', '*', '/' };//四则运算符 int i, j; int[] charnum = new int[3]; for (i = 0; i < nn; i++) { num[0] = rd.Next(0, 10); num[1] = rd.Next(0, 10); num[2] = rd.Next(0, 10); num[3] = rd.Next(0, 10); for (j = 0; j < 3; j++) { int n = rd.Next(0, 4); charnum[j] = n; if (n == 3) //如果出现除法,后面的数从1,2,4,5,8里面选择 { int[] divisor = { 1, 2, 4, 5, 8 }; Random rd1 = new Random(); num[j + 1] = divisor[rd1.Next(0, 5)]; } } string[] expression = new String[10]; expression[0] = "(" + num[0] + "" + fourOptions[charnum[0]] + num[1] + ")" + fourOptions[charnum[1]] + num[2] + fourOptions[charnum[2]] + num[3]; expression[1] = "(" + num[0] + "" + fourOptions[charnum[0]] + num[1] + fourOptions[charnum[1]] + num[2] + ")" + fourOptions[charnum[2]] + num[3]; expression[2] = num[0] + "" + fourOptions[charnum[0]] + "(" + num[1] + fourOptions[charnum[1]] + num[2] + ")" + fourOptions[charnum[2]] + num[3]; expression[3] = num[0] + "" + fourOptions[charnum[0]] + "(" + num[1] + fourOptions[charnum[1]] + num[2] + fourOptions[charnum[2]] + num[3] + ")"; expression[4] = num[0] + "" + fourOptions[charnum[0]] + num[1] + fourOptions[charnum[1]] + "(" + num[2] + fourOptions[charnum[2]] + num[3] + ")"; expression[5] = "(" + num[0] + "" + fourOptions[charnum[0]] + num[1] + ")" + fourOptions[charnum[1]] + "(" + num[2] + fourOptions[charnum[2]] + num[3] + ")"; expression[6] = "((" + num[0] + "" + fourOptions[charnum[0]] + num[1] + ")" + fourOptions[charnum[1]] + num[2] + ")" + fourOptions[charnum[2]] + num[3]; expression[7] = "(" + num[0] + "" + fourOptions[charnum[0]] + "(" + num[1] + fourOptions[charnum[1]] + num[2] + "))" + fourOptions[charnum[2]] + num[3]; expression[8] = num[0] + "" + fourOptions[charnum[0]] + "((" + num[1] + fourOptions[charnum[1]] + num[2] + ")" + fourOptions[charnum[2]] + num[3] + ")"; expression[9] = num[0] + "" + fourOptions[charnum[0]] + "(" + num[1] + fourOptions[charnum[1]] + "(" + num[2] + fourOptions[charnum[2]] + num[3] + "))"; int mm = rd.Next(0, 10); double ans = Calucate(expression[mm]); if (go == 0) { Console.WriteLine(expression[mm]); Console.Write("?"); String str = Console.ReadLine(); // Console.WriteLine(expression + " = " + Calucate(expression)); if (Math.Abs(Calucate(expression[mm]) - GetValue(str)) < 1e-7) { Console.WriteLine("答对了,你真是个天才!"); right_num++; } else { Console.WriteLine("再想想吧,答案似乎是" + Calucate(expression[mm]) + "喔!"); } } else { i--; go = 0; } } Console.WriteLine("你一共答对" + right_num + "道题,共20道题。"); }
运行截图:
功能3. 限定题目数量,"精美"打印输出,避免重复
重点:按规定格式进行打印输出test.txt文件
难点:避免重复,限定题目数量。
编程收获:复习了文件读写操作和获取主函数传入的参数并处理。
代码:
//功能三 限定题目数量,"精美"打印输出,避免重复 static void requirement3(int nn) { string path = "test.txt"; File.Delete(path); if (!File.Exists(path)) { FileInfo myfile = new FileInfo(path); FileStream fs = myfile.Create(); fs.Close(); } StreamWriter sw = File.AppendText(path); Random rd = new Random(); int[] num = new int[4]; char[] fourOptions = new char[] { '+', '-', '*', '/' };//四则运算符 int i, j; int[] charnum = new int[3]; double[] outcome = new double[nn]; for (i = 0; i < nn; i++) { num[0] = rd.Next(0, 10); num[1] = rd.Next(0, 10); num[2] = rd.Next(0, 10); num[3] = rd.Next(0, 10); for (j = 0; j < 3; j++) { int n = rd.Next(0, 4); charnum[j] = n; if (n == 3) { int[] divisor = { 1, 2, 4, 5, 8 }; Random rd1 = new Random(); num[j + 1] = divisor[rd1.Next(0, 5)]; } } string[] expression = new String[10]; expression[0] = "(" + num[0] + "" + fourOptions[charnum[0]] + num[1] + ")" + fourOptions[charnum[1]] + num[2] + fourOptions[charnum[2]] + num[3]; expression[1] = "(" + num[0] + "" + fourOptions[charnum[0]] + num[1] + fourOptions[charnum[1]] + num[2] + ")" + fourOptions[charnum[2]] + num[3]; expression[2] = num[0] + "" + fourOptions[charnum[0]] + "(" + num[1] + fourOptions[charnum[1]] + num[2] + ")" + fourOptions[charnum[2]] + num[3]; expression[3] = num[0] + "" + fourOptions[charnum[0]] + "(" + num[1] + fourOptions[charnum[1]] + num[2] + fourOptions[charnum[2]] + num[3] + ")"; expression[4] = num[0] + "" + fourOptions[charnum[0]] + num[1] + fourOptions[charnum[1]] + "(" + num[2] + fourOptions[charnum[2]] + num[3] + ")"; expression[5] = "(" + num[0] + "" + fourOptions[charnum[0]] + num[1] + ")" + fourOptions[charnum[1]] + "(" + num[2] + fourOptions[charnum[2]] + num[3] + ")"; expression[6] = "((" + num[0] + "" + fourOptions[charnum[0]] + num[1] + ")" + fourOptions[charnum[1]] + num[2] + ")" + fourOptions[charnum[2]] + num[3]; expression[7] = "(" + num[0] + "" + fourOptions[charnum[0]] + "(" + num[1] + fourOptions[charnum[1]] + num[2] + "))" + fourOptions[charnum[2]] + num[3]; expression[8] = num[0] + "" + fourOptions[charnum[0]] + "((" + num[1] + fourOptions[charnum[1]] + num[2] + ")" + fourOptions[charnum[2]] + num[3] + ")"; expression[9] = num[0] + "" + fourOptions[charnum[0]] + "(" + num[1] + fourOptions[charnum[1]] + "(" + num[2] + fourOptions[charnum[2]] + num[3] + "))"; int mm = rd.Next(0, 10); outcome[i] = Calucate(expression[mm]); if (go == 0) { int or = 0; for (int k = 0; k < i; k++) //如果结果重复,重新生成该题目。 { if (outcome[k] == outcome[i]) { or = 1; i = i - 1; break; } } if (or == 0) { Console.WriteLine("{0,-20}{1,-7}", expression[mm], Calucate(expression[mm])); sw.WriteLine("{0,-20}{1,-7}", expression[mm], Calucate(expression[mm])); sw.Flush(); } } else { i--; go = 0; } } sw.Close(); }
运行截图:
逆波兰表达式解数学运算参考博客:
http://blog.csdn.net/liuyuxusuixiang/article/details/25289715
结对编程的体会:
结对编程用两个人的力量编写一个程序,常常产生1+1>2的情况,开发效率较高。另外锻炼了自己与人交流,与人合作的能力,同时增进的我与我的队友蔺依铭同学的革命友谊。
在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。
1、讨论逆波兰的实现原理。
2、讨论如何避免除不尽和除数为零的情况。
3、讨论如何获取主函数参数并获取其中用户想要生成的题目个数。
4、讨论如何避免题目重复的情况
5、讨论功能四是否能短时间完成。
要求2 给出照片1张,包括结对的2位同学、工作地点、计算机,可选项包括其他能表达结对编程工作经历的物品或场景。 (5分)
照片:
工作地点:计算机二楼实验室
计算机:个人笔记本电脑
要求3 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果。(5分)
代码git地址:https://git.coding.net/xushaobin/task_4.git
相关文章推荐
- 软件工程-东北师大战-第四次作业(2)
- 软件工程-东北师大战-第四次作业(1)
- 软件工程第四次作业
- 第四次作业——个人作业——软件工程实践总结作业
- 软件工程第四次作业
- 现代软件工程第四次作业
- 软件工程管理——第四次作业
- 2017年软件工程第四次作业-3四则运算
- 软件工程——第四次作业(3)
- 第四次作业:读软件工程课本五点五、六、七章感想与疑问
- 软件工程——第四次作业(4)
- 软件工程-东北师大战-第三次作业(2)
- 软件工程——第四次作业(1)
- 软件工程第四次作业-4每周例行报告
- 软件工程第四次作业——例行报告
- 2015软件工程(1-3班)第四次作业评价
- 软件工程第四次作业二—单元测试 —[结对刘成志]
- 软件工程——第四次作业(2)
- 《软件工程》第四次作业--目标软件(必应词典)
- 软件工程第四次作业