У масиві чисел знайти два максимальних елемента.
Дане завдання вимагає пояснень і конкретизації:
- повинні бути рівні між собою ці елементи;
- або вони можуть бути різними, але більше, ніж всі інші елементи. Наприклад, в масиві [4, 7, 2, 6, 9] два максимальних елемента - це числа 9 і 7.
В даному випадку будемо вважати, що треба знайти два найбільших елемента одновимірного масиву. При цьому вони можуть бути як рівні між собою, так і відрізнятися.
Завдання можна вирішити двома способами. Найбільш простий для розуміння - це використання двох переборовши масиву. У першому шукається перший максимум. У другому - другий, при цьому перший максимальний елемент виключається за допомогою умовного оператора if. Приклад коду програми:
Тут змінні max1 і max2 зберігають не значення елементів, а їх індекси (цього досить, т. К. За індексом завжди можна отримати значення).
Зверніть увагу на конструкцію if max1 = 1 then max2. = 2 else max2. = 1;. Вона необхідна з таких причин. Ми не знаємо, яке початкове значення слід привласнити змінної max2. Адже якщо перший найбільший елемент буде першим, і ми призначимо max2 значення 1, то ніколи не знайдемо другий найбільший.
У циклі, який визначає другий максимум, спочатку перевіряється, чи не збігається номер поточного елемента з уже врахованим в max1. Тільки після цього відбувається порівняння значення поточного елемента зі значенням елемента з індексом max2.
Другий варіант вирішення завдання - коли обидва максимуму шукаються в одному циклі:
Спочатку передбачається, що перші два елементи масиву і є найбільшими. Який з них перший максимум, а який другий, визначається за допомогою конструкції if-else поза циклом. Перебір масиву починається з третього елемента. Якщо черговий елемент масиву більше першого максимального, то його індекс записується в першу змінну. (При цьому може виявитися, що раніше зберігався в max1 індекс вказував на другий максимум. Якщо це так, то він буде записаний в max2. Для цього використовується змінна buff і вкладене if.) Інакше здійснюється перевірка змінної max2.
Приклад виконання коду: