Главная страница
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.023 c
7-79209
LexaVV
2003-09-16 10:08
2003.11.24
MAC адрес, BIOS


14-79104
Yttrium
2003-11-03 01:01
2003.11.24
Lazarus, косяк при компоновке под Linux


11-78870
Boguslaw
2003-02-25 02:12
2003.11.24
KOL object for connecting to SQLite database


1-79038
Ragazor
2003-11-13 13:13
2003.11.24
Как правильно устанавливать соед. по DDE?


14-79144
MonStar
2003-10-31 10:08
2003.11.24
Помогите: кто будучи студентом писал диплом на DELPHI?