Vanilla_Fury

kontra 15_12_2020

Dec 20th, 2020
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.58 KB | None | 0 0
  1. program kontrolnaya_1;
  2.  
  3. uses
  4. SysUtils;
  5.  
  6. type
  7. TArr = Array of Array of Integer;
  8.  
  9. function InputArr() : TArr;
  10. var
  11. AArr: TArr;
  12. N, N1, M, M1, i, j: Integer;
  13.  
  14. begin
  15. writeln('Quantiy of rows:');
  16. readln(N);
  17. writeln('Quantiy of columns:');
  18. readln(M);
  19.  
  20. SetLength(AArr, N, M);
  21.  
  22. N1 := N - 1;
  23. M1 := M - 1;
  24. for i := 0 to N1 do
  25. for j := 0 to M1 do
  26. begin
  27. writeln('Input Element [', i + 1, '][', j + 1, ']:');
  28. readln(AArr[i][j]);
  29. end;
  30. Result := AArr;
  31. end;
  32.  
  33. procedure SortArrayOnes(AArr: TArr);
  34. var
  35. i, j, LC, HC, LR, HR, N, M, Way, NumberOfElementNow, CoordinateOfNext1, CoordinateOfNext2, QuantityOfElem: Integer;
  36. IfWas : Boolean;
  37.  
  38. begin
  39. Way := 1;
  40. N := Length(AArr);
  41. M := Length(AArr[0]);
  42. LR := 0;
  43. HR := N - 1;
  44. LC := 0;
  45. HC := M - 1;
  46. QuantityOfElem := N * M;
  47.  
  48. NumberOfElementNow := 1;
  49. while (NumberOfElementNow < QuantityOfElem) do
  50. begin
  51. IfWas := false;
  52.  
  53. if (Way = 1) then
  54. begin
  55. i := LC;
  56. while((i <= HC) and (NumberOfElementNow < QuantityOfElem)) do
  57. begin
  58. if (i = HC) then
  59. begin
  60. CoordinateOfNext1 := LR + 1;
  61. CoordinateOfNext2 := i;
  62. end
  63. else
  64. begin
  65. CoordinateOfNext1 := LR;
  66. CoordinateOfNext2 := i + 1;
  67. end;
  68. if (AArr[LR][i] > AArr[CoordinateOfNext1][CoordinateOfNext2]) then
  69. begin
  70. AArr[LR][i] := AArr[LR][i] + AArr[CoordinateOfNext1][CoordinateOfNext2];
  71. AArr[CoordinateOfNext1][CoordinateOfNext2] := AArr[LR][i] - AArr[CoordinateOfNext1][CoordinateOfNext2];
  72. AArr[LR][i] := AArr[LR][i] - AArr[CoordinateOfNext1][CoordinateOfNext2];
  73. end;
  74. Inc(NumberOfElementNow);
  75. Inc(i);
  76. end;
  77. Way := 2;
  78. Inc(LR);
  79. IfWas := true;
  80. end;
  81.  
  82. if ((Way = 2) and not IfWas) then
  83. begin
  84. i := LR;
  85. while((i <= HR) and (NumberOfElementNow < QuantityOfElem)) do
  86. begin
  87. if (i = HR) then
  88. begin
  89. CoordinateOfNext1 := i;
  90. CoordinateOfNext2 := HC - 1;
  91. end
  92. else
  93. begin
  94. CoordinateOfNext1 := i + 1;
  95. CoordinateOfNext2 := HC;
  96. end;
  97. if (AArr[i][HC] > AArr[CoordinateOfNext1][CoordinateOfNext2]) then
  98. begin
  99. AArr[i][HC] := AArr[i][HC] + AArr[CoordinateOfNext1][CoordinateOfNext2];
  100. AArr[CoordinateOfNext1][CoordinateOfNext2] := AArr[i][HC] - AArr[CoordinateOfNext1][CoordinateOfNext2];
  101. AArr[i][HC] := AArr[i][HC] - AArr[CoordinateOfNext1][CoordinateOfNext2];
  102. end;
  103. Inc(NumberOfElementNow);
  104. Inc(i);
  105. end;
  106. Way := 3;
  107. Dec(HC);
  108. IfWas := true;
  109. end;
  110.  
  111. if ((Way = 3) and not IfWas) then
  112. begin
  113. i := HC;
  114. while((i >= LC) and (NumberOfElementNow < QuantityOfElem)) do
  115. begin
  116. if (i = LC) then
  117. begin
  118. CoordinateOfNext1 := HR - 1;
  119. CoordinateOfNext2 := i;
  120. end
  121. else
  122. begin
  123. CoordinateOfNext1 := HR;
  124. CoordinateOfNext2 := i - 1;
  125. end;
  126. if (AArr[HR][i] > AArr[CoordinateOfNext1][CoordinateOfNext2]) then
  127. begin
  128. AArr[HR][i] := AArr[HR][i] + AArr[CoordinateOfNext1][CoordinateOfNext2];
  129. AArr[CoordinateOfNext1][CoordinateOfNext2] := AArr[HR][i] - AArr[CoordinateOfNext1][CoordinateOfNext2];
  130. AArr[HR][i] := AArr[HR][i] - AArr[CoordinateOfNext1][CoordinateOfNext2];
  131. end;
  132. Inc(NumberOfElementNow);
  133. Dec(i);
  134. end;
  135. Way := 4;
  136. Dec(HR);
  137. IfWas := true;
  138. end;
  139.  
  140. if ((Way = 4) and not IfWas) then
  141. begin
  142. i := HR;
  143. while((i >= LR) and (NumberOfElementNow < QuantityOfElem)) do
  144. begin
  145. if (i = LR) then
  146. begin
  147. CoordinateOfNext1 := i;
  148. CoordinateOfNext2 := LC + 1;
  149. end
  150. else
  151. begin
  152. CoordinateOfNext1 := i - 1;
  153. CoordinateOfNext2 := LC;
  154. end;
  155. if (AArr[i][LC] > AArr[CoordinateOfNext1][CoordinateOfNext2]) then
  156. begin
  157. AArr[i][LC] := AArr[i][LC] + AArr[CoordinateOfNext1][CoordinateOfNext2];
  158. AArr[CoordinateOfNext1][CoordinateOfNext2] := AArr[i][LC] - AArr[CoordinateOfNext1][CoordinateOfNext2];
  159. AArr[i][LC] := AArr[i][LC] - AArr[CoordinateOfNext1][CoordinateOfNext2];
  160. end;
  161. Inc(NumberOfElementNow);
  162. Dec(i);
  163. end;
  164. Way := 1;
  165. Inc(LC);
  166. end;
  167. end;
  168. end;
  169.  
  170. procedure OutputArr(AArr: TArr);
  171. var
  172. i, j: Integer;
  173. begin
  174. for i := 0 to (Length(AArr) - 1) do
  175. begin
  176. for j := 0 to (Length(AArr[0]) - 1) do
  177. begin
  178. write(AArr[i][j], ' ');
  179. end;
  180. writeln;
  181. end;
  182. writeln;
  183. end;
  184.  
  185. procedure SortArray(AArr: TArr);
  186. var
  187. i, N, M, QuantityOfNumbers: Integer;
  188. begin
  189. N := Length(AArr);
  190. M := Length(AArr[0]);
  191. QuantityOfNumbers := N * M;
  192. for i := 2 to QuantityOfNumbers do
  193. SortArrayOnes(AArr);
  194. end;
  195.  
  196. var
  197. AArr: TArr;
  198.  
  199. begin
  200. AArr := InputArr();
  201.  
  202. OutputArr(AArr);
  203.  
  204. SortArray(AArr);
  205.  
  206. OutputArr(AArr);
  207.  
  208. readln;
  209. end.
  210.  
Advertisement
Add Comment
Please, Sign In to add comment