Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.18;
Скачать: CL | DM;

Вниз

Удаление элемента из массива   Найти похожие ветки 

 
Alyona   (2009-08-17 17:13) [0]

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


 
DrPass ©   (2009-08-17 17:15) [1]

Процедуру сама писала, или у однокурсников позаимствовала?


 
Сергей М. ©   (2009-08-17 17:28) [2]


> Alyona   (17.08.09 17:13)  


Из статического массива, каковым у тебя является массив типа massiv, элементы удалить невозможно - ни нулевые, ни какие бы то ни было.


 
DrPass ©   (2009-08-17 18:27) [3]


> Сергей М. ©   (17.08.09 17:28) [2]


> Из статического массива, каковым у тебя является массив
> типа massiv, элементы удалить невозможно - ни нулевые, ни
> какие бы то ни было.

Сергей, в курсах программирования для самых маленьких "удалить элемент массива" означает сдвинуть все следующие за ним элементы массива влево и уменьшить переменную с количеством элементов на единицу. Это для взрослых программистов говорят суровую правду :)


 
Alyona   (2009-08-17 20:00) [4]

заменила цикл на

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;


 
Alyona   (2009-08-17 20:01) [5]

DrPass , процедуру писала сама (со своими будущими однокурссниками пока еще не знакома)


 
Сергей М. ©   (2009-08-17 20:11) [6]


> DrPass ©   (17.08.09 18:27) [3]


Вот ведь дурачат народ)


 
KilkennyCat ©   (2009-08-17 22:12) [7]


> Сергей М. © (17.08.09 17:28) [2]


Можно. Но экономически невыгодно.


 
KilkennyCat ©   (2009-08-17 22:14) [8]


> Alyona (17.08.09 20:01) [5]

Давайте познакомимся, я буду поступать вместе с Вами и буду Вашим будущим однокурсником. Пришлите фото. ;)


 
Сергей М. ©   (2009-08-17 22:17) [9]


> KilkennyCat ©   (17.08.09 22:12) [7]


Ну это и ежу понятно, что коль нельзя, но очень хочется, то можно)


 
Leonid Troyanovsky ©   (2009-08-17 22:23) [10]


> KilkennyCat ©   (17.08.09 22:14) [8]

> Давайте познакомимся, я буду поступать вместе с Вами и буду
> Вашим будущим однокурсником. Пришлите фото. ;)

Прошу отметить: дискриминация по половому признаку.
Вот, например, мое фото никто так и не запросил.

--
Regards, LVT.


 
KilkennyCat ©   (2009-08-17 22:23) [11]


> Сергей М. © (17.08.09 22:17) [9]

Зато в зачетке сразу за все года поставят высший балл :)


 
KilkennyCat ©   (2009-08-17 22:25) [12]


> Leonid Troyanovsky © (17.08.09 22:23) [10]

Гм... почему-то не хочу я твое фото, я хочу фото девушки.. Ты может, и готовить не умеешь, и стирать откажешься...


 
Сергей М. ©   (2009-08-17 22:27) [13]


> KilkennyCat ©   (17.08.09 22:23) [11]


> в зачетке сразу за все года поставят высший балл


Сомневаюсь)
За неизвестное преподу выёживание со стат.массивами можно и низачот схлопотать)


 
Leonid Troyanovsky ©   (2009-08-17 22:56) [14]


> KilkennyCat ©   (17.08.09 22:25) [12]

>  Ты может, и готовить не умеешь, и стирать откажешься..

Откажусь, но готовить умею, определенный набор блюд.
Но, это, IMHO, еще не повод для дискриминации.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2009-08-17 23:06) [15]

> Leonid Troyanovsky  (17.08.2009 22:23:10)  [10]

Пиши в лигу сексуальных реформ.
(с) ИиП


 
Leonid Troyanovsky ©   (2009-08-17 23:13) [16]


> Anatoly Podgoretsky ©   (17.08.09 23:06) [15]

> Пиши в лигу сексуальных реформ.

А толку - они ж год не забанены были.

--
Regards, LVT.


 
Vitaliy_____   (2009-08-18 12:37) [17]

Какие злые умные дядьки! Им бы все хи-хи да ха-ха, а у человека может времени нет этим дурацким программированием заниматься, у нас вот погода хорошая, солнышко, пляж....

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;
i:=1;
while i<=n do

  begin
    if x[i]=0 then
      begin
        if k>=4 then break
        else
          del_mass(i,n,x);
        k:=k+1;
        n:=n-1;
      end
    else i:=i+1;

  end;
for I := 1 to n do
  stringgrid2.cells[i,0]:=floattostr(x[i]);
end;


 
Franzy   (2009-08-18 12:51) [18]


> if x[i]=0 then


Ай-ай-ай! Стыдитесь!


 
Vitaliy_____   (2009-08-18 13:53) [19]

Ну и фиг с ним, ты еще eps введи начинающим! Им это на 1-м курсе объяснят, сказано же, что еще только поступают... Хотя прав ведь :)


 
KilkennyCat ©   (2009-08-18 23:09) [20]


> x[i]:=strtofloat(stringgrid1.Cells[i,0]);

интересно, че будет, если там не цифирь.

и вообще стока циклов.... а достаточно всего один с запоминанием коэффициента смещения следующего ненулевого элемента


 
Vitaliy_____   (2009-08-19 06:14) [21]


> интересно, че будет, если там не цифирь.

Не поверишь, exception со страшным сообщением что в строке не число! Кстати, у меня так и было - там цикл по i с 1 а стринггрид, как известно, с 0 нумерует ячейки... По-моему, надо минимально изменить предложенный код, чтобы он начал делать то, что хотел автор - а то начинаем тут умничать... Конечно большинство бы решало "поставленную задачу" не так - но я ж говорю, солнышко, погода хорошая... Захочешь заниматься этим всерьез, все еще будет ;)


 
Dennis I. Komarov ©   (2009-08-19 09:57) [22]


> Alyona   (17.08.09 17:13)  
> Нужно удалить из массива Х, состоящего из n элементов, первые
> четыре нулевых элемента.


X: array [0..n-1] of AnyType;
i, c: integer;

begin
i:=0;
c:=0;

пока с < 4 и i < n-1 делаем
{
пока x[i] <> 0  увеличиваем i на 1
inc(c)
с позиции i до конца переносим элементы x[i]:=x[i+1]
уменьшаем n на 1
}
end;


Вроде того...



Страницы: 1 вся ветка

Текущий архив: 2009.10.18;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.011 c
15-1250623324
{RASkov}
2009-08-18 23:22
2009.10.18
Песня про арбуз


11-1175699064
!Pharaon!
2007-04-04 19:04
2009.10.18
Пару вопросов по KOL


2-1250149690
_Андрей
2009-08-13 11:48
2009.10.18
FastMM &amp; records


15-1250414408
dimoktmb
2009-08-16 13:20
2009.10.18
Виртуальный COM от Prolific


15-1250594396
Vera
2009-08-18 15:19
2009.10.18
JvComponentBase