дана квадратная матрица размером n*n, содержащая целые положительные числа. Определить сумму элементов в каждом столбце матрицы и упорядочить номера столбцов по убыванию значений найденных сумм с помощью сортировки выбором. Вывести упорядоченный список номеров столбцов и соответствующих им сумм — Pascal(Паскаль)

uses crt;
const nmax=20;
var a,b:array[1..nmax,1..nmax] of integer;
    n,i,j,imx:byte;
    sm,x:integer;
begin
clrscr;
randomize;
repeat
write('Размер матрицы=');
readln(n);
until n in [1..nmax];
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random(10)+1;
for j:=1 to n do
 begin
  sm:=0;
  for i:=1 to n do
  sm:=sm+a[i,j];//считаем суммы в столбцах
  b[1,j]:=j;//номер столбца
  b[2,j]:=sm;//сумма
 end;
writeln('Исходная матрица:');
for i:=1 to n do
 begin
   write(' ':5);
   for j:=1 to n do//вывод матрицы
   write(a[i,j]:4);
   writeln;
 end;
write('Сумма');
for i:=1 to n do
write(b[2,i]:4);//вывод сумм
writeln;
writeln;
//сортировка двух строк матрицы по убыванию выбором максимального элемента
for i:=1 to n-1 do
 begin
  imx:=i;
  for j:=i+1 to n do
  if b[2,j]>b[2,imx] then imx:=j;
  x:=b[2,i];
  b[2,i]:=b[2,imx];
  b[2,imx]:=x;
  x:=b[1,i];
  b[1,i]:=b[1,imx];
  b[1,imx]:=x;
 end;
writeln('Номера столбцов по убыванию сумм:');
write('Номер:');
for i:=1 to n do
write(b[1,i]:4);
writeln;
write('Сумма:');
for i:=1 to n do
write(b[2,i]:4);
readln
end.

Вариант 2

uses crt;
const nmax=20;
type matr=array[1..nmax,1..nmax] of integer;
procedure Vvod(var a:matr;var n:byte;var b:matr);
var i,j:byte;
    sm:integer;
begin
repeat
write('Размер матрицы=');
readln(n);
until n in [1..nmax];
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random(10)+1;
for j:=1 to n do
 begin
  sm:=0;
  for i:=1 to n do
  sm:=sm+a[i,j];{считаем суммы в столбцах}
  b[1,j]:=j;{номер столбца}
  b[2,j]:=sm;{сумма}
 end;
writeln('Исходная матрица:');
for i:=1 to n do
 begin
   write(' ':5);
   for j:=1 to n do{вывод матрицы}
   write(a[i,j]:4);
   writeln;
 end;
write('Сумма');
for i:=1 to n do
write(b[2,i]:4);{вывод сумм}
writeln;
writeln;
end;
procedure Sort(var b:matr;n:byte);
var i,j,imx:byte;
    x:integer;
begin
{сортировка двух строк матрицы по убыванию выбором максимального элемента}
for i:=1 to n-1 do
 begin
  imx:=i;
  for j:=i+1 to n do
  if b[2,j]>b[2,imx] then imx:=j;
  x:=b[2,i];
  b[2,i]:=b[2,imx];
  b[2,imx]:=x;
  x:=b[1,i];
  b[1,i]:=b[1,imx];
  b[1,imx]:=x;
 end;
writeln('Номера столбцов по убыванию сумм:');
write('Номер:');
for i:=1 to n do
write(b[1,i]:4);
writeln;
write('Сумма:');
for i:=1 to n do
write(b[2,i]:4);
end;
var a,b:matr;
    n:byte;
begin
clrscr;
randomize;
Vvod(a,n,b);
Sort(b,n);
readln
end.

Leave a Comment

+ 56 = 64