• 结对项目编程之代码进展


    由于最开始做个人项目的时候就是按照模块的思想进行的设计,所以已经是模块化的程序了。

    结对项目关于程序方面老师提出了下列要求


     Calc()

    这个Calc 函数接受字符串的输入(字符串里就是运算式子,例如 “ 5+3.5”,  “7/8 – 3/8 ”,“3 + 90 * (-0.3)” 等等),这个模块的返回值是一个字符串,例如,前面几个例子的结果就是 ( “17.5”, “1/2”, “-24”).


     

    所以我要增加小数的运算以及负数运算的功能。

    并且让模块的返回值为【字符串】(现在的返回类型是Fraction)

    故我在Fraction类里加了个toString函数。 里面分别可以将分数和小数都转换为string形的

    string Fraction::toString(){    //计算结果变为string
       char t[10];
       sprintf(t,"%d",num);
       string s1=t;
       if(den==1){
           return s1;    
       }
       else{
           sprintf(t,"%d",den);
           string s2=t;
           return s1+"/"+s2;  
       } 
    }
    
    string Fraction::toString2(int jingdu){    //计算结果变为string
       char t[10];
       float result=num*1.0/den;
       float result2=int(result*pow(10.0,jingdu))/pow(10.0,jingdu);
       sprintf(t,"%f",result2);
       string s1=t;
       return s1;     
    }

     对于负数的运算,由于负数会出现在最开头:  -1+4/2*5  或是带括号出现 2+4*(-4)+2。所以找到这种规律后,我找到负数然后在其前面加上0。

    Exp::Exp(string s)
    {
        str="";                      //实现负数运算
        for(int i=0;i<s.size();i++){
            if(i==0&&s[i]=='-' ||s[i]=='-'&&s[i-1]=='(')
                str+="0";
            str=str+s[i];
      
             
        }

     对于小数的运算,我用的办法是将小数也转为分数。

    比如3.45就是  345/100。


    除此之外,我还设计了“最多几个运算符,数据范围是多少,还要设置计算的精度(保留几位小数,等等)”以及3种异常

    void Exp::setting(int geshu,int jingdu,int max,int min){
        this->geshu=geshu;
        this->jingdu=jingdu;
        this->max=max;
        this->min=min;
    }

     在setFraction(string str,int max,int min)函数里增加了下面的语句,抛出异常

     if(den==0)
            throw string("分母不可以为0");
        else if(num/den>max||num/den<min)
            throw string("超出范围");

    在setExp(string s)增加以下语句,抛出异常

    if(cal>geshu)
            throw string("运算符太多"); 

    增加toString2的函数,具体实现的方法是比如【5,4321】要保留两位小数(精度是2),就用5.4321乘以100,取整,再除以100,就变成5.43了

    string Fraction::toString2(int jingdu){    //计算结果变为string
       char t[10];
       float result=num*1.0/den;
       float result2=int(result*pow(10.0,jingdu))/pow(10.0,jingdu);
       sprintf(t,"%f",result2);
       string s1=t;
       return s1;     
    }

    大概就是这样。具体的测试部分见我的partner的博客:

    http://www.cnblogs.com/xDan/

  • 相关阅读:
    PHP 设计模式系列 —— 资源库模式(Repository)
    在 Laravel 5 中使用 Repository 模式实现业务逻辑和数据访问的分离
    laravel集合
    2013项目总结
    项目总结
    到底创建了几个String对象?
    String s=new String("abc")创建了几个对象?
    局部刷新
    robot framework 在pycharm中语法无法高亮显示的,显示绿色解决办法(Robot Framework with PyCharm)
    UNIX环境高级编程——进程管理和通信(总结)
  • 原文地址:https://www.cnblogs.com/vikkii/p/5363033.html
Copyright © 2020-2023  润新知