Другие языки программирования и технологии

нужна помощь с прогой на паскале. сортировка матрицы. в данной проге необходимо в начале вывести исходную матрицу в "кра

сортировка матрицы. в данной проге необходимо в начале вывести исходную матрицу в "красивом" виде на экран. можете подсказать в какую часть программы и что именно нужно вставить буду очень рада если исправите ошибки..

Отсортировать столбцы двумерного массива чисел (n х m) по неубыванию значений элементов в первой строке.

program ss2;

const l=100;

type arr = array[1..l] of integer;

var
a : array[1..l, 1..l] of integer;
b : arr;
i, j,n,m : integer;

procedure sortv(var a:arr; x: integer);
var
i,j,k : integer;

begin
for j:=2 to x do
begin
k:=a[j];
i:=j-1;
while (i>=1)and(a>k) do
begin
a[i+1]:=a;
dec(i);
end;
a[i+1]:=k;
end;
end;
begin
writeln('ââåäèòå êîëè÷åñòâî ñòðîê è ñòîëáöîâ');
readln(n,m);
writeln('ââåäèòå ýëåìåíòû ìàññèâà');
for i:=1 to n do
begin
for j:=1 to m do
read(a[i,j]);
end;

for j:= 1 to m do
begin
for i:= 1 to n do
begin
b:=a[i,j];
end;
sortv(b,n);
for i:= 1 to n do
begin
a[i,j]:=b;
end;
end;

for i:=1 to n do
begin
for j:=1 to m do write(a[i,j],' ');
writeln;
end;

end.
Леха Волк
Леха Волк
268
Как-то вот так:

const
l = 100;

type
arr = array[1..l] of integer;

var
a: array[1..l, 1..l] of integer;
b: arr;
i, j, n, m: integer;

procedure sortv(var a: arr; x: integer);
var
i, j, k: integer;

begin
for j := 2 to x do
begin
k := a[j];
i := j - 1;
while (i >= 1) and (a[ i ] > k) do
begin
a[i + 1] := a[ i ];
dec(i);
end;
a[i + 1] := k;
end;
end;

function LengthNum(N : Integer; L : Byte) : Byte;
function Max(A, B : Byte) : Byte;
begin
if A > B then Max := A else Max := B;
end;
var Res : Byte;
begin
if N = 0 then begin LengthNum := Max(1, L); Exit; end;
Res := 0; if N < 0 then begin Inc(Res); N := Abs(N); end;
while N > 0 do
begin
Inc(Res); N := N div 10;
end;
LengthNum := Max(L, Res);
end;

var
MaxL : Byte;

begin
WriteLn('Введите размерность массива NxM:');
Write('N = '); ReadLn(N);
Write('M = '); ReadLn(M);
WriteLn('Введите значения массива: ');
MaxL := 0;
for i := 1 to n do
for j := 1 to m do
begin
Write('A[', i, ',', j, '] = '); ReadLn(a[i, j]);
MaxL := LengthNum(a[i, j], MaxL);
end;
Inc(MaxL);

WriteLn('Исходная матрица: ');
for i := 1 to n do
begin
for j := 1 to m do Write(a[i, j]:MaxL);
WriteLn;
end;

for j := 1 to M do
begin
for i := 1 to N do b[ i ] := a[i, j];
sortv(b, n);
for i := 1 to n do a[i, j] := b[ i ];
end;

WriteLn('Матрица отсортированная по столбцам: ');
for i := 1 to n do
begin
for j := 1 to m do Write(a[i, j]:MaxL);
WriteLn;
end;

end.

Убрал лишние операторные скобки.
Добавил информативности.
Вот такой результат работы:

Введите размерность массива NxM:
N = 3
M = 3
Введите значения массива:
A[1,1] = 159
A[1,2] = 951
A[1,3] = -753
A[2,1] = 159
A[2,2] = -852
A[2,3] = -654
A[3,1] = +123
A[3,2] = -321
A[3,3] = 123
Исходная матрица:
__159__951_−753
__159_−852_−654
__123_−321__123
Матрица отсортированная по столбцам:
__123_ −852_−753
__159_−321_−654
__159__951__123

Майл съел лишние пробелы (я их заменил на символ «_»), но в Паскале всё должно получиться красиво!
Только со значением константы l небольшой перебор.
Вполне достаточно 10 или 20!
EZ
Erkebulan Zhumahanov
73 383
Лучший ответ