Помогите пожалуйста! что-то совсем голова не варит((
Требуется отсортировать трёхмерный массив по возрастанию.
как я понимаю, проще это будет сделать, преобразовав данный массив в одномерный.
Подскажите, как выполнить преобразование?!
uses
crt;
var
n,m,k,i,j,t:integer;
a:array[1..10,1..10,1..10] of integer;
procedure swap(var x,y,z:integer);
var t,q:integer;
begin
t := x;
x := y;
y := z;
z := t;
end;
begin
clrscr;
writeln ('vvod poryadok matrica n');
readln (n);
m:=n; k:=n;
randomize;
for i := 1 to n do
for j := 1 to m do
for t := 1 to k do
a[i, j, t] := Random(10);
for i := 1 to n do
begin
for j := 1 to m do
begin
for t := 1 to k do
write(a[i,j,t]);
writeln;
end;
end;
for k:=1 to n-1 do
for j:=1 to n-k do
for i:=1 to n-j do
begin
if (a[i,j,k] > a[i+1,j,k]) and (a[i,j,k] > a[i+2,j,k]) then
swap(a[i,j,k],a[i+1,j,k],a[i+2,j,k]);
end;
for i := 1 to n do
begin
for j := 1 to m do
begin
for t := 1 to k do
write(a[i,j,t]);
writeln;
end;
end;
end.
type
tElement= integer;
const
n= 3;
m= 6;
k= 8;
l= n*m*k;
var
a: array [1..n,1..m,1..k] of integer;
b: array [1..l] of integer absolute a;
procedure Show;
var
i,j,t: integer;
begin
for i:= 1 to n do begin
WriteLn(i,':');
for j:= 1 to m do begin
for t:= 1 to k do Write(a[i,j,t]:4);
WriteLn
end;
WriteLn
end
end;
var
i,j,t: integer;
buf: tElement;
begin
for i := 1 to n do
for j := 1 to m do
for t := 1 to k do
a[i, j, t] := Random(100)-49;
Show;
{ Сквозная сортировка }
for i:=2 to l do
for j:=l downto i do if b[j-1]>b[j] then begin
buf:= b[j-1];
b[j-1]:= b[j];
b[j]:= buf
end;
WriteLn('Отсортированный массив:');
Show;
ReadLn
end.
type
vector = array[1 .. L] of telement;
// и дальше где-то привести:
vector(a)[i] := ...