Найти два максимальных элемента массива Pascal
В массиве чисел найти два максимальных элемента.
Данная задача требует пояснений и конкретизации:
- должны ли быть равны между собой эти элементы;
- или они могут быть разными, но больше, чем все остальные элементы. Например, в массиве [4, 7, 2, 6, 9] два максимальных элемента — это числа 9 и 7.
В данном случае будем считать, что надо найти два наибольших элемента одномерного массива. При этом они могут быть как равны между собой, так и различаться.
Задачу можно решить разными способами. Наиболее простой для понимания — это использование двух переборов массива. В первом ищется первый максимум. Во втором — второй, при этом первый максимальный элемент исключается с помощью условного оператора 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