Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
ВнизРабота с массивами Найти похожие ветки
← →
Soi (2003-11-14 06:57) [0]Такой вопрос. У меня есть массив q: array[1..50] of integer, этот массив я наполняю числами в случайном порядке в диапазоне от 1 до 50. Так вот, как после наполнения этого массива из него удалить элемент который содержит например цифру 1? Если можно, то привелите пожалуйста примерчик. Очень надо. Заранее благодарен.
← →
Maxud (2003-11-14 07:08) [1]Используй динамический массив или список.
← →
Soi (2003-11-14 07:19) [2]У меня уже прога почти сделана с использованием этого массива, переделовать в облом. Просто возникла не предвиденная ситуация, поэтому и спрашиваю как это сделать.
← →
Maxud (2003-11-14 07:27) [3]Если бы в статических массивах была возможность вставки или удаления элементов, то никто не стал бы изобретать списки и т.д.
Подумай над
> Maxud © (14.11.03 07:08) [1]
← →
Владислав (2003-11-14 09:19) [4]Ну вот тебе две процедурки. Только чего ты будешь делать с последним элементом?.. Размер массива то не меняется. Просто сдвигаются эго элементы.
procedure InsertIntoArray(const ArrayPointer: Pointer;
const ArraySize, ElementSize: Integer;
const AValue: Pointer; const AIndex, ACount: Integer);
var
InsertPoint: Pointer;
InsertingByteCount: Cardinal;
MovingByteCount: Cardinal;
begin
InsertingByteCount := Cardinal(ACount) * Cardinal(ElementSize);
InsertPoint :=
Pointer(Cardinal(ArrayPointer) + Cardinal(AIndex) * Cardinal(ElementSize));
MovingByteCount := Cardinal(ArraySize - AIndex - 1) * Cardinal(ElementSize);
Move(InsertPoint^, Pointer(Cardinal(InsertPoint) + InsertingByteCount)^,
MovingByteCount);
Move(AValue^, InsertPoint^, InsertingByteCount);
end;
procedure RemoveFromArray(const ArrayPointer: Pointer;
const ArraySize, ElementSize: Integer;
const AIndex, ACount: Integer);
var
RemovePoint: Pointer;
RemovingByteCount: Cardinal;
MovingByteCount: Cardinal;
begin
RemovingByteCount := Cardinal(ACount) * Cardinal(ElementSize);
RemovePoint :=
Pointer(Cardinal(ArrayPointer) + Cardinal(AIndex) * Cardinal(ElementSize));
MovingByteCount := Cardinal(ArraySize - AIndex - 1) * Cardinal(ElementSize);
Move(Pointer(Cardinal(RemovePoint) + RemovingByteCount)^, RemovePoint^,
MovingByteCount);
end;
← →
Soi (2003-11-14 10:08) [5]ДА, теперь я начинаю понимать что последний элемента массива останется в любом случае, ну вот это еще одна проблема :(
Наверное в конечном итоге все равно прийдется воспользоваться dynamic array. В любом случае спасибо за помощь Владислав
← →
Anatoly Podgoretsky (2003-11-14 10:21) [6]Из массивов нельзя удалять или добавлять строки в середине, для этого сущетвуют списки.
← →
Владислав (2003-11-14 10:46) [7]> Soi © (14.11.03 10:08) [5]
Если решил делать "как лучше", то уж тогда подумай на счет связаных списков.
← →
Erik (2003-11-14 11:28) [8]А в чем сложность заменяеш свой q: array[1..50] of integer на
q: array of integer и компиляция пройдет нормально. Незабудь призаполнении SetLength(q, 50); А далее тотже Move только SetLength для уменьшения размера добавь.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c