Напечатать индексы всех седловых точек матрицы, используя динамические структуры - 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.
Объяснение кода листинга программы
- Создаётся переменная
a
типаTmatr
, которая представляет собой массив указателей на строки. - Запрашивается количество строк и столбцов матрицы с помощью функции
readln()
. - Выделяется память под указатели на строки с помощью функции
getmem()
. - Вводятся элементы матрицы с помощью цикла
for
. - Вычисляются максимальные и минимальные значения элементов матрицы с помощью циклов
for
. - Проверяется наличие седловых точек в матрице с помощью условного оператора
if
. - Если седловые точки есть, то выводится их индекс с помощью функции
writeln()
. - В конце программы выводится сообщение о наличии или отсутствии седловых точек.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д