Как найти максимум и минимум в массиве
Возьмите за максимум и минимум первый элемент, а потом сравните с ним все остальные:
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», хотя нуля в массиве нет. Начальное значение должно быть одним из элементов, удобнее всего — первым. Тогда цикл можно начинать со второго элемента.
Номер максимума
Если нужен не сам максимум, а его место в массиве, запоминайте номер:
maxI := 1;
for i := 2 to n do
if a[i] > a[maxI] then
maxI := i;
writeln('Максимум ', a[maxI], ' на месте ', maxI);Со знаком > найдётся первый из одинаковых максимумов, с >= — последний.
Сколько раз встречается максимум
Сначала найдите максимум, потом вторым циклом посчитайте, сколько элементов ему равны:
count := 0;
for i := 1 to n do
if a[i] = mx then
count := count + 1;Без массива
Если числа нужны только для поиска максимума, хранить их не обязательно — сравнивайте сразу при вводе:
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Первое число сразу становится максимумом, остальные сравниваются с ним по одному.
Подводные камни
- Пустой массив. При
n = 0элементаa[1]нет. Если такое возможно, проверьтеn > 0до поиска. >или>=. Для самого значения максимума разницы нет, а для его номера есть:>даёт первое место среди равных,>=— последнее.- Максимум двух чисел удобно вынести в функцию — пример в уроке Процедуры и функции.