Цитата:
Сообщение от FreeManShokave
Давай на паскале) Я матрицу сделать и по убывающей составить делаю без проблем, но как ее сделать по спирали понятия не имею)
|
Даю.
Я уж тут и ненавистную СИ-шную нумерацию с 0 применил (дико неудобно, когда работаешь с матрицами). Как-то так:
Код:
Const
M=8;
N=10;
Var
A:Array[0..M-1,0..N-1] of Integer;
B:Array[0..M*N-1] of Integer;
i,j,k,p,D:Integer;
Begin
Randomize;
for i:=0 to M-1 do
begin
for j:=0 to N-1 do
begin
A[i,j]:=Random(100);
write(A[i,j]:4);
B[i*N+j]:=A[i,j];
end;
writeln;
end;
writeln;
writeln;
for i:=0 to M*N-2 do
for j:=0 to M*N-2-i do
if B[j]<B[j+1] then
begin
D:=B[j];
B[j]:=B[j+1];
B[j+1]:=D;
end;
p:=-1;
k:=-1;
While p<=M*N-1 do
begin
k:=k+1;
i:=k;
for j:=k to N-2-k do
begin
p:=p+1;
if p<=M*N-1 then A[i,j]:=B[p];
end;
j:=N-1-k;
for i:=k to M-2-k do
begin
p:=p+1;
if p<=M*N-1 then A[i,j]:=B[p];
end;
i:=M-1-k;
for j:=N-1-k downto k+1 do
begin
p:=p+1;
if p<=M*N-1 then A[i,j]:=B[p];
end;
j:=k;
for i:=M-1-k downto k+1 do
begin
p:=p+1;
if p<=M*N-1 then A[i,j]:=B[p];
end;
end;
for i:=0 to M-1 do
begin
for j:=0 to N-1 do write(A[i,j]:4);
writeln;
end;
Readln
End.