files.PAS 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. const
  2. inp = 'input.dat';
  3. nF1 = 'F1.dat';
  4. nF2 = 'F2.dat';
  5. n = 20;
  6. type
  7. TArr = array [1..n] of integer;
  8. Var
  9. F,F1,F2 : file of integer;
  10. Lser : longint;
  11. i,j : longint;
  12. TMP : integer;
  13. Procedure Merge;
  14. var i,j : integer;
  15. k1,k2,k : longint;
  16. FL : boolean;
  17. begin
  18. if not EOF(F2) then begin
  19. Read(F1,i);
  20. Read(F2,j);
  21. k1 := 1;
  22. k2 := 1;
  23. FL := false;
  24. repeat
  25. if (I<J) then
  26. begin
  27. Write(F,I);
  28. inc(k1);
  29. if (k1 <= Lser) then
  30. Read(F1,i);
  31. end
  32. else
  33. begin
  34. if EOF(F2) then FL := true;
  35. Write(F,J);
  36. inc(k2);
  37. if (k2 <= Lser) and (not EOF(F2)) then
  38. Read(F2,j);
  39. end;
  40. until FL or (K1>Lser) or (k2>lser);
  41. if (K1>Lser) then
  42. Write(F,j)
  43. else
  44. Write(F,i);
  45. for k := k1 to lSer-1 do
  46. begin
  47. Read(F1,i);
  48. Write(F,i);
  49. end;
  50. if NOT EOF(F2) then
  51. for k := k2 to lSer-1 do
  52. begin
  53. Read(F2,j);
  54. Write(F,j);
  55. end;
  56. end
  57. else If NOt EOF(F1) then
  58. repeat
  59. Read(F1,i);
  60. Write(F,i);
  61. until EOF(F1)
  62. end;
  63. BEGIN
  64. Assign(F,inp);
  65. Assign(F1,nF1);
  66. Assign(F2,nF2);
  67. lser := 1;
  68. repeat
  69. Rewrite(F1);
  70. Rewrite(F2);
  71. Reset(F);
  72. for i := 1 to n div Lser + 1 do
  73. begin
  74. for j := 1 to Lser do
  75. begin
  76. if NOT EOF(F) then begin Read(F,tmp);
  77. if Odd(i) then Write(F1,tmp) else Write(F2,tmp);end;
  78. end;
  79. end;
  80. Reset(F1);
  81. Reset(F2);
  82. i := 1;
  83. ReWrite(F);
  84. for i := 1 to (N div (2*Lser)+1) do Merge;
  85. lser := lser shl 1;
  86. until lser > N;
  87. Close(F1);
  88. Close(F2);
  89. Close(F);
  90. END.