Как то так, можно улучшить конечно, но числа генерируются в нужном интервале, если найду что получше, то перепешуvar a:array[1..1000] of real;i,x, j:integer;cur:real;l:text;label y;beginassign(l, 'output.txt');rewrite(l);randomize;for i:= 1 to 999 dobeginy:cur := 0.96743612142/( random(24)+random(11)+random(7));x:= random(100);if x > 20 then if cur < 0.4 then cur:= cur * random(5);if (cur = 0) or (cur > 1)then goto y;a[i]:=cur;end;for i:= 1 to 999 do for j:= 1 to 999 do if a[j] > a[i] then swap(a[j], a[i]);for i:= 1 to 999 do writeln(l, a[i]:0:16);close(l);end.================================================================Улучшенная версия var a: array[1..1000] of real; i, x, j: integer; cur, tmp: real; l: text;label y, z;begin assign(l, 'output.txt'); rewrite(l); randomize; for i := 1 to 999 do begin y: tmp := 1 - 1 / (random(33) + random(11) + random(7)); if tmp < 0.4 then goto y; cur := tmp / abs(random(24) + random(11) - random(7)); if cur > 0.8 then begin x := random(10000); if x < random(10000) then begin cur := cur / (1 - 1/(random(10) + random(11) + random(7))); end; end; x := random(100); if x > 50 then if cur < 0.5 then cur := cur * random(5); if cur < 0.1 then begin x := random(10000); if x < 7000 then cur := cur * random(8); end; if cur > 0.8 then cur:= cur - 1/(random(10) + random(11) + random(7)) - 1/(random(10) + random(11) + random(7)) + 1/(random(10) + random(11) + random(7)) + 1/(random(10) + random(11) + random(7)); if (cur = 0) or (cur > 1) then goto y; a[i] := cur; end; for i := 1 to 999 do for j := 1 to 999 do if a[j] > a[i] then swap(a[j], a[i]); for i := 1 to 999 do writeln(l, a[i]:0:16); close(l);end.