program
Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1
in
'Unit1.pas'
;
var
Uk1,Uk2,mesto:sv;
isk:int;
begin
Writeln
(
'Enter a value list: '
);
formirovanie (Uk1,Uk2);
writeln
;
Writeln
(
'List: '
);
Print(Uk1,Uk2);
writeln
;
Write
(
'Enter the desired value: '
);
readln(isk);
if
search_back (Uk2,isk,mesto)
then
writeln
(
'Element "'
,mesto^.element,
'" is found'
)
else
writeln
(
'not found'
);
writeln
;
del(mesto,Uk1,Uk2);
writeln
;
Print(Uk1,Uk2);
readln;
end
.
unit
Unit1;
interface
type
Int =
integer
;
sv= ^zveno;
zveno=
Record
element: int;
sled: sv;
pred: sv;
end
;
procedure
formirovanie (out Uk1: sv; out Uk2: sv);
Procedure
print (
const
Uk1: sv;
const
Uk2: sv);
function
search_back (
const
Uk2:sv;
const
isk:int; out mesto:sv):
boolean
;
procedure
del (mesto: sv;
var
Uk1:sv;
var
Uk2:sv);
implementation
procedure
formirovanie (out Uk1: sv; out Uk2: sv);
var
Ukrab: sv;
elem: int;
begin
New (Uk1);
Uk1^.Sled:=
nil
;
Uk1^.Pred:=
nil
;
Ukrab:=Uk1;
readln(elem);
while
elem<>
0
do
begin
New (Ukrab^.Sled);
Ukrab^.Sled^.Pred:=Ukrab;
Ukrab^.Element:=Elem;
Ukrab:=Ukrab^.Sled;
Ukrab^.Sled:=
nil
;
readln(elem);
end
;
Uk2:=Ukrab;
end
;
procedure
print (
const
Uk1: sv;
const
Uk2: sv);
var
Ukrab : sv;
begin
if
(Uk1=
nil
)
and
(Uk2=
nil
)
then
writeln
(
'The list is empty!'
)
else
begin
Ukrab:=Uk1;
while
Ukrab
.
sled <>
nil
do
begin
Write
(Ukrab^.element,
' '
);
Ukrab := Ukrab^.sled
end
;
end
;
end
;
function
search_back (
const
Uk2:sv;
const
isk:int; out mesto:sv):
boolean
;
var
Ukrab:sv;
b:
boolean
;
begin
b:=
false
;
Ukrab:=Uk2;
mesto:=
Nil
;
While
(Ukrab<>
nil
)
and
(
not
b)
do
begin
If
Ukrab^.Element=isk
then
begin
b:=
true
;
Mesto:=Ukrab
end
else
Ukrab:=Ukrab^.Pred;
end
;
search_back:=b;
end
;
procedure
del (mesto: sv;
var
Uk1:sv;
var
Uk2:sv);
begin
if
(mesto^.sled^.sled=
nil
)
and
(mesto^.pred=
nil
)
then
begin
Uk1:=
nil
;
Uk2:=
nil
;
dispose(mesto);
end
;
If
mesto^.Sled=
Nil
then
begin
mesto^.Pred^.Sled:=
Nil
;
Uk2:=Uk2^.Pred;
Dispose (mesto);
end
;
if
(mesto^.sled^.sled<>
nil
)
and
(mesto^.pred=
nil
)
then
begin
mesto^.sled^.pred:=
nil
;
Uk1:=mesto^.sled;
dispose(mesto);
end
;
If
(mesto^.sled<>
Nil
)
and
(mesto^.pred<>
Nil
)
then
begin
mesto^.Sled^.Pred:=mesto^.Pred;
mesto^.Pred^.Sled:=mesto^.Sled;
Dispose (mesto);
end
;
end
;
end
.