Дана квадратная матрица порядка M. Вывести минимальные из элементов каждой ее диагонали, параллельной главной, начиная с одноэлементной диагонали A[1,M] или A[1,1] — Pascal(Паскаль)

uses crt;
const nmax=20;//максимальный размер матрицы, больше и не нужно
var m:array[1..nmax,1..nmax]of integer;
    n,i,j,c,k,l,p:byte;
    min:integer;
begin
clrscr;
randomize;
write('Введите размерность матрицы до ',nmax,' n= ');
readln(n);
writeln('Матрица:');
for i:=1 to n do
 begin
  for j:=1 to n  do
   begin
    m[i,j]:=random(20)+1;
    write(m[i,j]:4);
   end;
  writeln;
 end;
for l:=1 to 2*n-1 do  //по количеству диагоналей, включая главную
  begin
    if l<=n then  // ниже диагонали, начиная с a[1,n], если нужны только параллельные
                  //без главной, то написать if l<n
      begin
       min:=m[n-l+1,1]; //примем за мин первый элемент в диагонали
       for i:=n-l+1 to n do  //начало и конец диагонали
       if m[i,i-n+l]<min  then min:=m[i,i-n+l]; //сама диагональ
       writeln('Минимальный на диагонали ',l,'=',min:4);
       end
    else if l>n then    //то же самое выше диагонали
      begin
       min:=m[2*n-l,n];
       for i:=1 to 2*n-l do
       if m[i,i-n+l]<min then min:=m[i,i-n+l];
       writeln('Минимальный на диагонали ',l,'=',min:4);
      end;
  end;
end.

Следующий вариант

uses crt;
const nmax=20;{максимальный размер матрицы, больше и не нужно}
type matr=array[1..nmax,1..nmax]of integer;
procedure Matrix(var m:matr;var n:byte);
var i,j:byte;
begin
write('Введите размерность матрицы до ',nmax,' n= ');
readln(n);
writeln('Матрица:');
for i:=1 to n do
 begin
  for j:=1 to n  do
   begin
    m[i,j]:=random(20)+1;
    write(m[i,j]:4);
   end;
  writeln;
 end;
writeln;
end;
procedure MinDg(m:matr;n:byte);
var i,j,c,k,l,p:byte;
    min:integer;
begin
for l:=1 to 2*n-1 do  {по количеству диагоналей, включая главную}
  begin
    if l<=n then  {ниже диагонали, начиная с a[1,n], если нужны только параллельные
                  без главной, то написать if l<n}
      begin
       min:=m[n-l+1,1]; {примем за мин первый элемент в диагонали}
       for i:=n-l+1 to n do  {начало и конец диагонали}
       if m[i,i-n+l]<min  then min:=m[i,i-n+l]; {сама диагональ}
       writeln('Минимальный на диагонали ',l:2,'=',min:4);
       end
    else if l>n then    {то же самое выше диагонали}
      begin
       min:=m[2*n-l,n];
       for i:=1 to 2*n-l do
       if m[i,i-n+l]<min then min:=m[i,i-n+l];
       writeln('Минимальный на диагонали ',l:2,'=',min:4);
      end;
  end;
end;
var a:matr;
    n:byte;
begin
clrscr;
randomize;
Matrix(a,n);
MinDg(a,n);
readln
end.

Leave a Comment

− 3 = 2