![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |