Два минимальных элемента в строке. Седловые элементы
Pascal(lazarus). Дана задача на седловые элементы(
Во 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
Ответы (1 шт):
Автор решения: Aleksandr Fetisov
→ Ссылка
Так понял, а если изменить вот так:
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.