我有一个显示第二大值的问题。
这是代码
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;
它并不完美。对我有些建议吗?
答案 0 :(得分:3)
考虑您(在某些时候)值Maximum > ZweitMax
(分别为f.ex.5和2)。
要评估的下一个值(x)可能是
如果a)最大值应为x,ZweitMax应为先前的最大值
如果b)最大值应该保留,ZweitMax应该变为x
如果c)没有更改为Maximum和ZweitMax(IOW,无需任何操作)
一些提示:
在开始评估实际输入值之前,将Maximum和ZweitMax初始化为最小可能值(根据类型)。
如果a)在将新值分配给最大值之前将ZweitMax设置为之前的最大值。