Двухмерный массив: Минимальный элемент и его индекс

Часто при работе с массивами возникает задача поиска минимального(максимального) значения массива и указания его порядкового номера.
Если провести аналогию со школой, то мы получаем примерно следующую задачу.
Дан набор температур за весенний месяц (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] &amp;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] &amp;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.

Задача: В массиве температур минимум может встречаться несколько раз. Измените код программы, что бы она показала все дни с минимальной температурой.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

0 0 vote
Article Rating
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments