Написать программу в паскаль abc, генератор чисел от 0 до 1 с 16 знаками после запятой(пример 0.0000000000000002) и записать эти данные в файл txt по возрастанию.

pochta147369 pochta147369    3   10.09.2019 08:40    0

Ответы
kirill4389 kirill4389  07.10.2020 05:05
Как то так, можно улучшить конечно, но числа генерируются в нужном интервале, если найду что получше, то перепешу

var 

a:array[1..1000] of real;
i,x, j:integer;
cur:real;
l:text;
label y;

begin
assign(l, 'output.txt');
rewrite(l);
randomize;
for i:= 1 to 999 do
begin
y:
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.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика