program laba_4;
type
link = ^kom;
kom = record
prev : link;
number : integer;
next : link;
end;
var head:link;
choise,number,i:integer;
procedure create(var head:link);
var number:integer;
begin
writeln('new list has been created');
writeln('input data');
readln(number);
new(head);
head^.number:=number;
head^.prev:=head;
head^.next:=head;
end;
function findnumber(head:link):integer;
var numberlink:integer;
temp:link;
begin
temp:=head;
numberlink:=1;
repeat
temp:=temp^.next;
numberlink:=numberlink+1;
until temp^.next=head;
findnumber:=numberlink;
end;
procedure addfin(var head:link);
var number:integer;
curr:link;
begin
writeln('input data');
readln(number);
curr:=head;
repeat
curr:=curr^.next;
until curr^.next = head;
new(curr^.next);
(curr^.next)^.number:=number;
(curr^.next)^.prev:=curr;
(curr^.next)^.next:=head;
end;
procedure addmed(var head:link;n:integer);
var i,numberlink:integer;
temp:link;
begin
numberlink:=findnumber(head);
temp:=head;
for i:=1 to (numberlink div 2) do
temp:=temp^.next;
for i:=1 to n do
begin
addfin(temp);
end;
end;
procedure del(var head:link; n:integer);
var i: integer;
temp:link;
begin
temp:=head;
if n=1 then
begin
(temp^.prev)^.next:=temp^.next;
(temp^.next)^.prev:=temp^.prev;
head:=temp^.next
end
else
begin
for i:=1 to n-1 do
temp:=temp^.next;
(temp^.prev)^.next:=temp^.next;
(temp^.next)^.prev:=temp^.prev;
end;
end;
procedure view(head:link);
var temp:link;
begin
writeln;
temp:=head;
writeln('the list is');
repeat
writeln(temp^.number);
temp:=temp^.next;
until temp=head;
end;
begin
head:=nil;
choise:=1;
while choise <> 0 do
begin
writeln;
writeln('type 1 to create list');
writeln('type 2 to add n records to end');
writeln('type 3 to add n records to middle');
writeln('type 4 to view list');
writeln('type 5 to delete record');
writeln('type 0 to exit');
readln(choise);
case choise of
1: create(head);
2: begin
writeln('input number of records');
readln(number);
for i:=1 to number do addfin(head);
end;
3: begin
writeln('input number of records');
readln(number);
addmed(head,number);
end;
4: view(head);
5: begin
writeln('input number of record');
readln(number);
del(head,number);
end;
else begin
if choise <> 0 then
writeln('you pressed wrong key')
else writeln('thank you for using this programm');
end;
end; {case}
end;
end.