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

这是这个课件的一部分:  现代程序设计 (课程设计中, 征求意见稿)

好多同学们都说题目难,这回我们来一个简单而很有意义的。  :)

写代码爽还是读代码爽? 往一堆乱麻中再加上一些线索,似乎比较容易;然而从这一团乱麻中理出头绪,还是比较难的。下图来自 知乎的一个讨论。

image

 

我们练习了这么多作业,所有作业都是从头写程序,但是我们到了真正的项目组或公司里,通常我们会改进一个已经存在项目 (这个项目说不定已经存在好多年了),这个项目的文档也不多,编码规范也不是太完美。 这时候我们怎么办?  我们当然可以通过下面的办法:

  1. 理解程序
  2. 在不损害程序现有功能的情况下,修复bug 或增加新功能
  3. 同时有计划地通过重构或重写,改进这个程序,让它更好地被程序员理解,更好地能适应可能产生的变化。

这个作业就是这样一个例子。

假设有一组水平不高的程序员,或者一个水平不高的程序员(比如我),在很久以前为了学习Java, 就写了一个 Java 的围棋下棋程序 (不是人工智能,只是在屏幕上展现下棋的过程),  后来C# 出现之后,他又随意地把程序改写为C#,  经过简单测试之后,他就把程序放在一边了。

 

image

 

现在我们拿到了这个代码,程序还可以编译成功,但是不巧的是一个关键函数只有函数体,没有具体的实现了。例如:

int  GetLiberty(int x, int y, StoneColor c ) //判断当前的位置上的棋子和相连的一组棋子一共有多少气

这个程序原来总共有30行(算上空行和单字符行),但是由于种种原因, 这个函数只剩下了一句话

return 1;

现在请用递归和非递归两种方式把它实现出来。

 

关于个棋子或一组相连的棋子有多少气,有没有气, 十分简单。

详细的规则请看网上的许多教程。  举两个非常简单的例子:

image  如果此时该黑棋下,黑棋下在 (A,1) 的位置, 那么黑棋就把白棋 A2 的棋子吃掉了。如果此时该白旗下,白棋下在 C1 的位置,那么白棋就把两颗黑棋吃掉了。

image 此时,黑白双方谁能占据 O4 的位置, 就能够决定两个黑棋有没有气。

 

(上面的题目已经在课堂上搞定了,我们再扩展一下)

目前给同学们的程序能在下面两种情况下浏览棋局:

a) 直接在棋盘上面点击,程序就会按照黑白相间的次序走棋。

b) 用户可以用程序打开一个棋谱文件 (*.sgf),  然后按 “>” 按钮,程序就会按次序下棋。

大家注意到用户界面上还有一个 “<” 按钮,  这是让用户把下棋的步骤倒回去 (如果上一步一方吃掉了许多棋子, 那么我们还要把这些吃掉的棋子恢复好)

函数说明在这里:

image

这个函数的大部分都没有实现,现在我们要实现它。 (要求: 所有的修改都只在这一个函数体里面

我们的同学们学了《现代程序设计》,搞定下面的挑战应该不成问题:

1) 把程序编译通过, 跑起来。

    读懂程序,在你觉得比较难懂的地方加上一些注释,这样大家就能比较容易地了解这些程序在干什么。

     把正确的 playPrev(GoMove) 的方法给实现了。 如果大家不会下围棋,那就需要大家实地或者上网练习一下围棋的死活,提子是怎么回事。这个应该一个小时就能搞定。

2)根据你选择的教材 (三本之一或更多),点评一下这个程序设计方面的不足,例如:

     编码风格,

     程序架构,有哪些不符合良好的设计,这个程序的设计模式 (MVC等) 是高端大气国际化的么? 等等。 

     程序的错误处理,文件处理,UI 等等

     大家可能会想到,这个程序虽然说编译都过了,但说不定有很多基本的小问题没解决,VS 的强大的编译器和代码分析工具能把它们都找出来? 当然可以:

      image

     大家可以运行 VS 的代码分析工具,找到这个程序的这些问题,并改进。下面是报告的一部分:

image

这些改进可以是很小的,例如,把所有函数的命名都规范化,这算一个改进。同学们至少要把Code Analysis 报告的所有问题给解决了。

关于Code Analysis 的更多信息:

http://msdn.microsoft.com/en-us/library/ee1hzekz.aspx

http://msdn.microsoft.com/zh-cn/library/vstudio/ms182278.aspx 

 

3) 程序的注释

    所有人都觉得注释很重要,写程序不写注释的同学真是RP 比较低。。。

    那么,就请把这个程序中被标成 “zzzz” 的注释都恢复过来。 当然,你可以用中文写注释。

4) 选择题: (提示: 这个题目另外算分,满分10分,需要挣分的同学就可以考虑这个选择题)

对于功能上的小问题, 那么你怎么改进呢? 请选出 1-2个你想做的改进,然后运用你的各种编程技术和能力把这些改进给实现了(必须明确指出改进/增加了哪一个功能)。

      把所有的改进都实现之后,把代码签入 GitHub, 经历了这一番改动,你的程序和别的同学的程序就很不一样了。

如果大家有时间并有兴趣,可以做一些大的改进:

      a) 如果我要把这个程序变成一个可以人机对战的小游戏 (假设你的AI 模块已经写好,这里我们就可以让一个函数返回一个合法的位置就可以), 那这个程序的架构应该怎么变化?  请把这个功能写出来。

      b) 如果我想让这个程序变成两个用户可以通过网络对战,这个程序的架构要怎么变化?

 

另: 大家在读程序的时候可以测试一下自己的会发什么样的脑电波。 :)  看看下面的论文:

http://wwwiti.cs.uni-magdeburg.de/~feigensp/experiments/fMRI/fse_fMRI-Poster.pdf

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

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

相关文章

现代程序设计 作业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;每个单词最多只…

AI应用开发实战系列之一: 从零开始配置环境

AI应用开发实战 - 从零开始配置环境 与本篇配套的视频教程请访问&#xff1a;https://www.bilibili.com/video/av24421492/ 零、前提条件 一台能联网的电脑&#xff0c;使用win10 64位操作系统请确保鼠标、键盘、显示器都是好的 建议和反馈&#xff0c;请发送到 https://g…

usb连接不上 艾德克斯电源_第十二届(深圳)新能源汽车核心电源技术研讨会成功举办...

2019年4月26日&#xff0c;由大比特主办的第十二届(深圳)新能源汽车核心电源技术研讨会在深圳登喜路国际大酒店成功举办。本次会议受到了法雷奥、长安铁雪龙、比亚迪、蔚来汽车、麦格米特、科陆电子、欣锐、英威腾、晶福源、英可瑞、瀚美特、航嘉驰源、核达中远通、永联、优优绿…

AI应用开发实战系列之二:从零开始搭建macOS开发环境

AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问&#xff1a;https://www.bilibili.com/video/av24368929/ 零、前提条件 一台能联网的电脑&#xff0c;使用macOS操作系统请确保鼠标、键盘、显示器都是好的 建议和反馈&#xff0c;请发送到 https…