Поиск минимального, максимального элемента массива, поиск его индекса.
Часто при работе с массивами возникает задача поиска минимального(максимального) значения массива и указания его порядкового номера.
Если провести аналогию со школой, то мы получаем примерно следующую задачу.
Дан набор температур за весенний месяц (30 дней.). Найти минимальную температуру и указать порядковый номер дня, когда она была.
Как это решить программным способом, рассмотрим далее…
Рассмотрим переменные для решения задачи:
У нас 30 дней: const count_day=30;
Массив: Var Temperature [1.. count_day] of integer;
Счетчик I: integer; для просмотра всех дней
Переменные для результата: MinTemperature, DayMinTemperature:integer;
Разобьем задачу на блоки:
1. Объявление переменных.
2. Заполнение массива случайными числами.
3. Инициализация начальных переменных.
4. Просмотр массива и поиск нужных значений.
5. Вывод результата.
Итак:
1. Объявление переменных
const count_day=30; Var Temperature [1.. count_day] of integer; I: integer; MinTemperature, DayMinTemperature:integer;
2. Заполнение массива случайными числами.
randomize; for i := 1 to count_day do begin temperature[i] := random(5) + 10; writeln('День ', i, ' температура = ', Temperature[i]); end;
Почему temperature[i] := random(5) + 10. Дело в том, что весной температура в среднем 10 градусов. Добавим для разброса еще random(5).
3. Инициализация начальных переменных.
MinTemperature := Temperature[1]; DayMinTemperature := 1;
За минимальную температуру примем значение в 1 день и порядковый номер мин. температуры возьмем тоже 1.
4. Просмотр массива и поиск нужных значений.
for i := 2 to count_day do if temperature[i] < MinTemperature then begin MinTemperature := temperature[i]; DayMinTemperature := i; end;
Просматриваем все остальные дни. Если находим что то меньшее — запоминаем новое значение температуры и порядковый номер дня.
5. Вывод результата.
writeln; writeln('Минимальная температура=', MinTemperature, ' День=', DayMinTemperature); writeln ('Press Enter to Exit'); readln;
А теперь все вместе:
const count_day = 30; var Temperature: array [1..count_day] of integer; I: integer; MinTemperature, DayMinTemperature: integer; BEGIN randomize; for i := 1 to count_day do begin temperature[i] := random(5) + 15; writeln('День ', i, ' температура = ', Temperature[i]); end; MinTemperature := Temperature[1]; DayMinTemperature := 1; for i := 2 to count_day do if temperature[i] < MinTemperature then begin MinTemperature := temperature[i]; DayMinTemperature := i; end; writeln; writeln('Минимальная температура=', MinTemperature, ' День=', DayMinTemperature); writeln('Press Enter to Exit'); readln; END.
Для самостоятельного решения предлагаю написать программу поиска максимальной летней температуры (25<Т<35) и указания порядковых номеров дней когда она была. Результат оформить в виде: Максимальная температура = 25. Была: 1, 14, 17, 29 дня.