Type
M = array[,] of integer;
procedure Swap(var a: M; i: integer; j: integer);
//обменивает местами элементы массива a[i,i] и a[i,j]
var
buff: integer;
begin
if i <> j then begin
buff := a[i, i]; a[i, i] := a[i, j]; a[i, j] := buff
end
end;
function GetColMin(a: M; i: integer): integer;
// возвращает номер столбца, в котором найден минимальный элемент
// по строке с номером i, т.е. a[i,?]=min
var
j, vmin, jm: integer;
begin
vmin := 32766;
for j := 0 to Length(a, 1) - 1 do
if vmin > a[i, j] then begin
vmin := a[i, j]; jm := j
end;
Result := jm
end;
procedure SwapMatrix(var a: M);
// меняет местами в массиве a[n,n] минимальный по строке элемент с
// элементом, лежащим на главной диагонали.
// Обращается к функции GetColMin и процедуре Swap
var
i: integer;
begin
for i := 0 to Length(a, 0) - 1 do Swap(a, i, GetColMin(a, i))
end;
procedure WriteMas(a: M; title: string);
// выводит заголовок, а потом массив построчно
var
i, j, n: integer;
begin
n := Length(a, 0) - 1;
writeln(title);
for i := 0 to n do
begin
for j := 0 to n do write(a[i, j]:5);
writeln
end
end;
procedure CreateMas(var a: M; n: integer; p: integer; q: integer);
// Создает массив a[0..n-1,0..n-1] и заполняет его
// данными используя датчик случайных чисел с мощностью "р"
// и минимальным значением q
var
i, j: integer;
begin
Randomize;
SetLength(a, n, n);
for i := 0 to n - 1 do
for j := 0 to n - 1 do
a[i, j] := random(p) + q
end;
const
n1 = 3;
n2 = 5;
n3 = 8;
var
a, b, c: M;
begin
CreateMas(a, n1, 100, -50);
WriteMas(a, 'Исходный массив а');
SwapMatrix(a);
WriteMas(a, 'Результирующий массив а');
CreateMas(b, n2, 300, -150);
WriteMas(b, 'Исходный массив b');
SwapMatrix(b);
WriteMas(b, 'Результирующий массив b');
CreateMas(c, n3, 500, -250);
WriteMas(c, 'Исходный массив c');
SwapMatrix(c);
WriteMas(c, 'Результирующий массив c');
end.
Тестовый прогон:
Исходный массив а
14 23 7
-50 31 36
-39 -43 -38
Результирующий массив а
7 23 14
31 -50 36
-39 -38 -43
Исходный массив b
-91 6 -21 -139 -141
130 -99 44 131 143
93 5 97 -111 43
-113 15 125 88 31
-115 -39 27 124 144
Результирующий массив b
-141 6 -21 -139 -91
130 -99 44 131 143
93 5 -111 97 43
88 15 125 -113 31
144 -39 27 124 -115
Исходный массив c
-234 211 207 -131 151 -228 197 -163
147 5 180 -135 -181 217 -178 -3
178 -142 -149 -44 -195 -224 -187 -173
-24 62 28 -134 -11 -216 -59 83
62 -86 48 152 -44 -49 -218 92
91 -60 201 206 -160 -135 -131 77
161 -184 -204 113 -181 199 223 240
147 129 143 -162 -6 80 98 113
Результирующий массив c
-234 211 207 -131 151 -228 197 -163
147 -181 180 -135 5 217 -178 -3
178 -142 -224 -44 -195 -149 -187 -173
-24 62 28 -216 -11 -134 -59 83
62 -86 48 152 -218 -49 -44 92
91 -60 201 206 -135 -160 -131 77
161 -184 223 113 -181 199 -204 240
147 129 143 113 -6 80 98 -162