Permutations: Difference between revisions
Content added Content deleted
(→{{header|Euphoria}}: Euphoria example added) |
(+pascal) |
||
Line 1,083: | Line 1,083: | ||
=={{header|PARI/GP}}== |
=={{header|PARI/GP}}== |
||
<lang>vector(n!,k,numtoperm(n,k))</lang> |
<lang>vector(n!,k,numtoperm(n,k))</lang> |
||
=={{header|Pascal}}== |
|||
<lang pascal>var p: array[1 .. 20] of integer; |
|||
is_last: boolean; |
|||
n: integer; |
|||
procedure next; |
|||
var i, j, k, t: integer; |
|||
begin |
|||
is_last := true; |
|||
i := n - 1; |
|||
while i > 0 do |
|||
begin |
|||
if p[i] < p[i + 1] then |
|||
begin |
|||
is_last := false; |
|||
break; |
|||
end; |
|||
i := i - 1; |
|||
end; |
|||
if not is_last then |
|||
begin |
|||
j := i + 1; |
|||
k := n; |
|||
while j < k do |
|||
begin |
|||
t := p[j]; |
|||
p[j] := p[k]; |
|||
p[k] := t; |
|||
j := j + 1; |
|||
k := k - 1; |
|||
end; |
|||
j := n; |
|||
while p[j] > p[i] do j := j - 1; |
|||
j := j + 1; |
|||
t := p[i]; |
|||
p[i] := p[j]; |
|||
p[j] := t; |
|||
end; |
|||
end; |
|||
procedure print; |
|||
var i: integer; |
|||
begin |
|||
for i := 1 to n do write(p[i], ' '); |
|||
writeln; |
|||
end; |
|||
procedure init; |
|||
var i: integer; |
|||
begin |
|||
n := 0; |
|||
while (n < 1) or (n > 10) do |
|||
begin |
|||
write('Enter n (1 <= n <= 10): '); |
|||
readln(n); |
|||
end; |
|||
for i := 1 to n do p[i] := i; |
|||
end; |
|||
begin |
|||
init; |
|||
repeat |
|||
print; |
|||
next; |
|||
until is_last; |
|||
end.</lang> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |
||
Line 1,122: | Line 1,192: | ||
4c2a |
4c2a |
||
</pre> |
</pre> |
||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |
||
This is generic code that works with any ordered type. To force lexicographic ordering, change <tt>after</tt> to <tt>gt</tt>. To force numeric order, replace it with <tt>></tt>. |
This is generic code that works with any ordered type. To force lexicographic ordering, change <tt>after</tt> to <tt>gt</tt>. To force numeric order, replace it with <tt>></tt>. |