В этой статье я хотел бы поговорить о том, как можно удалить элементы массива путем смещения. Многие применяют технологию удаления — путем замены, удаляемых элементов например нулями или еще чем-то, а при выводе элементов массива их просто не выводят. Многие просто записывают в другой массив нужные элементы и потом выводят его, это не есть правильно, то есть фактически у нас же есть массив, значит мы в нем должны удалить элементы, а не переместить в другой, а если эти элементы не выводить, то они же фактически остаются там, и занимают место в памяти, что не есть хорошо. Алгоритм путем смещения очень простой, просто с элементы, которого надо удалить, например все «нули» начинается смещение элементов до конца массива, потом цикл начинается заново и до тех пор, пока не будет элементов в массиве, которые необходимо удалить. На форме у меня следующие компоненты, мы будет все это делать не в консольном режиме, в а графическом
- 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;
Все, что говорил выше, все так реализовано здесь. Только забыл сказать, что мы еще уменьшаем размерность массива, в нашем случае количество столбцов, ну раз мы удалили элемент, то и размер его поменяется ведь так? В следующий статьях про массивы мы рассмотрим — сортировки массива методом пузырька, методом минимального элемента, ну и другие разные задачки с массивами.
Кстати, насчет темы программирования — существует множество сред разработки, языков программирования, компиляторов, одним из популярных языков программировании в настоящее время является Java. Если Вы захотите научиться на нем программировать, то Вам просто необходимо будет скачать книгу Философия Java, которая поможет Вам узнать более новые приемы и методы программирования на данном языке. |
Автор статьи — Andrey53
Метки: TStringGrid, массив
если stringgrid то проще сделать
for x:=stringgrid1.row to stringgrid1.rowcount-1 do
begin
stringgrid1.rows[x].commatext:=stringgrid1.rows[x+1].commatext;
end;
stringgrid1.rowcount:=stringgrid1.rowcount-1;
Правда это чтоб удалить выбранную строку в стринггриде
помогите сделать два цикла один идет добавляет данные а второй если значение равно нулю то удаляет строку притом что они не должны мешать друг другу ,у меня что то как то криво получается
Помогите разобраться. Нужно что бы в combobox были имена всех дисков, кроме тех, что уже есть в listbox…
procedure TForm1.FormCreate(Sender: TObject);
var
i, j, i_name, j_name: integer;
drv_name: array [0..25] of string=('A:\', 'B:\', 'C:\', 'D:\', 'E:\', 'F:\',
'G:\', 'H:\', 'I:\', 'J:\', 'K:\', 'L:\',
'M:\', 'N:\', 'O:\', 'P:\', 'Q:\', 'R:\',
'S:\', 'T:\', 'U:\', 'V:\', 'W:\', 'X:\',
'Y:\', 'Z:\');
begin
CreateDrivesList(ListBox1.Items);
i_name:= 0;
j_name:= 0;
for j:=j_name to ListBox1.Items.Count-1 do
begin
for i:= i_name to 25 do
begin
if drv_name[i] ListBox1.Items.Strings[j] then
ComboBox1.Items.Add(drv_name[i]);
i_name:= i_name+1;
end;
end;
ListBox1.Refresh;
ComboBox1.Refresh;