Deprecated: Function set_magic_quotes_runtime() is deprecated in /DISK2/WWW/lokiware.info/mff/wakka.php on line 35
Následující algoritmy jsme si popisovali na cvičeních koncem listopadu s Jakubem Bystroněm. Generují permutace, kombinace, variace.
program KombinaceASpol(input, output);
{
Chybel jsem na permutace, ale jinak je to vice mene podle toho, co jsme s Jakubem
Bystronem delali na cvicenich koncem listopadu. I ty permutace nejspis. -- Adam Nohejl
}
const
maxn = 100;
var
{ parametry variace/kombinace/...: }
n: integer;
k: integer;
pouzito: array[1..maxn] of boolean; { byla dana cislice pouzita? }
c: array[0..maxn] of integer; { sem se ukladaji vysledky, 0 je pomocna pro kombinace }
{ Vypis globalni promenne c, viz vyse: }
procedure vypis;
var i : integer;
begin
for i := 1 to k do
write(' ', c[i]);
writeln;
end;
{ Algoritmus: permutace(k) }
procedure permutace(i: integer);
var
j : integer;
begin
if i>k then
vypis
else
for j := 1 to k do
if not pouzito[j] then
begin
c[i] := j;
pouzito[j] := TRUE;
permutace(i+1);
pouzito[j] := FALSE;
end;
end;
{ Algoritmus: variace(n,k) - aneb permutace v blede modrem }
procedure variace(i: integer);
var
j : integer;
begin
if i>k then
vypis
else
for j:=1 to n do { Tim se lisi od permutaci. }
if not pouzito[j] then begin
c[i] := j;
pouzito[j] := TRUE;
variace(i+1);
pouzito[j] := FALSE;
end;
end;
procedure kombinace(i: integer);
var
j : integer;
begin
if i>k then
vypis
else
for j:=c[i-1]+1 to n do { Tim se lisi od variaci. }
if not pouzito[j] then begin
c[i] := j;
pouzito[j] := TRUE;
kombinace(i+1);
pouzito[j] := FALSE;
end;
end;
var
i : integer;
begin
write('n: ');
read(n);
write('k: ');
read(k);
writeln;
writeln('permutace(k):');
for i:= 1 to maxn do
pouzito[i] := FALSE;
permutace(1);
writeln;
writeln('variace(n,k):');
for i:= 1 to maxn do
pouzito[i] := FALSE;
variace(1);
writeln;
writeln('kombinace(n,k):');
c[0] := 0; { Tohle nam pomuze pri "for j:=c[i-1]+1 to n do" }
for i:= 1 to maxn do
pouzito[i] := FALSE;
kombinace(1);
end.