结对开发之二维数组

一、思想过程

  结对人员:韩雪东,高扬

  本次题目是在原来一位数组的基础上加以扩展到二维数组,求二维子数组的最大和。刚开始难免思维比较混乱,但在与雪东在课上交流后还是有了一点思路。毕竟是扩展,我们认为当然离不开一位数组,就想办法利用上次编译的程序,通过比较一维数组的最大值进而得到二维数组的最大值。

二、源代码

// erweishuzuqiuzuida.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "fstream.h"
#include "iostream.h"
#include "stdio.h"

#define MAXSIZE 50


void read(int array[][MAXSIZE],int &len1,int &len2)//读取文件信息,并写入数组
{
    ifstream infile("array.txt");
    if(!infile)
        cout<<"读取失败!"<<endl;
    else
    {
        infile>>len1>>len2;
        for(int i=0;i<len1;i++)
        {
            for(int j=0;j<len2;j++)
            {
                infile>>array[i][j];
            }
        }
    }
}
void display(int array[][MAXSIZE],int len1,int len2,int size1,int size2)//显示数组信息
{
    for(int i=len1;i<=size1;i++)
    {
        for(int j=len2;j<=size2;j++)
        {
            cout<<array[i][j]<<"\t";
        }
        cout<<endl;
    }
}
int * shuchu(int m[],int szcdx,int xhy)//m[]表示要测试的数组,szchx表示数组长度,xhy表示循环条件
{
    int t,p;
    int max,sum;
    //缓存数组赋值
    int c[10000];
    int v[10000];
    int o=2*szcdx;
    int * temp= new int[o];

    for(t=szcdx-xhy-1;t<szcdx;t++)
    {
        c[t-szcdx+xhy+1]=m[t];
    }
    //循环
    for(t=xhy;t>=0;t--)
    {
        sum=0;
        for(p=0;p<=t;p++)
        {
            sum=sum+c[p];
        }
        v[t]=sum;
    }
    //循环输出最大值
    max=v[0];
    for(t=0;t<xhy+1;t++)
    {
        if(max<=v[t])
        {
            max=v[t];
        }
        //printf("%d  ",v[t]);
        temp[t]=v[t];
    }
    return temp;
}
int maxs(int s[],int length)//输出最大值
{
    int d=s[0];
    for(int f=0;f<length;f++)
    {
        if(d<=s[f])
        {
            d=s[f];
        }
    }
    return d;    
}
int main(int argc, char* argv[])
{
    int len1,len2;                       //len1是行数,len2是列数
    int x[3];
    int y[3];
    int *k;
    int *l;
    int array[MAXSIZE][MAXSIZE];
    read(array,len1,len2);
    cout<<"矩阵:"<<endl;
    display(array,0,0,len1-1,len2-1);



    for(int i=0;i<3;i++)
    {
        x[i]=array[0][i];

    }
    int e=3;
    int w[6];
    int u[6];
    int q=0;
    printf("数组第一行子数组的和:");
    for(i=2;i>=0;i--)
    {
        
        k=shuchu(x,3,i);
        for(int r=0;r<e;r++)
        {
            
            w[q]=k[r];
            printf("%d  ",w[q]);
            q++;
        }
        e--;    
    }
    for(int j=0;j<3;j++)
    {
        y[j]=array[1][j];
    }
    printf("\n");
    e=3;
    q=0;
    printf("数组第二行子数组的和:");
    for(i=2;i>=0;i--)
    {
        
        l=shuchu(y,3,i);
        for(int r=0;r<e;r++)
        {
            
            u[q]=l[r];
            printf("%d  ",u[q]);
            q++;
        }
        e--;    
    }


    printf("\n");
    int h[6];
    printf("数组包含两行的子数组的和:");
    for(int m=0;m<6;m++)
    {
        h[m]=w[m]+u[m];
        printf("%d  ",h[m]);
    }
    

    int k1=maxs(w,6);
    int k2=maxs(u,6);
    int k3=maxs(h,6);

    int maxx=k1;
    if(maxx<=k2)
    {
        maxx=k2;
    }
    if(maxx<=k3)
    {
        maxx=k3;
    }
    printf("\n最大和%d\n",maxx);
    return 0;
}

三、测试结果

四、心得体会

  题目明显比上一次要复杂一点,在讨论的过程中遇到我们两个都不懂的问题,难免会感觉尴尬。在一个问题很长时间内得不到解决的时候,难免心里会浮躁,在这个时候如果是一个人的话,我也许会选择放弃,但当两个人在编程的时候,放弃是很难说出口的,所以虽然花了不少时间,我们还是把想要的结果表现了出来,即使我们的方法不是很完善,但我们很大程度上利用了第一次结对的成果,这不正像在《梦断代码》中看到的“好程序员懂得写什么,而卓越的程序员知道改写(并复用)什么。”,虽然我们复用的不大好,但我们尝试了。

附图:

posted @ 2015-03-24 22:10  月之空  阅读(202)  评论(1编辑  收藏  举报