当前位置: 代码迷 >> 综合 >> 【四则运算】个人项目实践
  详细解决方案

【四则运算】个人项目实践

热度:121   发布时间:2023-10-28 23:44:46.0

 题目要求:像《构建之法》的人物阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行软件, 分别满足下面的各种需求。

下面这些需求都可以用命令行参数的形式来指定:

a) 一次可以出一千道道题目,并且没有重复的,把题目写入一个文件中。我们大家都知道,1+2  2+1 是重复的题目。

b) 当你有多于一个运算符的时候,如何对一个表达式求值?逐步扩展功能和可以支持的表达式类型,最后希望能支持下面类型的题目 (最多 10 个运算符,括号的数量不限制):

         25 - 3 * 4 - 2 / 2 + 89 =
     1/2 + 1/3 - 1/4 =  
    6 - 4 * 3 + 28=

c) 除了整数以外,还要支持真分数的四则运算。 (例如:  1/6 + 1/8 = 7/24  )

d) 让程序能接受用户输入答案,并判定对错。 最后给出总共 对/错 的数量。

e) 到目前为止,这个程序的界面都是中文的, 随着这个应用大受欢迎,别的国家的用户也要用,那么怎么能高效地让这个 App 支持不同文字界面互换呢?你是在程序里面不断插入 if ... else ... 来处理中英文,还是有高效率,可以扩展的办法?这个程序最终会扩展为支持10种语言,而且每个语言的用户需要符合他们文化的图标。请问你还是用 if/else 来解决么?


一.计划个人项目花费时间

PSP2.1

Personal Software Process Stages

Time

Planning

计划

 10min

  · Estimate

  · 估计这个任务需要多少时间

  10min

Development

开发

 

  · Analysis

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

 20min

  · Design Spec

  · 生成设计文档

 10min

  · Design Review

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

 15min

  · Coding Standard

  · 代码规范 (为目前的开发制定合适的规范)

 10min

  · Design

  · 具体设计

 30min

  · Coding

  · 具体编码

 1H

  · Code Review

  · 代码复审

 10min

  · Test

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

 20min

Reporting

报告

 

  · Test Report

  · 测试报告

 20min

  · Size Measurement

  · 计算工作量

 10min

  · Postmortem & Process Improvement Plan

  · 事后总结, 并提出过程改进计划

 10min

 

合计

215min

二.实际个人项目花费时间

PSP2.1

Personal Software Process Stages

Time

Planning

计划

 20min

  · Estimate

  · 估计这个任务需要多少时间

  20min

Development

开发

 

  · Analysis

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

 60min

  · Design Spec

  · 生成设计文档

 20min

  · Design Review

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

 15min

  · Coding Standard

  · 代码规范 (为目前的开发制定合适的规范)

 10min

  · Design

  · 具体设计

 40min

  · Coding

  · 具体编码

 2H

  · Code Review

  · 代码复审

 10min

  · Test

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

 20min

Reporting

报告

 

  · Test Report

  · 测试报告

 20min

  · Size Measurement

  · 计算工作量

 15min

  · Postmortem & Process Improvement Plan

  · 事后总结, 并提出过程改进计划

 15min

 

合计

380min

三.程序改进

程序的改进主要为由算式得出答案改为由答案拆分成算式,避免了括号的插入与运算等难题,思路较为清晰简单。

程序性能分析:


 

四.测试用例

由程序生成的题目与答案文件如下:

整数:

 

分数:

 

由于由答案推出算式,测试用例全部正确。

五.个人心得体会

 

坦率的讲,这次真的小看了这个项目,原本以为就是一个类似于计算器的程序,准备写一个IOS程序,为此浪费了大半个上午的时间,后来还是因为晚上临时有事时间不充足和一些技术原因,还是暂时放弃,选择使用C++先完成任务,后期有时间完成这个程序。

简单的四则运算,实际上有很多值得思考的地方。

1. 如何优雅的插入括号?

2. 如何优雅的完成带括号的运算?

3. 如何完成真分数的运算?

4. 如何完成加减乘除的混合运算?

同学们虽然使用不同的语言,但是大致的思路一致,就是先完成随机算式的生产,接着完成算式的运算,然后判断运算结果与输入结果是否一致,整个过程清晰但需要解决的问题很多。

在前期做了大量的设计工作,花费了大量时间后,我决定采用逆推的方法,便是由随机答案生成随机算式。大致思路采用递归算法,以随机生产数ans为答案,再生成随机f,根据f的范围绝定以ans进行哪种运算操作,最后得出一个算式str。该方法难点在于分数的拆分,拆分算法还需要进一步优化。

总结:由于个人对项目的不重视,没有对项目的需求进行仔细的分析,在前期设计阶段花费了大量的时间,这是一个很严重的错误,此次在短时间内体验了一个完整的项目流程,自己的抗压能力还是不足,在设计阶段的失误导致在编码阶段错误连连,代码规范性差,可读性差,在以后的项目实践当中,必须吸取经验,特别是在项目设计阶段犯的错误必须要改正。

程序截图:

 

 

 源码:点击打开链接