现代程序设计 作业 2

我们上节课讲了 返回整数数组中最大子数组的和 这个问题。 我们第二次作业在这个基础上扩展。

程序要使用的数组放在一个叫 input.txt 的文件中,  文件格式是:

数组的行数,

数组的列数,

每一行的元素,  (用逗号分开)

每一个数字都是有符号32位整数, 见 MSDN 的定义.  当然, 行数和列数都是正整数。

例如下面的文件说明数组是有1行, 6列, 元素依次是:  5, 6, –3, 8, –9, 2

image

 

用你选择的语言 (C, C#, C++, Java) 在Windows 系统下实现下面的功能, 并作单元测试和统计测试覆盖率。 建议用VS2012, 如果你有其它的工具可以达到同样的效果, 欢迎使用。

 

1) 绝大部分同学都已经做出来了单维数组的 求数组中最大子数组的和, 但是你不妨试一试:

把你的程序编译为可执行文件, 然后执行 例如  maxsum.exe  <file name>

输出就是最大子数组的和, 上面的例子就应该输出 16.

 

如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。

另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃 (对的,  TA 会模拟一些有错误的文件来检查)。

 

2) 如果上面的问题解决了,  那我们就顺利地进入第二个阶段 - 处理二维数组.   在这个阶段, 我们要求二维数组的子数组必须是矩形的

image   image

maxsum.exe  <file name>

会返回 28

这是一个比较大的数组的例子:

image

 

3) 如果 “子数组” 并不要求是一个矩形, 而是联通的元素即可 (上下或左右相邻即视为联通),  那解法会是怎么样呢?

上面文件的正解就是:

image (图 3-1,一个简单的例子)

请实现这一算法, 命令行要加一个参数, 表示这一特殊要求:

maxsum.exe  /a <file name>

输出是: 50

注: 考虑到同学们的反馈, 在这一问中, 可以假设数组的长度和宽度不大于 32.  同时,在和同学们的讨论中,我们列举了几种较有意思的形状,见下。

image (图3-2,两个大正数 (50)通过它们之间的最小权值路径相连)    

 image (图 3-3,子连通图中有环)

image (图 3-4,和是135,是三个大正数通过公共的最小权值联通路径相连)

image (图3-5,和图3-4 一样,但是此图的解法是通过两两大正数之间的最小连通图得到。它们的和是 134,不是最佳)

 

4) 在步骤 2) 的基础上, 我们还可以做另一个扩展, 假设数组的一头一尾在水平方向上是首尾相连的。 我们用 /h 表示它在水平方向上相连。 如果在垂直方向上相连可以么?  当然可以, 我们用 /v 表示它在垂直方向相连。 这样, 我们有:

maxsum.exe  /h <file name>

maxsum.exe  /v <file name>

 

5) 那么, 可以同时 /h  /v 么?  我想是可以的。 这个矩阵会成一个什么样呢?  是球形, 还是…?

image

 

啊, 是个轮胎, 可能还是备胎!

maxsum.exe  /v /h <file name>

会输出什么呢?

当然, 我们还有: maxsum.exe  /v /h /a <file name>

6) 哇, 还有第六步? 仿佛听到同学们叫苦连天…   那就算了, 以后再说 Smile 

 

要求还是老一套:

a) 代码都签入你的 GitHub,  TA 用你的代码编译并运行他们的测试用例,  来验证你的程序的正确性。

b) 博客

描述在这么多相似的需求面前, 你怎么维护你的设计 (父类/子类/基类, UML, 设计模式,  或者其它方法) 让整个程序的架构不至于崩溃的?

给出你做单元测试/代码覆盖率的最终覆盖率的报告, 用截屏显示你的代码覆盖率

阅读 工程师的能力评估和发展 和相关文章, 在完成作业的时候记录自己花费的时间, 并填下表。如果你对有些术语不太清楚,请查看教材和其它资料。如果你认为你不需要做某个步骤, 那就跳过去。 

你在这个作业中学到了什么?  有什么好的设计值得分享?  感想如何 (太容易 / 太难 / 太无趣)?

 

 

 

Personal Software Process Stages

时间百分比(%)

实际花费的时间 (分钟)

原来估计的时间 (分钟)

Planning

计划

   

·         Estimate

·         估计这个任务需要多少时间,把工作细化并大致排序

   

Development

开发

   

·         Analysis

·         需求分析 (包括学习新技术)

   

·         Design Spec

·         生成设计文档

   

·         Design Review

·         设计复审 (和同事审核设计文档)

   

·         Coding Standard

·         代码规范 (制定合适的规范)

   

·         Design

·         具体设计

   

·         Coding

·         具体编码

   

·         Code Review

·         代码复审

   

·         Test

·         测试(自我测试,修改代码,提交修改)

   

Reporting

总结报告

   

·         Test Report

·         测试报告

 

 

 

·         Size Measurement

·         计算工作量

   

·         Postmortem & Improvement Plan

·         事后总结, 并提出改进

   
Total总计100%总用时总估计的用时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代程序设计 作业 3

这个作业是采取结对编程的方式完成。 在上一个作业中, 我们尝试了各种命令行的处理&#xff0c;以及各种数组的处理。 现在&#xff0c; 我们要把 现代程序设计 作业 2 的各个结果转换成图形界面显示。这个问题看起来很难, 实际上大部分难的工作都在上一个作业完成了 (数组计…

现代程序设计 作业4

英语国家的小孩们经常玩 Word Search 的游戏, 就是在一个填满字母的矩阵中把单词找出来。 这是一个简单的例子: &#xff08;来自 wikipedia&#xff09; 这是一个比较复杂的例子: 这是答案: 美国的商店里还有不少 word search books 卖, 两三块钱一本。 让我们把这个有趣的…

现代程序设计 作业6 - 简单而有意义的题目

这是这个课件的一部分: 现代程序设计 &#xff08;课程设计中, 征求意见稿&#xff09; 好多同学们都说题目难&#xff0c;这回我们来一个简单而很有意义的。 :&#xff09; 写代码爽还是读代码爽? 往一堆乱麻中再加上一些线索&#xff0c;似乎比较容易&#xff1b;然而从…

现代程序设计 作业7 - 更加简单的题目

在网上&#xff0c;当用户发现一个新东西 &#xff08;海洋里捞出来的新物种&#xff0c;奇怪颜色的飞鸟&#xff0c;某种新的植物等&#xff09;, 大家会问下面的问题: 能吃么 好吃么 怎么吃 这三个振聋发聩的问题被吃货们简称为能好怎&#xff0c; 大家可以打开链接看看&…

现代软件工程 第三章 【软件工程师的成长】练习与讨论

1. 选哪一种医生? 作为一个软件工程师, 你觉得自己表现如何? 有没有这样的体会&#xff1a; 看书的时候觉得“技止此耳”&#xff0c;开发项目的时候才觉得实际情况和书上讲的都有一些出入&#xff0c;一些重要的细节书上没有提。我们很多人是边看Asp.net的书, 边开发Asp.ne…

现代软件工程 课件 软件工程师能力自我评价表

这是《构建之法》和软件工程教学的一部分&#xff0c;用于学生/工程师自我评价。 软件工程师如何评价自己的能力&#xff1f; 有人写Java&#xff0c;有人用C&#xff0c;还有人用1980年代就出现的 Object-C, 有人写前端&#xff0c;有人写后端&#xff0c;有人偏于行业应用&a…

现代软件工程 第四章 【结对编程】练习与讨论

4.7.0 结对编程的练习题 地铁导航和遍历 4.7.1 结对项目的案例和论文 在现代软件工程教学的过程中&#xff0c;同学们已经总结了不少切身体会。例如: 总结1[i]&#xff1a;那是project到了比较关键的创造阶段&#xff0c;整整一天&#xff0c;我们俩椅子靠椅子的坐在电脑前&am…

现代软件工程 第八章 【需求分析】练习与讨论

1 扩展阅读下面两篇文章也说明了软件估计的难度&#xff1a; Steve McConnell 软件估计的 10 种罪&#xff1a;http://www.ewh.ieee.org/r5/central_texas/austin_cs/presentations/2004.08.26.pdf Quora精选: 为什么软件开发周期总是预估的2~3倍http://jandan.net/201…

现代软件工程 第九章 【项目经理】练习与讨论

9.5.1 PM们的故事 讲了这么多条条框框&#xff0c;我们还是来讲几个故事吧。 A)是不是所有的好功能都是由PM主导&#xff0c;一步一步根据用户需求&#xff0c;按照用户场景设计&#xff0c;然后进行可用性测试等等步骤之后得来的呢&#xff1f; 功能本天成&#xff0c;妙手偶…

现代软件工程 第十章 【典型用户和场景】 练习与讨论

1. 讨论&#xff1a;下面的老板犯了什么错误? 只看用户的表面语言或行动还是不够的。我们还要找到用户语言行动背后的动机! (图像来源: http://www.weibo.com/funnyshoelace) 2. 是否要文档 有人说&#xff0c;我们敏捷的团队&#xff0c;就喜欢直接的面对面的交流&#xff0…

现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论

0. 为啥要讲人、绩效、和职业道德&#xff1f; 学好专业不就行了么&#xff0c;为啥要扯这么多&#xff1f; 用专业知识教育人是不够的。通过专业教育&#xff0c;他可以成为一种有用的机器&#xff0c;但是不能成为一个和谐发展的人。要使学生对价值有所理解并且产生热烈的感情…

现代软件工程 第十六章 【IT 行业的创新】练习与讨论

16.6.0 Xerox Parc 的成功创新和推向市场的失败 http://research.microsoft.com/en-us/um/people/blampson/Slides/AltoAtPARCIn1970s_files/frame.htm http://research.microsoft.com/en-us/um/people/blampson/38-AltoSoftware/WebPage.html http://research.microsoft.com/…

《梦断代码》读后感 - 驱动,责任,交流,远虑

这三篇读后感原来发布在我自己申请的域名 yishan.cc 上面&#xff0c;后来这个域名被墙了。 (原文写于2008年12月) 几个星期前&#xff0c;我给《现代软件工程》课的每一个团队都发了一本 《Dreaming In Code》的中文版 《梦断代码》&#xff0c;要求写读后感。这本书讲了这样的…

现代软件工程讲义 7 分析和设计方法

(这一节在第一版的 《构建之法》中没有&#xff0c; 是《构建之法》电子书(多看版)&#xff0c; 和纸版书第二版中新增加的内容&#xff0c;纸版书第二版预计2015年6月出版) 11.1 分析和设计方法 我们写软件就是要解决用户的需求&#xff0c;我们需要表达和传递下面这些…

现代软件工程讲义 源代码管理

【现代软件工程课件】 源代码管理 -- 以实践促进学习 移山软件学院的学生果冻问老师&#xff1a; 为啥需要源代码管理? 我自己写代码多爽&#xff0c;别人要&#xff0c;就用QQ 传过去好了。 老师问&#xff1a;原始人怎么建房子&#xff1f; 果冻&#xff1a;或者找一个洞&…

现代软件工程讲义 个人项目和结对项目练习 地铁

很多老师反映教软件工程和程序设计的时候没有合适的题目&#xff0c;《构建之法》提供了下面的题目&#xff0c;都是从简单的解题思路入手&#xff0c;逐步增量改进。学生们可以复习基本的编程技能&#xff0c;然后逐步加入模块化&#xff0c;文件处理&#xff0c;单元测试&…

最新软件工程总结,项目模板,软工作业下载

(改了标题吸引目标用户) 老师教课&#xff0c;学生上课&#xff0c;首先要讲明师生关系。 其次&#xff0c;就是要说明这门课的底线是什么。 我们假设所有人写作业都独立思考&#xff0c;认真实践&#xff0c;不断改进&#xff0c;勇于创新... 这个假设通常是不全面的&#xf…

构建之法 第三版 17 章 部分草稿

构建之法 17 章  人&#xff0c;绩效和职业道德 (<构建之法> 第三版草稿) 2016/12/23 17.1 领导力 在软件开发过程中&#xff0c;有很多平等合作&#xff0c;但是也有上下之分的领导/被领导关系&#xff0c;即使都是平级的员工之间&#xff0c;也有老师傅/新人&#xf…

构建之法 第三版 第3章 部分草稿 (剪牦牛毛、老程序员去金融公司的故事)...

/* * 这是 《构建之法》 第三版的草稿 */ 3.2 软件工程中的几种思维误区 正如我们在第一章讲的那样&#xff0c;软件有很多特性&#xff0c;软件开发有它自己独特的规律&#xff0c;如果不了解这些特性&#xff0c;软件工程师就会产生不符合实际的想法&#xff0c;在开发过程中…

现代软件工程作业 – 计算最长英语单词链

结对编程 – 计算最长英语单词链 《构建之法》练习题 大家经常玩成语接龙游戏&#xff0c;我们试一试英语的接龙吧&#xff1a;一个文本文件中有N 个不同的英语单词&#xff0c; 我们能否写一个程序&#xff0c;快速找出最长的能首尾相连的英语单词链&#xff0c;每个单词最多只…