home *** CD-ROM | disk | FTP | other *** search
/ ftp.cs.arizona.edu / ftp.cs.arizona.edu.tar / ftp.cs.arizona.edu / icon / historic / v941.tgz / icon.v941src.tar / icon.v941src / ipl / progs / wshfdemo.icn < prev    next >
Text File  |  2000-07-29  |  2KB  |  69 lines

  1. ############################################################################
  2. #
  3. #       File:     wshfdemo.icn
  4. #
  5. #       Subject:  Program to demonstrate weighted shuffle procedure
  6. #
  7. #       Author:   Erik Eid
  8. #
  9. #       Date:     May 23, 1994
  10. #
  11. ############################################################################
  12. #
  13. #   This file is in the public domain.
  14. #
  15. ############################################################################
  16. #
  17. #     This program is a short demo of the WeightedShuffle procedure.  The
  18. # user is first prompted for a random number seed.  Then, the user is asked
  19. # to enter a size for the list to be shuffled and what percentage of that
  20. # list to be shuffled.  The original and shuffled lists are then displayed.
  21. #
  22. ############################################################################
  23. #
  24. #  Links:  weighted
  25. #
  26. ############################################################################
  27.  
  28. link weighted
  29.  
  30. procedure main()
  31. local before, after, num, pct, yn, seed
  32.   write (center("Weighted Shuffle Demonstration", 80))
  33.   repeat {
  34.     writes ("Enter random number seed: ")
  35.     seed := read()
  36.     if seed == "" then break               # Use default random seed.
  37.     if seed = integer(seed) then 
  38.       break &random := seed                # Use given random seed.
  39.   }
  40.   repeat {
  41.     repeat {
  42.       writes ("Size of list to shuffle (1-500)? ")
  43.       num := read()
  44.       if num = integer(num) then if (0 < num <= 500) then break
  45.     }
  46.     repeat {
  47.       writes ("Shuffle what percentage (0=none, 100=all)? ")
  48.       pct := read()
  49.       if pct = numeric(pct) then if (0 <= pct <= 100) then break
  50.     }
  51.     before := list()
  52.     every put (before, (1 to num))
  53.     write ("\nBefore shuffle:")
  54.     DisplayList (before)
  55.     after := WeightedShuffle (before, pct)
  56.     write ("\nAfter ", pct, "% shuffle:")
  57.     DisplayList (after)
  58.     writes ("\nDo another [Y/N]? ")
  59.     yn := getche()
  60.     write("\n")
  61.     if not (yn == ("Y" | "y")) then break
  62.   }
  63. end
  64.  
  65. procedure DisplayList (L)  
  66.   every writes (right(!L, 4))
  67. end  
  68.  
  69.