zoukankan      html  css  js  c++  java
  • 结对项目编程之代码进展

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

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


     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/

  • 相关阅读:
    cacti (可以利用yum安装cacti的配置)
    zabbix
    HA集群
    DNS搭建
    MySQL主从配置
    解析jsp的 tomcat 、resin
    samba
    squid 代理服务
    Application binary interface and method of interfacing binary application program to digital computer
    Pyqt4的事件与信号
  • 原文地址:https://www.cnblogs.com/vikkii/p/5363033.html
Copyright © 2011-2022 走看看