博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
作业要求 20180925-6 四则运算试题生成
阅读量:4607 次
发布时间:2019-06-09

本文共 5411 字,大约阅读时间需要 18 分钟。

作业要求:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2148

作业地址:https://git.coding.net/KamiForever/FourOperations.git

具体代码为其中的f4.cpp文件

此次作业完成是以“结对编程”的形式完成,我的伙伴是潘世维。

要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,博客是分别完成的)。 (1) 给出每个功能的重点、难点、编程收获。

 功能1. 四则运算。重点难点:先乘除后加减的实现

void getans() {    for(int i = 1; i < 4; i++) {        if(op[i] == '*') {            fra[i] = mul(fra[i - 1], fra[i]);            fra[i - 1].d = 1;            fra[i - 1].m = 0;            op[i] = op[i - 1];        }        if(op[i] == '/') {            fra[i] = div(fra[i - 1], fra[i]);            fra[i - 1].d = 1;            fra[i - 1].m = 0;            op[i] = op[i - 1];        }    }    for(int i = 1; i < 4; i++) {        if(op[i] == '+') fra[i] = add(fra[i - 1], fra[i]);        else fra[i] = sub(fra[i - 1], fra[i]);    }    getgcd(&fra[3].m, &fra[3].d);    return;}
View Code

功能2. 支持括号 重点难点:碰到括号,递归运算括号里面的

Fraction getans(int s, int e, int k) {    Fraction res, temp;    memsetfra(&res);    if(k > maxk) maxk = k;    for(int i = s; i <= e; i++) {        if(op[i + 1] == '*' || op[i + 1] == '/') {            temp = fra[i];            int t = i;            for(int j = i + 1; j <= e; j++) {                if(fra[j].l != 0) {                    fra[j].l--;                    k = maxk;                    temp = operation(temp, getans(j, bra[k].r, k + 1), op[j]);                    j = bra[k].r;                    fra[j].r--;                }                else temp = operation(temp, fra[j], op[j]);                if(op[j + 1] == '+' || op[j + 1] == '-' || j == e) {                    i = j;                    break;                }            }            if(t == s) res = temp;            else res = operation(res, temp, op[t]);        }        else {            if(fra[i].l != 0) {                fra[i].l--;                k = maxk;                temp = getans(i, bra[k].r, k + 1);                int t = i;                i = bra[k].r;                if(op[i + 1] == '*' || op[i + 1] == '/') {                    for(int j = i + 1; j <= e; j++) {                        if(fra[j].l != 0) {                            fra[j].l--;                            k = maxk;                            temp = operation(temp, getans(j, bra[k].r, k + 1), op[j]);                            j = bra[k].r;                            fra[j].r--;                        }                        else temp = operation(temp, fra[j], op[j]);                        if(op[j + 1] == '+' || op[j + 1] == '-' || j == e) {                            i = j;                            break;                        }                    }                }                if(t != s) res = operation(res, temp, op[t]);                else res = temp;            }            else {                if(i != s) res = operation(res, fra[i], op[i]);                else res = fra[i];            }        }    }    return res;}
View Code

功能3. 限定题目数量,"精美"打印输出,避免重复  重点难点:排除相同运算式

struct Formula {  //用于记录运算式    Fraction f[maxn];    int op[maxn];    Fraction ans;}For[1000], pre; bool checkFor(int t) {  //t为当前一共有t组计算式    for(int i = 0; i < t; i++) {        if(pre.ans == For[i].ans) {  //在结果相同的情况下            int tcnt = 0;            for(int j = 0; j < maxn; j++) {  //判定所用运算符是否一样                if(pre.op[j] == For[i].op[j]) tcnt++;            }            if(tcnt != maxn) continue;            tcnt = 0;            for(int j = 0; j < maxn; j++) {  //对每个数进行判定                for(int p = 0; p < maxn; p++) {                    if(pre.f[j] == For[i].f[p]) {                        tcnt++;                        break;                    }                }            }            if(tcnt == maxn) return false;        }    }    for(int i = 0; i < maxn; i++) {        For[t].op[i] = pre.op[i];        For[t].f[i] = pre.f[i];    }    For[t].ans = pre.ans;    return true;}
View Code

功能4. 支持分数出题和运算 重点难点:由于一开始就用分数形式(数组)存储数据,这里的难点是控制输入

int input() {    gets(myans);    m = 0;    d = 0;    int t = 0;    int flag = 0;    for(int i = 0; i < strlen(myans); i++) {        if(myans[i] >= 48 && myans[i] <= 57) {            if(flag == 3) {                t = m;                m = 0;                flag = 0;            }            if(flag == 0) {                m *= 10;                m += myans[i] - 48;            }            else if(flag != 3) {                d *= 10;                d += myans[i] - 48;                if(flag == 2) t++;            }        }        else if(myans[i] == '/') flag = 1;        else if(myans[i] == '.') flag = 2;        else if(myans[i] == '-') continue;        else flag = 3;    }    if(flag == 0) d = 1;    if(flag == 1) m = t * d + m;    if(flag == 2) {        md = (double)d;        while(t--) md /= 10;        md += m;    }    if(myans[0] == '-') {        m = -m;        md = -md;    }    if(flag != 2) getgcd(&m, &d);    if(d < 0) {        d = -d;        m = -m;    }    return flag;}
View Code

编程收获:逐步的发现问题、解决问题。两个人解决问题更快。

(2)给出结对编程的体会,以及

 体会:我的水平太差了,在各个方面都需要向我的队友学习,但我还是努力跟上队友的思路,并给出自己的看法。

(3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。

1、虽然我应该负责审查代码,但是由于水平太差并没有很好的发挥作用。我试图提出自己的看法,但很多证明是错误的。

2、在整个编码过程中,好的代码习惯令人赏心悦目。

3、对于括号的处理,我们本来希望用栈的,他想了想说用递归就行。后来我们经过讨论使用了递归的方式。

4、在复审过程中,我发挥了作用,尝试了各种输入。

5、我们的结对编程整体来看十分融洽,我喜欢这样的方式,但我迫切的需要提高自己。

 

 

要求2 给出照片1张,包括结对的2位同学、工作地点、计算机,可选项包括其他能表达结对编程工作经历的物品或场景。 (5分)

 

 

要求3 使用coding.net做版本控制。checkin 前要求清理 临时文件、可执行程序,通常执行 build-clean可以达到效果。(25分)

转载于:https://www.cnblogs.com/zhouha0/p/9756304.html

你可能感兴趣的文章
HTTP 错误 500.21 - Internal Server Error 解决方案
查看>>
Bucks sign Sanders to $44 million extension
查看>>
【PHP】Windows下配置用mail()发送邮件
查看>>
Nhibernate和EF的区别
查看>>
基于java spring框架开发部标1078视频监控平台精华文章索引
查看>>
人类简史
查看>>
java 设计模式学习
查看>>
【Python使用】使用pip安装卸载Python包(含离线安装Python包)未完成???
查看>>
一语道破项目管理知识体系五大过程组
查看>>
C# 备份、还原、拷贝远程文件夹
查看>>
在windows环境下运行compass文件出现的错误提示解决方案
查看>>
CSS常用样式--font
查看>>
恩如氏--蜗牛精华补水蚕丝面膜
查看>>
大工具-收藏
查看>>
codevs3027 线段覆盖 2
查看>>
markdown
查看>>
【leetcode】107-Binary Tree Level Order Traversal II
查看>>
Jquert data方法获取不到数据,显示为undefined。
查看>>
ssm项目中 数据库和资源的备份
查看>>
HDU5950【矩阵快速幂】
查看>>