home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / modula2 / library / modula1 / permute.mod < prev    next >
Text File  |  1987-06-11  |  896b  |  49 lines

  1. (* Compute all n! permutations of the integers 1 ... n. *)
  2.  
  3. MODULE permute;
  4.  
  5. FROM InOut IMPORT Read, Write, WriteLn;
  6.  
  7. VAR n: CARDINAL;
  8.     ch: CHAR;
  9.     a: ARRAY [1..20] OF CHAR;
  10.  
  11. PROCEDURE output;
  12. VAR i: CARDINAL;
  13.  
  14. BEGIN
  15.   FOR i := 1 TO n DO Write(a[i]) END;
  16.   WriteLn
  17. END output;
  18.  
  19. PROCEDURE permute(k: CARDINAL);
  20. VAR i: CARDINAL;
  21.     t: CHAR;
  22.  
  23. BEGIN
  24.   IF k = 1 THEN output
  25.   ELSE
  26.     permute(k-1);
  27.     FOR i := 1 TO k-1 DO
  28.       t := a[i];
  29.       a[i] := a[k];
  30.       a[k] := t;
  31.       permute(k-1);
  32.       t := a[i];
  33.       a[i] := a[k];
  34.       a[k] := t;
  35.     END
  36.   END
  37. END permute;
  38.  
  39. BEGIN
  40.   Write('>'); Read(ch);
  41.   n := 0;
  42.   WHILE ch > ' ' DO
  43.     INC(n); a[n] := ch;
  44.     Write(ch); Read(ch);
  45.   END;
  46.   WriteLn;
  47.   permute(n)
  48. END permute.
  49.