{ sample.txt -- Algorithm #11: Selection Sampling by Tom Swan }

const
  M = 1001;  { Input records PLUS 1 }
  N = 128;   { Subset (N <= M) }
var
  requested,
  examined,
  selected: Integer;
  r: Real;
begin
  requested <- N;
  examined <- 0;
  selected <- 0;
  while (selected < requested) and (not EOF) do
  begin
    examined <- examined + 1;
    r <- Random;
    if (M + 1 - examined) * r 
      >= (requested - selected)
      then skip next input record
    else begin
      selected <- selected + 1;
      use next input record
    end
  end
end.


(*
// --------------------------------------------------------------
// Copyright (c) 1993 by Tom Swan. All rights reserved
// Revision 1.00    Date: 07/09/1993   Time: 11:00 am
// Revision 1.01    Date: 11/02/1993   Time: 08:36 am
   1. Changed (M - examined) in If statement to (M + 1 - examined)
      per Alexander J. Oss [71212,1674]
   2. While loop should also test for the end of file
*)
