2016-11-07 1 views
0

두 번째로 큰 값을 표시하는 데 문제가 있습니다. 당신은 코드 나에게 유일한 가장 큰 값을 표시 볼 수 있듯이파스칼로 두 번째로 큰 값을 찾는 방법

다음은 코드

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를 최대치로 간주합니다. 그게 논리적입니까? 그렇다면 항상 동일합니다. 열쇠는/when/maximum에 원하는 값이 포함되어 있는지 확인하고 begin end 블록으로 if를 확장하는 것입니다. –

+0

@MarcovandeVoort 네,이 경우 저는 항상 최대와 동일하다는 것을 압니다. 그래서 내가 도움이 필요해. – Marco

답변

3

어떤 점에서 Maximum > ZweitMax (각각 5 자리 및 2 자리) 값이 있다고 가정합니다. (X)을 평가하기 위해 다음의 값

a)는 x> 최대
  • b) x> ZweitMax (미만
  • ) 최대보다 c)는

    ZweitMax

  • <을 X
    • 수도 a) Maximum은 x가되어야하고 ZweitMax는 이전 값이되어야한다. 최대 값

      b) 최대 값을 유지해야하며 ZweitMax는 x

      이어야한다. 케이스 (C)에

      ) 최대 ZweitMax (IOW, 필요한 작업 없음) 힌트

      커플 변경없이 (받는있어서

      • 가장 작은 값으로 초기화 최대 ZweitMax 두 유형)을 입력해야합니다.

      • a) 새 값을 최대 값으로 지정하기 전에 ZweitMax를 이전 최대 값으로 설정하십시오.

    +0

    * .. 및 시작하기 전에 최대 ZweitMax + 1 .. *. 모든 입력 값이 가장 낮은 레벨에 있으면 어떨까요? –

    +1

    @LURD 좋은 지적! 실제로 두 값은 최소값이어야합니다. 머리를 주셔서 감사합니다. –

    +0

    단지 코드를 작성하는 것이 아니라 논리를 설명하기위한 명성. 내가 줄 수 있다면 두 번째 upvote의 가치가있을 것입니다. –

    관련 문제