Упорядочить элементы матрицы по правилу (процедуры и функции) - PascalABC.NET
Формулировка задачи:
Пусть задана вещественная матрица A (n x n).
Упорядочить элементы матрицы: a) по неубыванию значений максимальных элементов в строках;
b) по неубыванию сумм элементов строк.
Решение задачи: «Упорядочить элементы матрицы по правилу (процедуры и функции)»
textual
Листинг программы
var a:array[,] of real;
n,i,j,l:byte;
sm,mx,b:real;
begin
randomize;
write('Размер матрицы n=');
readln(n);
setlength(a,n,n+2);
//вычисление сумм и макс. в строках и запись их в дополнительные столбцы
for i:=0 to n-1 do
begin
sm:=0;
for j:=0 to n-1 do
begin
a[i,j]:=10*random;
sm:=sm+a[i,j];
if j=0 then mx:=a[i,0]
else if a[i,j]>mx then mx:=a[i,j];
end;
a[i,n]:=mx;
a[i,n+1]:=sm;
end;
writeln('Исходный массив:');
writeln('Макс':n*5+8,' Сумма');
for i:=0 to n-1 do
begin
for j:=0 to n+1 do
if j=n then write(a[i,j]:8:1)
else if j=n+1 then write(a[i,j]:6:1)
else write(a[i,j]:5:1);
writeln;
end;
//перестановка строк по неубыванию макс. элементов(по предпоследнему столбцу)
for i:=0 to n-2 do
for l:=i+1 to n-1 do
if a[i,n]>a[l,n] then
for j:=0 to n+1 do
begin
b:=a[i,j];
a[i,j]:=a[l,j];
a[l,j]:=b;
end;
writeln('Строки по неубыванию макс. элементов:');
writeln('Макс':n*5+8,' Сумма');
for i:=0 to n-1 do
begin
for j:=0 to n+1 do
if j=n then write(a[i,j]:8:1)
else if j=n+1 then write(a[i,j]:6:1)
else write(a[i,j]:5:1);
writeln;
end;
//перестановка строк по неубыванию сумм(по последнему столбцу)
for i:=0 to n-2 do
for l:=i+1 to n-1 do
if a[i,n+1]>a[l,n+1] then
for j:=0 to n+1 do
begin
b:=a[i,j];
a[i,j]:=a[l,j];
a[l,j]:=b;
end;
writeln('Строки по неубыванию сумм:');
writeln('Макс':n*5+8,' Сумма');
for i:=0 to n-1 do
begin
for j:=0 to n+1 do
if j=n then write(a[i,j]:8:1)
else if j=n+1 then write(a[i,j]:6:1)
else write(a[i,j]:5:1);
writeln;
end;
end.
Объяснение кода листинга программы
- Объявлены переменные: a (массив), n (размер матрицы), i, j, l (количество строк, столбцов), sm, mx, b (сумма, максимальное значение, буфер).
- Задается размер матрицы.
- Вычисляются суммы и максимальные значения в строках, записываются в дополнительные столбцы.
- Выводится исходный массив.
- Строки переупорядочиваются по неубыванию максимального значения элементов (по предпоследнему столбцу).
- Выводится массив с переставленными строками.
- Строки переупорядочиваются по неубыванию суммы элементов (по последнему столбцу).
- Выводится массив с переставленными строками.