![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не пойму где глюк с массивом. [D6, Win2k]
Pavelkq © (2005-03-05 10:06:00)Здравствуйте! Имею динамический массив
Indexes. Сравниваю его с одной переменной и если она оказывается больше надо удалить текущий элемент массива со сдвигом вверх (нулевой элемент не сравнивается и не меняется никогда). Вот код (все переменные типа Integer)
Set1:=1;
i2:=MaxInd;//Round(MaxInd*(100-Form1.TrackBar1.Position)/100);
While Set1 < EndInd do
begin
i1:=Indexes[Set1].Index;
if i1
evvcom (2005-03-05 10:39:00) [1]Я могу больше сказать. Второй цикл (внутренний) вообще лишний. Move + F1 еще тебе поможет.
Pavelkq (2005-03-05 10:32:00) [2]А-а-а-а, допетрил! Не понял почему, но у меня в коде было
While Set1 <= EndInd do
а надо именно
While Set1 < EndInd do
Спасибо evvcomза наведение на мысль!
begin...end (2005-03-05 10:25:00) [3]> Pavelkq (05.03.05 10:18) [2]
> Аналог High(Indexes)
Точно? Сравните EndInd, High(Indexes) и Length(Indexes). Если EndInd - это всё же длина , то ошибка есть, по крайней мере, вусловии вложенного цикла: While Set2 < =EndInd do.
Pavelkq (2005-03-05 10:24:00) [4]Да, точно подзабыл этот момент, но суть не меняется. В худшем случае в массиве остается только 1 элемент, т.е. нулевой. При этом
SetLength(Indexes,1);срабатывает верно.
Pavelkq (2005-03-05 10:20:00) [5]EndInd, конечно, тороплюсь...
Pavelkq (2005-03-05 10:18:00) [6]EndEnd - это переменная сыитающая конец массива.
Аналог High(Indexes)
evvcom (2005-03-05 10:18:00) [7]По строке SetLength(Indexes,EndInd); ясно, что у автора путаются понятия последнего индекса и длины массива. Длина массива всегда на 1 больше последнего индекса в динам. массиве, так как индекс первого элемента = 0.
begin...end (2005-03-05 10:10:00) [8]> Pavelkq (05.03.05 10:06)
Что такое EndInd?