Нахождение наибольшего значения из записи - PullRequest
0 голосов
/ 25 мая 2011

Я пытаюсь закодировать процедуру, которая просматривает запись чисел и находит, какая из них самая высокая, код в настоящее время ниже. У меня проблема в том, что кажется, что в списке указана последняя оценка (не самая высокая). Любая помощь с благодарностью.

Procedure FindTopScore(Var TopScores : TTopScores);
Var
Count : Integer;
Highest : Integer;
Name: String;

Begin
     For Count := 1 to MaxSize Do
          If TopScores[Count].Score > Highest Then
     Highest := TopScores[Count].Score;
     Name := TopScores[Count].Name;
       Writeln('Higest score is by ' ,TopScores[Count].Name, ' of ', TopScores[Count].Score);
End;

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

Вы выводите не Highest, а TopScores[Count].Score.Просто используйте

 Writeln('Highest is ', Highest, ' for ', Name);

Также вы должны поместить имя в переменную Name внутри оператора if (это на самом деле снаружи).

Аддон: IfВы хотите использовать все имена в случае ничьей, например следующий код

Highest := 0;
For Count := 1 to MaxSize Do Begin
     If TopScores[Count].Score = Highest Then Begin
         Name := Name + ' and ' + TopScores[Count].Name;
     End;
     If TopScores[Count].Score > Highest Then Begin
         Highest := TopScores[Count].Score;
         Name := TopScores[Count].Name;
     End;
 End;
1 голос
/ 25 мая 2011

В дополнение к ответу Говарда, установите '0' в 'Наивысший' перед началом цикла.Будучи неинициализированным, он имеет произвольное значение, возможно, выше, чем наивысший балл.

0 голосов
/ 28 мая 2011

В дополнение к принятому ответу обязательно включите свои предупреждения и подсказки, и вы увидите:

      testhighest.pp(16,39) Warning: Local variable "Highest" does not seem to be initialized

что является

        If TopScores[Count].Score > Highest Then

линия

...