Вернуть индексы всех седловых точек матрицы - Pascal
Формулировка задачи:
Решение задачи: «Вернуть индексы всех седловых точек матрицы»
{Для матрицы 3 x 3:} {5 8 9} {4 6 18} {3 5 28} {Ответ: a[1,3], a(1,1)} uses crt; const n=10; {число строк} m=15; {число столбцов} var a:array [1..n,1..m] of integer; i,j,k,min_j,max_j:integer; b:boolean; begin clrscr; {очистить экран} randomize; {сменить генератор псевдослучайных чисел} writeln('Массив A:'); for i:=1 to n do for j:=1 to m do begin write('Введите a[',i,',',j,']='); readln(a[i,j]); end; clrscr; {очистить экран} writeln('Массив A:'); for i:=1 to n do begin for j:=1 to m do write(a[i,j]:3); writeln; {перевести курсор на новую строку} end; writeln('Седловые точки (a[i,j] - max в строке, a(i,j) - min в строке):'); for i:=1 to n do {по всем строкам} begin min_j:=1; {индекс для min-элемента в строке} max_j:=1; {индекс для max-элемента в строке} for j:=2 to m do {по всем столбцам i-строки} begin if a[i,min_j]>a[i,j] then min_j:=j; if a[i,max_j]<a[i,j] then max_j:=j; end; b:=true; {установить признак выполнения условия "седловости": max - в строке, min - в столбце} for k:=1 to n do if a[i,max_j]>a[k,max_j] then {по всем строкам: если максимум в i-строке не есть минимум в соответствующем столбце, то:} begin b:=false; {очистить признак выполнения условия "седловости"} break; {выйти из цикла по k} end; if b then write('a[',i,',',max_j,'], '); b:=true; {установить признак выполнения условия "седловости": max - в строке, min - в столбце} for k:=1 to n do if a[i,min_j]<a[k,min_j] then {по всем строкам: если максимум в i-строке не есть минимум в соответствующем столбце, то:} begin b:=false; {очистить признак выполнения условия "седловости"} break; {выйти из цикла по k} end; if b then write('a(',i,',',min_j,'), '); end; readln; {задержать экран} end.
Объяснение кода листинга программы
{Для матрицы 3 x 3:} {5 8 9} {4 6 18} {3 5 28} {Ответ: a[1,3], a(1,1)} uses crt; const n=10; var a:array [1..n,1..m] of integer; i,j,k,min_j,max_j:integer; b:boolean; begin clrscr; randomize; writeln('Массив A:'); for i:=1 to n do for j:=1 to m do begin write('Введите a[',i,',',j,']='); readln(a[i,j]); end; clrscr; writeln('Массив A:'); for i:=1 to n do begin for j:=1 to m do write(a[i,j]:3); writeln; end; writeln('Седловые точки (a[i,j] — max в строке, a(i,j) — min в строке):'); for i:=1 to n do begin min_j:=1; max_j:=1; for j:=2 to m do begin if a[i,min_j]>a[i,j] then min_j:=j; if a[i,max_j]<a[i,j] then max_j:=j; end; b:=true; for k:=1 to n do if a[i,max_j]>a[k,max_j] then begin b:=false; break; end; if b then write('a[',i,',',max_j,'], '); b:=true; for k:=1 to n do if a[i,min_j]<a[k,min_j] then begin b:=false; break; end; if b then write('a(',i,',',min_j,'), '); end; readln; end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д