zoukankan      html  css  js  c++  java
  • 现代程序设计 作业 2

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

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

    数组的行数,

    数组的列数,

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

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

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

    image

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

     

    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

    计划-把工作细化并大致安排次序

       

    Development

    开发

       

    ·         Analysis

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

       

    ·         Design Spec

    ·         生成设计文档

       

    ·         Design Review

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

       

    ·         Coding Standard

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

       

    ·         Design

    ·         具体设计

       

    ·         Coding

    ·         具体编码

       

    ·         Code Review

    ·         代码复审

       

    ·         Test

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

       

    Reporting

    总结报告

       

    ·         Test Report

    ·         测试报告

     

     

    ·         Size Measurement

    ·         计算工作量

       

    ·         Postmortem & Improvement Plan

    ·         事后总结, 并提出改进

       
    Total 总计    
  • 相关阅读:
    20165334 四则运算阶段性总结(第二周)
    20165334 《java程序设计》第8周学习总结
    20165334四则运算阶段性总结(第一周)
    20165334 《java程序设计》第7周学习总结
    20165334实验二 面向对象程序设计
    20165334《java程序设计》第六周学习总结
    2017-2018-2 20165228 实验四《Android程序设计》实验报告
    第十周课堂测试补做
    2017-2018-2 20165228 实验三《敏捷开发与XP实践》实验报告
    20165228 2017-2018-2 《Java程序设计》第9周学习总结
  • 原文地址:https://www.cnblogs.com/xinz/p/3318230.html
Copyright © 2011-2022 走看看