|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Удаление элемента из массива
Здравствуйте!
Помогите пожалуйста с удалением элементов из массива. Нужно удалить из массива Х, состоящего из n элементов, первые четыре нулевых элемента. Если использую for I := n downto 1 do удаляются 4 последних нулевых элемента, а если использую for I := 1 to n do не удаляется 0, если он следует сразу за другим нулём. Что нужно изменить? Заранее спасибо за помощь. Код:
procedure TForm1.Button1Click(Sender: TObject); type massiv=array [1..50] of real; procedure del_mass(m, kol:integer; var y:massiv); var i: integer; begin for I := m to kol-1 do y[i]:=y[i+1]; end; var i, n, k: byte; x: massiv; begin n:=strtoint(edit1.text); for I := 1 to n do x[i]:=strtofloat(stringgrid1.Cells[i,0]); k:=0; for I := n downto 1 do begin if x[i]=0 then begin if k>=4 then break else del_mass(i,n,x); k:=k+1; end; end; for I := 1 to n-k do stringgrid2.cells[i,0]:=floattostr(x[i]); end; Последний раз редактировалось Admin, 17.08.2009 в 17:12. |
#2
|
|||
|
|||
Вариант первый - делать в 2 прохода. В первый проход находишь индексы элементов = 0, во второй проход - удаляешь.
Вариант второй - использовать цикл While. При удалении элемента - не увеличивать счетчик, что бы по этому элементу "пройтись" еще раз. |
#3
|
|||
|
|||
спасибо огромное за помощь... работает
Код:
repeat if (x[i]=0)and(k<4) then begin del_mass(i,n-k,x); k:=k+1; end else i:=i+1; until i>=n-k; |