unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
Tdata = record // создадим структуру 1 и 2 переменных, будем тут хранить СС
x1:double;
x2:double;
end;
TRandMas = array of Tdata; // этот тип - наш динамический массив
procedure GenRand(var _m:TRandMas; n:integer); // функция генерации СВ
function SolveCor(_m:TRandMas):double; // ваша функция подсчета корреляционный момент
implementation
procedure GenRand(var _m:TRandMas; // массив переменных
n:integer // количество элементов в массиве
); // массив передаем по ссылке, т.е. он измениться в процедуре
var i:integer;
begin
if Length(_m) < n then // если массив меньше требуемого,
SetLength(_m,n); // то установим необходимый размер
for i:= 0 to n-1 do // заполним массив
begin
{вместо random - можно использовать ваш гениратор СВ}
_m[i].x1 := random * 10; // заполняем 1-ю переменную случайным числом
_m[i].x2 := random * 10; // заполняем 2-ю переменную случайным числом
end;
end;
function SolveCor(_m:TRandMas):double;
var i, x:integer;
t:double;
begin
result := 0; //результат = 0
x := Length(_m); // получаем количество элементов в массиве
if(x <= 0) then // если массив пуст
exit; // то ввыходим - считать нечего, результат = 0
for i:= 0 to x-1 do
begin
t := (_m[i].x2 - 0.5); // получаем знаменатель
if(t <> 0) then // если он не = 0 (на 0 делить - будет ошибка)
result := result + (_m[i].x1 - 0.5) / (_m[i].x2 - 0.5); // то делим и суммируем
end;
result := result / x // поделили сумму на количество элементов взяли среднне
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var m:TRandMas; // это переменная на динамический массив
var i:integer;
begin
GenRand(m, StrToIntDef(Edit1.Text,0));
for i:= 0 to Length(m)-1 do
Memo1.Lines.Add(FloatToStrf(m[i].x1,ffNumber,3,2)+' - ' + FloatToStrf(m[i].x2,ffNumber,3,2));
Label2.Caption := Format('корреляционный момент: %.3f',[SolveCor(m)]);
end;
end.
procedure GenRand(var _m:TRandMas; // массив переменных
n:integer // количество элементов в массиве
); // массив передаем по ссылке, т.е. он измениться в процедуре
var i:integer;
begin
if Length(_m) < n then // если массив меньше требуемого,
SetLength(_m,n); // то установим необходимый размер
for i:= 0 to n-1 do // заполним массив
begin
{вместо random - можно использовать ваш гениратор СВ}
_m[i].x1 := random * 10; // заполняем 1-ю переменную случайным числом
_m[i].x2 := random * 10; // заполняем 2-ю переменную случайным числом
end;
end;
with Form1.memo1.Lines do
for j := 0 to Count - 1 do
_m[i].x1 := strtofloat(Strings[j]); // заполняем 1-ю переменную случайным числом
with Form1.memo1.Lines do
for j := 0 to Count - 1 do
_m[i].x2 := strtofloat(Strings[j]); // заполняем 2-ю переменную случайным числом
procedure GenRand(var _m:TRandMas; // массив переменных
n:integer // количество элементов в массиве
); // массив передаем по ссылке, т.е. он измениться в процедуре
var i:integer;
begin
randomize;
if Length(_m) < n then // если массив меньше требуемого,
SetLength(_m,n); // то установим необходимый размер
for i:= 0 to n-1 do // заполним массив
begin
{вместо random - можно использовать ваш генератор СВ}
// заполняем 1-ю переменную случайным числом вот тут, вместо random - можно подставлять свой генератор
_m[i].x1 := random * 10;
_m[i].x2 := random * 10; // заполняем 2-ю переменную случайным числом
end;
end;
procedure TForm1.Button1Click(Sender: TObject);//генерация
var
n: real;
i:integer;
a:string;
begin
RichEdit1.Lines.Add(Edit1.Text);
for i:=0 to 50 do
begin
n:=Strtofloat(Edit1.Text)*StrTofloat(Edit1.Text);
Edit2.Text :=floatTostr(n);
a:=(Copy(Trim(Edit2.Text),5,4) );
Edit1.Text:='0,'+a;
RichEdit1.Lines.Add(Edit1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
n: real;
i:integer;
a:string;
begin
RichEdit1.Lines.Clear;
RichEdit1.Lines.Add(Edit1.Text);
for i:=0 to 50 do
begin
n:=Strtofloat(Edit1.Text)*StrTofloat(Edit1.Text);
{ n = x * x -> это стермится к нулю, т.к.}
Edit2.Text :=floatTostr(n);
{несмотря на то, что берете только 4 цифры, с каждой итерацией порядок уменьшается
т.е. число становится меньше: 0,1 * 0,1 = 0,01 -> 0.01*0.01 = 0,0001 и т.д.
на определенном этапе, эти 4 числа будут = 0 т.е. результат стремится к нулю.}
a:=(Copy(Trim(Edit2.Text),Length(Edit2.Text) div 2,Length(Edit2.Text)) );
Edit1.Text:='0,'+a;
RichEdit1.Lines.Add(Edit1.Text);
end;
end;
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
Tdata = record // создадим структуру 1 и 2 переменных, будем тут хранить СС
x1:double;
x2:double;
end;
TRandMas = array of Tdata; // этот тип - наш динамический массив
procedure GenRand(var _m:TRandMas; x:double; n:integer); // функция генерации СВ
function SolveCor(_m:TRandMas):double; // ваша функция подсчета корреляционный момент
implementation
//*************** ВАШ ГЕНЕРАТОР ************************************************
procedure MyRand(_m:TRandMas; x:double; count:integer);
var
n: double;
i,k:integer;
s:string;
begin
k := count div 2;
if Length(_m) < k then
SetLength(_m,k);
n:=x*x;
for i:=0 to k-1 do
begin
s := FloatTostr(n);
Delete(s,1, Pos(',',s));
s:= IntToStr(StrToInt(Copy(s, Length(s) div 2, 4))); // тут меленькая хитрость - что бы избавиться от возможных ведущих нулей, преобразуем к integer потом в строку..
_m[i].x1:=StrToFloatDef('0,'+ s,0);
n:=_m[i].x1*_m[i].x1;
s :=FloatToStr(n);
Delete(s,1, Pos(',',s));
s:= IntToStr(StrToInt(Copy(s, Length(s) div 2, 4)));
_m[i].x2:=StrToFloatDef('0,'+s,0);
n:=_m[i].x2*_m[i].x2;
end;
end;
//******************************************************************************
procedure GenRand(var _m:TRandMas; // массив переменных
x:double; // начальное число
n:integer // количество элементов в массиве
); // массив передаем по ссылке, т.е. он измениться в процедуре
var i:integer;
begin
randomize;
if Length(_m) < n then // если массив меньше требуемого,
SetLength(_m,n); // то установим необходимый размер
MyRand(_m, x, n);
end;
//******************************************************************************
function SolveCor(_m:TRandMas):double;
var i, x:integer;
t:double;
begin
result := 0; //результат = 0
x := Length(_m); // получаем количество элементов в массиве
if(x <= 0) then // если массив пуст
exit; // то ввыходим - считать нечего, результат = 0
for i:= 0 to x-1 do
begin
t := (_m[i].x2 - 0.5); // получаем знаменатель
if(t <> 0) then // если он не = 0 (на 0 делить - будет ошибка)
result := result + (_m[i].x1 - 0.5) / (_m[i].x2 - 0.5); // то делим и суммируем
end;
result := result / x // поделили сумму на количество элементов взяли среднне
end;
//******************************************************************************
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
RichEdit1: TRichEdit;
Button2: TButton;
Edit2: TEdit;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var m:TRandMas; // это переменная на динамический массив
var i:integer;
begin
Memo1.Lines.Clear;
GenRand(m, StrToFloatDef(Edit2.Text,0), StrToIntDef(Edit1.Text,0));
for i:= 0 to (Length(m) div 2)-1 do
Memo1.Lines.Add(Format('%-4d: %.4f - %.4f',[i,m[i].x1,m[i].x2]));
Label2.Caption := Format('корреляционный момент: %.3f',[SolveCor(m)]);
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var m:TRandMas; // это переменная на динамический массив
i:integer;
begin
Memo1.Lines.Clear;
GenRand(m, now, StrToIntDef(Edit1.Text,0));
for i:= 0 to (Length(m) div 2)-1 do
Memo1.Lines.Add(Format('%-4d: %.4f - %.4f',[i,m[i].x1,m[i].x2]));
Label2.Caption := Format('корреляционный момент: %.3f',[SolveCor(m)]);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
n: real;
i:integer;
a:string;
begin
RichEdit1.Lines.Clear;
RichEdit1.Lines.Add(Edit1.Text);
for i:=0 to 50 do
begin
n:=Strtofloat(Edit1.Text)*StrTofloat(Edit1.Text);
{ n = x * x -> это стермится к нулю, т.к.}
Edit2.Text :=floatTostr(n);
{несмотря на то, что берете только 4 цифры, с каждой итерацией порядок уменьшается
т.е. число становится меньше: 0,1 * 0,1 = 0,01 -> 0.01*0.01 = 0,0001 и т.д.
на определенном этапе, эти 4 числа будут = 0 т.е. результат стремится к нулю.}
a:=(Copy(Trim(Edit2.Text),Length(Edit2.Text) div 2,Length(Edit2.Text)) );
Edit1.Text:='0,'+a;
RichEdit1.Lines.Add(Edit1.Text);
end;
end;
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
Tdata = record // создадим структуру 1 и 2 переменных, будем тут хранить СС
x1:double;
x2:double;
end;
TRandMas = array of Tdata; // этот тип - наш динамический массив
procedure GenRand(var _m:TRandMas; x:double; n:integer); // функция генерации СВ
function SolveCor(_m:TRandMas):double; // ваша функция подсчета корреляционный момент
implementation
//*************** ВАШ ГЕНЕРАТОР ************************************************
procedure MyRand(_m:TRandMas; x:double; count:integer);
var
n: double;
i,k:integer;
s:string;
begin
k := count div 2;
if Length(_m) < k then
SetLength(_m,k);
n:=x*x;
for i:=0 to k-1 do
begin
s := FloatTostr(n);
Delete(s,1, Pos(',',s));
s:= IntToStr(StrToInt(Copy(s, Length(s) div 2, 4))); // тут меленькая хитрость - что бы избавиться от возможных ведущих нулей, преобразуем к integer потом в строку..
_m[i].x1:=StrToFloatDef('0,'+ s,0);
n:=_m[i].x1*_m[i].x1;
s :=FloatToStr(n);
Delete(s,1, Pos(',',s));
s:= IntToStr(StrToInt(Copy(s, Length(s) div 2, 4)));
_m[i].x2:=StrToFloatDef('0,'+s,0);
n:=_m[i].x2*_m[i].x2;
end;
end;
//******************************************************************************
procedure GenRand(var _m:TRandMas; // массив переменных
x:double; // начальное число
n:integer // количество элементов в массиве
); // массив передаем по ссылке, т.е. он измениться в процедуре
var i:integer;
begin
randomize;
if Length(_m) < n then // если массив меньше требуемого,
SetLength(_m,n); // то установим необходимый размер
MyRand(_m, x, n);
end;
//******************************************************************************
function SolveCor(_m:TRandMas):double;
var i, x:integer;
t:double;
begin
result := 0; //результат = 0
x := Length(_m); // получаем количество элементов в массиве
if(x <= 0) then // если массив пуст
exit; // то ввыходим - считать нечего, результат = 0
for i:= 0 to x-1 do
begin
t := (_m[i].x2 - 0.5); // получаем знаменатель
if(t <> 0) then // если он не = 0 (на 0 делить - будет ошибка)
result := result + (_m[i].x1 - 0.5) / (_m[i].x2 - 0.5); // то делим и суммируем
end;
result := result / x // поделили сумму на количество элементов взяли среднне
end;
//******************************************************************************
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
RichEdit1: TRichEdit;
Button2: TButton;
Edit2: TEdit;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var m:TRandMas; // это переменная на динамический массив
var i:integer;
begin
Memo1.Lines.Clear;
GenRand(m, StrToFloatDef(Edit2.Text,0), StrToIntDef(Edit1.Text,0));
for i:= 0 to (Length(m) div 2)-1 do
Memo1.Lines.Add(Format('%-4d: %.4f - %.4f',[i,m[i].x1,m[i].x2]));
Label2.Caption := Format('корреляционный момент: %.3f',[SolveCor(m)]);
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var m:TRandMas; // это переменная на динамический массив
i:integer;
begin
Memo1.Lines.Clear;
GenRand(m, now, StrToIntDef(Edit1.Text,0));
for i:= 0 to (Length(m) div 2)-1 do
Memo1.Lines.Add(Format('%-4d: %.4f - %.4f',[i,m[i].x1,m[i].x2]));
Label2.Caption := Format('корреляционный момент: %.3f',[SolveCor(m)]);
end;
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.