zoukankan      html  css  js  c++  java
  • 计算软件工程 作业三

    这个作业要求在哪里 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454
    我在这个课程的目标是 熟悉软件开发过程的步骤;实现简单的软件开发,对软件进行测试、维护和管理。
    此作业在哪个具体方面帮我实现目标 本次作业是运用c++编写一个简单的求数组最大值,并进行测试。软件工程与单纯编写代码是不同的。
    其他参考文献 参见 《构建之法》第二章单元测试的内容 以及 https://www.cnblogs.com/xinz/archive/2011/11/20/2255830.html https://www.cnblogs.com/SivilTaram/p/software_pretraining_cpp.html
    作业正文 码云

    单元测试

    题目:数组中最大子数组的和。

    具体要求

    用类/函数来实现
    需求:希望返回 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 m = false;
    int MaxSum(int *a, int len, int start, int end){
    	 if (a == NULL || len <= 0){
    		 m = true;
    		  return 0;
    	 }
    	 m = 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 Start(int *a, int len, int start, int end){
    	if (a == NULL || len <= 0){
    		m = true;
    		return 0;
    	}  
    	m = 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 End(int *a, int len, int start, int end){
    	if (a == NULL || len <= 0){
    		m = true;
    		return 0;
    	}  
    	m = 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 maxsum,start,end;
    	int a[]={-32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61};
        maxsum=MaxSum(a,17,0,16);
        cout<<"最大的子数组和为:"<<maxsum<<endl;
        start=Start(a,17,0,16);
        cout<<"最大的子数组开始下标为:"<<start<<endl;
        end=End(a,17,0,16);
        cout<<"最大的子数组结束下标为:"<<end<<endl;
        system("pause");
        return 0;
    }
    

    单元测试:对软件设计的最小单元进行正确性检测的测试,将可能存在的错误在最小范围内发现解决。
    单元测试目的:发现模块内部逻辑,语法,算法,功能等错误。

    单元测试代码如下:

    #include "1.1.h"
    #include "pch.h"
    #include "CppUnitTest.h"
    
    
    using namespace Microsoft::VisualStudio::CppUnitTestFramework;
    
    namespace UnitTest1
    {
    	TEST_CLASS(UnitTest1)
    	{
    	public:
    		
    		TEST_METHOD(TestMethod1)
    		{
    			// TODO: 在此输入测试代码
    			int a[] = { -32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61 };
    			Assert::AreEqual(111, MaxSum(a, 17, 0, 16));
    		}
    		TEST_METHOD(TestMethod2)
    		{
    			// TODO: 在此输入测试代码
    			int a[] = { -32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61 };
    			Assert::AreEqual(12, Start(a, 17, 0, 16));
    		}
    		TEST_METHOD(TestMethod3)
    		{
    			// TODO: 在此输入测试代码
    			int a[] = { -32,-10,33,-23,32,-12,41,-12,1,3,5,-98,70,-21,10,-9,61 };
    			Assert::AreEqual(16, End(a, 17, 0, 16));
    		}
    	};
    }
    


    博客作业

    前两年在老师的带领下学习了C++,Java,asp.net(c#),MATLAB,MS Office,数据库mysql。大一学习了基本的MS Office的知识,后来在考计算机二级时又再次加深额巩固基本的Excel和Word等的操作以及一些基础的计算机方面的综合知识。学习的第一门语言是C++,能够编写一些小型的简单程序,大二的时候基于C++学习了数据结构,代码的结构和认知仅有加深。第二门语言的学习是Java,了解到Java的一些简单语法,定义等,大致了解到其与C++在内存分配、函数、运行方式等方面不同。数值分析、数学建模等课程使用到MATLAB,用于计算数学,。关于数据库能构建表格并且简单与asp.net前端操作相结合。
    目前所掌握的语言中,掌握的相对熟悉一点的是C++,目前最大的编写行数是400行,其他的编写熟练度不是很高,代码相对简单。目前只是能编写一些C++的代码,但离一个完整的软件等差距较大,所需了解、掌握、操作练习的还有很多,如果以现在的能力如果加入计算机行业,将会被饿死。接下来一年将在老师的带领下,继续加强C++的大规模编写并与团队合作,以及本专业的特色:MATLAB的学习。

    预习

    两人合作:
    . 代码规范

     . 代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。
     .代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面,这里有不少与具体程序设计语言息息相关的内容(如C/C++/Java/C#),但是也有通用的原则,这里主要讨论通用的原则。
    

    . 代码审复

    名 称 形 式 目 的
    自我复审 自己 vs. 自己 用同伴复审的标准来要求自己。不一定最有效,因为开发者对自己总是过于自信。如果能持之以恒,则对个人有很大好处
    同伴复审 复审者 vs. 开发者 简便易行
    团队复审 团队 vs. 开发者 有比较严格的规定和流程,用于关键的代码,以及复审后不再更新的代码。
  • 相关阅读:
    viewport的故事(一)
    Laravel项目部署上线(阿里云 Ubuntu 16.04)
    Javascript数组方法总结
    html中编写js的方式
    js验证表单并提交
    html+css+js实现复选框全选与反选
    Cookie记住账号密码
    加密口令
    ASP.NET 在GridView中自动添加序号列
    ASP.NET使用递归遍历TreeView树
  • 原文地址:https://www.cnblogs.com/xinxiyujisuan/p/12461586.html
Copyright © 2011-2022 走看看