Евгений_Еров@vk
08-01-2013, 14:59
вобщем есть программа, рабочая 100%
не пойму процедуру удаления
зачем нам ?
begin
u:=last;
v:=first;
while u^.next<>first do
begin
u:=u^.next;
end;
first:=u;
first^.next:=nil;
dispose(v);
uses Formsabc;
type
PNode = ^TNode; //Это наш указатель (ссылка)
TNode = record //описание одной ячейки очереди
color: string[30]; // рабочие данные
kod:string[10];
next: PNode; // указатель на следующий элемент очереди
end;
var
first,last: PNode; // переменная, через которую будет общаться с очередью - это и есть "голова" очереди
bt1,bt2,bt3:button;
l:listbox;
d,k:Field;
procedure Add(var first:PNode;var last:PNode);
var n:PNode;
Begin
new(n);
n^.color:=d.text;
n^.kod:=k.text;
n^.next:=nil;
if first=nil then
begin
first:=n;
last:=n;
end
else
begin
n^.next:=last;
last:=n;
end;
End;
procedure Addelement;
begin
Add(first,last);
end;
procedure Print;
var r:PNode;
begin
l.Items.Clear();
r:=Last;
while r<>nil do
begin
l.Items.Add(r^.color+' - '+r^.kod.ToString());
r:=r^.next;
end;
end;
procedure del(var first,last:PNode);
Var v:PNode; u:PNode;
begin
if first=last then
begin
dispose(last);
first:=nil;
last:=nil;
end
else
begin
u:=last;
v:=first;
while u^.next<>first do
begin
u:=u^.next;
end;
first:=u;
first^.next:=nil;
dispose(v);
end;
end;
procedure delelement;
begin
del(first,last);
end;
procedure Main;
Begin
bt1:=new Button('Добавить');
bt2:=new Button('Показать');
bt3:=new Button('Удалить');
LineBreak;
d:=new Field('Цвет',150);
LineBreak;
k:=new Field('код цвета',100);
LineBreak;
l:=new ListBox();
LineBreak;
bt1.click+=Addelement;
bt2.Click+=Print;
bt3.Click+=delelement;
end;
BEGIN
Main;
END.
не пойму процедуру удаления
зачем нам ?
begin
u:=last;
v:=first;
while u^.next<>first do
begin
u:=u^.next;
end;
first:=u;
first^.next:=nil;
dispose(v);
uses Formsabc;
type
PNode = ^TNode; //Это наш указатель (ссылка)
TNode = record //описание одной ячейки очереди
color: string[30]; // рабочие данные
kod:string[10];
next: PNode; // указатель на следующий элемент очереди
end;
var
first,last: PNode; // переменная, через которую будет общаться с очередью - это и есть "голова" очереди
bt1,bt2,bt3:button;
l:listbox;
d,k:Field;
procedure Add(var first:PNode;var last:PNode);
var n:PNode;
Begin
new(n);
n^.color:=d.text;
n^.kod:=k.text;
n^.next:=nil;
if first=nil then
begin
first:=n;
last:=n;
end
else
begin
n^.next:=last;
last:=n;
end;
End;
procedure Addelement;
begin
Add(first,last);
end;
procedure Print;
var r:PNode;
begin
l.Items.Clear();
r:=Last;
while r<>nil do
begin
l.Items.Add(r^.color+' - '+r^.kod.ToString());
r:=r^.next;
end;
end;
procedure del(var first,last:PNode);
Var v:PNode; u:PNode;
begin
if first=last then
begin
dispose(last);
first:=nil;
last:=nil;
end
else
begin
u:=last;
v:=first;
while u^.next<>first do
begin
u:=u^.next;
end;
first:=u;
first^.next:=nil;
dispose(v);
end;
end;
procedure delelement;
begin
del(first,last);
end;
procedure Main;
Begin
bt1:=new Button('Добавить');
bt2:=new Button('Показать');
bt3:=new Button('Удалить');
LineBreak;
d:=new Field('Цвет',150);
LineBreak;
k:=new Field('код цвета',100);
LineBreak;
l:=new ListBox();
LineBreak;
bt1.click+=Addelement;
bt2.Click+=Print;
bt3.Click+=delelement;
end;
BEGIN
Main;
END.