如何用Pascal找到第二大的值

时间:2016-11-07 10:50:28

标签: 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;

它并不完美。对我有些建议吗?

1 个答案:

答案 0 :(得分:3)

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

  • a)x>最大
  • b)x> ZweitMax(但小于最大值)
  • c)x&lt; ZweitMax

如果a)最大值应为x,ZweitMax应为先前的最大值

如果b)最大值应该保留,ZweitMax应该变为x

如果c)没有更改为Maximum和ZweitMax(IOW,无需任何操作)

一些提示:

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

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