Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

!опять мемо:-(!   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.093 c
4-1158154410
Jimmm
2006-09-13 17:33
2007.01.28
COM сервер в Win32 Service


2-1168443760
zhuravelsv
2007-01-10 18:42
2007.01.28
Определить загрузку процессора


11-1146722668
NewLC
2006-05-04 10:04
2007.01.28
Совместное использование ActiveX ов


9-1142843534
Lambda
2006-03-20 11:32
2007.01.28
Файлы в GLMaterialLibrary из потока


2-1168723096
DiX
2007-01-14 00:18
2007.01.28
Отправка почты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский