码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程综合实践的第二次实验报告

时间:2019-03-18 01:41:15      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:选择   break   space   bre   不同   循环   对象   font   种子   

队伍:阙定1757127,李铮达1759118

这次是软件工程综合实践的第二次实验,本次任务是结对编程,就是找一个小伙伴一起写代码,一人写代码一人复审代码,这样可以更快的找出代码的错误,然后立即更改,提高开发效率。

下面是老师发布的任务截图

技术图片

 

讨论分析

拿到任务后,我们先考虑用哪种编程语言来写,直接用较为基础的C或C++编写即可,因为逻辑较为简单,且不需要涉及面向对象的问题。然后开始分析用什么方法来实现,以及如何实现。讨论持续了一整天,因为白天有课,所以我们都是用零星的时间来讨论的。

 

下面是周二中午我们两人在网上讨论的部分截图

技术图片

 

大体思路确定了之后,我们俩抽了个空余的时间,然后开始我们的结对编程。开始时是我做敲代码的“驾驶员”,李铮达他做复审代码的“导航员”。然后我们俩再进行角色互换。

 

结对编程

我刚开始最基础的想法是设计四个函数,分别对应为加减乘除,然后根据用户的选择,调用各个函数,输出不同的算式。我采用了以时间作为随机种子来产生随机数的方法,用for循环来输出整个算式。

 

下图是我的第一次试验,先弄好一个运算符,随后再增加一个运算符即可

技术图片

 

加减乘的算式已经打印出来了,然后我们开始遇到第一个难题,就是除法要考虑除零除余问题。

 

由于除法的特殊性,一个重要条件就是要做到除数不为0,我们俩商讨出两种解决方法:1、设置随机数的范围为1-99,直接不包括0即可;2、在除法函数中增加一个判断,如果除数为0,则重新取一个随机数。李铮达认为0包含在算式中会降低难度,而且代码编写也会复杂,所以更赞成第一点,但阙定认为小学数学会有关于0的算数问题,综合考虑还是选择了第二点的解决方法。至于是否能整除的问题也很容易解决,添加一个求余是否为0的条件判断即可,是0,则可以整除,不是0则重新取数。

 

阙定想出解决无法整除的方法有些不同,就是无限递归。由于除法操作用函数来实现的,所以可以加一个if条件判断语句,如果不能整除则调用自己,再次运算,直到算式能整除即可结束,这样的话得到的算式就是能整除的了。这样写代码比较简洁。所以采用了这种。

技术图片

至此,我们已基本完成老师中的任务要求了,随机数,两个运算符,组合成一个随机算式。

 

添加一个运算符的方法也比较简单,加减乘除,就是4x4的思路,共有16种组合,这16种组合也是由随机数随机出的,这种想法有些笨拙,但是目前我们没有想出更好的方法

 技术图片

 

 

实现代码

 

#include <iostream>

#include <ctime>

 

using namespace std;

 

 

void f(int a,int b)

{

    cout << rand() % (b-a+1)+a << " + " << rand() % (b-a+1)+a ;//a到b

}

void g(int a, int b)

{

//  cout << rand() % 51 << " - " << rand() % 31 ;//0-30

    cout << rand() % (b-a+1)+a << " - " << rand() % (b-a+1)+a ;//a到b

}

void h(int a, int b)

{

//  cout << rand() % 11 << " * " << rand() % 11 ;//0-10

    cout << rand() % (b-a+1)+a << " * " << rand() % (b-a+1)+a ;//a到b

}

void y(int a, int b)

{//只除一次

    int p,q;

    p = rand() % (b-a + 1) + a;// a到b

   

    if(a==0)q = rand() % b  + 1;// 1到b

    else q = rand() % (b-a + 1) + a;// a到b

 

    if(p%q == 0) cout <<p<< " / " << q ;

    else y(a,b);//只有整除才能输出,否则无限递归

}

void yy(int p, int q)

{//连除两次

    int a, b, c;

//  a = rand() % 101;//0-100

    a = rand() % (q-p + 1) + p;// p到q

 

//  b = rand() % 39 + 2;//2-40

    if (p == 0)b = rand() % (q-1) + 2;// 2到q

    else b = rand() % (q-p + 1) + p;// p到q

 

//  c = rand() % 20 + 1;//1-20

    if (p == 0)c = rand() % q + 1;// 1到q

    else c = rand() % (q-p + 1) + p;// p到q

 

    if (a%b == 0 && (a/b)%c == 0) cout << a << " / " << b << " / " << c;

    else yy(p,q);//只有整除才能输出,否则无限递归

}

 

int main()

{

    int i,a,b,n,ss;

    srand(unsigned(time(NULL)));//随机时间种子

    cout << "请输入随机整数范围(0 <= a < b): ";

    cin >> a;    cin >> b;

    cout << "请选择随机题目类型:"<<endl;

    cout << "1、a + b + c\t2、a + b - c\t3、a + b * c\t4、a + b / c"<<endl;

    cout << "5、a - b + c\t6、a - b - c\t7、a - b * c\t8、a - b / c"<<endl;

    cout << "9、a * b + c\t10、a * b - c\t11、a * b * c\t12、a * b / c"<<endl;

    cout << "13、a / b + c\t14、a / b - c\t15、a / b * c\t16、a / b / c"<<endl;

    cout <<"                         0、全部随机";

loop:

    cout <<endl<< "请选择序号:";

    while (!(cin >> ss)) {

         cin.clear(); cin.sync(); cout << "不是数字!" << endl; cin.ignore(1024, ‘\n‘);cout << "请选择序号:";}

if (ss<0||ss>16){cout <<"不存在此序号。";goto loop;}

   

    cout <<endl<< "请输入生成数量:";

    while (!(cin >> n)) {

         cin.clear(); cin.sync(); cout << "不是数字!" << endl; cin.ignore(1024, ‘\n‘); cout << "请再次输入:";

    }

 

    cout << endl;

switch (ss)

{

         case 1:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " + "; f(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ +

             if (i % 4 == 0)cout << endl;}break;

 

         case 2:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " + "; g(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ -

             if (i % 4 == 0)cout << endl;}break;

 

         case 3:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " + "; h(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ *

             if (i % 4 == 0)cout << endl;}break;

 

         case 4:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " + "; y(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ /

             if (i % 4 == 0)cout << endl;}break;

 

         case 5:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " - "; f(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//- +

             if (i % 4 == 0)cout << endl;}break;

 

         case 6:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " - "; g(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//- -

             if (i % 4 == 0)cout << endl;}break;

 

         case 7:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " - "; h(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//- *

             if (i % 4 == 0)cout << endl;}break;

 

         case 8:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " - "; y(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//- /

             if (i % 4 == 0)cout << endl;}break;

 

         case 9:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " * "; f(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//* +

             if (i % 4 == 0)cout << endl;}break;

 

         case 10:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " * "; g(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//* -

             if (i % 4 == 0)cout << endl;}break;

 

         case 11:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " * "; h(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//* *

             if (i % 4 == 0)cout << endl;}break;

 

         case 12:for (i = 1; i <= n; i++) {

             cout << rand() % (b - a + 1) + a << " * "; y(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//* /

             if (i % 4 == 0)cout << endl;}break;

 

         case 13:for (i = 1; i <= n; i++) {

             y(a, b); cout << " + " << rand() % (b - a + 1) + a; cout << " = " << ‘\t‘ << ‘\t‘;// / +

             if (i % 4 == 0)cout << endl;}break;

 

         case 14:for (i = 1; i <= n; i++) {

             y(a, b); cout << " - " << rand() % (b - a + 1) + a; cout << " = " << ‘\t‘ << ‘\t‘;// / -

             if (i % 4 == 0)cout << endl;}break;

 

         case 15:for (i = 1; i <= n; i++) {

             y(a, b); cout << " * " << rand() % (b - a + 1) + a; cout << " = " << ‘\t‘ << ‘\t‘;// / *

             if (i % 4 == 0)cout << endl;}break;

 

         case 16:for (i = 1; i <= n; i++) {

                                                           yy(a, b); cout << " = " << ‘\t‘ << ‘\t‘;//+ +

             if (i % 4 == 0)cout << endl;}break;

 

         case 0:

    for (i = 0; i <n/16 +1; i++) {

         cout << rand() % (b-a + 1) + a << " + "; f(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//+ +

         cout << rand() % (b-a + 1) + a << " + "; g(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//+ -

         cout << rand() % (b-a + 1) + a << " + "; h(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//+ *

         cout << rand() % (b-a + 1) + a << " + "; y(a, b);cout << " = " << endl;           //+ /

 

         cout << rand() % (b-a + 1) + a << " - "; f(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//- +

         cout << rand() % (b-a + 1) + a << " - "; g(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//- -

         cout << rand() % (b-a + 1) + a << " - "; h(a, b);cout << " = " << ‘\t‘ << ‘\t‘;//- *

         cout << rand() % (b-a + 1) + a << " - "; y(a, b);cout << " = " << endl;          //- /

 

         cout << rand() % (b-a + 1) + a << " * "; f(a, b);cout << " = " << ‘\t‘ << ‘\t‘;// * +

         cout << rand() % (b-a + 1) + a << " * "; g(a, b);cout << " = " << ‘\t‘ << ‘\t‘;// * -

         cout << rand() % (b-a + 1) + a << " * "; h(a, b);cout << " = " << ‘\t‘ << ‘\t‘;// * *

         cout << rand() % (b-a + 1) + a << " * "; y(a, b);cout << " = " << endl;           // * /

 

         y(a, b); cout << " + " << rand() % (b-a + 1) + a;cout << " = " << ‘\t‘ << ‘\t‘;// / +

         y(a, b); cout << " - " << rand() % (b-a + 1) + a;cout << " = " << ‘\t‘ << ‘\t‘;// / -

         y(a, b); cout << " * " << rand() % (b-a + 1) + a;cout << " = " << ‘\t‘ << ‘\t‘;// / *

                                                      yy(a,b);cout << " = " << endl;           // / /

         }break;

              

}

 

 

    return 0;

}

 

扩展功能

 

考虑到小学老师可能会重复训练以及选择训练,我给它加上了一些功能选择。

 

 

 

技术图片

可以输入随机数生成的范围,如图,生成的随机数在2~99之间

 

 

 

 技术图片

可以选择算式的类型,共有16种情况可以选择,以及一个全部随机运算符的选择

 

 

 

 技术图片

可以输入生成题目的数量

 

 

 

 技术图片

全部随机的截图

 

 

 

不足之处(Bug)

 

在输入时若是错误的输入可能会导致程序崩溃或者进入死循环

 技术图片

 

改进方法:加上一个if条件判断,若不为数字则循环重新输入,若输入正确则跳出循环

 技术图片

 

 

 

心得体会

 

体验了一次结对编程,感觉效果挺不错的,尤其是自己敲代码时有人在旁边提醒,省去了我自己去检查出错的地方,提高了我的效率。但毕竟是第一次合作,我们俩也不是完全磨合的很好,有时会因为一些小bug而产生一些不同的意见,解决方案也是各有千秋。最后我们通过不断融合改进,解决了大部分的bug,程序已经可以完美的运行了。

结对编程确实比个人编程效率高了不少,它能有效的提高编代码的准确率,同时也可以轮流转换角色,避免产生个人单调的敲代码的烦躁感。我们也觉得各自都有了一些小小的收获,通过对比不同的方法,分析出利弊,想法相互交流,可以达到1+1>2的效果,体验到团队合作的高效,在这个较为基础的项目中,就有这么多思想的汇聚,等将来做大一点的项目,应该会有更多的问题需要配合解决,相互讨论出较为合理高效的解决方法。

 

软件工程综合实践的第二次实验报告

标签:选择   break   space   bre   不同   循环   对象   font   种子   

原文地址:https://www.cnblogs.com/kiky000/p/10549818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!