uses Crt; const MaxNum=30; type pEl= ^Element; Element= record Data:integer; Next:pEl; Prev:pEl end; var PX, PY : pEl; firstElem, curElem: pEl; i:integer; f:TEXT; {***************************} procedure AddElem(var CurElem:pEl; val:integer); var tmpElem:pEl; begin New(tmpElem); tmpElem^.Data := val; tmpElem^.Next := nil; tmpElem^.Prev := CurElem; CurElem^.Next := tmpElem; CurElem := tmpElem; end; {***************************} procedure ChangePos(var firstElem,secondElem:pEl); var tmpElem:pEl; begin New(tmpElem); tmpElem^.Prev := secondElem^.Prev; tmpElem^.Next := secondElem^.Next; secondElem^.Prev := firstElem^.Prev; secondElem^.Next := firstElem^.Next; firstElem^.Prev := tmpElem^.Prev; firstElem^.Next := tmpElem^.Next; end; {***************************} begin clrscr; Randomize; New(firstElem); New(curElem); firstElem^.Next := nil; firstElem^.Prev := nil; firstElem^.Data := random(100);; curElem := firstElem; for i:=1 to MaxNum do begin AddElem(curElem,random(100)); if i = 1 then firstElem^.Next := curElem; if i = 13 then begin New(PY); PY^.Prev := curElem^.Prev; PY^.Next := curElem^.Next; PY^.Data := curElem^.Data; end; if i = 20 then begin New(PX); PX^.Prev := curElem^.Prev; PX^.Next := curElem^.Next; PX^.Data := curElem^.Data; end; end; ChangePos(PX,PY); assign(f,'double~.txt'); rewrite(f); writeln('FirstElement = ',firstElem^.Data); curElem := firstElem; while (curElem <> nil) do begin writeln(f, curElem^.Data); curElem := curElem^.Next; end; close(f); writeln('Press Enter'); readln; end.