• 计算与软件工程 作业三


    作业要求 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454
    我在这个课程的目标是 能够写出一些简单的软件开发,完成单元测试
    此作业在哪个具体方面帮我实现目标 实现了代码
    其他参考文献
    作业正文

    正文:

    单元测试:

    数组中最大子数组的和。

    用类/函数来实现
    需求:希望返回 3 种信息
    最大子数组的和
    最大子数组开始的下标
    最大子数组结束的下标
    从文本文件中读输入的数据,熟悉文件操作, 文件有两种数据
    第一个数字:这次测试中有多少个数据, 数字后面是冒号。
    后续数字: 每个数据的值,用逗号隔开
    比如
    文件内容:
    17: -32, -10, 33, -23, 32, -12, 41, -12, 1, 3, 5, -98, 70, -21, 10, -9, 61
    输出
    sum = 71
    实现这个类 (MSA)
    可以用 C++, Java, C#,Python class 等
    类开始是空的,返回都是简单的数值,例如 0.
    测试包括测试文件读入与计算(测试过程通过程序新建一个文件,内容可以为上述数字,测试完后得删除文件)
    设计单元测试,运行单元测试

    #include<iostream>
     #include<cstdlib>
     using namespace std;
     bool g_InvalidInput = false;
     int getMaxSum(int *a, int len, int start, int end)
     {
     if (a == NULL || len <= 0)
     {
        g_InvalidInput = true;
        return 0;
     }  
     g_InvalidInput = false;
     start = 0;
     end = 0;
     if (1 == len)
        return a[0];
     int curSum = a[0];           //当前子数组和  
     int maxSum = curSum;         //子数组最大和 
     for (int i = 1; i < len; i++)
     {
        if (curSum > 0)
            curSum += a[i];
        else
           if (a[i] > curSum)    //确定子数组起始位置
           {
                start = i;
                curSum = a[i];    //即使数组全为负,也能得到最大值
            } 
       if (curSum > maxSum)
       {
            maxSum = curSum;
            end = i;
       }
     }
     return maxSum;
    }
    int getstart(int *a, int len, int start, int end)
    {
    if (a == NULL || len <= 0)
    {
        g_InvalidInput = true;
        return 0;
    }  
    g_InvalidInput = false;
    start = 0;
    end = 0;
    if (1 == len)
        return a[0];
    int curSum = a[0];           //当前子数组和  
    int maxSum = curSum;         //子数组最大和 
    for (int i = 1; i < len; i++)
    {
        if (curSum > 0)
            curSum += a[i];
        else
            if (a[i] > curSum)    //确定子数组起始位置
            {
                start = i;
                curSum = a[i];    //即使数组全为负,也能得到最大值
            } 
        if (curSum > maxSum)
        {
            maxSum = curSum;
            end = i;
        }
        
    }
    return start;
    }
    int getend(int *a, int len, int start, int end)
    {
    if (a == NULL || len <= 0)
    {
        g_InvalidInput = true;
        return 0;
    }  
    g_InvalidInput = false;
    start = 0;
    end = 0;
    if (1 == len)
        return a[0];
    int curSum = a[0];           //当前子数组和  
    int maxSum = curSum;         //子数组最大和 
    for (int i = 1; i < len; i++)
    {
        if (curSum > 0)
            curSum += a[i];
        else
            if (a[i] > curSum)    //确定子数组起始位置
            {
                start = i;
                curSum = a[i];    //即使数组全为负,也能得到最大值
            } 
        if (curSum > maxSum)
        {
            maxSum = curSum;
            end = i;
        }
        
    }
    return end;
    }
    int main(){
    int smax,start,send;
    int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
    smax=getMaxSum(a,17,0,16);
    cout<<"最大的子数组和为:"<<smax<<endl;
    start=getstart(a,17,0,16);
    cout<<"最大的子数组开始下标为:"<<start<<endl;
    send=getend(a,17,0,16);
    cout<<"最大的子数组结束下标为:"<<send<<endl;
    system("pause");
    return 0;
     }
    

    运行图:

    单元测试

    #include "stdafx.h"
    #include "CppUnitTest.h"
    #include "array.cpp"
    using namespace Microsoft::VisualStudio::CppUnitTestFramework;
    namespace UnitTest1
    {       
        TEST_CLASS(UnitTest1)
        {
        public:
            
            TEST_METHOD(getmax_Test)
            {
                // TODO: 在此输入测试代码
                int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
                Assert::AreEqual(111,getmax(a,17));
                
            }
            TEST_METHOD(getstartIndex_Test)
            {
                // TODO: 在此输入测试代码
                int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
                Assert::AreEqual(12,getstartIndex(a,17));
                
            }
            TEST_METHOD(getendIndex_Test)
            {
                // TODO: 在此输入测试代码
                int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
                Assert::AreEqual(16,getendIndex(a,17));
                
            }
    
        };
    }
    

    二:博客作业

    大一开始接触计算机的学习并学习了MS office和c++语言,其中MS office主要是一个办公工具,学起来也比较简单,易操作。通过对c++语言的学习,我第一次知道了我们使用的手机软件都是通过一行行的代码实现的,虽然c++语言学起来相对较难,但是在学期结束后自己也已经可以编写一些简单的程序了。大二开始学习了Java语言和数据结构,Java语言和c++语言都是面向对象语言,都使用了面向对象的思想(封装、继承、多态),不过Java语言中没有指针的概念,不支持多重继承,但Java语言中引入了接口的概念,可以同时实现多个接口,在Java语言的学习中了解了如何做图形界面。通过对数据结构的学习,明白了什么是队列、栈、链表、树、图等,对指针进行了进一步理解。大三学习了数据库、操作系统、ASP.NET,学习了更为复杂的代码编写、数据库的连接以及网站的建立,学习了如何建立一个简单的聊天室网站,了解了什么是三层架构。这两年多虽然学习很多计算机的知识,但是自己并不能将它们很好的联系起来,复杂的代码并不能自己写出来。但是我未来准备从事教师行业,所以对计算机行业准备也就是了解一下,不准备深入了。

    三、预习 两人合作

    “代码规范”可以分成两个部分:
    (1)代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。
    (2)代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面,这里有不少与具体程序设计语言息息相关的内容(如C/C++/Java/C#),但是也有通用的原则,这里主要讨论通用的原则。
    代码复审分为:
    (1)自我复审(自己 vs. 自己)
    (2)同伴复审(复审者 vs. 开发者)
    (3)团队复审(团队 vs. 开发者)
    代码复审的目的:
    (1)找出代码的错误。
    (2)发现逻辑错误,程序可以编译通过,但是代码的逻辑是错的。
    (3)发现算法错误,比如使用的算法不够优化。
    (4)发现潜在的错误和回归性错误——当前的修改导致以前修复的缺陷又重新出现。
    (5)发现可能改进的地方。
    (6)教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。
    结对编程的优点:
    (1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
    (2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
    (3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
    (4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。

    四、gitee:https://gitee.com/jianfeng8322079/software_engineering/blob/master/work3.cpp

  • 相关阅读:
    ZCMU训练赛-H(模拟)
    ZCMU训练赛-B(dp/暴力)
    ZCMU训练赛-A(模拟)
    HDU 2045 LELE的RPG难题(递推)
    HDU 2044 一只小蜜蜂(递归)
    HDU 2050 折线分割平面(转)
    对递归的理解归纳(转)
    漫谈递归思想(转)
    2017中南大学暑期集训day1 : debug&STL-A
    探寻宝藏--河南省第六届大学生程序设计竞赛
  • 原文地址:https://www.cnblogs.com/jianfeng8322079/p/12461129.html
Copyright © 2020-2023  润新知