• 计算与软件工程 作业3


    作业要求 链接
    作业要求 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454
    课程目标 发现代码问题
    本次作业在代码改善方面帮助我实现目标 运行单元测试,进行改善调教
    参考文献 1. https://www.cnblogs.com/xinz/p/3852177.html 2. https://blog.csdn.net/weixin_41768753/article/details/86562247
    作业正文 https:////www.cnblogs.com/TG1999/p/12447971.html

    编程作业

    要求:
    数组中最大子数组的和。

    用类/函数来实现
    需求:希望返回 3 种信息
    最大子数组的和
    最大子数组开始的下标
    最大子数组结束的下标
    程序运行结果如下:

    单元测试,出现问题非常多,用vs2019,添加引用 对com组件的调用返回了错误的HRESULT E_FALL,尝试了一些教程,又出现'gacutil' 不是内部或外部命令,也不是可运行的程序这个问题,无法解决。
    干脆使用vs2012来测试,重新创建,在测试cpp里出现n多问题。非常的头疼,最终解决方法是把源程序给拆开,一定要有头文件,不能想着放cpp里顺带写了就行。

    修改包含目录,改为你写的程序所在文件夹,不要忘记引用程序文件。


    测试里加入代码,写上头文件,运行,得到如下结果。

    参考链接为链接2.
    码云地址:https://gitee.com/TG1999/four_arithmetic_operations/tree/master/shuzu
    代码附录在最下方。

    博客作业

    在链接1中进行了初步自我估测,发现自己欠缺良多,虽然学习过多种语言和软件,但是离心目中的状态还差的远,还需继续努力。

    预习

    我们讲的“代码规范”可以分成两个部分。

    (1)代码风格规范。主要是文字上的规定,看似表面文章,实际上非常重要。

    (2)代码设计规范。牵涉到程序设计、模块之间的关系、设计模式等方方面面,这里有不少与具体程序设计语言息息相关的内容(如C/C++/Java/C#),但是也有通用的原则,这里主要讨论通用的原则。

    复审的目的在于:

    (1)找出代码的错误。如:

    a. 编码错误,比如一些能碰巧骗过编译器的错误。

    b. 不符合项目组的代码规范的地方。

    (2)发现逻辑错误,程序可以编译通过,但是代码的逻辑是错的。

    (3)发现算法错误,比如使用的算法不够优化。

    (4)发现潜在的错误和回归性错误——当前的修改导致以前修复的缺陷又重新出现。

    (5)发现可能改进的地方。

    (6)教育(互相教育)开发人员,传授经验,让更多的成员熟悉项目各部分的代码,同时熟悉和应用领域相关的实际知识。

    结对编程,互相进步

    要注意意见反馈,讨论方式

    #include <cstdio>
    #include<cstdlib>
    #include<iostream>
    
    #define MIN -99999
    using namespace std;
    typedef struct positionASum {//创建该结构体保存数组中的最低位,最高位,以及最大和 
    	int low;
    	int high;
    	int sum;
    }PositionASum;
    
    PositionASum Max_Crossing_Arr(int a[], int low, int high, int mid) {//求跨越中点的最大子数组 
    	int left_sum = MIN;//左半边的最大和 
    	int sum = 0;//下标i所到之处的和 
    	int i;
    	int max_left = 0;//左半边的数组的某一个值的最大值 
    	for (i = mid; i >= low; i--) {
    		sum += a[i];
    		if (sum > left_sum) {//若和值大于最大和则更新之 
    			left_sum = sum;
    			max_left = i;//记录最大值下标 
    		}
    	}
    	//右半边类似 
    	int right_sum = MIN;
    	sum = 0;
    	int j;
    	int max_right = 0;
    	for (j = mid + 1; j <= high; j++) {
    		sum += a[j];
    		if (sum > right_sum) {
    			right_sum = sum;
    			max_right = j;
    		}
    	}
    	PositionASum ps;//返回跨越中点的最大子数组的最低位,最高位以及最大和 
    	ps.low = max_left;
    	ps.high = max_right;
    	ps.sum = left_sum + right_sum;
    
    	return ps;
    }
    
    PositionASum Max_Arr(int a[], int low, int high) { //求一个子数组的最大子数组(子数组和最大) 
    
    	PositionASum left;
    	PositionASum right;
    	PositionASum mid;
    	int midd;
    	if (high == low) {//当数组仅有一个元素 
    		PositionASum ps;
    		ps.low = low;
    		ps.high = high;
    		ps.sum = a[low];
    		return ps;
    	}
    	else {//递归,分治合并 
    		midd = (low + high) / 2;
    		//此处执行一次left
    		left = Max_Arr(a, low, midd);//递归调用自身找到左半边的最大子数组 
    
    		//此处执行一次right
    		right = Max_Arr(a, midd + 1, high);//递归调用找到右半边最大子数组 
    
    		//此处执行一次mid
    		mid = Max_Crossing_Arr(a, low, high, midd);//找到跨越中点的最大子数组 
    
    	}
    	if (left.sum >= right.sum && left.sum >= mid.sum) {//左半边子数组最大则返回左半边子数组 
    		return left;
    	}
    	else if (right.sum >= left.sum && right.sum >= mid.sum) {//返回右半边子数组 
    		return right;
    	}
    	else {//返回跨越中点子数组 
    		return mid;
    	}
    }
    
    int main()
    {
    	int A[10] = { -1,4,0,1,-1,3,-2,8,-3,-5 };
    	PositionASum result = Max_Arr(A, 0, 9);
    	cout << "最大子数组的最低位为A[" << result.low << "]="<< A[result.low]<<" 最高位为A["<< result.high<<"]="<< A[result.high] << "  最大数组之和为:" << result.sum << endl;//输出结果
    	return 0;
    }
    
  • 相关阅读:
    Flutter采坑之路 Run Configuration error:broken configuration due to unavailable
    Android24以上拍照代码
    android Studio 出现:Unable to resolve dependency for ':app@debug/compileClasspath'
    Android Studio 使用本地gradle配置详解
    windows server2008 IIS搭建网站简易教程(阿里云)
    FileProvider 添加二级目录
    Android中如何解决editText一进入activity就自动获取焦点的bug
    关于AndroidStudio 经常弹出TortoiseSVN 同步的解决办法
    Awesome-VR
    Magento2 常见错误 ----- 定期更新
  • 原文地址:https://www.cnblogs.com/TG1999/p/12447971.html
Copyright © 2020-2023  润新知