помогите поправить код на Delphi
, вылетает с ошибкой elisterror list index out of bounds (0)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.146] |
|
|
Правила раздела
помогите поправить код на Delphi
, вылетает с ошибкой elisterror list index out of bounds (0)
|
Сообщ.
#1
,
|
|
|
|
Здравствуйте знатоки. Задали задачку по мат. моду, нужно реализовать программу которая моделирует движение космического корабля относительно земли. В принципе писать можно на чем угодно, в основном пишут на маткаде и матлабе, я выбрал на делфи. Набросал код, но вылетает с ошибкой, блин хоть убей не пойму где косяк, поправьте пожалуйста. Прога запускается, но когда нажимаешь на кнопку для расчета вылетает с ошибкой elisterror list index out of bounds (0) код ниже
![]() ![]() procedure TForm1.Button1Click(Sender: TObject); var //-------------------------------------------- x,y,z,time,vx,vy,vz,rad_v:array[0..5000] of real ; TT,vs,v0,t,dt:Extended; h,h2,r,MM,G,m:Extended; i,j,k:integer; begin Chart1.Series[0].Clear; //Chart1.Series[1].Clear; //Chart1.Series[2].Clear; if edit1.Text ='' then ShowMessage('Введите скорость станции!') else Begin if edit2.Text ='' then ShowMessage('Введите скорость аппарата!') else Begin h:=strtofloat(Edit1.Text); v0:=strtofloat(Edit2.Text); G:=6.67e-11;//----гравит-я пост MM:=6e+24;//---масса Земли m:=strtofloat(Edit3.Text); //масса аппарата h2:=6400000;//радиус Земли(м) h:=h*h2; R:=h+h2; vs:=sqrt(G*MM/R);//скорость t:=0; //-------время dt:=10;//------шаг по времени TT:=(2*Pi*(r+h))/vs; //-------период станции k:=1000; //------------------------------------ t:=dt; i:=0; time[0]:=0; //---Начальные условия x[0]:=R; y[0]:=0; z[0]:=0; vx[0]:=0; vy[0]:=vs; vz[0]:=v0; //rad_v[0]:=sqrt(x[0]*x[0]+y[0]*y[0]+z[0]*z[0]); //showmessage(floattostr(R)); //showmessage(floattostr(rad_v[0])); while (i<5000) do begin rad_v[i]:=sqrt(x[i]*x[i]+y[i]*y[i]+z[i]*z[i]); if rad_v[i]=0 then begin showmessage('радиус вектор=0'); showmessage(floattostr(i)); break; end; vx[i+1]:=vx[i]-(G*MM*x[i]*dt)/(rad_v[i]*rad_v[i]*rad_v[i]*m); x[i+1]:=x[i]+dt*vx[i+1]; vy[i+1]:=vy[i]-(G*MM*y[i]*dt)/(rad_v[i]*rad_v[i]*rad_v[i]*m); y[i+1]:=y[i]+dt*vy[i+1]; vz[i+1]:=vz[i]-(G*MM*z[i]*dt)/(rad_v[i]*rad_v[i]*rad_v[i]*m); z[i+1]:=z[i]+dt*vz[i+1]; i:=i+1; // t:=t+dt; if i<>0 then begin t:=t+dt; time[i]:=t; end; end; // showmessage(floattostr(rad_v[0])); //---------------график------------------------- Chart1.Series[0].XValues.Order:=loNONE; for j:=0 to i-1 do begin Chart1.Series[0].AddXY(time[j],rad_v[j]); end; //-------------------------------------- |
|
Сообщ.
#2
,
|
|
|
|
Вылеет за границы списка. Список тут Chart1.Series. Возможно он пуст? То есть в нем отсутствует значение с индексом 0
Добавлено Для уточнения где ошибка пройти в пошаговом режиме. |
|
Сообщ.
#3
,
|
|
|
|
ммм, что то не понял, напишите пожалуйста подробнее.
в пошаговом пробовал, доходит до конца, прога запускается, а когда нажимаешь кнопку (button1) делфи сам вываливается, с ошибкой что то вроде elisterror list index out of bounds, и далее уже не выполняется, приходится перезапускать делфю, не могу поймать место с которого так глючить начинает |
|
Сообщ.
#4
,
|
|
|
|
Цитата mnemonik @ когда нажимаешь на кнопку для расчета вылетает с ошибкой elisterror list index out of bounds (0) код ниже Кнопка расчета - Button1? Наведи курсор на строку ![]() ![]() Chart1.Series[0].Clear; и нажми F5 (появится брекпойнт). Запусти прогу по F9 . Прога остановится на строке. Нажми F8. Если строку минует успешно-найди ту, на которой ошибку выдает. Скорее всего, ошибка в первой строчке. Ты не задал серии в чарте. Кликни по нему дважды и задай нужное количество серий. При обращении помни, что номерация списка начинается с нуля. |
|
Сообщ.
#5
,
|
|
|
|
Вопрос решен или нет?
|