Текущий архив: 2007.01.28;
Скачать: CL | DM;
Вниз
!опять мемо:-(! Найти похожие ветки
← →
inkvizitor © (2007-01-11 17:07) [0]Здраствуйте ! проблем такая :не могу определить в делфи размер динам. массива произвольно.
Поясняю : в два мемо загружаю числа - не важно.эти числа отправляю в массивы х,у.есть массив ro которому надо присвоить длину (memo1.lines.count div 2)+1.
когда длина = memo1.lines.count все в норме, да вот только 2-я половина массива нули, а первая половина выводится красиво в мемо3.
пытался присвоить : любой элемент:=(memo1.lines.count div 2)+1;затем
длина - setlength(ro,любой элемент). Нo при закрытии формы получаю INVALID POINTER OPERATORкак решить ЭТО ?
type
TMass=array of double;
var
Form1: TForm1;
x,y,ro:TMass;
nv:integer;
procedure TForm1.Button3Click(Sender: TObject);
var
i,j,k,n:longint;
cov,sigmax,sigmay,xsr,ysr:double;
begin
n:=memo1.Lines.Count;
memo3.Lines.Clear;
memo3.Visible:=true;
if (n mod 2 <>0) then begin
nv:=(n div 2)+1;
setlength(ro,(memo1.Lines.Count div 2)+1); //!прорблема !
end //длина массива ro впервом случае
else begin
nv:=n div 2;
setlength(ro,memo1.Lines.Count div 2); //!прорблема !
end; //длина массива ro во 2-м случае
setlength(x,memo1.Lines.Count); //длина массива Х
setlength(y,memo2.Lines.Count); //длина массива У
for k:=0 to nv do
begin
xsr:=0;
for i:=k to n-1 do
begin
x[i]:=strtofloat(memo1.Lines[i]);
xsr:=xsr+x[i];
end;
xsr:=xsr/(n-k);
ysr:=0;
for i:=0 to (n-1)-k do
begin
y[i]:=strtofloat(memo2.Lines[i]);
ysr:=ysr+y[i];
end;
ysr:=ysr/(n-k);
sigmax:=0;
for i:=k to n-1 do begin sigmax:=sigmax+sqr(x[i]-xsr); end;
sigmax:=sqrt((1/(n-k))*sigmax);
sigmay:=0;
for i:=0 to (n-1)-k do begin sigmay:=sigmay+sqr(y[i]-ysr); end; sigmay:=sqrt((1/(n-k))*sigmay);
cov:=0;
for i:=0 to (n-1)-k do
begin cov:=cov+(x[i+k]-xsr)*(y[i]-ysr);end;
cov:=cov/(n-k);
ro[k]:=cov/(sigmax*sigmay);
memo3.Lines.Add(floattostr(k+1)+" "+floattostr(ro[k])); //вывод резтультата
end;
end;
← →
Джо © (2007-01-11 17:11) [1]У меня возникает убеждение, что код специально так отформатировали, чтобы его прочитать было невозможно :)
Не могу, ломая глаза, смотреть в такой код.
Изменить длину массива —SetLength.
Узнать длину массиваLength.
Что там реально у тебя наворочено — бог весть.
← →
Сергей М. © (2007-01-11 17:12) [2]
> setlength(ro,(memo1.Lines.Count div 2)+1); //!прорблема
> !
> setlength(ro,memo1.Lines.Count div 2); //!прорблема !
И какая же "!прорблема" конкретно в этих строчках ?
← →
Игорь Шевченко © (2007-01-11 17:20) [3]Джо © (11.01.07 17:11) [1]
> У меня возникает убеждение, что код специально так отформатировали,
> чтобы его прочитать было невозможно :)
> Не могу, ломая глаза, смотреть в такой код.
type TMass=array of double; var Form1: TForm1; x, y, ro:
TMass;nv:integer;
procedure TForm1.Button3Click(Sender: TObject); var i,j,k,
n:longint; cov, sigmax, sigmay, xsr ,ysr: double; begin
n:= memo1.Lines.Count; memo3.Lines.Clear; memo3.Visible:=
true; if (n mod 2 <> 0) then begin nv:= (n div 2) +1;
setlength(ro,(memo1.Lines.Count div 2)+1); //!прорблема !
end //длина массива ro впервом случае
else begin nv:=n div 2;
setlength(ro,memo1.Lines.Count div 2); //!прорблема !
end; //длина массива ro во 2-м случае
setlength(x,memo1.Lines.Count); //длина массива Х
setlength(y,memo2.Lines.Count); //длина массива У
for k:=0 to nv do begin xsr:=0; for i:=k to n -1 do begin
x[i]:=strtofloat(memo1.Lines[ i]); xsr:= xsr+ x[i]; end;
xsr:=xsr/(n- k); ysr:= 0; for i:=0 to (n-1)-k do begin
y[i]:= strtofloat( memo2.Lines[i ]); ysr:=ysr+y[i]; end;
ysr:=ysr/(n- k); sigmax :=0 ; for i := k to n- 1 do begin
sigmax:=sigmax+sqr(x[i]-xsr); end; sigmax:=sqrt((1/(n-k))*
sigmax ); sigmay :=0; for i:=0 to (n- 1) -k do begin
sigmay:=sigmay+sqr(y[i]-ysr); end; sigmay:=sqrt((1/(n-k))*
sigmay); cov:=0; for i:=0 to (n-1)-k do begin cov:=cov+(x
[i+k] -xsr) *(y[ i]-ysr);end; cov:=cov/(n-k); ro[k]:=cov/(
sigmax*sigmay);
memo3.Lines.Add(floattostr(k+1)+" "+floattostr(ro[k])); //вывод резтультата
end; end;
Вроде так читабельнее
← →
Джо © (2007-01-11 17:30) [4]> Вроде так читабельнее
Да, спасибо, теперь, действительно, проблема стал более ясной.
Страницы: 1 вся ветка
Текущий архив: 2007.01.28;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.036 c