【第二周】【作业六】结对项目,四则运算++

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

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<<"\t"<<"难度值:"<<" "<<soc<<endl; 
41 }

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

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

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

结对编程体会。

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

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

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

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

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

 

posted @ 2016-09-14 21:48  _Boxer  阅读(177)  评论(2编辑  收藏  举报