home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG028.ARK / PERM.ALG < prev    next >
Text File  |  1984-04-29  |  1KB  |  56 lines

  1. begin comment algol-m program to compute permutations of 
  2.               sets of numbers;
  3. integer n;
  4. integer function factorial(n);
  5.     integer n;
  6.        FACTORIAL:=IF N=0 THEN 1 ELSE N*FACTORIAL(N-1);
  7. write("Input the number of numbers in the set");
  8. read(n);
  9. while n<>9999 do
  10.    begin integer array set[1:n];
  11.  
  12.    procedure writeout;
  13.     begin integer i; write(" ");
  14.       for i:=1 step 1 until n do
  15.         writeon(set[i]);
  16.     end;
  17.  
  18.    procedure exchange(i,j);
  19.     integer i,j;
  20.    integer temp;
  21.     begin temp:=set[i]; set[i]:=set[j];
  22.      set[j]:=temp;
  23.     end;
  24.  
  25.      procedure permute(k);
  26.          integer k,i;
  27.         begin
  28.        if k=n then writeout else
  29.         BEGIN
  30.          for i:=k step 1 until n do
  31.            begin exchange(i,k); permute(k+1);
  32.              exchange(k,i);
  33.             end;
  34.          end;
  35.         end;
  36.  
  37.      PROCEDURE READER;
  38.        begin
  39.         integer i;
  40.         for i:=1 step 1 until n do
  41.           begin
  42.             write("Input number",i);
  43.             read(set[i]);
  44.           end;
  45.         writeout;
  46.        end;
  47.  
  48.    WRITE(" "); WRITE("THERE ARE",FACTORIAL(N)," ");
  49.    WRITEON("PERMUTATIONS OF THE FOLLOWING SET OF NUMBERS");
  50.    READER; WRITE(" "); WRITE(" ");
  51.    permute(1); write(" "); read(n);
  52.   end;
  53.  write("end of run");
  54.  end
  55. eof
  56.