Часто при работе с массивами возникает задача поиска минимального(максимального) значения массива и указания его порядкового номера.
Если провести аналогию со школой, то мы получаем примерно следующую задачу.
Дан набор температур за весенний месяц (4 недели по 7 дней). Найти минимальную температуру, указать номер недели и порядковый номер дня в неделе(1..7)
Как это решить программным способом, рассмотрим далее…
Рассмотрим переменные для решения задачи:
У нас 4 недели по 7 дней дней:
const WeekCount=4;
DayCount=7;
Массив: Var Temperature: array [1..WeekCount, 1..DayCount] of integer;
Счетчик I, J: integer; для просмотра недель и дней.
Переменные для результата: MinTemperature, WeekMinTemperature, DayMinTemperature:integer;</p>
Разобьем задачу на блоки:
1. Объявление переменных
2. Заполнение массива случайными числами
3. Инициализация начальных переменных
4. Просмотр массива и поиск нужных значений.
5. Вывод результата
Итак
1.
const WeekCount=4; DayCount=7; var Var Temperature [1..WeekCount, 1..DayCount] of integer; I, J: integer; MinTemperature, WeekMinTemperature, DayMinTemperature:integer;
2.
randomize; for i := 1 to WeekCount do begin for j := 1 to DayCount do begin temperature[i,j] := random(5) + 10; write('t[', i,j, ']=', Temperature[i,j]:4); end; writeln; end;
Почему temperature[i,j] := random(5) + 10. Дело в том, что весной температура в среднем 10 градусов. Добавим для разброса еще random(5).
3.
MinTemperature := Temperature[1,1]; DayMinTemperature := 1; WeekMinTemperature:=1;
За минимальную температуру примем значение в 1-ый день 1-ой недели. Тогда и порядковый номер мин. температуры будет 1 и номер недели тоже 1.
4.
for i := 1 to WeekCount do begin for j := 1 to DayCount do begin if temperature[i,j] &lt; MinTemperature then begin MinTemperature := temperature[i,j]; WeekMinTemperature:=i; DayMinTemperature :=j; end; end; end;
Просматриваем все остальные недели и дни. Если находим что то меньшее — запоминаем новое значение температуры, порядковый номер недели и дня.
5.
writeln; writeln('Минимальная температура=', MinTemperature, ' Неделя=', WeekMinTemperature); DayMinTemperature:= DayMinTemperature mod 7; case DayMinTemperature of 0:Writeln('Воскресенье'); 1:Writeln('Понедельник'); 2:Writeln('Вторник'); 3:Writeln('Среда'); 4:Writeln('Четверг'); 5:Writeln('Пятница'); 6:Writeln('Суббота'); end; writeln ('Press Enter to Exit'); readln;
А теперь все вместе:
const WeekCount=4; DayCount=7; Var Temperature:array [1..WeekCount, 1..DayCount] of integer; I, J: integer; MinTemperature, WeekMinTemperature, DayMinTemperature:integer; BEGIN randomize; for i := 1 to WeekCount do begin for j := 1 to DayCount do begin temperature[i,j] := random(5) + 10; write(' t[',i,j, ']=', Temperature[i,j]:2); end; writeln; end; MinTemperature := Temperature[1,1]; DayMinTemperature := 1; WeekMinTemperature:=1; for i := 1 to WeekCount do begin for j := 1 to DayCount do begin if temperature[i,j] &lt; MinTemperature then begin MinTemperature := temperature[i,j]; WeekMinTemperature:=i; DayMinTemperature :=j; end; end; end; writeln; write('Минимальная температура=', MinTemperature, ' Неделя=', WeekMinTemperature); DayMinTemperature:= DayMinTemperature mod 7; case DayMinTemperature of 0:Writeln(' Воскресенье'); 1:Writeln(' Понедельник'); 2:Writeln(' Вторник'); 3:Writeln(' Среда'); 4:Writeln(' Четверг'); 5:Writeln(' Пятница'); 6:Writeln(' Суббота'); end; writeln ('Press Enter to Exit'); readln; end.
Задача: В массиве температур минимум может встречаться несколько раз. Измените код программы, что бы она показала все дни с минимальной температурой.