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

    {Another method to acComplish this (which only requires an order of n
    itterations is to generate an Array initialized from 2 to 1000 and then
    randomize that Array.  For your 400 numbers, just take 400 values in the
    new sequence (starting at the index of your lowest number). You can do
    that as follows:
    }

    Const MaxNumber = 2000;
    Type SeqArray = Array [1..MaxNumber] of Integer;

    {================================================================}
    Procedure RandomizeSeq (first, last: Integer; Var iseq: SeqArray);
    {================================================================}

    Var           i, iran,
               temp, imax : Integer;
                        r : Real;
    {
      Operation:  A random number within the range 1..last is generated
      on each pass and the upper limit of the random number generated is
      decreased by 1.  The value stored at the highest index of the last
      pass is moved to the location of the last number selected.

      Parameters:
        first = lowest number in sequence.
         last = highest number in sequence.
         iseq = Sequence Array
    }
    begin
       { initialize sequence Array }
       For i := first to last do iseq[i] := i;
       Randomize;
       { randomize the sorted Array }
       For imax := last downto first do begin
          { get a random number between 0 and 1 and scale up to
            an Integer in the range of first to last }
          r := random;
          iran := Trunc(r*imax) + first;
          { replace With value at highest index }
          temp := iseq[iran];
          iseq[iran] := iseq[imax];
          iseq[imax] := temp
       end;
    end;

    { Example of generating 20 random numbers from 2 to 100: }

    Var i : Integer;
        a : SeqArray;
    begin
       RandomizeSeq(2,100,a);
       For i := 2 to 21 do Write(a[i]:3); Writeln;
    end.

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