Найти два максимальных элемента массива | Язык Паскаль

Найти два максимальных элемента массива

В массиве чисел найти два максимальных элемента.

Данная задача требует пояснений и конкретизации:

В данном случае будем считать, что надо найти два наибольших элемента одномерного массива. При этом они могут быть как равны между собой, так и различаться.

Задачу можно решить разными способами. Наиболее простой для понимания - это использование двух переборов массива. В первом ищется первый максимум. Во втором - второй, при этом первый максимальный элемент исключается с помощью условного оператора if. Пример кода программы:

const
    N = 10; 

var
    a: array[1..N] of integer;
    i, max1, max2: byte;

begin 
    randomize;
    for i := 1 to N do begin
        a[i] := random(10);
        write(a[i]:3);        
    end;
    writeln;
 
    max1 := 1;
    for i := 2 to N do
        if a[i] > a[max1] then
            max1 := i;
 
    if max1 = 1 then 
        max2 := 2
    else 
        max2 := 1;

    for i := 1 to N do 
        if i <> max1 then // чтобы пропустить max1
            if a[i] > a[max2] then
                max2 := i;
 
    writeln('Максимумы: ', a[max1], ' и ', a[max2]);
end.

Здесь переменные max1 и max2 хранят не значения элементов, а их индексы (по индексу всегда можно получить значение).

Выражение if max1 = 1 then max2 := 2 else max2 := 1; необходимо по следующей причине. Мы не знаем, какое начальное значение следует присвоить переменной max2. Ведь если первый наибольший элемент будет первым, и мы присвоим max2 значение 1, то никогда не найдем второй наибольший.

В цикле, определяющем второй максимум, сначала проверяется, не совпадает ли номер текущего элемента с уже учтенным в max1. Только после этого происходит сравнение значения текущего элемента со значением элемента с индексом max2.

Пример выполнения кода:

  4  8  0  9  5  8  6  5  4  6
Максимумы: 9 и 8