Сгенерировать последовательности на Delphi
Сгенерировать три последовательности по 30 случайных чисел каж-дая. Числа в каждой последовательности равномерно распределены в диапазонах от 0 до 5, от 2 до 8, от 4 до 10. Свести их в один массив, расположив по возрастанию. Для сформированного массива вычислить среднее значение, дисперсию и вывести результаты на печать в виде гистограммы, разбив диапазон на 10 интервалов.
Есть код, который надо переделать на эту задачу
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Chart1: TChart;
Series1: TBarSeries;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
x,r:array [1..30] of real;
counts: array [1..10] of Integer;
i,j:integer;
lambda,min,max,d,sz,mx,width1,st:real;
begin
randomize;
lambda:=0.8;
For i:= 1 to 30 do
begin
x:=-ln(random)/lambda;
end;
min:=x[1];
max:=x[1];
for i:= 1 to 29 do
begin
for j:=1 to 29 do
begin
if (x[j]>x[j+1]) then
begin
min:=x[j];
x[j]:=x[j+1];
x[j+1]:=min
end;
end;
end;
for i := 1 to 30-1 do
begin
r:=x[i+1]-x;
end;
//мат ожидание
for i := 1 to 29 do
mx:=mx+r;
mx:=(1/29)*mx;
//дисперсия
for i := 1 to 29 do
d:=d+(sqr(r)-sqr(mx));
d:=(1/29)*d;
Label1.Caption:='';
label1.Caption:='дисперсия = '+floattostr(d);
//ср значение
for i := 1 to 29 do
sz:=sz+x;
sz:=sz/29;
Label2.Caption:='';
label2.Caption:='среднее значение = '+floattostr(sz);
min:=x[1];
max:=x[1];
for i:= 2 to 29 do
begin
if (r<min) then min:=r;
if (r>max) then max:=r;
end;
width1:=(max-min)/10;
st:=Min;
for j:= 1 to 10 do
begin
counts[j]:=0;
for i:=1 to 29 do
if (r>=St) and (r<St+Width1) then
Inc(counts[j]);
St:=St+Width1;
end;
if r[29]=Max then
Inc(counts[10]);
Chart1.SeriesList[0].Clear;
for i:= 1 to 10 do
Chart1.SeriesList[0].AddXY(i,counts/29);
end;
end.
Заранее благодарен!
Сгенерировать три последовательности по 30 случайных чисел каж-дая. Числа в каждой последовательности равномерно распределены в диапазонах от 0 до 5, от 2 до 8, от 4 до 10. Свести их в один массив, расположив по возрастанию. Для сформированного массива вычислить среднее значение, дисперсию и вывести результаты на печать в виде гистограммы, разбив диапазон на 10 интервалов.
Есть код, который надо переделать на эту задачу
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Chart1: TChart;
Series1: TBarSeries;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
x,r:array [1..30] of real;
counts: array [1..10] of Integer;
i,j:integer;
lambda,min,max,d,sz,mx,width1,st:real;
begin
randomize;
lambda:=0.8;
For i:= 1 to 30 do
begin
x:=-ln(random)/lambda;
end;
min:=x[1];
max:=x[1];
for i:= 1 to 29 do
begin
for j:=1 to 29 do
begin
if (x[j]>x[j+1]) then
begin
min:=x[j];
x[j]:=x[j+1];
x[j+1]:=min
end;
end;
end;
for i := 1 to 30-1 do
begin
r:=x[i+1]-x;
end;
//мат ожидание
for i := 1 to 29 do
mx:=mx+r;
mx:=(1/29)*mx;
//дисперсия
for i := 1 to 29 do
d:=d+(sqr(r)-sqr(mx));
d:=(1/29)*d;
Label1.Caption:='';
label1.Caption:='дисперсия = '+floattostr(d);
//ср значение
for i := 1 to 29 do
sz:=sz+x;
sz:=sz/29;
Label2.Caption:='';
label2.Caption:='среднее значение = '+floattostr(sz);
min:=x[1];
max:=x[1];
for i:= 2 to 29 do
begin
if (r<min) then min:=r;
if (r>max) then max:=r;
end;
width1:=(max-min)/10;
st:=Min;
for j:= 1 to 10 do
begin
counts[j]:=0;
for i:=1 to 29 do
if (r>=St) and (r<St+Width1) then
Inc(counts[j]);
St:=St+Width1;
end;
if r[29]=Max then
Inc(counts[10]);
Chart1.SeriesList[0].Clear;
for i:= 1 to 10 do
Chart1.SeriesList[0].AddXY(i,counts/29);
end;
end.
Заранее благодарен!