![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Всем привет!
Народ, есть проблема. Почему-то в Delphi 2007 выскакивает ошибка Access Violation на SetLength(); Метод в procedure SystemODU.adams; первая строчка. Код:
unit AdamsUnit;
interface
type
SystemODU = class
protected
Y :array of array of real;
X: array of Real;
h, e, a, b:real;
u:integer;
public
procedure adams;
procedure setH(new_h:real);
procedure setA(new_a:real);
procedure setB(new_b:real);
end;
implementation
procedure SystemODU.setH;
begin
h := new_h;
end;
procedure SystemODU.setA;
begin
A := new_a;
end;
procedure SystemODU.setB;
begin
B := new_b;
end;
procedure SystemODU.adams;
var
i: integer;
begin
SetLength(y, 3, 30);//!!!ВОТ ТУТ И ВСЕ ЛЕТИТ
SetLength(x,30);
SetLength();
h:=0.05;
e:= 0.01;
Y[0,1]:=1;
Y[1,1]:=1;
Y[2,1]:=1;
repeat
u:=1;
for i:=1 to 2 do begin
Y[0, i+1]:=Y[0, i]+h*(Y[0, i]+h/2*(3*Y[1, i]-2*Y[2, i]));
Y[1, i+1]:=Y[1, i]+h*(Y[1, i]+h/2*(-Y[2, i]-3*Y[0, i]));
Y[2, i+1]:=Y[2, i]+h*(Y[2, i]+h/2*(2*Y[0, i]-Y[1, i]));
end;
h:=h/2;
for i:=1 to 2 do begin
Y[0, i+1]:=Y[0, i]+h*(Y[0, i]+h/2*(3*Y[1, i]-2*Y[2, i]));
Y[1, i+1]:=Y[1, i]+h*(Y[1, i]+h/2*(-Y[2, i]-3*Y[0, i]));
Y[2, i+1]:=Y[2, i]+h*(Y[2, i]+h/2*(2*Y[0, i]-Y[1, i]));
end;
until ((abs(Y[0,2])-Y[0, 3])<=(3*e)) and ((abs(Y[1,2])-Y[1,3])<=(3*e))
and ((abs(Y[2,2])-Y[2,3])<=(3*e));
h:=h*2;
for i:=2 to (round((b-a)/h)+1) do begin
Y[0, i+1]:=Y[0, i]+h/2*(3*(3*Y[1, i]-2*Y[2, i])-(3*Y[1, i-1]-2*Y[2, i-1]));
Y[1, i+1]:=Y[0, i]+h/2*(3*(-Y[2, i]-3*Y[0, i])-(-Y[2,i-1]-3*Y[0, i-1]));
Y[2, i+1]:=Y[0, i]+h/2*(3*(2*Y[0, i]-Y[1, i])-(2*Y[0,i-1]-Y[1, i-1]));
X[i]:=a+h*(i-1);
end;
end;
end.Метод вызывается при старте программы в onActivate. Просто это по сути получается у меня первая строчка, которая должна работать и сразу ошибка. Если ее закоментить, то все работает норм(в смысле без использования переменной Y, но мне ее нужно использовать). Помогите, Пожалуйста! |
|
#2
|
||||
|
||||
|
Ты пытаешься установить размер классу, а нужно объекту класса...
Т.е. ты сначала должен объявить объект типа SystemODU... Обычно класс (тип, запись) называют Код:
TSystemODU Код:
SystemODU: TSystemODU |
|
#3
|
|||
|
|||
|
Спасибо большое, смысл ошибки я понял, сейчас попытаюсь исправить!
|