MTRXSRT.PAS 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. Uses CRT;
  2. Const
  3. M=4;
  4. N=3;
  5. inpt = 'mtrxsort.txt';
  6. outpt = 'mtrxrslt.txt';
  7. Var
  8. ar : array[1..N,1..M] of integer;
  9. {--------========================---------}
  10. Function GetM(i : integer):integer;forward;
  11. Function GetN(i : integer):integer;forward;
  12. {--------========================---------}
  13. Function GetMaxLength:integer;
  14. Var i,max,min : integer;s1,s2:string;
  15. Begin
  16. max := -MaxInt;
  17. Min := MaxInt;
  18. for i := 1 to m*n do begin
  19. if ar[getN(i),getM(i)] > max then max := ar[getN(i),getM(i)];
  20. if ar[getN(i),getM(i)] < min then min := ar[getN(i),getM(i)];
  21. end;
  22. str(max,s1);
  23. str(min,s2);
  24. if length(s1) > length(s2) then
  25. GetMaxLength := length(s1) + 1
  26. else
  27. GetMaxLength := length(s2) + 1;
  28. End;
  29. {------------------------------------}
  30. Procedure ReadFile(fn : string);
  31. Var
  32. f : text;
  33. i : 1..M;
  34. j : 1..N;
  35. Begin
  36. Assign(f,fn);
  37. {$I-}
  38. Reset(f);
  39. If IOResult <> 0 then
  40. Repeat
  41. Write('” ©« ­¥ ­ ©¤¥­, ¢¢¥¤¨â¥ ­®¢®¥ ¨¬ï: ');
  42. Readln(fn);
  43. Assign(f,fn);
  44. Reset(f);
  45. Until IOResult = 0;
  46. {$I+}
  47. for j := 1 to N do
  48. for i := 1 to M do Read(f,ar[j,i]);
  49. for j := 1 to N do
  50. for i := 1 to M do Begin
  51. GotoXY(i*getMaxLength+5,j+2);
  52. Write(ar[j,i])
  53. end;
  54. Close(f);
  55. End;{ReadFile}
  56. {----------------------------------}
  57. Function GetM(i : integer):integer;
  58. Var tmp : integer;
  59. Begin
  60. tmp := i mod M;
  61. if tmp = 0 then GetM := M else GetM := tmp
  62. End;{GetM}
  63. {----------------------------------}
  64. Function GetN(i : integer):integer;
  65. Begin
  66. if i mod M = 0 then GetN := i div M else
  67. GetN := i div M + 1
  68. End;{GetM}
  69. {----------------------------------}
  70. Procedure SwapPlace(j :integer);
  71. Var tmp : integer;
  72. Begin
  73. tmp := ar[GetN(j),GetM(j)];
  74. ar[GetN(j),GetM(j)] := ar[GetN(j+1),GetM(j+1)];
  75. ar[GetN(j+1),GetM(j+1)] := tmp;
  76. End;
  77. {-------------------------------}
  78. Procedure SortList;
  79. Var
  80. i,j : integer;
  81. Begin
  82. For i := m*n downto 2 do
  83. for j := 1 to i-1 do begin
  84. if ar[getN(J),GetM(J)] > ar[getN(J+1),GetM(J+1)] then
  85. SwapPlace(j)
  86. end;
  87. End;{SortList}
  88. {-----------------------------------}
  89. Procedure WriteResult(fil :string);
  90. Var
  91. f : text;
  92. i : 1..M;
  93. j : 1..N;
  94. Begin
  95. Assign(f,fil);
  96. REwrite(f);
  97. for j := 1 to N do begin
  98. for i := 1 to M do begin
  99. Write(f,ar[j,i],' ');
  100. GotoXY(i*getmaxlength+5,j+7+n);
  101. normvideo;
  102. Write(ar[j,i])
  103. end;
  104. WriteLn(f);
  105. end;
  106. close(f)
  107. End;{WriteResult}
  108. {---------------------------------}
  109. Begin
  110. ClrScr;
  111. ReadFile(inpt);
  112. SortList;
  113. WriteResult(outpt);
  114. End.