Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2009, 17:25   #1
Alyonka_v
Пользователь
 
Регистрация: 05.12.2007
Сообщений: 11
По умолчанию Удаление элемента из массива (Delphi)

Здравствуйте!
Помогите пожалуйста с удалением элементов из массива.
Нужно удалить из массива Х, состоящего из 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;

Последний раз редактировалось MaTBeu; 17.08.2009 в 19:45.
Alyonka_v вне форума Ответить с цитированием
Старый 17.08.2009, 17:34   #2
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Тоесть имеется одномерный массив из n элементов и из него нужно удалить последовательность из подряд идущих 4-х нулей?
Удалить или чемто заменить?
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 17.08.2009, 17:45   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Для удаления элементов из массива нужно использовать цикл while ..do, после каждого удаления уменьшать на 1 длину массива.

Вот пример под Вашу задачу.
Код:
type massiv=array [1..50] of real;
var
  Form1: TForm1;
  n:byte;
implementation

{$R *.dfm}
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;
procedure TForm1.Button1Click(Sender: TObject);
begin
n:=strtoint(edit1.text);
stringgrid1.ColCount:=n;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,k: byte;
    x: massiv;
begin
for I := 1 to n do
x[i]:=strtofloat(stringgrid1.Cells[i-1,0]);
k:=0;
I:=1;
while i<=n do
  begin
    if x[i]=0 then
       begin
        del_mass(i,n,x);
        n:=n-1;
        k:=k+1;
       end
     else i:=i+1;
     if k=4 then break;
  end;
stringgrid2.ColCount:=n;
for I := 1 to n do
stringgrid2.cells[i-1,0]:=floattostrF(x[i],ffFixed,5,2);
end;
end.

Последний раз редактировалось Stilet; 18.08.2009 в 09:18.
puporev вне форума Ответить с цитированием
Старый 17.08.2009, 20:04   #4
Alyonka_v
Пользователь
 
Регистрация: 05.12.2007
Сообщений: 11
По умолчанию

Спасибо огромное за помощь
Alyonka_v вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PHP: использование элемента массива как массива Sudia Помощь студентам 1 20.02.2009 20:48
Удаление элемента из массива Ozerich PHP 10 14.02.2009 02:21
Удаление элемента массива со сдвигом последующих beregok Общие вопросы C/C++ 11 09.01.2009 17:11
Удаление элемента динамического массива Dogmat Помощь студентам 6 13.07.2008 14:33
Удаление элемента массива chiffa Общие вопросы Delphi 1 03.01.2008 19:24