unit streams; interface type keytype = integer; zaznam = record key: keytype; { dalsi polozky} end; soubor = file of zaznam; stream = record F : soubor; Sempty, Fempty : boolean; buf : zaznam; end; procedure sreset(var S:stream); { otevira stream S } procedure copy(var inp,out:stream; var eor:boolean); { kopiruje jeden zaznam z inp do out v eor nastavuje priznak konce behu } procedure copyrun(var inp,out:stream); { kopiruje jeden beh z inp do out } procedure mergerun(var inp1,inp2,outp:stream); { sleva dva prvni behy ze streamu inp1 a inp2 do streamu outp } procedure tisk(var S:stream; var vyst:text); { tiskne obsah streamu do textoveho souboru vyst } implementation procedure sreset(var S:stream); begin with S do begin reset(F); Sempty:=eof(F); if not Sempty then begin read(F,buf); Fempty:=eof(F) end; end; end; procedure sread(var S:stream;var X:zaznam); begin with S do begin X:=buf; Sempty:= Fempty; if not Fempty then begin read(F,buf); Fempty:= eof(F); end; end; end; procedure copy(var inp,out:stream; var eor:boolean); var X: zaznam; begin with inp do begin sread(inp,X); write(out.F,X); if Sempty then eor:= true else eor:= X.key>buf.key; end; end; procedure copyrun(var inp,out:stream); var eor : boolean; begin repeat copy(inp,out,eor); until eor end; procedure mergerun(var inp1,inp2,outp:stream); var eor :boolean; begin repeat if inp1.buf.key < inp2.buf.key then begin copy(inp1,outp,eor); if eor then copyrun(inp2,outp) end else begin copy(inp2,outp,eor); if eor then copyrun(inp1,outp) end until eor; end; procedure tisk(var S:stream; var vyst:text); var X:zaznam; begin sreset(S); rewrite(vyst); while not S.Sempty do begin sread(S,X); writeln(vyst,X.key); end; end; end.