![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
всем доброго времени суток.
Сиделя я делал лабу по Компьютерному моделированию, практически все реализовал, и тут столкнулся с проблемой как результаты прикрутить к графикам. а конкретнее к TChart. Люди добрые помогите,пожалуйста. чуть не забыл вот задание лабы. В ходе выполнения работы требуется с использованием известных подходов синтезировать алгоритм генератора квазислучайных последовательностей и реализовать его в виде программы на языке высокого уровня. Синтезированный алгоритм необходимо сравнить со встроенным в программную библиотеку языка высокого уровня путем определения базовых характеристик их функционирования и сравнения с идеальными характеристиками случайного распределения. Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,a,b,M:integer;
xs: array [1..50] of integer ;
xf: array [1..50] of integer ;
x:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Randomize;
Label1.Caption:='';
for i := 1 to 50 do
begin
xs[i] := Random(100);
Label1.Caption:=Label1.Caption + FloatToStr(xs[i]) + ' ' ;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Randomize;
M:=100;
Label2.Caption:='';
xf[1]:= Random(100);
Label2.Caption:=Label2.Caption + FloatToStr(xf[1]) + ' ' ;
xf[2]:= Random(100);
Label2.Caption:=Label2.Caption + FloatToStr(xf[2]) + ' ' ;
for i := 3 to 50 do
begin
x:=xf[i-1] + xf[i-2] ;
xf[i]:=x mod M;
Label2.Caption:=Label2.Caption + FloatToStr(xf[i]) + ' ' ;
end;
end;
end. |
|
#2
|
|||
|
|||
|
Ну, я подозреваю, что надо сделать большое кол-во генераций в некотором диапазоне, например, от 0 до 99. Далее посчитать кол-во соотв. значений и вывести 2 графика распределения - для твоего алгоритма и для стандартного.
Серии в TChart создать руками, а код примерно будет такой: Код:
type
TRndTest = record
Std, Tst : Integer
end;
const
N = 100000;
var
A : Array [0..99] Of TRndTest;
I : Integer;
begin
Randomize;
// Init array
For I := 0 To 99 Do
Begin
A[i].Std := 0;
A[i].Tst := 0;
End;
// Run tests
For I := 1 To N Do
Begin
Inc(A[Random(100)].Std);
Inc(A[Random(100)].Tst);
End;
// Fill the chart
For I := 0 To 99 Do
Begin
Chart1.Series[0].AddXY(I,A[i].Std); // Serie for built-in random
Chart1.Series[1].AddXY(I,A[i].Tst); // Serie for your random
End;
end; |
|
#3
|
|||
|
|||
|
огромное спасибо
не подскажете как к моему коду приявязать ниже идущее?? если не составит сильного труда в виде кода. - длина периода квазислучайной последовательности; - функция распределения плотности вероятности величин (предполагается графическая оценка данной функции на базе гистограмм); - математическое ожидание полученной последовательности; - дисперсия последовательности; - среднеквадратическое отклонение для последовательности. |
|
#4
|
|||
|
|||
|
Цитата:
Вообще, за тебя лабу тут делать скорее всего никто не будет. Формулы для расчета всех нужных величин можно найти в интернете. Если немного приложить труда и желания, то все это делается за час-два. Посказка: код для гистограмы я тебе практически дал, достаточно выбрать соотв. тип графика. С длинной периода сложнее. Тебе надо найти с какого элемента твой генератор начинает повторяться. Остальное - просто расчет по соотв. формуле (иногда надо подумать как его реализовать, но исхоодные данные для расчета можно использовать те, что генерируются для графика). |