结对项目编程之代码进展

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

 

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


 

 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/

 

posted @ 2016-04-09 18:41  vikkiii  阅读(216)  评论(0编辑  收藏  举报