Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.51 KB | None | 0 0
  1. program lab3_3;
  2.  
  3. uses
  4. System.SysUtils;
  5.  
  6. type
  7. TArr = array of Integer;
  8.  
  9.  
  10.  
  11. function IsNotCorrectRange(Mem: Integer; Min: Integer; Max: Integer): Boolean;
  12. begin
  13. IsNotCorrectRange := ((Mem < Min) or (Mem > Max))
  14. end;
  15.  
  16.  
  17. function ChooseFileName(FileN1: String; FileN2: String; FileN3: String): String;
  18. var
  19. Answer: Integer;
  20. IsCorrectInt: Boolean;
  21. FileName: String;
  22. begin
  23. IsCorrectInt := False;
  24. repeat
  25. WriteLn('Select the file you want to use: ');// + #13#10 + '1) ', + fileN1 + #13#10 + '2) ' + fileN2 + #13#10 + '3) ' + fileN3);
  26. try
  27. ReadLn(Answer);
  28. if (Answer = 1) then
  29. begin
  30. FileName := FileN1;
  31. IsCorrectInt := True;
  32. end;
  33.  
  34. if (Answer = 2) then
  35. begin
  36. FileName := FileN2;
  37. IsCorrectInt := True;
  38. end;
  39.  
  40. if (Answer = 1) then
  41. begin
  42. FileName := FileN1;
  43. IsCorrectInt := True;
  44. end;
  45. except
  46. WriteLn('ук1')
  47. end;
  48. until (IsCorrectInt);
  49. ChooseFileName := FileName;
  50. end;
  51.  
  52. procedure DoubleInsertionSorting(OriginaleArr: TArr);
  53. var
  54. N, I, J, Test, Left, Right: Integer;
  55. SortArr: TArr; // вспомогательный массив для вывода
  56. begin
  57. Writeln('or');
  58. begin
  59. N := Length(OriginaleArr);
  60. Left := N - 1;
  61. Right := N - 1;
  62. SetLength(SortArr, 2 * N - 1);
  63. SortArr[N] := OriginaleArr[1];
  64. // вставляем первый элемент в середину вспомогательного массива
  65.  
  66. for I := 2 to N do
  67. begin
  68. Test := OriginaleArr[I];
  69. if Test > OriginaleArr[1] - 1 then
  70. begin
  71. Inc(Right);
  72. J := Right;
  73. while Test < SortArr[J - 1] do
  74. begin
  75.  
  76. SortArr[J] := SortArr[J - 1];
  77. Dec(J);
  78. end;
  79. SortArr[J] := Test;
  80. end
  81. else
  82. begin
  83. Dec(Left);
  84. J := Left;
  85. while Test > SortArr[J + 1] do
  86. begin
  87. SortArr[J] := SortArr[J + 1];
  88. Inc(J);
  89. end;
  90. OriginaleArr[J] := Test;
  91. end;
  92. end;
  93. for J := 1 to N do
  94. begin
  95. OriginaleArr[J] := SortArr[J + Left - 1];
  96. WriteLn(OriginaleArr[J]);
  97. end;
  98. ReadLn;
  99. end;
  100. end;
  101.  
  102. function TakeArrayFromFile(FileName: String; const Min_Arr: Integer;
  103. const Max_Arr: Integer; const Min: Integer; const Max: Integer): TArr;
  104. var
  105. InputFile: TextFile;
  106. ArrSize, I, Counter: Integer;
  107. FileArr: TArr;
  108. begin
  109. Counter := 0;
  110. AssignFile(InputFile, FileName);
  111. WriteLn('');
  112. try
  113. Reset(InputFile);
  114. WriteLn('');
  115. Read(InputFile, ArrSize);
  116. if (IsNotCorrectRange(ArrSize, Min_Arr, Max_Arr)) then
  117. Inc(Counter);
  118. WriteLn(ArrSize);
  119. SetLength(FileArr, ArrSize);
  120. for I := 0 to ArrSize do
  121. begin
  122. Read(InputFile, FileArr[I]);
  123. Write(FileArr[I], ' ');
  124. end;
  125. for I := 0 to ArrSize do
  126. begin
  127. if (IsNotCorrectRange(FileArr[I], 0, 100)) then
  128. Inc(Counter);
  129. end;
  130. if (Counter > 0) then
  131. FileArr := nil;
  132.  
  133. finally
  134. Close(InputFile);
  135. end;
  136. TakeArrayFromFile := FileArr;
  137. end;
  138.  
  139.  
  140. function TakeCorrectInt(const Min: Integer; const Max: Integer): Integer;
  141. var
  142. IsCorrectInt: Boolean;
  143. Mem: Integer;
  144. begin
  145. Mem := 0;
  146. IsCorrectInt := True;
  147. repeat
  148. try
  149. ReadLn(Mem);
  150. if (IsNotCorrectRange(Mem, Min, Max)) then
  151. begin
  152. IsCorrectInt := False;
  153. WriteLn('Not correct variable range. It must be integer from ', Min, ' to ', Max, '. Try again.');
  154. end;
  155. except
  156. IsCorrectInt := False;
  157. WriteLn('Not correct input type.');
  158. end;
  159. until (IsCorrectInt);
  160. TakeCorrectInt := Mem;
  161. end;
  162.  
  163.  
  164. function TakeArray(): TArr;
  165. var
  166. FileName1, FileName2, FileName3, FileName: String;
  167. IsCorrectInput, IsCorrectInt: Boolean;
  168. Answer, ArrSize, I: Integer;
  169. OriginalArr: TArr;
  170. begin
  171. IsCorrectInput := True;
  172. repeat
  173. try
  174. WriteLn('If you want to use default file, enter "0".');
  175. WriteLn('If you want to use the console input, enter "1".');
  176. ReadLn(Answer);
  177. if (Answer = 0) then
  178. begin
  179. FileName1 := 'lab3_3input1.txt';
  180. FileName2 := 'lab3_3input2.txt';
  181. FileName3 := 'lab3_3input3.txt';
  182. FileName := ChooseFileName(FileName1, FileName2, FileName3);
  183. if FileExists(FileName) then
  184. begin
  185. WriteLn('Using ', FileName, ' file to get value.');
  186. OriginalArr := TakeArrayFromFile(FileName, 0, 20, 0, 100);
  187. end
  188. else
  189. WriteLn('File ', FileName, ' does not exists.');
  190. end;
  191. if (Answer = 1) then
  192. begin
  193. IsCorrectInt := True;
  194. WriteLn('Enter array size less than 20.');
  195. repeat
  196. try
  197. ArrSize := TakeCorrectInt(0, 20);
  198. WriteLn('Enter ', ArrSize, ' members of array.');
  199. SetLength(OriginalArr, ArrSize);
  200. for I := 0 to ArrSize do
  201. OriginalArr[I] := TakeCorrectInt(0, 100);
  202. except
  203. IsCorrectInt := False;
  204. WriteLn('Not right input. Try again.');
  205.  
  206. end;
  207. until (IsCorrectInt);
  208. end;
  209. except
  210. WriteLn('Not correct input. It must be a number. Try again.');
  211. IsCorrectInput := False;
  212. end;
  213. until IsCorrectInput;
  214. TakeArray := OriginalArr;
  215. end;
  216.  
  217. //procedure WriteMagicSquareToFile(FileName: String; Quantity: Integer);
  218. //var
  219. // OutputFile: TextFile;
  220. // IsNotCorrectOpiration: Boolean;
  221. // I, J: Integer;
  222. //begin
  223. // Assign(OutputFile, FileName);
  224. // try
  225. // Rewrite(OutputFile);
  226. // WriteLn(OutputFile, 'The parameter of magic square: ', Quantity);
  227. // WriteLn(OutputFile, 'Program result:');
  228. // for I := 0 to (Quantity - 1) do
  229. // Write(OutputFile, Matrix[I][J], ' ');
  230. // WriteLn(OutputFile, '');
  231. //
  232. // IsNotCorrectOpiration := False;
  233. // finally
  234. // Close(OutputFile);
  235. // end;
  236. // if (IsNotCorrectOpiration) then
  237. // WriteLn(' Unable to found file.');
  238. //end;
  239.  
  240. procedure Main();
  241. var
  242.  
  243. OriginalArray, TestArray: TArr;
  244. OutputFileName: String;
  245. begin
  246. WriteLn('This program performs two-way insertion sorting.');
  247. OriginalArray := TakeArray();
  248. if(OriginalArray = nil) then
  249. WriteLn('Input mismatch.')
  250. else
  251. begin
  252. TestArray := OriginalArray;
  253. DoubleInsertionSorting(TestArray);
  254. OutputFileName := ChooseFileName('lab3_3output1.txt', 'lab3_3output2.txt', 'lab3_3output3.txt');
  255. end;
  256. end;
  257.  
  258. begin
  259. Main();
  260. ReadLn;
  261. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement