zoukankan      html  css  js  c++  java
  • 【第二周】【作业六】结对项目,四则运算++

    ---恢复内容开始---

    1,完成了功能一,基本支持四则运算,该功能之前就有,就不贴代码了。详情看前面作业。

    2,新增了实现括号功能,支持随机生成括号并运算,下面附带改变代码。

    下面的代码,rand()%5+1生成1-5之间的随机整数,然后能选择所有的括号类型。

     1     switch(rand()%5)
     2     {
     3         
     4     case 1:    s = "("+itos(n1)+ope[op1]+itos(n2)+")"+ope[op2]+itos(n3)+ope[op3]+itos(4);break;
     5     case 2:    s = "("+itos(n1)+ope[op1]+itos(n2)+ope[op2]+itos(n3)+")"+ope[op3]+itos(4);break;
     6     case 3:    s = itos(n1)+ope[op1]+"("+itos(n2)+ope[op2]+itos(n3)+")"+ope[op3]+itos(4);break;
     7     case 4:    s = itos(n1)+ope[op1]+"("+itos(n2)+ope[op2]+itos(n3)+ope[op3]+itos(4)+")";break;
     8     case 5: s = "("+itos(n1)+ope[op1]+itos(n2)+")"+ope[op2]+"("+itos(n3)+ope[op3]+itos(4)+")";break;
     9 
    10     }

     1 void convert2RPN(string &s) {
     2     stringstream ss;
     3     stack<char> stk;
     4     for (size_t i = 0; i < s.length(); i++) {
     5         if (isdigit(s.at(i))) {
     6             ss << s.at(i);
    12         }
    13         else {
    14             if (stk.empty()) {
    15                 stk.push(s.at(i));
    16             }
    17             else {
    18                 switch (s.at(i)) {
    19                 case '(':
    20                     stk.push(s.at(i));
    21                     break;
    22                 case ')':
    23                     
    24                     while (stk.top() != '(') {
    25                         ss << stk.top();
    26                         stk.pop();
    27                     }
    28                     stk.pop();
    29                     break;
    30                 case '+':
    31                 case '-':
    32                     
    33                     while (!stk.empty() && stk.top() != '(') {
    34                         ss << stk.top();
    35                         stk.pop();
    36                     }
    37                     stk.push(s.at(i));
    38                     break;
    39                 case '*':
    40                 case '/':
    41                     
    42                     while (!stk.empty() && (stk.top() == '*' || stk.top() == '/')) {
    43                         ss << stk.top();
    44                         stk.pop();
    45                     }
    46                     stk.push(s.at(i));
    47                     break;
    48                 }
    49             }
    50         }
    51     }
    52     
    53     while (!stk.empty()) {
    54         ss << stk.top();
    55         stk.pop();
    56     }
    57     s = ss.str();
    58 }

    上面代码可以看出,我在堆栈里加入了和括号相关的内容。当栈顶不是“(”时,元素一直出栈,直到遇到栈顶“("时,”(”)“同时出栈。

    3.实现批量出题功能。

    部分相关代码如下:

     1 int main()
     2 {
     3     char ope[4]={'+','-','*','/'};
     4     int sumsoc = 0;
     5     int n ;
     6    cout<<"请输入出题的数量";
     7     cin>>n;
     8     int sn = n;
     9     while(n--)
    10     {
    11     srand(time(NULL)+n);
    12     int ssn = sn - n;
    13     cout<<"当前第"<<ssn<<"道题: ";
    14 
    15     string s;
    16     int soc;
    17     int n1,n2,n3,n4,op1,op2,op3;
    18     n1 = num();
    19     n2 = num();
    20     n3 = num();
    21     n4 = num();
    22     op1 = fh();
    23     op2 = fh();
    24     op3 = fh();
    25     soc = sqrt(n1+n2+n3+n4)*(op1+op2+op3);    
    26     switch(rand()%5)
    27     {
    28 
    29       case 1:    s = "("+itos(n1)+ope[op1]+itos(n2)+")"+ope[op2]+itos(n3)+ope[op3]+itos(4);break;
    30       case 2:    s = "("+itos(n1)+ope[op1]+itos(n2)+ope[op2]+itos(n3)+")"+ope[op3]+itos(4);break;
    31       case 3:    s = itos(n1)+ope[op1]+"("+itos(n2)+ope[op2]+itos(n3)+")"+ope[op3]+itos(4);break;
    32       case 4:    s = itos(n1)+ope[op1]+"("+itos(n2)+ope[op2]+itos(n3)+ope[op3]+itos(4)+")";break;
    33       case 5:    s = "("+itos(n1)+ope[op1]+itos(n2)+")"+ope[op2]+"("+itos(n3)+ope[op3]+itos(4)+")";break;
    34 
    35     }
    36         cout << s+" "+"="+" ";
    37         convert2RPN(s);
    38     double res1 = calculateRPN(s);
    39     cout<<res1;
    40     cout<<"	"<<"难度值:"<<" "<<soc<<endl; 
    41 }

    才开始调试的时候,发现所有的题都是出的一样的,后来才找到原因。因为控制随机的是srand(time(NULL);如果程序运行很快的话,系统时间相当于没改变,这个函数会得到相同的结果,所有关于随机的全部失效,得到相同结果,后来改成srand(time(NULL)+n);因为n在每次循环后是不一样的。

    功能四没做出来。以后继续做。

    ————————————————————————————————————————————————————————————

    结对编程体会。

    一开始找我结对,其实我是拒绝的,因为我和李权,所用的编程语言不一样,他用java,我用c和c++。所谓道不同不相为谋。

    后来李权的诚心让我打动了,虽然编程语言不同,但是思想是相通的。

    于是就这样,我俩走上了结对编程的道路。

    说实话,一开始合作编程,效率不高,因为他总是跟我在一些无关紧要的问题上争论,比如我喜欢if()后面的大括号再起一行写,他分要说要紧跟着写,不然他看不懂。

    后来,他渐渐话少了,然后我们都效率提高了,有时候我问他我不会的问题,虽然他也不会,但能帮我搜,还能一块讨论不懂的问题,一段时间后,我感觉我的团队意识增强了。

  • 相关阅读:
    我来教你用AWS IoT.Part1--配置和接入
    Netty进行文件传输
    Spring Security-利用URL地址进行权限控制
    Java开发工作中常见问题
    java进阶学习计划
    spring cloud常用注解及关键类
    系统设计-电商排名
    java实现十大经典算法
    JDK8如何写出优雅代码
    Java实现迷宫和八皇后
  • 原文地址:https://www.cnblogs.com/Boxer1994/p/5873621.html
Copyright © 2011-2022 走看看