Добавил:
Kaz
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:АСОИ, Delphi, много вариантов 2 сем / 2стеки / !подозрительное / стек / Unit2
.pas unit Unit2;
interface
uses StdCtrls, SysUtils;
type
Psel=^sel;
sel=Record
b:integer;
a:Psel;
end;
Tspis=class(Tobject)
c:Psel;
n:integer;
constructor create;
procedure ismenit(n1:integer);
procedure print(list:TListBox);
function find:integer;
procedure add(n1:integer);
procedure delete(n1:integer);
end;
implementation
constructor Tspis.create;
begin
inherited create;
c:=nil;
n:=0;
end;
procedure Tspis.print(list:TListBox);
var i:integer;c1:Psel;
begin
list.Clear;
c1:=c;
for i:=1 to n do
begin
list.Items.Add(inttostr(c1.b));
c1:=c1.a;
end;
end;
procedure Tspis.ismenit(n1:integer);
var i:integer;
c1:Psel;
begin
n:=n1;
if not(c=nil)then
while c.a<>Nil do
begin
c1:=c.a;
dispose(c);
c:=c1;
end;
c:=nil;
for i:=1 to n do
begin
new(c1);
c1.b:=random(10000);
c1.a:=c;
c:=c1;
end;
end;
function Tspis.find:integer;
var min,max,n1,m,i:integer;
c1:Psel;
begin
if n=0 then begin result:=0;exit;end;
c1:=c;
max:=-1;min:=10000;
for i:=1 to n do
begin
if c1.b>max then
begin
max:=c1.b;m:=i;
end;
if c1.b<min then
begin
min:=c1.b;n1:=i;
end;
c1:=c1.a;
end;
result:=abs(m-n1)-1;
if result=-1 then result:=0;
end;
procedure Tspis.add(n1:integer);
var i:integer;c1,c2:Psel;
begin
c1:=c;n:=n+1;
if n1>1 then begin
for i:=1 to n1-2 do
c1:=c1.a;
new(c2);
c2.b:=random(10000);
c2.a:=c1.a;
c1.a:=c2;
end
else
begin
new(c1);
c1.b:=random(10000);
c1.a:=c;
c:=c1;
end;
end;
procedure Tspis.delete(n1:integer);
var i:integer;c1,c2:Psel;
begin
c1:=c;n:=n-1;
if n1>1 then begin
for i:=1 to n1-2 do
c1:=c1.a;
c2:=c1.a;
c1.a:=c2.a;
Dispose(c2);
end
else c:=c.a;
end;
end.
interface
uses StdCtrls, SysUtils;
type
Psel=^sel;
sel=Record
b:integer;
a:Psel;
end;
Tspis=class(Tobject)
c:Psel;
n:integer;
constructor create;
procedure ismenit(n1:integer);
procedure print(list:TListBox);
function find:integer;
procedure add(n1:integer);
procedure delete(n1:integer);
end;
implementation
constructor Tspis.create;
begin
inherited create;
c:=nil;
n:=0;
end;
procedure Tspis.print(list:TListBox);
var i:integer;c1:Psel;
begin
list.Clear;
c1:=c;
for i:=1 to n do
begin
list.Items.Add(inttostr(c1.b));
c1:=c1.a;
end;
end;
procedure Tspis.ismenit(n1:integer);
var i:integer;
c1:Psel;
begin
n:=n1;
if not(c=nil)then
while c.a<>Nil do
begin
c1:=c.a;
dispose(c);
c:=c1;
end;
c:=nil;
for i:=1 to n do
begin
new(c1);
c1.b:=random(10000);
c1.a:=c;
c:=c1;
end;
end;
function Tspis.find:integer;
var min,max,n1,m,i:integer;
c1:Psel;
begin
if n=0 then begin result:=0;exit;end;
c1:=c;
max:=-1;min:=10000;
for i:=1 to n do
begin
if c1.b>max then
begin
max:=c1.b;m:=i;
end;
if c1.b<min then
begin
min:=c1.b;n1:=i;
end;
c1:=c1.a;
end;
result:=abs(m-n1)-1;
if result=-1 then result:=0;
end;
procedure Tspis.add(n1:integer);
var i:integer;c1,c2:Psel;
begin
c1:=c;n:=n+1;
if n1>1 then begin
for i:=1 to n1-2 do
c1:=c1.a;
new(c2);
c2.b:=random(10000);
c2.a:=c1.a;
c1.a:=c2;
end
else
begin
new(c1);
c1.b:=random(10000);
c1.a:=c;
c:=c1;
end;
end;
procedure Tspis.delete(n1:integer);
var i:integer;c1,c2:Psel;
begin
c1:=c;n:=n-1;
if n1>1 then begin
for i:=1 to n1-2 do
c1:=c1.a;
c2:=c1.a;
c1.a:=c2.a;
Dispose(c2);
end
else c:=c.a;
end;
end.