结对作业2
题目要求
我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
能够自动生成四则运算练习题
可以定制题目数量
用户可以选择运算符
用户设置最大数(如十以内、百以内等)
用户选择是否有括号、是否有小数
用户选择输出方式(如输出到文件、打印机等)
最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
class Subject
{
public:
Subject(int num,int m,int n,int b[4],int k,int x) //
{
memcpy(a,b,4*sizeof(int));
subject_num = num;
max_num = m;
sign_num = n;
brackets = k;
decimal = x;
}
string sign() //随机选择运算符
{
while(1)
{
int i=rand()%4;
if(a[i])
{
return Map[i];
}
}
}
string get_num() //随机产生数字
{
stringstream n;
if(decimal)
{
n<<rand()%(max_num*100)/double(100);
}
else
{
n<<rand()%max_num+1;
}
return n.str();
}
void output(char t[]) // 输出到文件
{
ofstream out(t);
if(!out) //
cout<<"error"<<endl;
stringstream s;
int i,j,flag=0,count=0;
for(i=0;i<subject_num;i++) //生成运算式
{
for(flag=0,count=0,j=0;j<sign_num;j++)
{
if(brackets&&rand()%4==0) //有括号&&将随机概率设为1/4
{
s<<"(";
flag=1; //左括号"("后有数字
count++; //左括号"("个数
}
s<<get_num();
if(count&&flag==0&&rand()%3==0) //已有左括号"("&&前面为符号加数字&&将随机概率设为1/3
{
s<<")";
count--;
}
else
flag=0;
s<<sign();
}
s<<get_num();
while(count!=0) //有未匹配左括号"("
{
s<<")";
count--;
}
out<<s.str()<<"=\n";
s.str("");
}
out.close();
cout<<t<<"文件已生成。"<<endl;
}
private:
int subject_num,max_num,sign_num,brackets,decimal; //题目数量,最大数,运算符数量 //括号,小数
int a[4]; //选择运算符
};
运行效果
小结
很遗憾没能做出界面来,最初的想法是用Python/PyQt5来做,结果崩掉了,临时改成用Python/wxpython做,嫌弃界面丑做一半放弃了,最后决定用C++/Qt来做,但是由于不够熟练还是没能在截至前做出来...最后的最后还是只做出来了个小黑框...还是粗糙版的..由于在界面上浪费了大量的时间,还有许多功能未完善(如删除无效括号,判断能否整除等),留坑等完善。
对驾驶员评价:在过程中起到了很好的领导督促作用,互相督促,避免了许多不必要的小错误,并且带动积极性,在遇到困难的时候相互鼓励,坚持沟通,保持良好的情绪,提出了许多新的想法与建议,在敲代码的过程中相互讨论,能够快速的发现与解决问题,节省了许多时间,从对方那里得到新的启发,学到了许多平时学不到的东西,得到了能力上的互补,在测试过程中能够发现问题并且提出新的思路,通过本次的作业,充分理解到了合作的重要性,也认识到了一些合作中的注意事项,有了这次的作业经验后,在以后的编程中会注意对时间的规划。