zoukankan      html  css  js  c++  java
  • 2017秋软工

    作业要求:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/997

    结对同学:阚博文http://www.cnblogs.com/zbwd666/

    要求1 参考《构建之法》第4章两人合作,结对编程上述功能,要求每人发布随笔1篇 (代码是共同完成的,博客是分别完成的)。 (1) 给出每个功能的重点、难点、编程收获。(2)给出结对编程的体会,以及 (3) 至少5项在编码、争论、复审等活动中花费时间较长,给你较大收获的事件。 (10分)

    (1)功能1和功能2 

    这两个功能就要求随机产生20道四则运算题(包含括号),用户输入一个答案与标准答案进行比对并判断对错,最后统计有多少四则运算题被正确解答。

    因为功能1 和 功能2 之间只有是否加入括号的区别,而是否加入括号是随机进行决定的,所以只要实现功能2代码,功能1就可以完美解决。

    我在以前的数据结构学习中,了解并学习过算术表达式的计算,加上老师所给的提示,所以和阚博文同学商量之后直接使用堆栈实现中缀表达式转化为后缀表达式并进行运算。具体实现参考严蔚敏主编的《数据结构》以及之前做过的后缀表达式ACM试题,由阚博文同学确定功能需求,由我进行代码编写。

    整个功能实现重点在于掌握逆波兰表达式的转化,难点在于随机数生成和转化以及括号的处理。

    功能截图:

    核心代码如下:

    1)表达式求值

    double EvaluateExpression(char* MyExpression)
    {
        SC *OPTR = NULL;
        SF *OPND = NULL;
        char TempData[20];
        double Data, a, b;
        char theta, *c, Dr[] = { '#', '' };
        OPTR = Push(OPTR, '#');
        c = strcat(MyExpression, Dr);
        strcpy(TempData, "");
        while (*c != '#' || OPTR->c != '#')
        {
            if (!In(*c, OPSET))
            {
                Dr[0] = *c;
                strcat(TempData, Dr);
                c++;
                if (In(*c, OPSET))
                {
                    Data = atof(TempData);
                    OPND = Push(OPND, Data);
                    strcpy(TempData, "");
                }
            }
            else
            {
                switch (precede(OPTR->c, *c))
                {
                case '<':
                    OPTR = Push(OPTR, *c);
                    c++;
                    break;
                case '=':
                    OPTR = Pop(OPTR);
                    c++;
                    break;
                case '>':
                    theta = OPTR->c;
                    OPTR = Pop(OPTR);
                    b = OPND->f;
                    OPND = Pop(OPND);
                    a = OPND->f;
                    OPND = Pop(OPND);
                    OPND = Push(OPND, Operate(a, theta, b));
                    break;
                }
            }
        }
        return OPND->f;
    }

    2)随机数生成以及转化为String以便进行堆栈操作

    string IntToString(int number)
    {
        char str[200];
        itoa(number, str, 10);
        string str_ = str;
        return str_;
    }
    
    string NewNum()
    {
        int num, num1, num2, fs;
        string str_num, StrNum, StrNum2;
        num = random() % 50 + 1;
        str_num = IntToString(num);
    
        return str_num;
    }

    (2)功能3

    可以自定义一个数量进行输入,将输入数量的四则运算题以txt文本形式进行输出。

    我们将这部分功能与功能1 2进行了分割,用户可以根据需求选择使用哪个功能,当选择功能3时,就可以进行自定义数目的题目输出。

    核心代码与功能1 2相同,主要进行了输出格式控制以及添加了输出到文件的语句,达到了输出到txt文件中时左侧为四则运算题,右侧为标准答案。

    功能截图:

    通过这次结对编程得到的收获是加强了团队协作能力以及沟通能力,因为以前做竞赛的时候一直都是团队工作所以早就比较适应了这个模式。

    (2)结对编程的体会

    通过结对编程可以将编写的思路扩大化,有时候可能我忽略掉的什么小细节,或者陷入了什么思维怪圈,结对的小伙伴可以从他的角度出发给予我一些建议。能够集思广益才是结对编程最大的优势吧。

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

    1)使用什么编程语言。我一直使用C/C++编程,而我的小伙伴使用Python编程,最后商议由我主要进行编写。

    2)编程工具的选择。小伙伴要求使用VS进行编程,我要求使用codeblocks,最后商议使用codeblocks。

    3)思路不同。由于小伙伴第一次进行合作结对编程,所以缺乏一定的合作意识,在编写过程中产生了一定分歧,经过较长时间商议才达到了和解。

    4)代码规范问题。小伙伴代码风格放荡不羁,由于我之前一直进行的是合作编程,所以小伙伴按照我的要求制定了代码规范。

    5)逆波兰表达式转化问题。我建议使用之前比赛中用过的逆波兰表达式转化模板,小伙伴建议使用《数据结构》教材中的算法进行改写,最后决定选择根据严蔚敏编写《数据结构》进行改写。

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

    结对同学:阚博文

    工作地点:宿舍

    计算机:编写 MacBook Pro   ,调试 Dell Inspiron 17R

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

    coding:https://git.coding.net/137911934/ElementaryArithmetic.git

  • 相关阅读:
    查看Linux内核版本命令
    身份证测试用
    aaa
    aaaaaaaaaaaaaaa
    https
    httpclient调用https
    共阴极数码管编码
    时间单位换算
    Java 中System里getProperty(something)
    VM arguments
  • 原文地址:https://www.cnblogs.com/wangl009/p/7650919.html
Copyright © 2011-2022 走看看