码迷,mamicode.com
首页 > 其他好文 > 详细

2016012084+小学四则运算练习软件项目报告

时间:2018-03-26 00:34:55      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:while   head   估计   一个   简洁   调度   直接   仓库   tco   

仓库:https://coding.net/u/librarian1/p/Calculate_Operations/git

  • 目录
    • 需求分析
    • 功能设计
    • 设计实现
    • 算法详解
    • 测试运行
    • 代码展示
    • 总结
    • 展示PSP

1.需求分析

  • 输入n,生成n道加减乘除
    要求:数范围0~100 ,4-6个;运算符3~5个,至少2种 ;数与结果不出现负数和非整数,除数不为0。
  • 附加:支持括号,大于2个但不超过运算符数 ;支持真分数的加减,自动化简 ;真分数2-3个,三哥时包括加减。

2.功能设计

  • 基本功能
    输入n ,判断合法
    随机生成符合要求的算符和算子,计算结果并判断合法(正负和分母不为0),输出并生成文件result.txt,判断创建文件 。
  • 扩展功能
    随机产生带括号的正整数运算或真分数运算。

3.设计实现

技术分享图片

4.算法详解

生成算子算符 —— 算结果并判断合法——生成算式(加括号)——输出

如何使用调度场算法

  1. 先随机生成一串算子(真分数或整数)和一串算符,存入两个链表

    算子:A B C D
    算符:x y z

2.算结果并判断合法

  • 情况1:如果是真分数加减不用加括号
    逐步计算出结果,一旦过程出现负数或分母为零,则跳出

    A x B y C z D (全是加减运算)

  • 情况2:整数加减乘除,有优先级
    逐步计算出结果,一旦过程出现负数或分母为零,则跳出

    A x B y C z D

    注意:这其中会出现A + B * C从左至右的运算,但之后输出算式会是(A + B)* C

3.生成算式(加括号)

  • 情况1:如果是真分数加减直接输出

  • 情况2:整数加减乘除
    设置2个整型priority1 ,priority2 对算子串中前后两个算子进行优先级判断,+-为低优先级0,×/为高优先级1。
    如果priority1 ,priority2 为 01 那么在两端加括号,否则00 10 11则不加。

5.测试运行

6.代码展示

        int priority1 = 0, priority2 = 0; // 加减乘除优先级
        p = OperatorL.first;
        q = CharaL.first;
        String operation = p.data + "";
            
        ……
        else //生成分数算式
        {
            while(!(q == null))
            {
                p = p.next;
                String fchara = q.character;
                priority1 = priority2 = 0;
                
                if(!(q.next == null)) //如果不是最后一个算子,那么判断前后算子优先级
                {
                    String lchara = q.next.character;

                    if(fchara == "+"  || fchara == "-")
                        priority1 = 0;
                    else if(fchara == "*" || fchara == "/")
                        priority1 = 1;
                                        
                    if(lchara == "+" || lchara == "-")
                        priority2 = 0;
                    else if(lchara == "*" || lchara == "/")
                        priority2 = 1;                      
                }
             
                if(priority1 == 0 && priority2 == 1)
                {
                    operation ="(" + operation + q.character 
                               + p.data  + ")"; //低优先级在高优先级前,那么两边加括号
                }
                else
                {
                    operation = operation + q.character + p.data;
                }
                q = q.next;
            }   

7.总结:

我在设计阶段大概画出了算法流程和类,所以编程的时候就先生成空方法和空类的框架,再具体的模块中输代码,其中需要多次调用的方法greatestcommondivisor和链表方法都单独列出,使代码简洁。这种自上而下的编程确实比逐步编程高效,但只有在比较复杂和庞大的项目中才得以体现。

8.展示PSP

任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min)
计划 10 10
· 估计这个任务需要多少时间,并规划大致工作步骤 10 10
开发 440 860
· 需求分析 (包括学习新技术) 20 30
· 生成设计文档 20 10
· 设计复审 (和同事审核设计文档) 5 5
· 代码规范 (为目前的开发制定合适的规范) 5 5
· 具体设计 60 90
· 具体编码 240 540
· 代码复审 30 60
· 测试(自我测试,修改代码,提交修改) 60 120
报告 25 12
· 测试报告 10 5
· 计算工作量 5 2
· 事后总结, 并提出过程改进计划 10 5

我在具体编码的时间和测试的时间比预计高出许多,但在这一过程中算法反而不是我编程过程中所遇到的难题,但是因为对编程不熟练,出现了很多编译错误,其中一个NullPointer的错误让我调试了一个多小时。

同时我也体会到了注释的重要性,如果注释了不确定或不理解的地方,那么debug的时候会省下大量的时间。

2016012084+小学四则运算练习软件项目报告

标签:while   head   估计   一个   简洁   调度   直接   仓库   tco   

原文地址:https://www.cnblogs.com/librarian1/p/8646841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!