Два минимальных элемента в строке. Седловые элементы

Рейтинг: 0Ответов: 1Опубликовано: 17.02.2023

Pascal(lazarus). Дана задача на седловые элементы(Скрин -   https://i.sstatic.net/XxDR0.jpg Во 2 примере даны входные данные и в одной строке может быть 2 минимальных элемента. С такими данными, как седловые у меня выводятся только элементы 1 и 2 строки, 1-го столбца. А должны еще 1 и 2 строки 4 столбца. Как это можно реализовать? Мой код

Type mas = array [1..2] of integer;
mas1=^mas;
mas2 = array[1..2] of mas1;
mas3=^mas2;
var k,n,m,i,j,jind:byte;
min,max:integer;
A : mas3;
begin

write('Введите количество строк(n) = ');readln(n);
write('Введите количество столбцов(m) = ');readln(m);
getmem(A,n*m*sizeof(integer));
for i:= 1 to n do begin
    getmem(A^[i],m*sizeof(integer));
    for j:= 1 to m do begin
        write('Введите элемент ',i,' строки, ',j,' столбца = ');
        readln(A^[i]^[j]);
    end;
end;
for i:=1 to n do begin
    min:=A^[i]^[1];
    jind:=1;
    for j:=1 to m do begin
        if A^[i]^[j] < min then begin min:=A^[i]^[j]; jind:=j;
    end;
    end;
     max:=A^[i]^[jind];
    for k:=1 to n do begin
            if max < A^[k]^[jind] then max:=A^[k]^[jind]; end;
            if min = max then writeln('Седловой элемент найден в ',i,' строке ',jind,' столбце и равен = ', max)
            else writeln('Седловых элементов в ',i,' строке не найдено');
end;
writeln('Заданная матрица = ');
for i:= 1 to n do begin
    for j:=1 to m do write(A^[i]^[j]:3);
writeln;
end;
for i:=1 to n do  freemem(A^[i],m*sizeof(integer));
freemem(A,n*m*sizeof(integer));
readln;
end.

Результат с данными 2-го примера:

Введите количество строк(n) = 3
Введите количество столбцов(m) = 4
Введите элемент 1 строки, 1 столбца = 2
Введите элемент 1 строки, 2 столбца = 3
Введите элемент 1 строки, 3 столбца = 5
Введите элемент 1 строки, 4 столбца = 2
Введите элемент 2 строки, 1 столбца = 2
Введите элемент 2 строки, 2 столбца = 4
Введите элемент 2 строки, 3 столбца = 6
Введите элемент 2 строки, 4 столбца = 2
Введите элемент 3 строки, 1 столбца = -2
Введите элемент 3 строки, 2 столбца = 7
Введите элемент 3 строки, 3 столбца = 2
Введите элемент 3 строки, 4 столбца = 0
Седловой элемент найден в 1 строке 1 столбце и равен = 2
Седловой элемент найден в 2 строке 1 столбце и равен = 2
Седловых элементов в 3 строке не найдено
Заданная матрица =
  2  3  5  2
  2  4  6  2
 -2  7  2  0

Ответы

▲ 0Принят

Так понял, а если изменить вот так:

program SedlovyeElementy;

type
  mas = array[1..2] of integer;
  mas1 = ^mas;
  mas2 = array[1..2] of mas1;
  mas3 = ^mas2;

var
  n, m, i, j: byte;
  A: mas3;
  sedl: boolean;

begin
  write('Введите количество строк(n) = ');
  readln(n);
  write('Введите количество столбцов(m) = ');
  readln(m);

  // Выделение памяти и ввод элементов матрицы
  getmem(A, n * m * sizeof(integer));
  for i := 1 to n do
  begin
    getmem(A^[i], m * sizeof(integer));
    for j := 1 to m do
    begin
      write('Введите элемент ', i, ' строки, ', j, ' столбца = ');
      readln(A^[i]^[j]);
    end;
  end;

  // Поиск седловых элементов
  writeln('Седловые элементы: ');
  for i := 1 to n do
  begin
    for j := 1 to m do
    begin
      sedl := true;
      // Проверка, является ли элемент минимальным в строке
      for k := 1 to m do
      begin
        if (k <> j) and (A^[i]^[k] < A^[i]^[j]) then
        begin
          sedl := false;
          break;
        end;
      end;
      // Проверка, является ли элемент максимальным в столбце
      if sedl then
      begin
        for k := 1 to n do
        begin
          if (k <> i) and (A^[k]^[j] > A^[i]^[j]) then
          begin
            sedl := false;
            break;
          end;
        end;
      end;
      // Вывод седлового элемента
      if sedl then
      begin
        writeln('Элемент в ', i, ' строке, ', j, ' столбце: ', A^[i]^[j]);
      end;
    end;
  end;

  // Освобождение памяти
  for i := 1 to n do
    freemem(A^[i], m * sizeof(integer));
  freemem(A, n * m * sizeof(integer));

  readln;
end.