2016-06-08 48 views
1

我在这里做错了什么?它每次我给它5个号码因为某些原因最小数组函数?

var 
    I : integer; 
    Ligne : array[1..5] of integer; 

function MinArray(var A : array of integer) : integer; 
var I,min : integer; 
begin 
    min := A[1]; 
    for I := 1 to 5 do 
    if A[I] < min then 
     min := A[I] ; 
    writeln(min); 
end; 

begin 
    for I := 1 to 5 do 
    readln(Ligne[I]); 

    MinArray(Ligne); 
    sleep(50000); 
end. 

如果我把它关闭的功能,它工作得很好,这让我正确的答案但是当我尝试使用的功能,我可以返回0不能让它工作。

+2

请问您是否可以取消您的代码缩进以使其易于阅读? – lurker

+0

你真的应该学习如何使用调试器。 (你标记了这个德尔福,这意味着你必须拥有一个德尔福。)它可以让你在比你花在这里并发布你的问题花费更少的时间来解决这类问题。 –

回答

7

必须分配给Result功能:

function MinArray(var A : array of integer) : integer; 
var I : integer; 
begin 
    Result := A[Low(A)]; 
    for I := Low(A) + 1 to High(A) do 
    if A[I] < Result then 
     Result := A[I] ;  
end; 

begin 
    ... 
    WriteLn(MinArray(Ligne)); 
    ... 
end. 

注意,通过数组从0在函数索引为4。 见Open array parameters。这是代码中WriteLn(min);行为的原因。有机会,超出范围A [5]返回零。

打开{$ R +}在调试时添加范围检查。总是!

+0

如果它返回0到4,你怎么没有做高(A)+1? –

+0

高(A)+ 1是5并超出界限。我以Low(A)+ 1(即1)开始的原因是第一个值已经在Result变量中。 –