Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Var
- R: Array [1..9, 1..9] Of Integer;
- {Ну вот, нам дана матрица размером 9x9, она-же и объявлена.}
- I, J, C, MaxS, IMin, Ex: Integer;
- {I и J - индексы текущей строки и столбца матрицы соответственно.
- C - вспомогательная переменная, индекс, с помощью которого мы будем находить максимальный
- и минимальный элементы строки и столбца матрицы.
- MaxS, IMin - будут хранить текущие найденные максимальные и минимальные элементы, точнее, их значения
- Ex - переменная-флаг. Если программа найдет хотя-бы одну седловую точку, то она установит эту переменную
- в 1, а изначально она 0. Если по выходу из программы она будет равна нулю, значит программы не смогла
- найти в введенной матрице ни одной седловой точки, значение будет проверено, и при необходимости,
- будет выведено соответствующее сообщение}
- Begin
- WriteLn('Матрица:');
- {Для каждого столбца матрицы}
- For J:= 1 To 9 Do Begin
- {Для каждой строки}
- For I:= 1 To 9 Do Begin
- {Пишем приглашение для ввода текущего элемента матрицы}
- Write('R[', I, ',', J, '] = ');
- {Читаем значение, введенное с клавиатуры и записываем его в текущий элемент матрицы}
- ReadLn(R[I, J]);
- End;
- {После ввода каждой отдельной строки матрицы выводим пустую строку - для красоты просто.}
- WriteLn;
- End;
- {А этот кусочек просто выводит недавно введенную нами матрицу, но в более удобном для восприятия виде}
- WriteLn('Матрица:');
- For J:= 1 To 9 Do Begin
- For I:= 1 To 9 Do Begin
- Write(R[I, J]);
- End;
- WriteLn;
- End;
- {Итак, нам следует найти седловые точки в матрице, которую мы недавно ввели.
- Для рассчета седловой точки, нужно сначала найти максимальный элемент матрицы в текущем
- столбце, и минимальный - в текущей строке.
- Начнем сканировать матрицу с простого цикла по строкам}
- For I:= 1 To 9 Do Begin
- {Для начала, предположим, что максимальный элемент текущего столбца равен первому элементу текущего
- столбца}
- MaxS:= R[I, 1];
- {А теперь нижеследующий цикл в одну строчку проверит это на практике. Сканируются все элементы
- текущего столбца, и если вдруг выясняется, что какой-то из них больше, чем старое значение, то он
- заменяется на более большой. Таким образом, гарантируется, что после исполнения этой строчки, в переменной MaxS будет находится максимальный элемент текущего столбца.}
- For C:= 2 To 9 Do If R[I, C] > MaxS Then MaxS:= R[I, C];
- {Что-же, максимальный элемент столбца найден, теперь нужно найти минимальный элемент строки
- Запускаем цикл по всем столбцам матрицы}
- For J:= 1 To 9 Do Begin
- {Если мы обнаружили ранее найденный максимальный элемент текущего столбца, то начинаем искать
- в строке, которой принадлежит этот максимальный элемент, минимальный элемент. При этом, не
- обязательно находить его значение, достаточно проверить, если есть какой-либо из элементов,
- который меньше найденного нами максимального элемента, то это явно не седловая точка.
- В таком случае, переходим к следующему элементу}
- If R[I, J] = MaxS Then Begin
- {Предположим, что наш максимальный элемент столбца является также и минимальным элементом строки}
- IMin:= 1;
- {Проверим наше предположение. Проверяем все элементы строки, в которой находится максимальный элемент столбца. Если где-то есть еще меньший элемент, то это - не седловая точка.}
- For C:= 1 To 9 Do If R[C, J] < R[I, J] Then IMin:= 0;
- {Если после исполнения верхнего цикла, IMin осталась равна 1, то седловая точка найдена}
- If IMin = 1 Then Begin
- {Выводим сообщение на экран, устанавливаем Ex в 1.}
- WriteLn('Седловая точка R[', I, ',', J, ']=', R[I, J]);
- Ex:= 1;
- End;
- End;
- End;
- End;
- {Если Ex = 0, то в матрице седловых точек нет, выводим сообщение на экран.}
- If Ex = 0 Then WriteLn('В данной матрице седловых точек нет.');
- ReadLn;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement