[Back to STRINGS SWAG index]  [Back to Main SWAG index]  [Original]

{

Here it is.  note that this permutes a set of Characters.  if you want to
do something different, you will have to modify the code, but that should
be easy.

}

Type
  tThingRec = Record
    ch  : Char;
    occ : Boolean;
  end;

Var
  Thing       : Array[1..255] of tThingRec;
  EntryString : String;

Procedure Permute(num : Byte);
{ N.B.  Procedure _must_ be called With num = 1;
  it then calls itself recursively,
  incrementing num }
Var
  i : Byte;
begin
  if num > length(EntryString) then
  begin
    num := 1;
    For i := 1 to length(EntryString) do
      Write(Thing[i].Ch);                 { You'll want to direct }
    Writeln;                              { output somewhere else }
  end
  else
  begin
    For i := 1 to length(EntryString) do
    begin
      if (not Thing[i].Occ) then
      begin
        Thing[i].Occ := True;
        Thing[i].Ch := EntryString[num];
        Permute(succ(num));
        Thing[i].Occ := False;
      end;
    end;
  end;
end;


begin
  FillChar(Thing,sizeof(Thing),0);
  Write('Enter String of Characters to Permute: ');
  Readln(EntryString);
  Permute(1);
  Writeln;
  Writeln('Done');
end.

[Back to STRINGS SWAG index]  [Back to Main SWAG index]  [Original]