Найти седловой элемент матрицы и упорядочить элементы строк матрицы по возрастанию - 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.

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

  1. В коде объявлены три типа данных: item_t, line_t и tabl_t.
  2. Установлены константы M и N для представления количества строк и столбцов в матрице соответственно.
  3. Объявлены переменные a, x, y, x2 и y2 для представления строк и столбцов матрицы.
  4. Создана функция printLine, которая выводит элементы строки матрицы.
  5. Создана функция printTabl, которая выводит всю матрицу.
  6. Создана функция sortLine, которая сортирует элементы строки матрицы по возрастанию.
  7. В основной части кода сначала генерируются случайные значения для всех элементов матрицы.
  8. Затем происходит поиск минимального и максимального элементов в каждой строке и столбце матрицы.
  9. Если найдены минимальный и максимальный элементы, то они считаются седловым элементом и матрица упорядочивается по возрастанию.
  10. После этого вызывается функция printTabl для вывода отсортированной матрицы.
  11. В конце кода выводится сообщение, если седловый элемент не найден.

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


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

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

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