Напечатать индексы всех седловых точек матрицы, используя динамические структуры - Turbo Pascal

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

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

Элемент матрицы назовем седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце. Для заданной целой матрицы размером n х n напечатать индексы всех ее седловых точек, используя динамические структуры.

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

textual
Листинг программы
uses crt;
const nmax=10;
type
  Tmas=^TTmas;{одна строка матрицы}
  TTmas=array[1..1] of integer;
  Tmatr=^TTmatr;{матрица-массив указателей на строки}
  TTmatr=array[1..1] of Tmas;
var a:Tmatr;
    m,n,i,j,k,max,jmax,imax,min,imin,jmin:integer;
    f:boolean;
begin
clrscr;
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' m=');
readln(m);
until m in [1..nmax];
getmem(a,sizeof(TTmatr)*n);{выделяем память под указатели на строки}
for i:=1 to m do
getmem(a^[i],sizeof(integer)*m);{для каждой строки память для хранения данных}
writeln('Введите элементы матрицы, целые числа:');
for i:=1 to n do
for j:=1 to m do
 begin
  write('a[',i,',',j,']=');
  readln(a^[i]^[j]);
 end;
clrscr;
writeln('Матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
  write(a^[i]^[j]:4);
  writeln;
 end;
f:=false;
for i:=1 to n do
 begin
  max:=a^[i]^[1];jmax:=1;
  for j:=1 to m do
  if a^[i]^[j]>max then
   begin
    max:=a^[i]^[j];
    jmax:=j;
   end;
  min:=a^[1]^[jmax];
  imin:=1;
  for k:=1 to n do
  if a^[k]^[jmax]<min then
    begin
      min:=a^[k]^[jmax];
      imin:=i;
    end;
  if min=max then
   begin
    f:=true;
    writeln('Седловая точка a[',imin,',',jmax,']=',a^[imin]^[jmax])
   end;
  min:=a^[i]^[1];jmin:=1;
  for j:=1 to m do
  if a^[i]^[j]<min then
   begin
    min:=a^[i]^[j];
    jmin:=j;
   end;
  max:=a^[1]^[jmin];
  imax:=1;
  for k:=1 to n do
  if a^[k]^[jmin]>max then
    begin
      max:=a^[k]^[jmin];
      imax:=i;
    end;
  if min=max then
   begin
    f:=true;
    writeln('Седловая точка a[',imax,',',jmin,']=',a^[imax]^[jmin])
   end;
 end;
if not f then write('Седловых точек нет');
readln
end.

Объяснение кода листинга программы

  1. Создаётся переменная a типа Tmatr, которая представляет собой массив указателей на строки.
  2. Запрашивается количество строк и столбцов матрицы с помощью функции readln().
  3. Выделяется память под указатели на строки с помощью функции getmem().
  4. Вводятся элементы матрицы с помощью цикла for.
  5. Вычисляются максимальные и минимальные значения элементов матрицы с помощью циклов for.
  6. Проверяется наличие седловых точек в матрице с помощью условного оператора if.
  7. Если седловые точки есть, то выводится их индекс с помощью функции writeln().
  8. В конце программы выводится сообщение о наличии или отсутствии седловых точек.

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


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

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

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