外汇网站怎么做优外汇网站,ip代理网址,山西建筑网站设计设计,网站正能量不用下载直接进入主页可以吗这是构建之法 《现代软件工程》课的作业题之一。 下面的题目#xff0c; 从简单的命令行处理和数据处理开始开始#xff0c;让同学们逐步练习#xff0c;巩固算法#xff0c;学会松耦合的设计#xff0c;学会PSP#xff0c;源代码控制#xff0c;单元测试#xff0c;回… 这是构建之法 《现代软件工程》课的作业题之一。 下面的题目 从简单的命令行处理和数据处理开始开始让同学们逐步练习巩固算法学会松耦合的设计学会PSP源代码控制单元测试回归测试增量改进程序等等。 第一步 像《构建之法》的人物阿超那样花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”。 具体要求任何编程语言都可以命令行程序接受一个数字输入然后输出相应数目的四则运算题目和答案。例如输入数字是 30 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符运算数字是在 100 之内的正整数答案不能是负数。 如 23 - 3 * 4 11 扩展要求看看小学三、四、五年级的四则运算要求 逐步实现各个年级的难度。 写博客纪录自己实现每一个扩展的思路。 在扩展的过程种你是独立开发每个年级的运算题的功能处理四年级的代码和三年级的代码没有任何联系还是逐步把一些公共的代码放在一起 或者你用面向对象的方法运用基类 (base class) 和子类来管理各种不同的需求和实现的细节 第二步 分别满足下面的各种需求。 从这一步开始我们要求学生填写个人软件流程 PSP 的耗时估计和实际时间的表格要求把代码签入到源代码管理服务器上。 下面这些需求都可以用命令行参数的形式来指定 a) 一次可以出一千道道题目并且没有重复的把题目写入一个文件中。我们大家都知道(12) 和 (21) 是重复的题目。 高级要求: 怎么严格定义题目重复呢请看详细题目要求 和同学们比较一下各自程序的功能、性能、实现方法的异同等等。 b) 当你有多于一个运算符的时候如何对一个表达式求值逐步扩展功能和可以支持的表达式类型最后希望能支持下面类型的题目 (最多 10 个运算符括号的数量不限制) 25 - 3 * 4 - 2 / 2 89 1/2 1/3 - 1/4 (6 - 4 ) * (3 28) 提示很多学生在开始的时候用简单的条件判断来处理运算如果只有一个运算符那还是比较简明的运算符多了之后怎么办呢? 一些学生就用很多条件判断来处理运算的优先级这是某学生代码片段 public void jisuan(double a, string operation1,double b, string operation2,double c, string rightanswer){bool aa false;if (operation1 || operation1 -){if (operation2 * || operation2 /){aa true;}else{aa false;}}else{aa false;}if (aa true)
...那如果有 3 个运算符呢怎么办继续增加不同的 if/else 来解决4个运算符呢... 显然这不是一个好的算法 一个好的算法即使问题变得更复杂算法本身应该依然是简明的, 并且程序本身的代码量并不会变得异常复杂。 我们看看有什么好的数据结构能高效地表示四则运算。 请参考调度场算法 http://hczhcz.github.io/2014/02/27/shunting-yard-algorithm.html https://en.wikipedia.org/wiki/Shunting-yard_algorithm (中文版) c) 除了整数以外还要支持真分数的四则运算。 (例如 1/6 1/8 7/24 ) d) 让程序能接受用户输入答案并判定对错。 最后给出总共 对/错 的数量。 e) 到目前为止这个程序的界面都是中文的 随着这个应用大受欢迎别的国家的用户也要用那么怎么能高效地让这个 App 支持不同文字界面互换呢你是在程序里面不断插入 if ... else ... 来处理中英文还是有高效率可以扩展的办法这个程序最终会扩展为支持10种语言而且每个语言的用户需要符合他们文化的图标。请问你还是用 if/else 来解决么 例如你的程序已经支持了两种语言并且中文界面有一个符合中国用户期望的图标英文界面有一个符合美国用户期望的图标 现在你要支持第三个语言 - 日文并且需要一个符合日本用户的图标(假设是富士山的图像)。 然后还有另外 7 个语言 (德国、法国、意大利、...)和不同的图像要支持。那么这可以用if/else 来解决 还是有更高效的办法 当显示文字直接放在代码中例如像下面这样 if (isEnglish)UIControl.setText(Welcome to my calculator app);else if (isChinese)UIControl.setText(欢迎使用我的四则运算程序);else if ...这种用户显示的文字和代码逻辑放在一起的设计我们称之为紧耦合。 程序员精通代码逻辑但未必精通各国语言也不太会设计各种图标那我们会让懂法语和德语的团队成员(或者临时请来的专家)直接在代码上面改么似乎他们会觉得代码编辑器的界面好难掌握哦... 改错了程序编译不过去怎么办我们可以想象如果这些和逻辑无关的资源能够放在一个单独的地方 这样负责文字和图像的人员(他们可能不太懂编程)能去修改然后在主程序里我们把各种语言的处理抽象为下面的操作 UIControl.setText(GetStringByLanguage(language_Id, string_id); //根据当前显示的语言拿到适当的文字然后显示。 这样会不会更好逻辑代码和现实的资源各自分开, 通过良好定义的渠道(language_id, string_id) 结合起来了 这是一种松耦合。 请看同学的尝试1 尝试2. 程序可以用很多办法来提高效率保持简明抽象 (把复杂的操作抽象为一个名字/类/函数把复杂的处理隐藏在内)循环(高效地把类似的事情做 N 遍)递归(在处理问题的时候发现这个子问题也是类似的那我就调用自己来处理)组合(把各个操作组合起来完成复杂任务)... 等 第三步增加一个运算符程序应该有怎样的改变不得不扔掉全部重写么还是可以只改部分模块 一些高年级的老师看到这个程序希望让他们的同学也来用但是有一个新需求 要支持乘方 (power) 运算我们都知道乘方运算的优先级高于乘除法。如何表示乘方 有两种表示方法 1. 4 ^ 2 16, 4 的二次方等于 16。 这里 ^ 表示乘方 2. 4 ** 2 16, 4 的二次方等于16。这里 ** 表示乘方 (** 之间不能有空格否则是错误的算式) 由于历史的原因 不同的学校用了不同的表示方法 老师希望这两种表示方法都要支持可以通过设置来选择。 第4步每个同学选一个方向把程序扩展一下 a) 把程序变成一个 Windows/Mac/Linux 电脑图形界面的程序 (取决于你目前使用的电脑)同时增加 “倒计时” 功能 每个题目必须在 20 秒钟完成如果完不成则得0 分并进入下一题。增加“历史纪录” 功能 把用户做题的成绩记录下来并可以展现历史记录。 b) 把程序变成一个智能手机程序 (你正在用什么手机 就写那个手机的程序) 增加倒计时和历史纪录功能(见上)。 c) 把程序变成一个网页程序 用户通过设定参数就可以得到各种题目。 d) 选一个你从来没有学过的编程语言试一试实现基本功能。 估计做好这个软件需要的时间并且写出大概的设计步骤和实现算法。 e)把这个程序的思路变成一个可以一步一步演示的步骤 可以是命令行的输出 也可以是图形界面 输入一个正常的四则运算句子 输出程序用动画表示分词的过程后序转换的过程处理不同运算符优先级的过程 逐步算出得出结果的过程。 例如输入是 (6^2 - 4 ) * (3 28) 输出是 (36 - 4 ) * (3 28) 32 * (3 28) 32 * 31 992 如果能做到这一步 这个程序所牵涉到的 “知识点” 就能说 “精通” 了。 可以开始做相关的第二个作业。 第三步程序理解和扩展 我们说了程序要能输出不重复的题目大家有不同的实现方法那么能否比较一下各自的异同 例如这个实现方法 https://gist.github.com/vczh/2c058aed996effc0a519ed3d265a3eb5 1) 能否读一下这个程序注释一下它的核心设计是什么写一篇博客分析一下 2) 如果我们要让这个程序增加一个运算 -- 乘方运算。 你要在现有程序中做什么样的修改才能让这个程序比较优雅地实现这个新的需求。 其他题目 - 最大子数组的和 问题及其扩展 - 单词英语单词频率问题 黄金点游戏 - 四则运算练习 - 计算程序文件的行数 WC - 电梯调度 - 网页前端技术的练习题