• 第四次作业之四则运算


    结对伙伴:李圆圆

    要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,博客是分别完成的)。 (1) 给出每个功能的重点、难点、编程收获。(2)给出结对编程的体会,以及 (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。

    1. 功能一

      重点:判断符号的优先性。对于功能一的实现,我和队友认为还是可以达到要求的,所以在初期我们想采取穷举的方法,但在接下来的工作中,发现此方法不可用,代码量太大,浪费了大量的精力,于是我们重新开始找寻其他方法来实现这部分功能

      以下是该功能的部分重点代码片段

      void check(char c, stack<char>& coll2, deque<char>& coll3)
      {
          if (coll2.empty())
          {
              coll2.push(c);
              return;
          }
      
          if (isPra(c))
          {
              if (c == '(')
                  coll2.push(c);
              else
              {
                  while (coll2.top() != '(')
                  {
                      char ch = coll2.top();
                      coll3.push_back(ch);
                      coll2.pop();
                  }
                  coll2.pop();
              }
          }
          else   
          {
              
              char sym = coll2.top();
      
                     if (getPri(c) <= getPri(sym))
              {
                              coll2.pop();
                  
                  coll3.push_back(sym);
                  check(c, coll2, coll3);
              }
              else
              {
             
                  coll2.push(c);
              }
          }
      }

    2.功能二

    重点:括号的添加。没有括号的试题实现还是非常容易的,所以当加入括号时,所产生的问题也是我们所遇到的较大困难,我们使用了大量的if判断语句,让括号的里优先级最高,带括号的和不带括号的试题交叉出现。

    重点代码如下:

    void sz2(){
        int a, b, c, d, k1, k2, k3, count;
        char c1, c2, c3;
        double e, f;
        int k;
        count = 0;
        string str;
        for (int i = 0; i < 20; i++) {
            k1 = rand() % 4;
            if (k1 == 0)
                c1 = '+';
            else if (k1 == 1)
                c1 = '-';
            else if (k1 == 2)
                c1 = '*';
            else if (k1 == 3)
                c1 = '/';
    
            k2 = rand() % 4;
            if (k2 == 0)
                c2 = '+';
            else if (k2 == 1)
                c2 = '-';
            else if (k2 == 2)
                c2 = '*';
            else if (k2 == 3)
                c2 = '/';
    
            k3 = rand() % 4;
            if (k3 == 0)
                c3 = '+';
            else if (k3 == 1)
                c3 = '-';
            else if (k3 == 2)
                c3 = '*';
            else if (k3 == 3)
                c3 = '/';
            a = rand() % 10;
            b = rand() % 10;
            c = rand() % 10;
            d = rand() % 10;
            if (c1 == '/') {
                a = a*1.0;
                b = 2;
            }
            if (c2 == '/') {
                b = b*1.0;
                c = 2;
            }
            if (c3 == '/') {
                c = c*1.0;
                d = 2;
            }
            stringstream ss1;
            stringstream ss2;
            stringstream ss3;
            string s1;
            string s2;
            string s3;
            ss1 << "(" << a << c1 << b << ")" << c2 << c << c3 << d;
            ss2 << a << c1 << "(" << b << c2 << c << ")" << c3 << d;
            ss3 << a << c1 << b << c2 << "(" << c << c3 << d << ")";
            s1 = ss1.str();
            s2 = ss1.str();
            s3 = ss1.str();
            k = rand() % 3;
            if (k == 0)
                str = s1;
            else if (k1 == 1)
                str = s2;
            else if (k1 == 2)
                str = s3;
            cout << str << "=" << endl;
            deque<char> coll1;  
            stack<char> coll2; 
            deque<char> coll3;   
            stack<int>coll4;  
    
            for (int i = 0; i != str.size(); ++i)
            {
                          coll1.push_back(str[i]);
            }
    
                    allocate(coll1, coll2, coll3);
    
                   calculate(coll3, coll4);
            f = coll4.top();
            cout << "?";
            cin >> e;
            if (e == f) {
                cout << "答对啦,你真是个天才!" << endl;
                count++;
            }
            else if (e != f) {
                cout << "再想想吧,答案似乎是" << f << "喔!" << endl;
            }
               }
        cout << "...(一共20道题)" << endl;
        cout << endl;
        cout << "你一共答对" << count << "道题,共20道题。" << endl;
    }

    3.功能三

    重点:命令行的字符判断。对于输入的题目必须是正整数,不能是英文,负数,浮点数。计算后缀表达式。

    void main(int argc, char *argv[])
    {
    
    
        if (argc == 1) {
            sz2();
        }
        else {
            int b1;
            float b2 = atof(argv[2]);
            if ((b2 - (int)b2) > 0){
                cout << "题目数量必须是 正整数。";
                exit(0);
            }
            else {
                b1 = atoi(argv[2]);
                if (!(*argv[2] == '+' || (*argv[2] > '0'&& *argv[2] <= '9') || *argv[2] == '.')) {
                    cout << "题目数量必须是 正整数。";
                    exit(0);
                }
                sz3(b1);
            }
    
        }
    
    }

     重点:把算式输出到文件中,方便打印。

    ofstream fout;
    fout.open("f4.txt");
    fout << str << "=" << "	" << "	" << std::left << f << endl;
    fout.close();

    结对编程体会: 参考《构建之法》第四章,进行结对编程,我一开始是有些担心的,因为两个人的工作习惯的不同和脾气的不同,所以在一起工作中怕会发生一些不愉快的事情,但事实证明我的担心是多余的,我们俩的合作是非常愉快的,虽然会有小的分歧,但无伤大雅,结对编程虽然在效率上可能没有一个人效率高,但是代码的正确实现,小错误的找出,bug的调试都由两个人完成,还有另一个非常深的感受是结对编程需要两个人的精力充沛,就像我队友说的需要天时地利人和,哈哈。

    5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件:

    1.在制定代码规范时,由于双方的编程习惯和审美观点不同,在制定规范出现了分歧,通过初步的在,线讨论和面对面交谈,双方都进行妥协,最大限度的满足两个人的要求,这样在接下来的编程过程中互相提醒和进步,对于结对编程来说是一个好的开始。

    2.编程初期,我的队友提出四则运算想采用穷举的方法进行实现,我提出这个方法会不会代码量过大,工作时间过长,但也同意用这个方法试试看,但接下来的工作过程中,代码量过于庞大,.无法再往下进行,果真印证了这个猜想。

    3.进行单元测试的时候 ,我的队友认为应该所有的功能块应该全部测试,我认为应该找重点的测试,在接下来的工作中,我的想法得到了认可。

    4.在结对编程中,一个人在写,一个人在检查,在某个小问题上可能也要争论半天,有时候队友的提醒,虽然是是无心之举,可能就打扰了正在编程工作者的思路,大大降低了效率。不过,既然是两个人,能快速在别人身上学到自己不太熟悉的知识,认识到队友指出自己的缺点,共同进步。

    5.功能四的实现问题进行了讨论,因为功能四的实现遇到困难,以至于两个人在到底是否进行实现的问题上,出现分歧。最后由于各自时间安排,没有实现功能四

    要求2 给出照片1张,包括结对的2位同学、工作地点、计算机,可选项包括其他能表达结对编程工作经历的物品或场景。

    结对成员:王伟东、李圆圆

    工作地点:计算机楼107教室

    计算机:联想电脑,操作系统为64位,内存为8g

    编程经历:应老师的要求,结对编程需在物理空间下,相距一两米的距离,所以在选用了在无人上课的教室进行实际操作,因为工作地点的不稳定因素,所以要随时更换工作地点,打断工作进程,效率降低,其次因为事先工作习惯的原因,在电源突然切断的情况下,对所完成的代码进行提前保存,避免大量工作的重复进行。

    照片:

    要求3 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果

    git 地址:

     https://git.coding.net/wangwd/SecondAssignment.git

    运行截图:运行f4

    判断正整数

  • 相关阅读:
    设计模式之观察者模式
    设计模式之装饰器模式
    redis.conf常用配置说明
    log4j日志框架的使用
    Redis入门简述
    Linux用户组权限简单解析
    MyBatis入门简述
    初学Linux要掌握的命令
    SpringIOC原理简述
    Java单元测试神器之Mockito
  • 原文地址:https://www.cnblogs.com/wwd1993/p/7650272.html
Copyright © 2020-2023  润新知