Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Program1;
- uses
- GraphABC;
- CONST
- N = 100;
- MaxK = 15;
- b = 3;
- lambda = 3;
- c = 2;
- type
- DATA = array[1..N] of double;
- otr = array[1..maxK] of integer;
- int = integer;
- procedure Otcenki(const x : DATA; var Mx, Dx : double);
- var
- i : int;
- begin
- Mx:=0; Dx:=0;
- //Нахождение мат. ожидания
- For i:=1 to N do Mx:=Mx+x[i];
- Mx:=Mx/N;
- //Нахождение дисперисии
- For i:=1 to N do Dx:=Dx+Sqr(x[i]-Mx);
- Dx:=Dx/N;
- end;
- procedure Histogr(const d : otr; minx, maxx, dx : double);
- var
- mx, my, x0, y0, x, hgt, wdt, i, Step : word;
- Sc, temp : double;
- s : string;
- MaxD : integer;
- begin
- //Значение получены экспериментально
- mx:=Window.Width;
- my:=524;
- x0:=128;
- y0:=my + 320;
- wdt:=mx-2*128; //Ширина гистограммы по горизонтали
- hgt:=my-20*16; //Ширина гистограммы по вертикали
- MaxD:=d[1];
- for i:=2 to MaxK do
- if d[i] > MaxK then
- MaxD:=d[i];
- Sc:=hgt/MaxD; //Масштабный коэффициент
- Step:=Trunc(wdt/MaxK);
- Window.Clear();
- SetBrushColor(clWhite);
- SetPenColor(clBlue);
- SetBrushStyle(bsSolid);
- //Рисуем гистограмму
- x:=x0;
- for i:=1 to MaxK do
- begin
- mx:=x + Step;
- my:=Trunc(Sc*d[i]);
- //Вывод значений по оси X
- Str((minX + (i-1) * dx):5:4, s);
- TextOut(mx - Step, y0, s);
- //Рисуем столбец
- Rectangle(x, y0, mx, y0 - my);
- Rectangle(x + 1, y0 -1, mx - 1, y0 - my + 1);
- //Вывод значения столбца
- Str(d[i], s);
- if my > 7 * 8 then
- TextOut(x + 12, y0 - my + 4, s)
- else
- TextOut(x + 12, y0 - my - 6*8, s);
- x:=mx;
- end;
- Str(maxX:5:4, s);
- TextOut(x0 + Step*MaxK, y0, s);
- end;
- var
- x : DATA;
- i : int;
- yj, r, minX, maxX, mx, dx, sigma, delta : double;
- inter : otr;
- k : integer;
- begin
- MaximizeWindow();
- Randomize;
- //Генерирование реализаций
- for i:=1 to N do
- begin
- r:=Random;
- yj := -ln(r) / lambda;
- x[i]:= exp(c * yj + b);
- end;
- //Нахождения максимума и минимума
- minX:=x[1];
- maxX:=x[1];
- for i:=2 to N do
- begin
- if (x[i] > maxX) then
- maxX:=x[i]
- else if (x[i] < minX) then
- minX:=x[i];
- end;
- Otcenki(x, mx, dx);
- //Нахождение среднеквадратичного отклонения
- sigma:=sqr(dx);
- //Длина интервала
- delta:=(maxX-minX)/maxK;
- //Посчет число попавших значений в каждый интервал
- for i:=1 to N do
- begin
- k:=1;
- while (x[i] >= (minX + delta*k)) do
- Inc(k);
- if (k >= maxK) then
- Inc(inter[maxK])
- else
- Inc(inter[k]);
- end;
- //Построение гистограммы
- Histogr(inter, minX, maxX, delta);
- //Вывод характеристик
- TextOut(10, 20, 'Xmin : ' + minX);
- TextOut(10, 35, 'Xmax : ' + maxX);
- TextOut(10, 50, 'M(x) : ' + mx);
- TextOut(10, 65, 'D(x) : ' + dx);
- TextOut(10, 80, 'SIGMA(x) : ' + sigma);
- TextOut(10, 95, 'dX : ' + delta);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement