計算機與軟件工程作業三


計算機與軟件工程作業三

作業要求 第三周作業
課程要求 按照作業要求完成作業並進行自我總結
參考文獻 參考文獻
作業正文 [作業](https://i-beta.cnblogs.com/posts/edit)

正文

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
using namespace std;

int getMax(int a,int b){
return a>b?a:b;
}

int maxSum(int arr[],int n){
int sum=arr[0];
int max=arr[0];
int newstart=0;
int start=0;
int end=0;
for(int i=1;i<n;i++){
sum=getMax(sum+arr[i],arr[i]);
if(arr[i]>(sum+arr[i]))
newstart=i;
if(sum>max){
max=sum;
start=newstart;
end=i;
}
}
return max;
}

int start(int arr[],int n){
int sum=arr[0];
int max=arr[0];
int newstart=0;
int start=0;
int end=0;
for(int i=1;i<n;i++){
sum=getMax(sum+arr[i],arr[i]);
if(arr[i]>sum+arr[i])
newstart=i;
if(sum>max)
max=sum;
start=newstart;
end=i;
}
return start;
}

int end(int arr[],int n){
int sum=arr[0];
int max=arr[0];
int newstart=0;
int start=0;
int end=0;
for(int i=1;i<n;i++){
sum=getMax(sum+arr[i],arr[i]);
if(arr[i]>(sum+arr[i]))
newstart=i;
if(sum>max)
max=sum;
start=newstart;
end=i;
}
return end;
}

int main(){
int arr[]={-32, -10, 33, -23, 32, -12, 41, -12, 1, 3, 5, -98, 70, -21, 10, -9, 61};
int length=17;
cout<<"數組最大子數組和:"<<maxSum(arr,length)<<endl;
cout<<"數組最大子數組起始下標:"<<start(arr,length)<<endl;
cout<<"數組最大子數組結束下標:"<<end(arr,length)<<endl;
return 0;
}

碼雲鏈接
https://gitee.com/lazycat777/Test/commit/6d7595ebea26b086adb38006f4f5e861c5eb5882


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM