Homework-03
0.关于作业
由于作业难度较大,因为个人能力所限,所以导致迟交了一段时间,作业完成进度整体延后,在此向助教、以及我的队友11061099 邵思豪表示歉意
1.分工准备
这次的作业是结对编程,我们的队伍一共有二个人11061036 陈汉腾 11061099 邵思豪,大家不在一个班,平时碰面机会比较少,于是我们决定周六周日集中在实验室5楼讨论这次作业的相关问题。
第一个比较大的问题是我们第二次作业完成得不不是很好,很多功能没有实现,如水平相连、竖直相连、任意相连。而第三次作业实际上是对第二次作业的一次拓展,所以要想写好这次作业必须得把第二次作业写好。本来以为第二次作业水过就万事大吉,结果才明白,出来混迟早都要还的。我们的人生有何尝不是这样呢?所以当务之急,是先把第二次作业对应的算法部分解决。
第一个问题敲定之后,下面就是分工了。我们商议的结果是我主要负责算法,豪哥主要负责界面。
2.具体思路
第三次作业乍一看好像和第二次差不多,但是经过仔细分析之后我们发现第3次作业中其实有一些难点。对应每个难点我们又着重讨论,最后确定了一套基本思路:
难点1:第二次作业的代码不能直接使用,因为第二次作业中只记录了最终的数字和。
解决办法:我们在第2次作业的基础上进行修改,在找最大值的过程中将最优子矩阵也同时记录下来,我们的思想是记录行的起始位置wb,终止位置we。列的起始位置lb,终止位置le。这样才能画出对应的矩形。
难点2:如何把c语言变成dll的文件供程序调用。
解决办法:这个确实很难做到。我们google、baidu查了好多网页,尝试了多种方法,改写了原来的c语言,终于成功用原来的c语言导出可调用的库dll。
难点3:如何在界面显示二维数组
解决办法:这个我们俩由于之前大一大二过的比较荒废,仅学了点c语言,面向对象的思想根本就不会。c#的控件也不会用,甚至vs都不会用。不得不说我们太水了。但是我们从图书馆借来3本c#的书,开始钻研。于是就出现了这样的对话。“汉腾,你最近在实验室忙啥呢?”,“学c#。”豪哥,你去新主楼学什么啊“,”学c#“。就这样过去了一个礼拜,我们终于编出了作业。
3.实际编写
讨论出思路之后,我们就开始了实际编写代码。虽然之前思路和分工都已经很明确了,但由于我们的基础比较差,所以编写起来很是吃力。但我们的态度是积极的,遇到问题我们就会马上讨论迅速解决。c程序由于之前会一些,所以完成的相对较快。但把.c文件转化为可调用的.dll文件又耗费了我们好多时间,可能我们真的比较笨吧。每写完一个小功能,我们就会马上进行代码复审以确定代码没有问题。就这样,一步一个脚印,一点一滴的做出了程序。
4.测试功能及源代码
被调用的c语言代码
已经在队友博客中展示,这里不再贴出
给出链接,以供查询 http://www.cnblogs.com/sshao/p/3379770.html
UI界面:
点击 SelectDataFile后的界面
从 normal vertical和horizontal中选择一种方式,分别代表正常、水平相连、竖直相连。点击Result button,出结果。
其中左上角背景颜色为蓝色的是最有子矩阵。左下角的textbox输出的是maxsum
5.总结
这是我们第一次结对编程,也确实是我们第一次编c#程序。对于没有相关基础的初学者来说,这其中遇到的困难实在是太多太多了,但完成之后我们也发现,困难有多少,成功的喜悦定会翻倍。相信今后我们的合作以及作品都会越来越好。
6、老师的问题
你的同伴有哪些优点 (列出至少三点), 和那些需要改进的地方 (列出至少三点)
优点:踏实、肯干、坚定
缺点:马虎、粗心、大意
你的代码从 作业2 到 作业3 经历了哪些变化? 哪些代码需要重构 (看关于代码重构的资料), 哪些需要重写, 为什么?
记录了子矩阵的具体位置,列的初始lb,le,行的初始wb,we。main函数需要重构和重写。
你的设计是如何保证 不同的 maxsum.exe 命令行最后在一个GUI 的界面显示的? (C++ 的设计模式中有 singleton 的概念, 说明一个类的实例如何在一个进程中保持单例, 我们这里谈的是软件如何在操作系统中保持 singleton)
利用面向对象的思想