Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

Работа с массивами   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
14-79162
Linda
2003-10-30 13:52
2003.11.24
Хочу!!!


3-78750
mike_gorb
2003-11-06 10:39
2003.11.24
Accessform


1-79031
webpauk
2003-11-13 16:51
2003.11.24
ClientRect


6-79084
Tommy
2003-09-16 16:18
2003.11.24
Sinxronizacia setevogo vremeni


4-79238
SH
2003-09-25 19:25
2003.11.24
Не работает enumprocesses