【现代程序设计】【homework-03】【11061027】
2013-10-11 14:18
537 查看
Q:你现在使用的代码规范是什么, 和上课前有什么改进?
A: 代码规范........自定义的代码规范算 代码规范吗。。。。。
Q:你的同伴有哪些优点 (列出至少三点), 和那些需要改进的地方 (列出至少三点)
A:
Q:你的代码从 作业2 到 作业3 经历了哪些变化? 哪些代码需要重构 (看关于代码重构的资料), 哪些需要重写, 为什么?
A:因为作业2是用c写的,作业3用c#(wpf)写的,我打算做一个界面交互,而非命令行的maxsum,所以作业3的代码是基本上都是重写的
Q:你的设计是如何保证 不同的 maxsum.exe 命令行最后在一个GUI 的界面显示的?
A:由于做的是界面操作的应用,命令行显的不实用和麻烦,所以我没加入命令行这个功能,也就不存在【不同的 maxsum.exe 命令行最后在一个GUI 的界面显示的】的问题
总结:
因为对WPF不太熟悉,所以这次作业很多的时间花在了学习wpf上
一开始挑选显示二维数组的Xaml控件,google了半天,感觉好像是 DataGrid更方便一点。
然后就用datagrid显示二维数组
单独改变DataGrid的某个cell的背景色不会,Google了好一会
然后因为这个DataDrid的行列都是动态确定的,数据绑定又Google了好一会.....
在花了不少的时间搞定UI这一块之后 ,很快搞定了【子矩阵的问题】和【连通子图】
运行的时候发现,由于上次作业【连通子图】写的太懒,就一个递归,什么剪枝都没有 ,于是代码的时间效率实在是 渣
又重新写了一个【连通子图】的类,并重做了优化,这点又花了很长时间
虽然时间效率还是很渣,但是勉强还是解出来
最后就是烦人的测试,Debug...文件输入的Debug,AnyMaxsum的Debug,Maxsum的Debug,UI显示的Debug。。。
然后现在总算是完成了
下面是anymaxsum的c#代码
通过 GetResultData()获取 数据
下面是工程文件和截图和测试数据:
测试数据:我一共写了14组测试数据,加上xinz老师的4组,18组测试数据
http://files.cnblogs.com/lightz/MaxsumTestData.zip
VS2012_工程文件:maxsum软件 包含在文件的bin\Release 目录下
http://files.cnblogs.com/lightz/Maxsum_VS2012.zip
截图:
http://files.cnblogs.com/lightz/Maxsum%E6%88%AA%E5%9B%BE.zip
这里随便贴了几张,如下:
A: 代码规范........自定义的代码规范算 代码规范吗。。。。。
Q:你的同伴有哪些优点 (列出至少三点), 和那些需要改进的地方 (列出至少三点)
A:
Q:你的代码从 作业2 到 作业3 经历了哪些变化? 哪些代码需要重构 (看关于代码重构的资料), 哪些需要重写, 为什么?
A:因为作业2是用c写的,作业3用c#(wpf)写的,我打算做一个界面交互,而非命令行的maxsum,所以作业3的代码是基本上都是重写的
Q:你的设计是如何保证 不同的 maxsum.exe 命令行最后在一个GUI 的界面显示的?
A:由于做的是界面操作的应用,命令行显的不实用和麻烦,所以我没加入命令行这个功能,也就不存在【不同的 maxsum.exe 命令行最后在一个GUI 的界面显示的】的问题
Personal Software Process Stages | 时间百分比(%) | 实际花费的时间 (分钟) | 原来估计的时间 (分钟) | |
计划 | ||||
· 估计这个任务需要多少时间,把工作细化并大致排序 | 0 | 0 | 0 | |
开发 | ||||
· 需求分析 (包括学习新技术) | 20 | 3h | 1h | |
· 生成设计文档 | 0 | 0 | 0 | |
· 设计复审 (和同事审核设计文档) | 0 | 0 | 0 | |
· 代码规范 (制定合适的规范) | 0 | 0 | 0 | |
· 具体设计 | 15 | 3h | 2h | |
· 具体编码 | 20 | 3h | 6h | |
· 代码复审 | 10 | 2h | 2h | |
· 测试(自我测试,修改代码,提交修改) | 35 | 7h | 4h | |
总结报告 | ||||
Total | 总计 | 100% | 总用时 18h | 总估计的用 15h |
因为对WPF不太熟悉,所以这次作业很多的时间花在了学习wpf上
一开始挑选显示二维数组的Xaml控件,google了半天,感觉好像是 DataGrid更方便一点。
然后就用datagrid显示二维数组
单独改变DataGrid的某个cell的背景色不会,Google了好一会
然后因为这个DataDrid的行列都是动态确定的,数据绑定又Google了好一会.....
在花了不少的时间搞定UI这一块之后 ,很快搞定了【子矩阵的问题】和【连通子图】
运行的时候发现,由于上次作业【连通子图】写的太懒,就一个递归,什么剪枝都没有 ,于是代码的时间效率实在是 渣
又重新写了一个【连通子图】的类,并重做了优化,这点又花了很长时间
虽然时间效率还是很渣,但是勉强还是解出来
最后就是烦人的测试,Debug...文件输入的Debug,AnyMaxsum的Debug,Maxsum的Debug,UI显示的Debug。。。
然后现在总算是完成了
下面是anymaxsum的c#代码
通过 GetResultData()获取 数据
namespace maxsum { class AnyMaxsum { bool[,] gTemp,gResult; bool isvselect=false, ishselect=false; int sumall=0,n,m,cpuload,amax; public int sum=-10000, nsum = 0; int[,] a, asum, gmain; int[] dx={-1,0,1,0},dy={0,-1,0,1}; void init() { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { gTemp[i, j] = gResult[i, j] = false; gmain[i, j] = 0; } } public AnyMaxsum(int Arrm,int Arrn,int[,] ArrSource) { n = Arrn; m = Arrm; a = new int[m, n]; asum = new int[m, n]; gTemp = new bool[m, n]; gmain = new int[m, n]; gResult = new bool[m, n]; a = ArrSource; for (int i = 0; i < m; i++) for (int j = 0; j < m; j++) { if (a[i, j] > 0) sumall += a[i, j]; asum[i, j] = sumall; if (amax < a[i, j]) amax = a[i, j]; } } public void setvh(bool v,bool h) { isvselect = v; ishselect = h; } public void GetResultData(ref int s,ref bool[,] aresult) { init(); if (sumall <= 0) { int x = 0, y = 0, z = -1234567891; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) if (z < a[i, j]) { z = a[i, j]; x = i; y = j; } s = z; for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) aresult[i, j] = false; aresult[x, y] = true; return; } fany(0, -1, 0); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) aresult[i, j] = gResult[i, j]; s = sum; } public int GetCpuLoad() { return cpuload; } bool isinvh(int x,int y) { if (x >= 0 && x < m && y >= 0 && y < n) return true; return false; } void ff(int x, int y) { int tx, ty, i; gTemp[x, y] = true; for (i = 0; i < 4; i++) { tx = x + dx[i]; ty = y + dy[i]; if (isvselect) { if (tx == m) tx = 0; if (tx == -1) tx = m - 1; } if (ishselect) { if (ty == n) ty = 0; if (ty == -1) ty = n - 1; } if (isinvh(tx, ty) && !gTemp[tx,ty] && gmain[tx,ty]<2) ff(tx, ty); } } void fany(int x, int y, int z) { int tx, ty, tt, i, j; cpuload++; for (i = 0; i <= x; i++) for (j = 0; j < n; j++) if (gmain[i, j] == 1) { tx = i; ty = j; for (i = 0; i < m; i++) for (j = 0; j < n; j++) gTemp[i, j] = false; ff(tx, ty); for (i = 0; i <= x; i++) for (j = 0; j < n; j++) if (!gTemp[i, j] && gmain[i, j] == 1) return; i = x + 1; break; } if (x == m - 1 && y == n - 1) { if (sum > z) return; tt = 0; for (i = 0; i < m; i++) for (j = 0; j < n; j++) if (gmain[i, j] == 1) tt++; if (sum == z && tt > nsum) return; for (i = 0; i < m; i++) for (j = 0; j < n; j++) if (gmain[i, j] == 1) gResult[i, j] = true; else gResult[i, j] = false; sum = z; nsum = tt; return; } ty = (y + 1) % n; tx = x + (y + 1) / n; tt = sumall - asum[tx, ty] + z; if (tt + a[tx, ty] >= sum) { gmain[tx, ty] = 1; fany(tx, ty, z + a[tx, ty]); gmain[tx, ty] = 0; } if (tt >= sum) { gmain[tx, ty] = 2; fany(tx, ty, z); gmain[tx, ty] = 0; } } } }
下面是工程文件和截图和测试数据:
测试数据:我一共写了14组测试数据,加上xinz老师的4组,18组测试数据
http://files.cnblogs.com/lightz/MaxsumTestData.zip
VS2012_工程文件:maxsum软件 包含在文件的bin\Release 目录下
http://files.cnblogs.com/lightz/Maxsum_VS2012.zip
截图:
http://files.cnblogs.com/lightz/Maxsum%E6%88%AA%E5%9B%BE.zip
这里随便贴了几张,如下:
相关文章推荐
- 现代程序设计 homework-03
- 【现代程序设计】homework-03
- [现代程序设计]homework-03
- 现代程序设计 homework-04
- 现代程序设计homework——04
- 现代程序设计 homework-05
- 现代程序设计 homework-05
- 现代程序设计 homework-08
- 【现代程序设计】【期末作业】【homework-09】
- My First Blog on cnblogs (现代程序设计 Homework-01)
- 现代程序设计 homework-04
- 现代程序设计 homework-08
- 【现代程序设计】homework-10
- 现代程序设计——homework-08
- 现代程序设计——homework-10
- 【现代程序设计】【homework-07】
- 【现代程序设计】homework-06
- 现代程序设计 homework-02
- 【现代程序设计】homework-09
- 现代程序设计 homework-09