Глиф Учебники

Как найти максимум и минимум в массиве

Справочник · Pascal · 1 минута чтения

Возьмите за максимум и минимум первый элемент, а потом сравните с ним все остальные:

Pascal
program MinMax;
var
  a: array[1..100] of integer;
  n, i, mx, mn: integer;
begin
  readln(n);
  for i := 1 to n do
    read(a[i]);
  mx := a[1];
  mn := a[1];
  for i := 2 to n do
  begin
    if a[i] > mx then
      mx := a[i];
    if a[i] < mn then
      mn := a[i];
  end;
  writeln('Максимум: ', mx);
  writeln('Минимум: ', mn);
end.
Ввод
7
-4 -12 -1 -9 -3 -8 -6
Вывод
Максимум: -1
Минимум: -12

Почему не с нуля

Частая ошибка — mx := 0 перед циклом. Для массива из одних отрицательных чисел, как в примере выше, такая программа ответит «Максимум: 0», хотя нуля в массиве нет. Начальное значение должно быть одним из элементов, удобнее всего — первым. Тогда цикл можно начинать со второго элемента.

Номер максимума

Если нужен не сам максимум, а его место в массиве, запоминайте номер:

Pascal
maxI := 1;
for i := 2 to n do
  if a[i] > a[maxI] then
    maxI := i;
writeln('Максимум ', a[maxI], ' на месте ', maxI);

Со знаком > найдётся первый из одинаковых максимумов, с >= — последний.

Сколько раз встречается максимум

Сначала найдите максимум, потом вторым циклом посчитайте, сколько элементов ему равны:

Pascal
count := 0;
for i := 1 to n do
  if a[i] = mx then
    count := count + 1;

Без массива

Если числа нужны только для поиска максимума, хранить их не обязательно — сравнивайте сразу при вводе:

Pascal
program MaxNoArray;
var
  n, i, x, mx: integer;
begin
  readln(n);
  read(mx);
  for i := 2 to n do
  begin
    read(x);
    if x > mx then
      mx := x;
  end;
  writeln('Максимум: ', mx);
end.
Ввод
5
17 42 8 42 3
Вывод
Максимум: 42

Первое число сразу становится максимумом, остальные сравниваются с ним по одному.

Подводные камни