Первая работает со статическим массивом, вторая с динамическим и вот вторая почему-то отрабатывает не верно((
1-я
uses crt;
const
n = 3;
type
tarr = array [1..n] of integer;
procedure pr(const arr: tarr);
var
i: integer;
begin
writeln;
for i := 1 to n do write(arr[i]:3);
end;
procedure sw(var arr: tarr; const p, q: integer);
var
T: integer;
begin
T := arr[p];
arr[p] := arr[q];
arr[q] := T;
end;
procedure nx(arr: tarr; i: integer);
var
j: integer;
begin
for j := i to n do begin
if i <> j then begin
sw(arr, i, j);
pr(arr);
end;
nx(arr, i + 1);
end;
end;
var
a: tarr = (1, 2, 3);
begin
clrscr;
pr(a);
nx(a, 1);
readln;
end.
2-я
{$R-}
uses crt;
const
n = 3;
type
parr = ^tarr;
tarr = array [1..1] of integer;
procedure pr(const arr: parr);
var
i: integer;
begin
writeln;
for i := 1 to n do write(arr^[i]:3);
end;
procedure sw(var arr: parr; const p, q: integer);
var
T: integer;
begin
T := arr^[p];
arr^[p] := arr^[q];
arr^[q] := T;
end;
procedure nx(arr: parr; i: integer);
var
j: integer;
begin
for j := i to n do begin
if i <> j then begin
sw(arr, i, j);
pr(arr);
end;
nx(arr, i + 1);
end;
end;
var
a: parr;
i: integer;
begin
clrscr;
GetMem(a, n * sizeof(tarr));
for i := 1 to n do a^[i] := i;
pr(a);
nx(a, 1);
FreeMem(a, n * sizeof(tarr));
readln;
end.