结对编程

发布时间 2023-04-12 14:22:31作者: muah

·关于结对编程 

结对编程(Pair programming)来自于极端编程XP(eXtreme Programming),是它的十二个最佳实践之一。顾名思义,结对编程就是两个程序员坐在一起,结对进行代码开发。在极限编程中,所有的软件产品都是由两个程序员并排坐在一起,在同一台机器上共同完成的。

关于结对编程在网上有很多声音,相对比其他的敏捷实践,它的争议几乎是最大的。根据VersionOne的14届年度敏捷状态报告,在组织采用的敏捷工程实践中,结对编程占受访企业的31%,排第八位,仅次于持续部署,高于TDD,由此可见,结对编程还是有一席之地、可取之处的。

 

·编程需求主体:

1.小学老师要每周给同学出300道四则运算练习题。这个程序有很多种实现方式:

- C/C++

- C#/VB.net/Java

- Excel

- Unix Shell

- Emacs/Powershell/Vbscript

- Perl

- Python

2. 一或两个运算符(a+b或a+b+c),100以内的数字,不需要写答案

3. 需要检查答案是否正确,并且保证答案在0..100之间

4. 尽可能地多设置一些条件

 

·设计内容:

1. 随机生成100以内的四则运算题目

2. 支持多运算符

3. 提交后判断对错并显示正确结果

 

·设计思路

采用C++语言,设计了五个函数,分别为打印菜单以及加减乘除的函数,为了保证结果以及题目均为100以内且随机,我们采用rand()%100来生成题目。同时加法和乘法生成后再通过结果是否超过100来改变flag的值从而决定是否更换题目。在除法函数中,还增加了是否出整除题目的选项,供做题人自主选择。同时还可以选择每类运算随机出题的数量,做一道批改一道,方便及时订正。

 

·编程现场

 

·代码

#include <iostream>

#include <ctime>

#include <cstdlib>

#include <conio.h>

#include<cmath>

#include <iomanip>

using namespace std;

void menu();

 

int main()

{

system("cls");

menu();

return 0;

}

void addtion()

{

int a,b,i,d,number;

srand ( (unsigned) time (NULL) );

system("cls");

cout<<"\t请输入题目数!\n\t\t";

cin>>number;

getchar();

cout<<"\t程序将会随机出题,请输入正确答案!\n\t\t";

for(i=0;i<number;i++)

{

a=rand()%100;

b=rand()%100;

if(a+b>=100)

 {

i--;

 continue;

 }

cout<<"\n\t"<<a<<"+"<<b<<"=";

cin>>d;

 if(d==a+b)

{

cout<<"\t恭喜答对了\n";

}

else cout<<"\t很可惜,错了哦!答案是"<<a+b<<"\n";

}

getchar();

cout<<"\t你已经做完测试,请按任意键返回菜单\n";

getchar();

}

 

 

void subtraction()

{int a,b,i,d,number;

srand ( (unsigned) time (NULL) );

system("cls");

cout<<"\t请输入题目数!\n\t\t";

cin>>number;

getchar();

cout<<"\t程序将会随机出题,请输入正确答案!\n\t\t";

for(i=0;i<number;i++)

 {a=rand()%100;

b=rand()%100;

if(a-b<=0)

{ i--;

 continue;

}

cout<<"\n\t"<<a<<" - "<<b<<"=";

 cin>>d;

if(d==a-b)

 {

 

            cout<<"\t恭喜答对了\n";

 

 }

 

        else cout<<"\t很可惜,错了哦!答案是"<<a-b<<"\n";

 

     }

getchar();

cout<<"\t你已经做完测试,请按任意键返回菜单\n";

getchar();

}

 

 

void multiply(){

int a,b,i,d,number;

srand ( (unsigned) time (NULL) );

system("cls");

cout<<"\t请输入题目数!\n\t\t";

cin>>number;

getchar();

cout<<"\t程序将会随机出题,请输入正确答案!\n\t\t";

for(i=0;i<number;i++)

{

a=rand()%100;

b=rand()%100;

if(a*b>=100)

{

i--;

continue;

}

cout<<"\n\t"<<a<<" * "<<b<<"=";

cin>>d;

if(d==a*b)

{

cout<<"\t恭喜答对了\n";

 

}

else cout<<"\t很可惜,错了哦!答案是"<<a*b<<"\n";

}

getchar();

cout<<"\t你已经做完测试,请按任意键返回菜单\n";

getchar();

}

 

 

void division()

{

int i,a,b,number,c,f,g;

double d,e;

srand ( (unsigned) time (NULL) );

system("cls");

cout<<"\t请输入题目数!\n\t\t";

cin>>number;

getchar();

cout<<"\t是否整除?(是1/否0)\n\t\t";

cin>>c;

getchar();

cout<<"\t程序将会随机出题,请输入正确答案!\n\t\t";

if(c==0)

{

for(i=0;i<number;i++)

{

a=rand()%100;

b=rand()%100;

if((a<b)||b==0||a%b==0)

{

i--;

continue;

}

cout<<"\n\t"<<a<<" / "<<b<<"=";

e=(a*1.0)/b;

cin>>d;

if(fabs(e-d)<0.001)

{

cout<<"\t恭喜答对了\n";

}

else

cout<<setprecision(2)<<"\t很可惜,错了哦!答案是"<<e<<"\n";

}

getchar();

cout<<"\t你已经做完测试,请按任意键返回菜单\n";

 

getch();

}

else

{

for(i=0;i<number;i++)

{

a=rand()%100;

b=rand()%100;

if(a<b||b==0||a%b!=0)

{

i--;

continue;

}

cout<<"\n\t"<<a<<" / "<<b<<"=";

g=a/b;

cin>>f;

if(g==f)

{

cout<<"\t恭喜答对了\n";

}

else cout<<"\t很可惜,错了哦!答案是"<<a/b<<"\n";

}

getchar();

cout<<"\t你已经做完测试,请按任意键返回菜单\n";

getch();

}

}

 

 

void menu()

{

int i;

cout<<"\n\n\t******************************\n";

cout<<"\t  欢迎使用四则运算练习软件  \n";

cout<<"\t   2152201 2157132结对编程 \n";

cout<<"\t          1- 加法           \n";

cout<<"\t          2- 减法           \n";

cout<<"\t          3- 乘法           \n";

cout<<"\t          4- 除法           \n";

cout<<"\t          0- 退出           \n";

cout<<"\t******************************";

i=getch();

switch(i)

{

case '1':addtion();break;

case '2':subtraction();break;

case '3':multiply();break;

case '4':division();break;

case '0':exit(0);break;

default:system("cls");

cout<<"\n\t\t请输入1~4!\n\n\n";

getch();

break;

}

main();

}

 

 

 

·演示结果

1.主菜单界面

2.加法界面

3.减法界面

4.乘法界面

5.除法界面(整除)

6.除法界面(非整除)

·心得体会

合作配合:在结对编程中,合作配合是非常重要的。我们需要相互协调,互相支持,尊重对方的想法,并共同解决问题。

分工合作:在编程任务中,我们可以根据个人的专长和技能来分配不同的任务,充分发挥每个人的优势,从而提高整个团队的效率和质量。

代码注释和文档:在编写代码过程中,我们需要及时添加注释和文档,以方便后续的维护和修改,同时也可以提高代码的可读性和可理解性。

测试和调试:在编写程序时,我们需要及时测试和调试程序,以确保程序的正确性和健壮性。我们可以使用单元测试、集成测试等方法来测试程序的各个部分,并尽可能覆盖各种输入和输出情况。

关于组织是否要采用结对编程这项实践,主要是它到底适不适合自己的项目。选择某一项实践的时候我们要形神兼具,如果仅仅是两个人用一台电脑,一个写,一个看,这只是形式上符合,而重点是要理解这项实践它背后的理念。在结对中通常要求两个人水平比较相近,这样可以形成互补,引起讨论。两个人的智慧大于一个人的智慧,这是结对编程的基本依据,这样就会提升质量,提升工作效率。