Смекни!
smekni.com

Машинна імітація випадкових параметрів (стр. 3 из 3)

Один из возможных методов состоит в выполнении последовательности проверок, которые позволяли бы определить, в какой интервал попадает число. Этот метод легко программируется, но программа получается длинной и медленной.

Самый быстрый метод заключается в определении целой переменной J, соответствующей номеру интервала, к которому относится число. Например, для интервала [0,1], разделенного на 20 классов длиной 0.05, можно получить значение J следующим образом:

J= целое (20 х) +1

х=0.03®целое(0.6)+1

х=0.06®целое(1.2)+2

Чтобы подсчитать число элементов в каждом классе, можно действовать следующим образом:

1) получить случайное число х,

2) вычислить J,

3) установить T(J)=T(J)+1, где Т – массив из р элементов и каждый элемент T(J) служит счетчиком для класса J.

Программа

uses Crt;

Var

a,b,p,n,i,j: integer;

Var

t: array [1..20] of integer;

Var

h1,x:Real;

Var

rp,y:Real;

Var

aa: array [1..72] of string[1];

Var

k: integer;

Begin

clrscr;

randomize;

{ writeln('a=0,b=20');

readln(a,b);

writeln('p=20');

readln(p);

writeln('n=10000');

readln(n);}

a:=0;b:=20;p:=20;n:=10000;

for i:=1 to p do t[i]:=0;

h1:=p/(b-a);

for i:=1 to n do

begin

x:=random(b);

j:=trunc((x-a)*h1)+1;

t[j]:=t[j]+1

end;

clrscr;

for i:=1 to p do

writeln(i:3,t[i]:10);

readln;

rp:=p;

for i:=1 to p do t[i]:=0;

for i:=1 to n do

begin

y:=random;

j:=trunc(rp*y)+1;

t[j]:=t[j]+1;

end;

Clrscr;

Writeln('*******');

for i:=1 to p do writeln(i:3,t[i]:10);

readln;

Clrscr;

writeln('Histogram');

for i:=1 to 72 do aa[i]:='*';

for i:=1 to p do

begin

k:=trunc((t[i]+5)/10);

write(i:2,t[i]:4,' ');

{writeln ('k=',k:3);}

for j:=1 to k do write(aa[j]);writeln;

end;

readln

end.