如何用 Pascal 求第二大值

How to find the second largest value with Pascal

我在显示第二大值时遇到问题。

这是代码

program testeFeldZweitMax (input, output);
{ testet die Funktion FeldZweitMax }

const
  FELDGROESSE = 10;

type
  tIndex = 1..FELDGROESSE;
  tFeld = array [tIndex] of integer;

var 
  Feld : tFeld;
  i : integer;

function FeldZweitMax (var inFeld : tFeld) : integer;
var
  Maximum: integer;
  j : tIndex;
begin
  Maximum := inFeld[1];
  for j := 2 to FELDGROESSE  do
    if inFeld[j] > Maximum then
      Maximum := inFeld[j];
  FeldZweitMax := Maximum
end;

begin { Testprogramm }
  writeln('Bitte geben Sie ', FELDGROESSE, ' Zahlen ein:');
  for i := 1 to FELDGROESSE do
    read (Feld [i]);
  writeln('Die zweitgroesste Zahl ist ', FeldZweitMax (Feld), '.');
end. { testeFeldZweitMax } 

如代码所示,仅显示最大值。我需要一些帮助来显示第二大值。

var
  Maximum, ZweitMax: integer;
  j : tIndex;
begin
  Maximum := inFeld[1];   
  ZweitMax := inFeld[2];
  for j := 1 to FELDGROESSE do
  begin
    if inFeld[j] < Maximum then
      inFeld[j] := Maximum;
    Maximum := ZweitMax;
    ZweitMax := inFeld[j]; 
    FeldZweitMax := ZweitMax
  end
end;

它不能很好地工作。给我一些建议?

考虑到您(在某个时候)具有值 Maximum > ZweitMax(分别为 f.ex.5 和 2)。 下一个要评估的值 (x) 可能是

  • a) x > 最大值
  • b) x > ZweitMax(但小于最大值)
  • c) x < ZweitMax

如果 a) Maximum 应该变成 x 而 ZweitMax 应该变成之前的 Maximum

如果 b) Maximum 应该保留并且 ZweitMax 应该变成 x

如果 c) Maximum 和 ZweitMax 没有变化(IOW,不需要采取任何行动)

一些提示:

  • 在开始评估实际输入值之前,将 Maximum 和 ZweitMax 初始化为可能的最小值(根据类型)。

  • 情况 a) 在将新值分配给最大值之前将 ZweitMax 设置为先前的最大值。