В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
АлфавитABC
АлфавитABC
06.11.2021 10:32 •  Информатика

Вмассиве а[1..n,1..n] определить номера строки и столбца какой-нибудь седловой точки. некоторый элемент массива называется седловой точкой, если он является одновременно наименьшим в своей строке и наибольшим в своем столбце

Показать ответ
Ответ:
ваноумно
ваноумно
28.09.2020 11:53
Const
  n = 6; // число строк
  m = 6; // число столбцов

var
  a: array[1..n, 1..m] of integer;  // основной массив
  Rext: array[1..n, 1..2] of integer; // номера столбцов с min и max в строках
  Cext: array[1..2, 1..m] of integer; // номера строк с min и max в столбцах
  i, j, amin, amax: integer;

begin
  // заполняем массив А случайными числами
  Randomize;
  writeln('Исходный массив');
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      a[i, j] := random(100) - 50;
      write(a[i, j]:4);
    end;
    writeln;
  end;
  // Заполняем массив Rext n x 2
  for i := 1 to n do
  begin
    amin := 10000;  //заведомо больше a[i,j]
    amax := -10000; //заведомо меньше a[i,j]
    for j := 1 to m do
    begin
      if amin > a[i, j] then begin
        amin := a[i, j]; Rext[i, 1] := j
      end;
      if amax < a[i, j] then begin
        amax := a[i, j]; Rext[i, 2] := j
      end
    end;
  end;
  // Заполняем массив Cext 2 x m
  for j := 1 to m do
  begin
    amin := 10000;  //заведомо больше a[i,j]
    amax := -10000; //заведомо меньше a[i,j]
    for i := 1 to n do
    begin
      if amin > a[i, j] then begin
        amin := a[i, j]; Cext[1, j] := i
      end;
      if amax < a[i, j] then begin
        amax := a[i, j]; Cext[2, j] := i
      end
    end
  end;
  writeln;
  // Ищем седловые точки
  writeln('*** Седловые точки ***');
  for i := 1 to n do
  begin
    j := Rext[i, 1];
    if Cext[2, j] = i then
      write('[', i, ',', j, '] ')
    else begin
      j := Rext[i, 2];
      if Cext[1, j] = i then
        write('[', i, ',', j, '] ')
    end
  end;
  writeln
end.

Тестовое решение
Исходный массив
  10  25  38  38
  45  32  42  36
 -39  -6   9  48
 -25 -37  40  30

*** Седловые точки ***
[2,2]
0,0(0 оценок)
Ответ:
shevchenkotanu
shevchenkotanu
28.09.2020 11:53
Const
  N = 5;
var
  i, j: integer;
  a: array[1..N, 1..N] of integer;
  min, max: array[1..N] of integer;
begin
  writeln('Исходный массив: ');
  for i := 1 to N do begin
    for j := 1 to N do begin
      a[i, j] := Random(10);
      write(a[i, j] : 3);
      if (j = 1) or (max[i] > a[i, j]) then max[i] := a[i, j];
      if (i = 1) or (min[j] < a[i, j]) then min[j] := a[i, j];
    end;
    writeln;
  end;
  writeln('Седловые точки: ');
  for i := 1 to N do
    for j := 1 to N do
      if max[i] = min[j] then writeln('[', i, '; ', j, ']');
end.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота