Вопрос задан 26.11.2025 в 18:55. Предмет Информатика. Спрашивает Кульчицкая Анастасия.

Найти номера минимального и максимального элементов массива в Паскале

Перейти к ответам

Ответы на вопрос

Отвечает Оболонина Диана.

Вот самый простой и надёжный способ найти номера (индексы) минимального и максимального элементов массива в Паскале. Алгоритм: берём первый элемент как текущие минимум и максимум, их индексы — 1; дальше идём по массиву и при улучшении минимума/максимума обновляем значение и индекс.

Вариант для массива a[1..n]

pascal
program MinMaxIndex1Based; var a: array[1..100] of Integer; { или другой верхний предел } n, i: Integer; minVal, maxVal: Integer; iMin, iMax: Integer; begin readln(n); for i := 1 to n do read(a[i]);

minVal := a[1]; maxVal := a[1]; iMin := 1; iMax := 1;

for i := 2 to n do begin if a[i] < minVal then begin minVal := a[i]; iMin := i; end; if a[i] > maxVal then begin maxVal := a[i]; iMax := i; end; end;

writeln('Минимум = ', minVal, ', индекс = ', iMin); writeln('Максимум = ', maxVal, ', индекс = ', iMax); end.

  • Если встречаются одинаковые минимумы/максимумы, этот код вернёт первое вхождение.

  • Чтобы получить последнее вхождение, замените сравнения на <= и >= соответственно.

Универсальный вариант (с Low/High, работает с любыми границами массива)

pascal
program MinMaxIndexAnyBounds; type TIntArr = array[-3..7] of Integer; { пример произвольных границ } var a: TIntArr; i, iMin, iMax: Integer; minVal, maxVal: Integer; begin { предположим, массив уже заполнен... }

iMin := Low(a); iMax := Low(a); minVal := a[iMin]; maxVal := a[iMax];

for i := Low(a) + 1 to High(a) do begin if a[i] < minVal then begin minVal := a[i]; iMin := i; end; if a[i] > maxVal then begin maxVal := a[i]; iMax := i; end; end;

writeln('Минимум = ', minVal, ', индекс = ', iMin); writeln('Максимум = ', maxVal, ', индекс = ', iMax); end.

Процедура для открытого массива (удобно вызывать из разных мест)

pascal
procedure MinMaxIdx(const a: array of Integer; var iMin, iMax: Integer); var i: Integer; begin if Length(a) = 0 then begin iMin := -1; iMax := -1; { или обработать ошибку иначе } Exit; end;

iMin := 0; iMax := 0; { открытые массивы — 0-базовые } for i := 1 to High(a) do begin if a[i] < a[iMin] then iMin := i; if a[i] > a[iMax] then iMax := i; end; end;

Использование:

pascal
var v: array of Integer; imin, imax: Integer; begin SetLength(v, 5); v[0]:=7; v[1]:=3; v[2]:=9; v[3]:=9; v[4]:=4;

MinMaxIdx(v, imin, imax); writeln('iMin=', imin, ' iMax=', imax); { здесь индексы 0-базовые } end;

Замечания

  • Сложность алгоритма — O(n) по времени и O(1) по памяти.

  • Если нужно одновременно получить значения и индексы, храните текущие minVal/maxVal и iMin/iMax, как показано в первых примерах.

  • Для “последнего” минимального/максимального достаточно заменить </> на <=/>=.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Информатика 14.10.2025 04:57 31 Бердина Раиса
Информатика 13.10.2025 21:53 24 Кандрина Лера
Информатика 13.10.2025 20:34 16 Калинин Максим
Информатика 13.10.2025 20:27 6 Смирнов Егор
Информатика 13.10.2025 19:26 4 Макаров Максим
Информатика 13.10.2025 19:20 16 Гайнанов Эльнар
Информатика 13.10.2025 18:25 6 Bekenov Daulet
Информатика 13.10.2025 18:16 22 Александровна Вероника
Задать вопрос