Вернуть индексы всех седловых точек матрицы - Pascal

Узнай цену своей работы

Формулировка задачи:

Товарищи программисты помогите мне пожалуйста решить одну задачку. Завтра мне надо сдавать зачёт, а без этой задачи меня допустят...а если я не сдам его мне отчислят!! Элемент матрицы назовем "седловой" точкой, если он является наименьшим в своей строке и наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце. Для заданной цепи матрицы размером 10 на 15 вернуть индексы всех ее седловых точек.

Решение задачи: «Вернуть индексы всех седловых точек матрицы»

textual
Листинг программы
{Для матрицы 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.267 из 5
Похожие ответы