Поиск максимума/минимума
Алгоритм поиска максимума в одномерном массиве
Поиск максимума в одномерном массиве обычно выполняют по такому алгоритму:
Считают что максимум – это первый элемент массива. Запоминают значение этого элемента в специальной переменной (например, Max), кроме этого можно запомнить и порядковый номер максимального элемента, равный 1 (например, в переменной NMax).
Организуется цикл (как правило, цикл с параметром) в котором поочередно просматриваются все оставшиеся элементы массива (от 2-го до последнего). Каждый элемент сравнивается с максимумом. Если значение элемента оказывается больше, чем значение максимума, то максимуму присваивают значение этого элемента, а текущее значение параметра цикла (то есть порядковый номер максимума) запоминается в переменной NMax.
После завершения цикла выводят значение максимума (Max) и его порядкового номера (NMax) на экран.
Примечание – Если выполняют поиск минимума, то операцию сравнения в п.2 алгоритма заменяют на противоположную, то есть проверяют, что значение элемента меньше, чем значение минимума.
Пример поиска максимума в одномерном массиве
Program PoiskMax;
Uses CRT; {Подключение модуля работы с экраном}
Const
N=10; {число элементов массива}
Type {Описание типа массива}
Massiv1=Array[1..N] of Integer;
Var
Z :Massiv1; {исходный массив}
Max :Integer; {макс.элемент}
Nmax:Byte; {номер макс. эл-та}
i :Byte; {параметр цикла}
BEGIN
ClrScr; {Очистка экрана}
{Ввод элементов массива}
For i:=1 to N do
Begin
Write('Z[',i,']='); {Вывод сообщения}
ReadLn(Z[i]); {Ввод элемента}
End;
{Вывод массива на экран в строку}
WriteLn('Исходный массив'); {Вывод сообщения}
For i:=1 to N do
Write(Z[i]:4); {Вывод i-го элемента на экран}
WriteLn; {Переход на новую строку}
{Поиск максимума}
Max:=Z[1]; {Считаем,что максимум - это 1-й элемент}
Nmax:=1; {Запоминаем его номер}
For i:=2 to N do {Просматриваем оставшиеся элементы}
If Z[i]>Max then {Если элемент больше максимума}
Begin
Max:=Z[i]; {Присваиваем максимуму значение этого эл-та}
Nmax:=i; {Запоминаем номер этого эл-та}
End;
WriteLn('Максимум=',Max);
WriteLn('Его порядковый номер=',Nmax);
ReadLn;
END.
Примеры обработки матриц
Пример 1. Дана матрица
.
Обменять в ней местами 2-й и 3-й столбцы.
Program Obmen;
Uses CRT;
Const
M=3;
N=4;
{Задание исходной матрицы}
Z:Array[1..M,1..N] of Integer=
((4, 0, 6, 2),
(7, 9, 1, 5),
(8, 3, 4, 0));
Var
i,j :Byte;
Temp:Integer;
BEGIN
ClrScr;
{Вывод исходной матрицы}
WriteLn('Исходная матрица');
For i:=1 to M do
Begin
For j:=1 to N do Write(Z[i,j]:4);
WriteLn;
End;
{Обмен столбцов}
For i:=1 to N do
Begin
Temp:=Z[i,2];
Z[i,2]:=Z[i,3];
Z[i,3]:=Temp;
End;
{Вывод преобразованной матрицы}
WriteLn('Преобразованная матрица');
For i:=1 to M do
Begin
For j:=1 to N do Write(Z[i,j]:4);
WriteLn;
End;
ReadLn;
END.
Пример 2. Преобразовать одномерный массив X={13, 25, 16, 8, 11, 4, 10, 19, 2, 17, 23, 41} в матрицу Z[3,4] построчно (массив условно разрезается на три полоски, которые затем располагаются одна под другой):
Program Transform01; {Преобразование массивов}
Uses CRT;
Const
L=12; {Число элементов одномерного массива}
M=3; {Число строк матрицы}
N=4; {Число столбцов матрицы}
{Исходный массив}
X:Array[1..L] of Integer=
(13,25,16,8,11,4,10,19,2,17,23,41);
Var
i,j,k:Integer;
Z:Array[1..M,1..N] of Integer;
BEGIN
ClrScr;
{Вывод исходного массива}
WriteLn('Исходный массив:');
For i:=1 to L do Write(X[i]:4);
WriteLn;
{Преобразование одномерного массива}
{в матрицу по строкам}
k:=1;
For i:=1 to M do
For j:=1 to N do
Begin
Z[i,j]:=X[k];
Inc(k);
End;
{Вывод полученной матрицы}
WriteLn('Полученная матрица:');
For i:=1 to M do
Begin
For j:=1 to N do Write(Z[i,j]:4);
WriteLn;
End;
ReadLn;
END.
