[Back to MATH SWAG index] [Back to Main SWAG index] [Original]
{
> I want to create all permutations.
Okay. I should have first asked if you Really mean permutaions.
Permutations mean possible orders. I seem to recall your orginal message
had to do With card hands. They usually involve combinations, not
permutations. For example, all possible poker hands are the COMBinATIONS
of 52 cards taken 5 at a time. Bridge hands are the combinations of 52
cards taken 13 at a time. if you master the following Program, you should
be able to figure out how to create all combinations instead of
permutations.
However, if you mean permutations, here is an example Program to produce
permutations. (You will have to alter it to your initial conditions.) It
involves a recursive process (a process which Uses itself). Recursive
processes are a little dangerous. It is easy to step on your own
privates writing them. They also can use a lot of stack memory. You
ought to be able to take the same general methods to produce
combinations instead of permutations if need be.
I suggest you Compile and run the Program and see all the permutations
appear on the screen beFore reading further. (BTW, counts permutations
as well as producing them and prints out the count at the end.)
The Procedure Permut below rotates all possible items into the first
Array position. For each rotation it matches the item With all possible
permutations of the remaining positions. Permut does this by calling
Permut For the Array of remaining positions, which is now one item
smaller. When the remaining Array is down to one position, only one
permutaion is possible, so the current Array is written out as one of
the results.
Once you get such a Program working, it is theoretically possible to
convert any recursive Program to a non-recursive one. This often runs
faster. Sometimes the conversion is not easy, however.
One final caution. The following Program Writes to the screen. You will
see that as the number of items increases, the amount of output
increases tremendously. if you were to alter the Program to Write
results to a File and to allow more than 9 items, you could easily
create a File as big as your hard drive.
}
Program Permutes;
Uses
Crt;
Type
TArry = Array[1..9] of Byte;
Var
Arry : TArry;
Size,X : Word;
NumbofPermutaions : LongInt;
Procedure Permut(Arry : TArry; Position,Size : Word);
Var
I,J : Word;
Swap: Byte;
begin
if Position = Size then
{ begin
For I := 1 to Size do
Write(Arry[I]:1);
} inc(NumbofPermutaions)
{ Writeln
end
} else
begin
For J := Position to Size do
begin
Swap := Arry[J];
Arry[J] := Arry[Position];
Arry[Position] := Swap;
Permut(Arry,Position+1,Size)
end
end
end;
begin
ClrScr;
Write('How many elements (1 to 9)? ');
readln(Size);
ClrScr;
For X := 1 to Size do
Arry[X] := X; {put item values in Array}
NumbofPermutaions := 0;
Permut(Arry,1,Size);
Writeln;
Writeln('Number of permutations = ',NumbofPermutaions);
Writeln('Press <Enter> to Exit.');
readln
end.
[Back to MATH SWAG index] [Back to Main SWAG index] [Original]