2016-11-09 7 views
0

二番目に高い値検索:私は配列で二番目に高い値を見つけるためにこのコードを書いてきました

var 
i, 
ZweitMax, 
    Max : integer; 

begin 
Max := -maxint; 
ZweitMax := -maxint; 

for i := 1 to FELDGROESSE do 


if inFeld[i] > Max then 
    begin 
    ZweitMax := Max; 
    Max := inFeld[i]; 
    end 
else 
if inFeld[i] > ZweitMax then 
begin 
ZweitMax := inFeld[i]; 
FeldZweitMax := ZweitMax; 
end 
end; 

このコードでの問題であり、なぜそれが正しい値をプリントアウトしていません? 情報:コードは、機能の一部であるFeldZweitMax

答えて

2

あなたがZweitMaxを設定するだけで、それらの 2つの場所は現在ありませんが、関数の戻りコード、FeldZweitMaxに影響を与えます。

if文の最初の部分をに変更することができます:戻り値が正しく更新されていることを確認するように

if inFeld[i] > Max then 
begin 
    ZweitMax := Max; 
    FeldZweitMax := ZweitMax; (* add this line *) 
    Max := inFeld[i]; 
end 
(* and so on *) 

はまた、あなただけの両方の場所で一人でZweitMaxを設定し、最後に戻り値を設定することができます値の計算とリターンが別の問題であるため、

for i := 1 to FELDGROESSE do 
begin 
    if inFeld[i] > Max then 
    begin 
     ZweitMax := Max; 
     Max := inFeld[i]; 
    end 
    else 
    begin 
     if inFeld[i] > ZweitMax then 
     begin 
      ZweitMax := inFeld[i]; 
     end 
    end 
end; 
FeldZweitMax := ZweitMax; 

は、私が実際に後者を好みます。

+0

[OK]を、私は開始/終了を変更する必要があることを意味ですか? – Marco

+0

それは動作します、そして、今私は理由を理解します。ありがとうございました。 – Marco

関連する問題