Найти седловой элемент матрицы и упорядочить элементы строк матрицы по возрастанию - 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
для вывода отсортированной матрицы. - В конце кода выводится сообщение, если седловый элемент не найден.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д