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:=y[i+1];
end;
var i, n, k: byte;
x: massiv;
begin
n:=strtoint(edit1.text);
for I := 1 to n do
x:=strtofloat(stringgrid1.Cells[i,0]);
k:=0;
for I := n downto 1 do
begin
if x=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);
end;
Удаление элемента из массива
Помогите пожалуйста с удалением элементов из массива.
Нужно удалить из массива Х, состоящего из n элементов, первые четыре нулевых элемента.
Если использую for I := n downto 1 do удаляются 4 последних нулевых элемента,
а если использую for I := 1 to n do не удаляется 0, если он следует сразу за другим нулём.
Что нужно изменить? Заранее спасибо за помощь.
Код:
Цитата: Alyonka89
Здравствуйте!
Помогите пожалуйста с удалением элементов из массива.
Нужно удалить из массива Х, состоящего из n элементов, первые четыре нулевых элемента.
Если использую for I := n downto 1 do удаляются 4 последних нулевых элемента,
а если использую for I := 1 to n do не удаляется 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:=y[i+1];
end;
var i, n, k: byte;
x: massiv;
begin
n:=strtoint(edit1.text);
for I := 1 to n do
x:=strtofloat(stringgrid1.Cells[i,0]);
k:=0;
for I := [COLOR="Red"]1 to n[/COLOR] do
begin
[COLOR="Red"]while[/COLOR] x=0 [COLOR="Red"]do[/COLOR]
begin
if k>=4 then break
else
del_mass(i,n,x);
k:=k+1;
end;
[COLOR="Red"]if k>=4 then break;[/COLOR]
end;
for I := 1 to n-k do
stringgrid2.cells[i,0]:=floattostr(x);
end;
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:=y[i+1];
end;
var i, n, k: byte;
x: massiv;
begin
n:=strtoint(edit1.text);
for I := 1 to n do
x:=strtofloat(stringgrid1.Cells[i,0]);
k:=0;
for I := [COLOR="Red"]1 to n[/COLOR] do
begin
[COLOR="Red"]while[/COLOR] x=0 [COLOR="Red"]do[/COLOR]
begin
if k>=4 then break
else
del_mass(i,n,x);
k:=k+1;
end;
[COLOR="Red"]if k>=4 then break;[/COLOR]
end;
for I := 1 to n-k do
stringgrid2.cells[i,0]:=floattostr(x);
end;
А между тем, если немного подумать, то все это дело можно очень очень сильно упростить:
Код:
procedure TForm1.Button1Click(Sender: TObject);
type massiv = array [1..50] of real;
var i, n, k, cnt: byte;
x: massiv;
begin
n := strtoint(edit1.text);
for i := 1 to n do
x := strtofloat(stringgrid1.Cells[i,0]);
i := 1;
k := 1;
cnt := 0;
while i <= n do
begin
if i <> k then x[k] := x;
if x[k] = 0 and (cnt < 4) then Inc(cnt)
else Inc(k);
Inc(i);
end;
for i := 1 to n - cnt do
stringgrid2.cells[i, 0]:=floattostr(x);
end;
type massiv = array [1..50] of real;
var i, n, k, cnt: byte;
x: massiv;
begin
n := strtoint(edit1.text);
for i := 1 to n do
x := strtofloat(stringgrid1.Cells[i,0]);
i := 1;
k := 1;
cnt := 0;
while i <= n do
begin
if i <> k then x[k] := x;
if x[k] = 0 and (cnt < 4) then Inc(cnt)
else Inc(k);
Inc(i);
end;
for i := 1 to n - cnt do
stringgrid2.cells[i, 0]:=floattostr(x);
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
type massiv = array [1..50] of real;
var i, n, k: byte;
x: massiv;
begin
n := strtoint(edit1.text);
for i := 1 to n do
x := strtofloat(stringgrid1.Cells[i,0]);
i := 1;
k := 0;
while i <= n do
begin
if k <> 0 then x[i - k] := x;
if (x[i - k] = 0) and (k < 4) then Inc(k);
Inc(i);
end;
for i := 1 to n - k do
stringgrid2.cells[i, 0]:=floattostr(x);
end;
type massiv = array [1..50] of real;
var i, n, k: byte;
x: massiv;
begin
n := strtoint(edit1.text);
for i := 1 to n do
x := strtofloat(stringgrid1.Cells[i,0]);
i := 1;
k := 0;
while i <= n do
begin
if k <> 0 then x[i - k] := x;
if (x[i - k] = 0) and (k < 4) then Inc(k);
Inc(i);
end;
for i := 1 to n - k do
stringgrid2.cells[i, 0]:=floattostr(x);
end;
Большое спасибо за помощь