Advertisement
Abaduaber

AnnPol_3

Dec 18th, 2012
388
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.32 KB | None | 0 0
  1. Var
  2.     R: Array [1..9, 1..9] Of Integer;
  3.     {Ну вот, нам дана матрица размером 9x9, она-же и объявлена.}
  4.     I, J, C, MaxS, IMin, Ex: Integer;
  5.     {I и J - индексы текущей строки и столбца матрицы соответственно.
  6.      C - вспомогательная переменная, индекс, с помощью которого мы будем находить максимальный
  7.      и минимальный элементы строки и столбца матрицы.
  8.      MaxS, IMin - будут хранить текущие найденные максимальные и минимальные элементы, точнее, их значения
  9.      Ex - переменная-флаг. Если программа найдет хотя-бы одну седловую точку, то она установит эту переменную
  10.      в 1, а изначально она 0. Если по выходу из программы она будет равна нулю, значит программы не смогла
  11.      найти в введенной матрице ни одной седловой точки, значение будет проверено, и при необходимости,
  12.      будет выведено соответствующее сообщение}
  13. Begin
  14.     WriteLn('Матрица:');
  15.     {Для каждого столбца матрицы}
  16.     For J:= 1 To 9 Do Begin
  17.       {Для каждой строки}
  18.       For I:= 1 To 9 Do Begin
  19.         {Пишем приглашение для ввода текущего элемента матрицы}
  20.         Write('R[', I, ',', J, '] = ');
  21.         {Читаем значение, введенное с клавиатуры и записываем его в текущий элемент матрицы}
  22.         ReadLn(R[I, J]);
  23.       End;
  24.       {После ввода каждой отдельной строки матрицы выводим пустую строку - для красоты просто.}
  25.       WriteLn;
  26.     End;
  27.  
  28.     {А этот кусочек просто выводит недавно введенную нами матрицу, но в более удобном для восприятия виде}
  29.     WriteLn('Матрица:');
  30.     For J:= 1 To 9 Do Begin
  31.       For I:= 1 To 9 Do Begin
  32.         Write(R[I, J]);
  33.       End;
  34.       WriteLn;
  35.     End;
  36.  
  37.     {Итак, нам следует найти седловые точки в матрице, которую мы недавно ввели.
  38.      Для рассчета седловой точки, нужно сначала найти максимальный элемент матрицы в текущем
  39.      столбце, и минимальный - в текущей строке.
  40.      Начнем сканировать матрицу с простого цикла по строкам}
  41.     For I:= 1 To 9 Do Begin
  42.       {Для начала, предположим, что максимальный элемент текущего столбца равен первому элементу текущего
  43.       столбца}
  44.       MaxS:= R[I, 1];
  45.       {А теперь нижеследующий цикл в одну строчку проверит это на практике. Сканируются все элементы
  46.        текущего столбца, и если вдруг выясняется, что какой-то из них больше, чем старое значение, то он
  47.       заменяется на более большой. Таким образом, гарантируется, что после исполнения этой строчки, в переменной MaxS будет находится максимальный элемент текущего столбца.}
  48.       For C:= 2 To 9 Do If R[I, C] > MaxS Then MaxS:= R[I, C];
  49.       {Что-же, максимальный элемент столбца найден, теперь нужно найти минимальный элемент строки
  50.        Запускаем цикл по всем столбцам матрицы}
  51.       For J:= 1 To 9 Do Begin
  52.         {Если мы обнаружили ранее найденный максимальный элемент текущего столбца, то начинаем искать
  53.         в строке, которой принадлежит этот максимальный элемент, минимальный элемент. При этом, не
  54.         обязательно находить его значение, достаточно проверить, если есть какой-либо из элементов,
  55.         который меньше найденного нами максимального элемента, то это явно не седловая точка.
  56.         В таком случае, переходим к следующему элементу}
  57.         If R[I, J] = MaxS Then Begin
  58.           {Предположим, что наш максимальный элемент столбца является также и минимальным элементом строки}
  59.           IMin:= 1;
  60.           {Проверим наше предположение. Проверяем все элементы строки, в которой находится максимальный элемент столбца. Если где-то есть еще меньший элемент, то это - не седловая точка.}
  61.           For C:= 1 To 9 Do If R[C, J] < R[I, J] Then IMin:= 0;
  62.           {Если после исполнения верхнего цикла, IMin осталась равна 1, то седловая точка найдена}
  63.           If IMin = 1 Then Begin
  64.             {Выводим сообщение на экран, устанавливаем Ex в 1.}
  65.             WriteLn('Седловая точка R[', I, ',', J, ']=', R[I, J]);
  66.             Ex:= 1;
  67.           End;
  68.         End;
  69.       End;
  70.     End;
  71.     {Если Ex = 0, то в матрице седловых точек нет, выводим сообщение на экран.}
  72.     If Ex = 0 Then WriteLn('В данной матрице седловых точек нет.');
  73.     ReadLn;
  74. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement