В этой статье я хотел бы поговорить о том, как можно удалить элементы массива путем смещения. Многие применяют технологию удаления — путем замены, удаляемых элементов например нулями или еще чем-то, а при выводе элементов массива их просто не выводят. Многие просто записывают в другой массив нужные элементы и потом выводят его, это не есть правильно, то есть фактически у нас же есть массив, значит мы в нем должны удалить элементы, а не переместить в другой, а если эти элементы не выводить, то они же фактически остаются там, и занимают место в памяти, что не есть хорошо. Алгоритм путем смещения очень простой, просто с элементы, которого надо удалить, например все «нули» начинается смещение элементов до конца массива, потом цикл начинается заново и до тех пор, пока не будет элементов в массиве, которые необходимо удалить. На форме у меня следующие компоненты, мы будет все это делать не в консольном режиме, в а графическом
- TStringGrid
- TButton
В TStringGrid свойстве Options-goEditing установить в True, в FixedCols, FixedRows установите в 0, в свойстве RowCount установите 1 (так как мы будем работать с одномерным массивом).
Далее на событие OnClick Button я написал следующий код
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,j:integer;
begin
try
j:=0;
i:=0;
while (i<=StringGrid1.ColCount-1) do
begin
if StringGrid1.Cells[i,0]='0' then
begin
for j:=i to StringGrid1.ColCount-1 do
begin
StringGrid1.Cells[j,0]:=StringGrid1.Cells[j+1,0];
end;
i:=i-1;
StringGrid1.ColCount:=StringGrid1.ColCount-1;
end;
inc(i);
end;
except
on e:Exception do
end;
end;
Все, что говорил выше, все так реализовано здесь. Только забыл сказать, что мы еще уменьшаем размерность массива, в нашем случае количество столбцов, ну раз мы удалили элемент, то и размер его поменяется ведь так? В следующий статьях про массивы мы рассмотрим — сортировки массива методом пузырька, методом минимального элемента, ну и другие разные задачки с массивами.