![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление элемента из массива [D2005]
Alyona © (2009-08-17 17:13:00)Здравствуйте!
Помогите пожалуйста с удалением элементов из массива.
Нужно удалить из массива Х, состоящего из 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;
Dennis I. Komarov (2009-08-19 09:57:00) [1]
> 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;
Вроде того...
Vitaliy_____ (2009-08-19 06:14:00) [2]
> интересно, че будет, если там не цифирь.
Не поверишь, exception со страшным сообщением что в строке не число! Кстати, у меня так и было - там цикл по i с 1 а стринггрид, как известно, с 0 нумерует ячейки... По-моему, надо минимально изменить предложенный код, чтобы он начал делать то, что хотел автор - а то начинаем тут умничать... Конечно большинство бы решало "поставленную задачу" не так - но я ж говорю, солнышко, погода хорошая... Захочешь заниматься этим всерьез, все еще будет ;)
KilkennyCat (2009-08-18 23:09:00) [3]
> x[i]:=strtofloat(stringgrid1.Cells[i,0]);
интересно, че будет, если там не цифирь.
и вообще стока циклов.... а достаточно всего один с запоминанием коэффициента смещения следующего ненулевого элемента
Vitaliy_____ (2009-08-18 13:53:00) [4]Ну и фиг с ним, ты еще eps введи начинающим! Им это на 1-м курсе объяснят, сказано же, что еще только поступают... Хотя прав ведь :)
Franzy (2009-08-18 12:51:00) [5]
> if x[i]=0 then
Ай-ай-ай! Стыдитесь!
Vitaliy_____ (2009-08-18 12:37:00) [6]Какие злые умные дядьки! Им бы все хи-хи да ха-ха, а у человека может времени нет этим дурацким программированием заниматься, у нас вот погода хорошая, солнышко, пляж....
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 ndo
stringgrid2.cells[i,0]:=floattostr(x[i]);
end;
Leonid Troyanovsky (2009-08-17 23:13:00) [7]
> Anatoly Podgoretsky © (17.08.09 23:06) [15]
> Пиши в лигу сексуальных реформ.
А толку - они ж год не забанены были.
--
Regards, LVT.
Anatoly Podgoretsky (2009-08-17 23:06:00) [8]> Leonid Troyanovsky (17.08.2009 22:23:10) [10]
Пиши в лигу сексуальных реформ.
(с) ИиП
Leonid Troyanovsky (2009-08-17 22:56:00) [9]
> KilkennyCat © (17.08.09 22:25) [12]
> Ты может, и готовить не умеешь, и стирать откажешься..
Откажусь, но готовить умею, определенный набор блюд.
Но, это, IMHO, еще не повод для дискриминации.
--
Regards, LVT.
Сергей М. (2009-08-17 22:27:00) [10]
> KilkennyCat © (17.08.09 22:23) [11]
> в зачетке сразу за все года поставят высший балл
Сомневаюсь)
За неизвестное преподу выёживание со стат.массивами можно и низачот схлопотать)
KilkennyCat (2009-08-17 22:25:00) [11]
> Leonid Troyanovsky © (17.08.09 22:23) [10]
Гм... почему-то не хочу я твое фото, я хочу фото девушки.. Ты может, и готовить не умеешь, и стирать откажешься...
KilkennyCat (2009-08-17 22:23:00) [12]
> Сергей М. © (17.08.09 22:17) [9]
Зато в зачетке сразу за все года поставят высший балл :)
Leonid Troyanovsky (2009-08-17 22:23:00) [13]
> KilkennyCat © (17.08.09 22:14) [8]
> Давайте познакомимся, я буду поступать вместе с Вами и буду
> Вашим будущим однокурсником. Пришлите фото. ;)
Прошу отметить: дискриминация по половому признаку.
Вот, например, мое фото никто так и не запросил.
--
Regards, LVT.
Сергей М. (2009-08-17 22:17:00) [14]
> KilkennyCat © (17.08.09 22:12) [7]
Ну это и ежу понятно, что коль нельзя, но очень хочется, то можно)
KilkennyCat (2009-08-17 22:14:00) [15]
> Alyona (17.08.09 20:01) [5]
Давайте познакомимся, я буду поступать вместе с Вами и буду Вашим будущим однокурсником. Пришлите фото. ;)
KilkennyCat (2009-08-17 22:12:00) [16]
> Сергей М. © (17.08.09 17:28) [2]
Можно. Но экономически невыгодно.
Сергей М. (2009-08-17 20:11:00) [17]
> DrPass © (17.08.09 18:27) [3]
Вот ведь дурачат народ)
Alyona (2009-08-17 20:01:00) [18]DrPass , процедуру писала сама (со своими будущими однокурссниками пока еще не знакома)
Alyona (2009-08-17 20:00:00) [19]заменила цикл на
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;
DrPass (2009-08-17 18:27:00) [20]
> Сергей М. © (17.08.09 17:28) [2]
> Из статического массива, каковым у тебя является массив
> типа massiv, элементы удалить невозможно - ни нулевые, ни
> какие бы то ни было.
Сергей, в курсах программирования для самых маленьких "удалить элемент массива" означает сдвинуть все следующие за ним элементы массива влево и уменьшить переменную с количеством элементов на единицу. Это для взрослых программистов говорят суровую правду :)