|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Задача о наборе высоты и скорости летательным аппаратом
Доброго времени суток. Я пишу программу, которая находит минимальный расход топлива при наборе высоты и
скорости ЛА. Проблема в следующем: Когда я пытаюсь заполнить 1 строку массива S используя считанные значения из StringGridа массива, двигаясь справа налево, возникает ошибка "invalid pointer operation". Где ошибка, не понимаю. Вот код: Код:
//Вычисление расходов топлива S procedure TForm1.Button3Click(Sender: TObject); var S:array of array of double; V:array of array of double; H:array of array of double; i,j,k,c:integer; begin SetLength(V,StringGrid1.ColCount,StringGrid1.RowCount); SetLength(H,StringGrid1.ColCount,StringGrid1.RowCount); SetLength(S,StringGrid1.ColCount,StringGrid1.RowCount); For j:= 1 to StringGrid1.ColCount-1 do //столбец For i:= 1 to StringGrid1.RowCount-1 do //строка begin if ((i mod 2 = 0) and (j mod 2 = 1)) then begin H[i,j]:=strtofloat(StringGrid1.Cells[j,i]); //Заполнение массива H[i,j] end; if ((i mod 2 = 1) and (j mod 2 = 0)) then begin V[i,j]:=strtofloat(StringGrid1.Cells[j,i]); //Заполнение массива V[i,j] end; end; //Заполнение первой строки массива S с конца c:=2*(strtoint(Form2.edtn.text))+1; //кол-во столбцов S[1,c-2]:=V[1,c-1]; c:=c-2; while (c<=1) do for k:= 1 to 2*(strtoint(Form2.edtm.text))+1 do begin c:=c-2; S[1,c]:=S[1,c+2]+V[1,c+k]; StringGrid1.Cells[c,1]:=floattostr(S[1,c]); end; end; Вот весь проект http://gfile.ru/a7HL4 И теория к нему http://gfile.ru/a6SvE Мне одно не нравится, В теории присутствует координатная плоскость, что понятно. А в стринггрде оси можно расположить только сверху и слева,что не очень смотрится и затрудняет,думаю счет. Думал наклепать эдитов, но получится ограничение по ихкол-ву.. Может посоветуете? Осталось самое сложное, собственно. Посчитать значения S(расходы топлива) и найти оптимальный путь. Готов обсудить оплату, при необходимости. |
#2
|
||||
|
||||
А здесь условие точно правильное?:
Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
'Zanuda' (01.04.2014)
|
#3
|
|||
|
|||
Действительно, наоборот. Чуть подправил:
Код:
//Вычисление расходов топлива S procedure TForm1.Button3Click(Sender: TObject); var S:array of array of double; V:array of array of double; H:array of array of double; i,j,k,c:integer; begin SetLength(V,StringGrid1.ColCount,StringGrid1.RowCount); SetLength(H,StringGrid1.ColCount,StringGrid1.RowCount); SetLength(S,StringGrid1.ColCount,StringGrid1.RowCount); For j:= 0 to StringGrid1.ColCount-1 do //столбец For i:= 0 to StringGrid1.RowCount-1 do //строка begin if ((i mod 2 = 0) and (j mod 2 = 1)) then begin H[i,j]:=strtofloat(StringGrid1.Cells[j,i]); //Заполнение массива H[i,j] end; if ((i mod 2 = 1) and (j mod 2 = 0)) then begin V[i,j]:=strtofloat(StringGrid1.Cells[j,i]); //Заполнение массива V[i,j] end; end; //Заполнение первой строки массива S с конца c:=StringGrid1.ColCount-1; //кол-во столбцов S[1,c-2]:=V[1,c-1]; StringGrid1.Cells[c-2,1]:=floattostr(S[1,c-2]); c:=c-2; while (c>1) do begin c:=c-2; S[1,c]:=S[1,c+2]+V[1,c+1]; StringGrid1.Cells[c,1]:=floattostr(S[1,c]); end; end; Но теперь выскакивают ошибки list index out of bounds и Invalid pointer рoperation. Но первая строка заполняется, хотя и весьма странно(в 2 соседние ячейки заносятся одинаковое значение)... И еще одна странность, если вводить большое столбцов, то при прокручивании в ячейках цифры как бы накладываются друг на друга... Последний раз редактировалось 'Zanuda', 01.04.2014 в 18:47. |
#4
|
|||
|
|||
Даже за деньги никто не знает, как это сделать?
|
#5
|
||||
|
||||
За деньги - в раздел работ.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |