Подумаем, какие операции выполняются, если требуется найти максимальный элемент? Естественно, операцию сравнения. Мы не задумываемся над тем, что сравниваем всегда пару, «пробегая» глазами все элементы массива. Алгоритм поиска максимального (минимального) элемента построим таким образом, чтобы сравнивать очередную пару чисел, повторяя действие сравнения нужное количество раз.
Итак, нам необходимо ответить на два вопроса:
1) какие числа входят в пару, составляющую операцию отношения
2) сколько раз необходимо повторить операцию сравнения.
Введем дополнительную переменную с именем max. Она и будет одним из чисел, второе число — это очередной элемент массива, для того, чтобы провести первую операцию сравнения необходимо переменной max присвоить некоторое начальное значение.
Здесь могут быть два варианта:
1) присвоить переменной max (min) первй элемент массива, тогда количество повторений операции сравнения равно n-1;
2) присвоить число заведомо меньшее (большее) всех элементов массива.
В этом случае, количество повторений операции сравнения n.
Рассмотрим несколько примеров:
1) для заданного одномерного массива найти максимальный элемент.
PROGRAM ARRAY_MAX;
USES CRT;
TYPE
mas = array[1..10] of integer;
VAR
a: mas;
i: byte;
max: integer;
BEGIN
clrscr;
{блок заполнения}
FOR i:=1 TO 10 DO
BEGIN
write('Введите элемент массива: ');
readln(a[i])
END;
{поиск максимального элемента}
max:=a[1];
FOR i:=2 TO 10 DO
IF a[i]>max THEN
max:=a[i];
writeln('максимальный элемент массива = ', max);
writeln('нажмите любую клавишу...');
readln;
END.
2) массив содержит сведения о количестве студентов каждой группы I курса. Определить группу с максимальным количеством студентов, считая, что номер группы соответствует порядковому номеру числа в массиве (считаем, что такая группа единственная). Итак, делаем вывод: требуется найти номер максимального элемена.
PROGRAM ARRAY_MAX_NUM;
USES CRT;
TYPE
mas = array[1..10] of byte;
VAR
a: mas;
i, num: byte;
BEGIN
clrscr;
{блок заполнения}
FOR i:=1 TO 7 DO
BEGIN
write('Введите количество студентов в группе ', i, ' : ');
readln(a[i])
END;
{поиск номера максимального элемента}
num := 1;
FOR i:=1 TO 7 DO
IF a[i] > a[num] THEN
num:=i;
writeln('максимальное число студентов = ', a[num]);
writeln('номер группы = ', num);
writeln('нажмите любую клавишу...');
readln;
END.
3) найти минимальный элемент среди четных элементов массива.
Пояснение: переменной min присвоить певый элемент массива нельзя, т.к. он может быть нечетным. Следовательно, нужно выбрать какое-то очень большое число для данного типа переменных.
Если мы объявим элементы массива integer, то таким числом будет +32767.
PROGRAM ARRAY_MIN_EVEN;
USES CRT;
TYPE
mas = array[1..10] of integer;
VAR
a:mas;
i: integer;
min: integer;
BEGIN
clrscr;
FOR i:=1 TO 10 DO
BEGIN
writeln('введите очередной элемент массива ');
readln(a[i])
END;
min:=32767;
FOR i:=1 TO 10 DO
IF (a[i]<min) and (a[i] mod 2 = 0) THEN
min:=a[i];
IF min=32767 THEN
writeln ('в массиве нет четных элементов')
ELSE
writeln ('минимальный элемент среди четных элементов массива = ',min);
writeln('нажмите любую клавишу');
readln;
END.
Обратите внимание: необходимо проверить, изменилось ли значение переменной min, т.к. четных элементов могло и не быть.