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.