Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.051 c
2-1168436770
FIL-23
2007-01-10 16:46
2007.01.28
работа с константой


2-1168516635
16alex
2007-01-11 14:57
2007.01.28
Unable to execute query


2-1168508786
Shuttle
2007-01-11 12:46
2007.01.28
плиз


2-1168153668
vegarulez
2007-01-07 10:07
2007.01.28
Подскажите что-нибудь взамен функции Substr и Replacestr...


15-1168416208
Pazitron_Brain
2007-01-10 11:03
2007.01.28
Ищется программа, для статистики принятого трафика