结对编程(第二阶段)

一、实验目标
  1)体验敏捷开发中的两人合作。

  2)进一步提高个人编程技巧与实践。

二 、实验内容
  1)根据以下问题描述,练习结对编程(pair programming)实践;

  2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。

  3)要求在结对编程工作期间,两人的角色至少切换 4 次;

  4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

三、实验过程
1、代码规范

代码如何写才能写得很规范呢?代码的规范化不是说看完本节内容后就能实现的。它里面细节很多,而且需要不停地写代码练习,不停地领悟,慢慢地才能掌握的一种编程习惯。所以大家不要想着一下子就能把代码规范化的所有知识全部掌握,也不要想着一下子就能把代码写规范,这是不太可能的。有很多知识,比如为什么代码要这样写,为什么不能那样写,作为一个初学者你是很难弄明白的。有很多规范是为了在程序代码量很大的时候,便于自己阅读,也便于别人阅读。所以刚开始的时候有很多规范你不知道为什么要那样规定,你就单纯地模仿就行了。等将来敲代码敲得时间长了,你就会感觉到那样写是很有好处的,同时还要注意代码规范法的七大原则:空行、空格、成对书写、缩进、对齐、代码行、注释。

2、程序的总体设计

设计流程图

 

3、程序结对编程过程及功能实现情况

结对编程过程

 

 

 功能实现

 附代码:

#include<iostream>
#include<string>
#include<stdlib.h>
#include<time.h>
using namespace std;
int randnum2(int min,int max) //获得随机数
{
int ranum=0;
ranum=rand();
while(ranum>max)
{
ranum%=max;//保证min<b<max
if(ranum<min)
{
ranum=rand();
}
}
return ranum;
}
double answer(int ope,double num1,double num2)
{
double ans=0;
if(ope==0)
{
ans=num1+num2;
}
if(ope==1)
{
ans=num1-num2;
}
if(ope==2)
{
ans=num1*num2;
}
if(ope==3)
{
ans=num1/num2;
}
return ans;
}
double question(int max,int min,int numam)
{
int a[100],i=2,j=0,num=0;
double b[100];
string str="+-*/";
num=randnum2(i,numam);
i=0;
while(i<=num*3) // 初始化数组
{
a[i]=randnum2(min,max);
b[i]=a[i];
i++;
}
while(j<=num*3)
{
a[j]%=4;//运算符
a[j+1]%=2;//括号
if(a[j+1]==1)
{
a[j+4]=-1;
}
j+=3;
}

int t=0;
i=0;
j=1;
while(j<=num*3) //输出式子
{
if(a[j]==1&&j<num*3-3&&a[j+2]!=2&&a[j+2]!=3)
cout<<"(";
cout<<a[j+1];
if(a[j-3]==1&&j>3&&a[j-1]!=2&&a[j-1]!=3)
cout<<")";
if(j<(num*3-3))
cout<<str[a[j+2]];
j+=3;
}

j=1;
while(j<=num*3-3) //计算括号
{
if(a[j]==1&&j<num*3-3&&a[j+2]!=2&&a[j+2]!=3)
{
b[j+1]=answer(a[j+2],b[j+1],b[j+4]);
a[j+1]=b[j+1];
for(int i=j+2;i<num*3-3;i++)
{
a[i]=a[i+3];
b[i]=b[i+3];
}
num-=1;
}
j+=3;
}
j=1;
while(j<=num*3-3) //计算乘除
{
if(a[j+2]==2||a[j+2]==3)
{

b[j+1]= answer(a[j+2],b[j+1],b[j+4]);
for(int i=j+2;i<num*3-3;i++)
{
a[i]=a[i+3];
b[i]=b[i+3];
}
num-=1;
j-=3;
}
j+=3;
}
j=1;
double ans=0,m=0;
while(j<=num*3)
{
m=b[j+1];
if(a[j+2]==1)
{
ans=ans-m;
}
else
{
ans=ans+m;
}
j+=3;
}
return ans;
}
double question1(int max,int min,int numam)
{
int a[100],i=2,j=0,num=0;
double b[100];
string str="+-";
num=randnum2(i,numam);
i=0;
while(i<=num*3) // 初始化数组
{
a[i]=randnum2(min,max);
b[i]=a[i];
i++;
}
while(j<=num*3)
{
a[j]%=2;//运算符
a[j+1]%=2;//括号
if(a[j+1]==1)
{
a[j+4]=-1;
}
j+=3;
}

int t=0;
i=0;
j=1;
while(j<=num*3) //输出式子
{
if(a[j]==1&&j<num*3-3&&a[j+2]!=2&&a[j+2]!=3)
cout<<"(";
cout<<a[j+1];
if(a[j-3]==1&&j>3&&a[j-1]!=2&&a[j-1]!=3)
cout<<")";
if(j<(num*3-3))
cout<<str[a[j+2]];
j+=3;
}

j=1;
while(j<=num*3-3) //计算括号
{
if(a[j]==1&&j<num*3-3&&a[j+2]!=2&&a[j+2]!=3)
{
b[j+1]=answer(a[j+2],b[j+1],b[j+4]);
a[j+1]=b[j+1];
for(int i=j+2;i<num*3-3;i++)
{
a[i]=a[i+3];
b[i]=b[i+3];
}
num-=1;
}
j+=3;
}
j=1;
while(j<=num*3-3) //计算乘除
{
if(a[j+2]==2||a[j+2]==3)
{

b[j+1]= answer(a[j+2],b[j+1],b[j+4]);
for(int i=j+2;i<num*3-3;i++)
{
a[i]=a[i+3];
b[i]=b[i+3];
}
num-=1;
j-=3;
}
j+=3;
}
j=1;
double ans=0,m=0;
while(j<=num*3)
{
m=b[j+1];
if(a[j+2]==1)
{
ans=ans-m;
}
else
{
ans=ans+m;
}
j+=3;
}
return ans;
}
int main()
{
int quam=5,max=9, min=3,numam=5;
int fly=1;
//输入生成题目的条件
cout<<"一共出几道题:";
cin>>quam;
cout<<"最多几个数(10个数之间):";
cin>>numam;
cout<<"数值范围: 最大值:";
cin>>max;
cout<<"最小值:";
cin>>min;
cout<<"有无乘除?有请按1,无请按0(默认有乘除) ";
cin>>fly;
//结束输入生成题目的条件
int i=1;
double ansin;
while(quam--) //循环一次生成一道题
{
cout<<"No."<<i++<<": "; //题目计数器
if(fly==1)
double ans=question( max, min,numam);
else
double ans=question1( max, min,numam);
cout<<"=";
}
return 0;
}

4、项目github地址

项目地址:https://github.com/xushao1519/my-travel-plans

项目成员:虞旭,于世林

博客地址:https://www.cnblogs.com/xuba/         https://www.cnblogs.com/yushilin/
5、实验总结

本次实验名为结对编程,结对就是成双成对,需要两个人完成,因为疫情原因,我们组队做实验只能通过视频远程操控,前期问题特别多,因为两个人的个人和其他因素影响,造成两个人进行实验的难度很大,但是通过不断的查阅资料,进行沟通,然后在相互合作,终于慢慢地走上正轨,最后在我们两个的通力合作下成功完成实验,这个实验对我受益匪浅,不仅使我的专业知识有了很大的提升,同时也让我的团队协作能力有了进一步的提升。

原文地址:https://www.cnblogs.com/yushilin/p/12628851.html