2016-11-07 61 views
0

我有问题显示第二大值。如何找到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; 

它不能正常工作。对我有些建议?

+0

您总是将feldzweitmax等同于最大值。这合乎逻辑吗?然后它总是一样的。关键是找到about/when/Maximum包含您想要的值并将if扩展为开始结束块。 –

+0

@MarcovandeVoort是的,我知道,在这种情况下,我总是等于最大值。这就是为什么我需要帮助。在您开始前* – Marco

回答

3

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

  • 一个)X>最大
  • b)中X> ZweitMax(但小于最大)
  • c)中X < ZweitMax

在情况下a)最大值应该变为x并且ZweitMax应该变成前值最大值

在情况b)最大值应该保持并且ZweitMax应该变为x

在情况c)至最长和ZweitMax(IOW,不需要采取行动)

一对夫妇的提示没有变化:

  • 初始化最大和ZweitMax到尽可能小的值(根据类型),然后开始评估实际输入值。

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

+0

* ..和最大ZweitMax + 1。*。如果所有输入值都处于最低水平呢? –

+1

@LURD好点!其实这两个值应该是最小的。感谢您的支持。 –

+0

荣誉解释的逻辑,而不是只写代码。如果我能提供一个,那将值得第二个赞成。 –