program genRandom(input, output); { LA 1/2003: rough and ready data generator } const length = 100; { output length } seed0 = 74471; offset = 0.05; maxV = 10.0; var seed:integer; { seed needed by generator } i :integer; r, total, total2 : real; function random( n:integer ):integer; {Linear Congruential Pseudo Random Number Generator} {see D.E.Knuth The Art of Computer Programming V2 } { Addison Wesley 1969 } {bottom 15 bits are random, `mod' the output for a smaller result } {guaranteed not to overflow on a 32 bit computer } {BUT BEWARE a 15-bit linear congrunetial generator is not very random !!! } {and the cycle length is only 32K. } var r:integer; begin seed := (seed * (1 + 4*37*109) + 9999) mod (32 * 1024); { suitable for a Vax } r:= trunc( seed/(32*1024-1) * n); if r = n then r:=random(n); random := r end {random}; {-----------------------------------------------------------------------------} begin seed := seed0; total := 0.0; total2 := 0.0; for i := 1 to length do begin r := random(1000) / 1000; if (i > length / 3) and (i < 2*length / 3) then begin if (r < 1-offset) then r := r + offset end else {1st or last third} begin if r > offset then r := r - offset end; if (r > 1) or (r < 0) then writeln('***'); r := r*maxV + (1-r)*(-maxV {i.e. min Value}); if r >= 0 then write(r:6:3) else write(r:7:3); total := total + r; if (i > length / 3) and (i < 2*length / 3) then total2 := total2+r; if i mod 10 = 0 then writeln else write(' ') end; writeln( 'total=', total:7:3, ' total2=',total2:7:3 ) end.