2016-11-09 7 views
0

ich diesen Code geschrieben habe den zweithöchsten Wert in einem Array, um herauszufinden:Finden Sie den zweithöchsten Wert

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; 

Wo das Problem in diesem Kodex ist und warum es aus dem richtigen Wert nicht gedruckt ? Information: Der Kodex Teil einer Funktion ist

FeldZweitMax

Antwort

2

Es gibt zur Zeit zwei Orte, wo man ZweitMax gesetzt, aber nur ein von ihnen hat auch Auswirkungen auf den Return-Code der Funktion, FeldZweitMax.

Der erste Teil der if Anweisung kann in geändert werden:

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

so wie der Rückgabewert, um sicherzustellen, korrekt aktualisiert wird.

Alternativ können Sie einstellen, nur ZweitMax allein in beiden Orten und stellen Sie dann den Rückgabewert am Ende:

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; 

ich eigentlich lieber die letztere, da die Berechnung und die Rückgabe des Wertes sind getrennte Angelegenheiten.

+0

Ok, bedeutet es, ich muss das Anfang/Ende ändern? – Marco

+0

Es funktioniert., Und jetzt verstehe ich warum. Vielen Dank. – Marco

Verwandte Themen