Сформировать двухмерный массив из целых чисел. В этом массиве найти минимальный элемент и столбец с этим элементом поменять местами с первым столбцом.

Потом строку с этим же минимальным элементом поменять местами с первой строкой. В итоге этот элемент окажется в левом верхнем углу. Потом найти минимальный элемент массива снова но уже без первой строки и столбца и таким же образом поменять местами со второй строкой и столбцом. И так далее. В итоге на главной диагонали окажутся все минимальные элементы. 

uses crt;
const nmax=20;
type matr=array[1..nmax,1..nmax] of integer;
procedure Obmen(var mt:matr;k,n:byte);
var i,j,imn,jmn:byte;
    x:integer;
begin
imn:=k;jmn:=k;
for i:=k to n do
for j:=k to n do
if mt[i,j]<mt[imn,jmn] then
 begin
  imn:=i;
  jmn:=j;
 end;
for i:=k to n do
 begin
  x:=mt[k,i];
  mt[k,i]:=mt[imn,i];
  mt[imn,i]:=x;
 end;
for i:=k to n do
 begin
  x:=mt[i,k];
  mt[i,k]:=mt[i,jmn];
  mt[i,jmn]:=x;
 end;
for i:=1 to n do
 begin
  for j:=1 to n do
  if((i=k)and(j>=k))or((i>=k)and(j=k)) then
   begin
    textcolor(k+1);
    write(mt[i,j]:4);
   end
  else
   begin
    textcolor(15);
    write(mt[i,j]:4);
   end;
  writeln;
 end;
writeln;
write('Press Enter...');
readln;
clrscr
end;
 
var a:matr;
    n,i,j:byte;
begin
clrscr;
randomize;
repeat
write('Размер матрицы до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=random(40)+10;
    write(a[i,j]:4);
   end;
  writeln;
 end;
writeln;
for i:=1 to n-1 do
Obmen(a,i,n);
end.

Leave a Comment

− 1 = 5