没有学过Delphi和Pascal,求职过程中,招聘公司发来一道程序题,问下面的程序有什么逻辑问题!
请大家帮忙看一下!
多谢!Procedure DiscoverSomethingInteresting(Input : Array Of Integer; Out x, y, z : Integer);
Var
    i, j, k : Integer;
    w       : Integer;
Begin
    z := -MaxInt;
    For i := 1 To Length(Input) Do
    Begin
        For j := 0 To Length(Input) - i Do
        Begin
            w := 0;
            For k := 0 To i - 1 Do
            Begin
                w := w + Input[j+k];
            End;
            If w > z Then
            Begin
                z       := w;
                x       := j;
                y       := j+i-1;
            End;
        End;
    End;
End;Notes : The sample above is written in the Delphi language. The array is zero based and the Length function returns the number of elements in the array.

解决方案 »

  1.   


            For k := 0 To i - 1 Do 
                Begin 
                    w := w + Input[j+k]; 这里有可能会越界
      

  2.   

    您是说w的值可能超出Integer的范围?那是不是要把w和Z都定义为longint类型的变量?
    我觉得还有个问题就是:
    If w > z Then 
                Begin 
                    z      := w; 
                    x      := j; 
                    y      := j+i-1; 
                End; 
    这里w可能=z,因为只要数组中的数要是={-32767,-1,-3,....},这时W=Z,所以x,y,z的值都不会被更新.再下次循环后w=-32767-1 出现越界.听说PASCAL和C这里有区别, 不知道这时W=??