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