| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- {�à®£à ¬¬ ¤«ï çâ¥¨ï ¨§ ä ©« áâப ¨ ®¤®¢à¥¬¬¥®¥ á®§¤ ¨¥ «¨¥©®£®
- âਠ¯à ¢«¥®£® ᯨ᪠, 1-© - ª ª ¢ ä ©«¥, 2-© ®âá®àâ. ¯® ã¡ë¢, 3-© - ¯® ¢®§à.}
- {Copyright Innocenty Enikeew (YEAR-2000)084/1 17.10.2001}
- type
- PList = ^TList;
- chains = array[1..3] of PList; {Œ áᨢ 㪠§ ⥫¥© í«-âë}
- TList = record
- s : string; {‡ 票¥ í«-â ᯨ᪠.}
- next : chains; {Œ áᨢ ááë«®ª. 1-© - á«¥¤ãî騩
- 2-© - á®àâ¨à®¢ ë© ¯® ã¡ë¢
- 3-© - --------\\--------- ¢®§à®áâ}
- end;
- Const
- msgs : array [1..3] of string = ('¥ ®âá®àâ¨à®¢ ë©','®âá®àâ¨à®¢ ë© ¯® ã¡ë¢ ¨î','®âá®àâ¨à®¢ ë© ¯® ¢®§à®áâ ¨î');
- {Œ áᨢ á®®¡é¥¨© ® á®àâ¨à®¢ª¥}
- {--------------------------------------------------------}
- Procedure CreateList(var F:text;var hs,ts : chains);
- {�à®æ¥¤ãà ç⥨ï í«¥¬¥â®¢ ¨§ ä ©« á ®¤®¢à¥¬¥®© á®àâ¨à®¢ª®© ¯® ã¡ë¢ ¨î
- ¨ ¢®§à®áâ ¨î
- ‚室ë¥:
- F - ⥪áâ®¢ë© ä ©«, ®âªã¤ áç¨â¨¢ îâáï ¤ ë¥
- ‚ë室ë¥
- hs - ¬ áᨢ 㪠§ ⥫¥© £®«®¢ë ᯨ᪮¢
- ts - ---------//--------- 墮áâë ᯨ᪮¢
- €«£®à¨â¬ à ¡®âë:
- 1) ‘ç¨âë¢ ¥âáï ¯¥à¢ë© í«¥¬¥â, ª®â®àë¬ ¨¨æ¨ «¨§¨àãîâáï ‚‘… 㪠§ ⥫¨
- 2) �®ª ä ©« ¥ ª®ç¨âáï, á®§¤ ¥¬ ¨ áç¨âë¢ ¥¬ á«¥¤ãî騩 í«¥¬¥â. ‡ ¯¨áë¢ ¥¬
- ¢ 1-© 㪠§ ⥫ì
- 3) � 室¨¬ ¬¥áâ® ¯® ¢®§à áâ ¨î. ‚áâ ¢«ï¥¬ â㤠, ¯®«ãç ï 2-î áá뫪ã
- 4) ------\\-------- ã¡ë¢ ¨î. ----------\\----------- 3-î
- 5) �¥à¥å®¤ ¥ 2
- }
- var
- i : integer; {“ª §ë¢ ¥â ®¬¥à áá뫪¨}
- n,c : PList; {á - ®¢ë© á®§¤ ë©, n - "¡¥£ã®ª" ¤«ï ¯®¨áª ¬¥áâ }
- begin
- New(Hs[1]); { \ }
- Hs[2]:=Hs[1]; { | }
- Hs[3]:=Hs[1]; { | }
- for i := 1 to 3 do { | ‘®§¤ ¨¥ }
- begin { | ¨ ç⥨¥ �…�‚ŽƒŽ í«¥¬¥â }
- ts[i]:=hs[1]; { | }
- Hs[1]^.next[i] := nil; { | }
- end; { | }
- ReadLn(F,Hs[1]^.s); { / }
- while not EOF(F) do {Žá®¢®© 横« áç¨âë¢ ¨ï í«¥¬¥â®¢}
- begin
- New(c);for i := 1 to 3 do c^.next[i]:=nil; {‚뤥«¥¨¥ ®¢®£® í«-â ¨
- ¨¨æ¨ «¨§ æ¨ï ¥£® ááë«®ª}
- ts[1]^.Next[1] := c; {‡ ¥á¥¬ ¥£® ¢ ª®¥æ ¯¥à¢®© 楯®çª¨}
- ts[1]:=c; {¨ ᤢ¨¥¬ ¥¥ 墮áâ}
- ReadLn(c^.s);
- for i := 2 to 3 do
- {„ ë© æ¨ª« ®¡ê¥¤¨ï¥â ¢ ᥡ¥ ®¤®¢à¥¬¥®¥ á®§¤ ¨¥ 2 ¨ 3-© áá뫪¨,
- â.ª ®¨ ®â«¨ç îâáï «¨èì § ª®¬ áà ¢¥¨ï}
- begin
- if ((c^.s > hs[i]^.s) and (i=2)) or ((c^.s < hs[i]^.s) and (i=3)) then
- {�஢¥à塞, ¥ ¤® «¨ § ¬¥¨âì £®«®¢ã ®¢ë¬ í«-⮬}
- begin
- c^.next[i] := hs[i];
- hs[i]:=c;
- end
- else {ˆ ç¥ ¨é¥¬ ¥¬ã ¬¥áâ® ¢ 㦥 á®§¤ ®¬ ᯨ᪥}
- begin
- n:=hs[i]; {ˆ¨æ. "¡¥£ã®ª"}
- while (n<>ts[i]) and
- ( {�®ª ¥ ¯®á«¥¤¨© í«-â,}
- ((n^.next[i]^.s > c^.s) and (i=2)) or {¨ ¢ë¯®«ï¥âáï ®âá®àâ¨à®¢ ®áâì}
- ((n^.next[i]^.s < c^.s) and (i=3)) {¯¥à¥¬¥é ¥¬ "¡¥£ã®ª"}
- ) do n:=n^.next[i];
- c^.next[i] := n^.next[i]; {‚áâ ¢«ï¥¬ è í«-â ¬¥¦¤ã "¡¥£ãª®¬"}
- n^.next[i] := c; {¨ á«¥¤ãî騬 § ¨¬}
- if n = ts[i] then ts[i] := c; {�ਠ¥®¡å®¤¨¬®á⨠- á¬¥é ¥¬ 墮áâ}
- end; {Š®¥æ ¤®¡ ¢«¥¨ï í«-â ¢ á®àâ.ᯨ᮪}
- end; {Š®¥æ 横« ¤«ï 2-å á®àâ¨à®¢®ª}
- end; {Š®¥æ 横« ç⥨ï ä ©« }
- end;{CreateList}
- {------------------------------}
- Procedure WriteList(var F:text;hs,ts:chains;order:integer);
- {�à®æ¥¤ãà ¢ë¢®¤ ᯨ᪠, § ¤ ®£® hs ¨ ts ¢ ä ©« F
- Order - ®¬¥à ᯨ᪠, ¯® ª®â®à®¬ã ¡¥¦ âì}
- var
- c : Plist; {�¥£ã®ª}
- begin
- c:=hs[order]; {¥£® ¨¨æ¨ «¨§ æ¨ï}
- repeat
- WriteLn(c^.s);
- c:=c^.next[order]; {¯à®¤¢¨¦¥¨¥ ¯® ᯨáªã}
- until c = ts[order]; {�ਧ ª ª®æ ᯨ᪠- ¢ë¢®¤ 墮áâ }
- end;{WriteList}
- {------------------------------}
- { ƒŽ‹Ž‚�މ ŒŽ„“‹œ }
- var
- heads,tails : chains; {Œ áá¨¢ë £®«®¢ ¨ 墮á⮢}
- ch : integer; {¯¥à¥¬¥ ï ¢ë¡®à ¢ ਠ⠢뢮¤ }
- begin
- Assign(input,'4th.txt');
- {$I-}
- Reset(INPUT);
- if IOResult <> 0 then
- begin
- WriteLn('Error opening ''4th.txt''');
- Halt(255);
- end;
- {$I+}
- CreateList(INPUT,Heads,Tails); {‘®§¤ ¨¥ ᯨ᪠}
- Close(Input);
- Assign(Input,'con'); {ˆ¨æ¨ «¨§ æ¨ï ª« ¢¨ âãàë ¬¥áâ®}
- Reset(Input);
- WriteLn('‘¯¨á®ª á®§¤ ! ‚¢¥¤¨â¥:');
- WriteLn(' 1 - ¥ ®âá®àâ¨à®¢ ');
- WriteLn(' 2 - ®âá®àâ¨à®¢ ¯® ã¡ë¢ ¨î'); {‚뢮¤ ¯à¨£« 襨ï}
- WriteLn(' 3 - ®âá®àâ¨à®¢ ¯® ¢®§à®áâ ¨î');
- ch:=0;
- repeat
- Write('‚¢¥¤¨â¥ ç¨á«® ®â 1-£® ¤® 3-å: '); {‡ ¯à®á}
- Read(ch);
- until ch in [1..3];
- WriteLn('‚ë ¢ë¡à «¨ ',msgs[ch]); {‘¨£ «¨§ æ¨ï ¢ë¡®à }
- Assign(output,'4th.out');
- Rewrite(output);
- if IOResult <> 0 then
- begin
- WriteLn('Error opening ''4th.out'' for writing :( ');
- Halt(254);
- end;
- WriteLn('Žà¨£¨ «:');
- WriteList(OUTPUT,heads,tails,1); {‚뢮¤ á ç « ¨á室®£® ᯨ᪠}
- WriteLn('�¥§ã«ìâ â:');
- WriteList(OUTPUT,heads,tails,ch); {‡ ⥬ - ¢ë¡à ®£® ¯®«ì§®¢ ⥫¥¬}
- while Heads[1] <> nil do
- {Žç¨á⪠¢á¥£® ᯨ᪠, Heads[1] - ¡¥£ã®ª, Tails[1] - ¢à¥¬¥ ï ¯¥à¥¬¥ ï}
- begin
- Tails[1] := Heads[1]^.next[1];
- Dispose(heads[1]);
- Heads[1]:=tails[1];
- end;
- end.
|