Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Динамический массив. Правильный порядок


Автор: Beren 28.3.2011, 13:22
Вот в чём суть. Мне надо исправить в этом коде процедуру Re-перестановки элементов по индексу. И не получется сделать, чтобы процедура Del удаляла элемент исходного массива , а не после вставки элемента (. Благодарю за помощь
Код
implementation
type
Areal=array of integer;
var a:Areal ;

{$R *.dfm}

procedure CreateMas(var Aq:Areal;N:integer );
var I:Integer;

begin
SetLength(Aq,N);
for I:=0 to N-1 do
begin
Aq[i]:=i+1;
end;
end;
procedure ShowMas(var Aw:Areal;Memo:TMemo);
var N:Integer;
I:Integer;
Begin
N := Length(Aw);
for I:=0 to N-1 do
begin
Memo.Lines.Add(IntToStr(Aw[i]));
end;
End;
procedure Ainsert (var Ar:Areal;R:integer; Ind:integer);
var
N:Integer;
I:Integer;

begin
N:=Length(Ar);
SetLength(Ar, N+1);
for i:=N-1 downto Ind do
Ar[i+1]:=Ar[i];
Ar[ind]:=R;
end;
procedure Del(var Ae:Areal; x:integer);
var N:Integer;
I:Integer;
begin
N:=Length(Ae);
for i:=x to N-1 do
Ae[i-1]:= Ae[i];
SetLength(Ae, N-1);
end;
procedure Re( var Ay:Areal; v:integer; h:integer);
var N:Integer;
I:Integer;
tmp:integer;
begin
N := Length(Ay);
for I:=0 to N-1 do

tmp:=A[v];
A[v]:=A[h];
A[h]:=tmp;
SetLength(Ay, N);

end;
procedure TForm1.Button1Click(Sender: TObject);
var
N:integer;
begin
N:=StrToInt(Edit1.Text);
CreateMas(A,N);
Memo1.Clear();
ShowMas(A,Memo1);
Ainsert(A,StrToInt(Edit2.Text),StrToInt(Edit3.Text)-1);
Memo2.Clear();
ShowMas(A,Memo2);
Del(A,StrToInt(Edit4.Text));
Memo3.Clear ;
ShowMas(A,Memo3);
Re(A, StrToInt(Edit5.Text),StrToInt(Edit6.Text)-1);
ShowMas(A,Memo4);


end;

end.

Автор: MetalFan 28.3.2011, 17:21
Цитата(Beren @  28.3.2011,  13:22 Найти цитируемый пост)
И не получется сделать, чтобы процедура Del удаляла элемент исходного массива , а не после вставки элемента (

а теперь еще раз и по-русски...

А Del должно выглядеть так:
Код

procedure Del(var Ae:Areal; x:integer);
var
  N:Integer;
  I:Integer;
begin
  N:=Length(Ae);
  for i:=succ(x) to N-1 do
    Ae[i-1]:= Ae[i];
  SetLength(Ae, N-1);
end;

Автор: Beren 28.3.2011, 20:39
Что тут непонятного ?!.  Ainsert  вставляет элемент в массив. А мне надо, чтобы Del удаляла не после вставки элемента в массив, а тот который создаётся. Или еще проще в Memo1 исходный массив, в Memo2 после вставки элемент в массив, который в Memo1. И мне надо,чтобы в Memo3 был массив, который в Memo1, но после удаления элемента. А сейчас в Memo3 массив, который в Memo2 после удаления элемента. Доступно излагаю ?

Автор: MetalFan 29.3.2011, 14:46
Beren, да все понятно. копаться в твоем жудко отформатированном коде нет никакого желания.
Попробовал бы хоть внести мою правку в Del для начала...

Автор: 0x0027 1.4.2011, 10:32
MetalFan, цикл? Может лучше move?)

Автор: MetalFan 1.4.2011, 17:47
0x0027, несомненно лучше.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)