Найти седловой элемент матрицы и упорядочить элементы строк матрицы по возрастанию - Pascal
Формулировка задачи:
Дана целочисленная матрица размера M x N.
1) Найти элемент, являющийся максимальным в свое строке и минимальным в своем столбце. Если такой элемент отсутствует, то вывести об этом сообщение.
2) Строки упорядочить по возрастанию.
Исходную матрицу сформировать с помощью генератора случайных чисел.
Решение задачи: «Найти седловой элемент матрицы и упорядочить элементы строк матрицы по возрастанию»
textual
Листинг программы
const M = 10;
const N = 5;
type item_t = integer;
type line_t = array[1..M] of item_t;
type tabl_t = array[1..N] of line_t;
procedure printLine( const l: line_t );
var
i: integer;
begin
for i:= 1 to M do
write(l[i] :5);
writeln;
end;
procedure printTabl( const t: tabl_t );
var
i: integer;
begin
for i:= 1 to N do
printLine(t[i]);
end;
procedure sortLine( var l: line_t; tS: boolean );
var
i,j: integer;
tmp: item_t;
begin
if ts then
for i:=1 to M-1 do
for j:=M downto i do begin
if l[j] < l[i] then begin
tmp := l[j];
l[j] := l[i];
l[i] := tmp;
end;
end
else
for i:=1 to M-1 do
for j:=M downto i do begin
if l[j] > l[i] then begin
tmp := l[j];
l[j] := l[i];
l[i] := tmp;
end;
end;
end;
const DEV_FRB_EL_NEED = false;
var
a: tabl_t;
x,y,x2,y2: integer;
min, max, eCount: integer;
fBreak : boolean;
begin
repeat
for y:=1 to N do
for x:=1 to M do
a[y][x] := random(-100 , 100);
eCount := 0;
for y:=1 to N do
for x:=1 to M do begin
min := a[y][x];
max := a[y][x];
fBreak := false;
for x2:= 1 to x - 1 do if a[y][x2] > max then begin fBreak := true; break; end;
if fBreak then continue;
for x2:= x + 1 to M do if a[y][x2] > max then begin fBreak := true; break; end;
if fBreak then continue;
for y2:= 1 to y - 1 do if a[y2][x] < min then begin fBreak := true; break; end;
if fBreak then continue;
for y2:= y + 1 to N do if a[y2][x] < min then begin fBreak := true; break; end;
if fBreak then continue;
eCount := eCount + 1;
Writeln( 'Elem[',y,'][',x,']: ', a[y][x] );
end;
until (eCount <> 0) or (not DEV_FRB_EL_NEED);
if eCount = 0 then
Writeln('Elem notfound');
printTabl(a);
Writeln('-------------------------------');
for y:=1 to N do
sortLine( a[y] , true );
printTabl(a);
end.
Объяснение кода листинга программы
- В коде объявлены три типа данных:
item_t,line_tиtabl_t. - Установлены константы
MиNдля представления количества строк и столбцов в матрице соответственно. - Объявлены переменные
a,x,y,x2иy2для представления строк и столбцов матрицы. - Создана функция
printLine, которая выводит элементы строки матрицы. - Создана функция
printTabl, которая выводит всю матрицу. - Создана функция
sortLine, которая сортирует элементы строки матрицы по возрастанию. - В основной части кода сначала генерируются случайные значения для всех элементов матрицы.
- Затем происходит поиск минимального и максимального элементов в каждой строке и столбце матрицы.
- Если найдены минимальный и максимальный элементы, то они считаются
седловым элементоми матрица упорядочивается по возрастанию. - После этого вызывается функция
printTablдля вывода отсортированной матрицы. - В конце кода выводится сообщение, если седловый элемент не найден.