Advertisement
dxvmxnd

Untitled

Mar 2nd, 2024
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.42 KB | None | 0 0
  1. Program L2_4_D;
  2.  
  3. uses
  4. System.SysUtils;
  5.  
  6. Type
  7. TArray = Array of Integer;
  8.  
  9.  
  10. Function InputSizeFromConsole() : Integer;
  11. Var
  12. IsCorrect : Boolean;
  13. Size : Integer;
  14. Begin
  15. Repeat
  16. IsCorrect := True;
  17. Writeln('Введите количество элементов в массиве');
  18. Try
  19. Readln(Size);
  20. Except
  21. IsCorrect := False;
  22. End;
  23. If ((Size < 1) Or Not IsCorrect) Then
  24. Begin
  25. IsCorrect := False;
  26. Writeln('Неверный тип данных');
  27. End;
  28. Until IsCorrect;
  29.  
  30. InputSizeFromConsole := Size;
  31. End;
  32.  
  33. Function ExceptionRead(I : Integer) : Integer;
  34. Var
  35. Number : Integer;
  36. IsCorrect : Boolean;
  37. Begin
  38. Repeat
  39. IsCorrect := True;
  40. Writeln('Введите ', (I+1), ' элемент массива: ');
  41. Try
  42. Readln(Number);
  43. Except
  44. IsCorrect := False;
  45. Writeln('Неверный тип данных!');
  46. End;
  47. Until IsCorrect;
  48.  
  49. ExceptionRead := Number;
  50. End;
  51.  
  52. Procedure OutputTaskEssence();
  53. Begin
  54. Writeln('Данная программа сортирует числа в массиве путем подсчета.');
  55. End;
  56.  
  57. Function PathChoice() : String;
  58. Var
  59. TextF : TextFile;
  60. Path : String;
  61. IsCorrect : Boolean;
  62.  
  63. Begin
  64. Repeat
  65. IsCorrect := True;
  66. Writeln('Введите путь файла: ');
  67. Try
  68. Readln(Path);
  69. AssignFile(TextF, Path);
  70. Reset(TextF);
  71. Except
  72. IsCorrect := False;
  73. Writeln('Неверный путь файла!');
  74. End;
  75. If (Not IsCorrect Or (Length(Path) < 1)) Then
  76. Begin
  77. Writeln('Неверный путь файла!');
  78. IsCorrect := False;
  79. End
  80. Else
  81. Begin
  82. If (Path[Length(Path)] <> 't') And (Path[Length(Path) - 1] <> 'x') And (Path[Length(Path) - 2] <> 't') And (Path[Length(Path) - 3] <> '.') then
  83. Begin
  84. Writeln('Неверный путь файла!');
  85. IsCorrect := False;
  86. End;
  87.  
  88. End;
  89. Until IsCorrect;
  90. Writeln('Файл успешно открыт!');
  91. PathChoice := Path;
  92. CloseFile(TextF);
  93. End;
  94.  
  95. Function InputSizeFromFile(Path : String; var TextF : TextFile) : Integer;
  96. Var
  97. Size : Integer;
  98. IsCorrect : Boolean;
  99.  
  100. Begin
  101. AssignFile(TextF, Path);
  102. Reset(TextF);
  103. IsCorrect := True;
  104. Writeln('Запись количества строк...');
  105. Try
  106. Readln(TextF, Size);
  107. Except
  108. IsCorrect := False;
  109. End;
  110. If ((Size < 1) Or (IsCorrect = False)) Then
  111. Begin
  112. Writeln('Ошибка! Неверный ввод размера! Впишите данные с клавиатуры.');
  113. Size := InputSizeFromConsole();
  114. End;
  115.  
  116. Writeln('Количество элементов массива: ', Size);
  117. CloseFile(TextF);
  118. InputSizeFromFile := Size;
  119.  
  120. End;
  121.  
  122. Function ArrayReadingFromFile(Path : String; Size : Integer; var TextF : TextFile; Arr : TArray) : TArray;
  123. Var
  124. I : Integer;
  125. Line : String;
  126. IsCorrect : Boolean;
  127.  
  128. Begin
  129. AssignFile(TextF, Path);
  130. Reset(TextF);
  131. Dec(Size);
  132. IsCorrect := True;
  133. Readln(TextF, Line);
  134.  
  135. Writeln('Запись матрицы...');
  136. For I := 0 To Size Do
  137. Begin
  138. Try
  139. Read(TextF, Arr[I])
  140. Except
  141. Writeln(' Неверный ввод данных! Введите данные с клавиатуры.');
  142. Arr[I] := ExceptionRead(I);
  143. End;
  144. End;
  145. CloseFile(TextF);
  146.  
  147. ArrayReadingFromFile := Arr;
  148.  
  149. End;
  150.  
  151. Function SortArray(Arr : TArray) : TArray;
  152. Var
  153. I, J, K : Integer;
  154. MinVal, MaxVal : Integer;
  155. Count : TArray;
  156. Begin
  157. MinVal := Arr[0];
  158. MaxVal := Arr[0];
  159.  
  160. For I := 1 To High(Arr) Do
  161. Begin
  162. If Arr[I] < MinVal Then
  163. MinVal := Arr[I];
  164. If Arr[I] > MaxVal Then
  165. MaxVal := Arr[I];
  166. End;
  167.  
  168. SetLength(Count, MaxVal - MinVal + 1);
  169. For I := 0 To High(Count) Do
  170. Count[I] := 0;
  171.  
  172. For I := 0 To High(Arr) Do
  173. Begin
  174. Inc(Count[Arr[I] - MinVal]);
  175. End;
  176.  
  177. K := 0;
  178. For I := 0 To High(Count) Do
  179. Begin
  180. For J := 1 To Count[I] Do
  181. Begin
  182. Arr[K] := I + MinVal;
  183. Inc(K);
  184. End;
  185. End;
  186.  
  187. SortArray := Arr;
  188. End;
  189.  
  190. Procedure Output(SortedArray : TArray);
  191. Var
  192. TextF : TextFile;
  193. Path : String;
  194. IsCorrect : Boolean;
  195. I : Integer;
  196.  
  197. Begin
  198. Writeln;
  199. Writeln('Отсортированный массив: ');
  200. For I := 0 To High(SortedArray) Do
  201. Write(SortedArray[I], ' ');
  202. Writeln;
  203. Repeat
  204. IsCorrect := True;
  205. Writeln('Введите путь файла для вывода: ');
  206. Try
  207. Readln(Path);
  208. AssignFile(TextF, Path);
  209. Reset(TextF);
  210. Except
  211. IsCorrect := False;
  212. Writeln('Неверный путь файла!');
  213. End;
  214. If (Not IsCorrect Or (Length(Path) < 1)) Then
  215. Begin
  216. Writeln('Неверный путь файла!');
  217. IsCorrect := False;
  218. End
  219. Else
  220. Begin
  221. If (Path[Length(Path)] <> 't') And (Path[Length(Path) - 1] <> 'x') And (Path[Length(Path) - 2] <> 't') And (Path[Length(Path) - 3] <> '.') then
  222. Begin
  223. Writeln('Неверный путь файла!');
  224. IsCorrect := False;
  225. End;
  226.  
  227. End;
  228. Until IsCorrect;
  229.  
  230. Append(TextF);
  231. Writeln(TextF);
  232. Writeln(TextF, 'Отсортированный массив: ');
  233. For I := 0 To High(SortedArray) Do
  234. Write(TextF, SortedArray[I], ' ');
  235. CloseFile(TextF);
  236. Writeln('Данные записаны в файл.');
  237. Readln;
  238.  
  239. End;
  240.  
  241. Function InputFromFile() : TArray;
  242.  
  243. Var
  244. Path : String;
  245. Size, MaxRes : Integer;
  246. TextF : TextFile;
  247. Arr : TArray;
  248.  
  249. Begin
  250. Writeln('При записи данных из файла, учтите, что на первой строке написано количество элементов массива, а с новой строки сам массив чисел.');
  251. Path := PathChoice();
  252. Size := InputSizeFromFile(Path, TextF);
  253. SetLength(Arr, Size);
  254. Arr := ArrayReadingFromFile(Path, Size, TextF, Arr);
  255.  
  256. InputFromFile := Arr;
  257. End;
  258.  
  259. Function ArrayReadingFromConsole(Size : Integer; Arr : TArray) : TArray;
  260. Var
  261. IsCorrect : Boolean;
  262. I, J : Integer;
  263. Begin
  264. Dec(Size);
  265.  
  266. For I := 0 To Size Do
  267. Begin
  268. Repeat
  269. IsCorrect := True;
  270. Writeln('Введите элемент с индексом ', I+1);
  271. Try
  272. Readln(Arr[I]);
  273. Except
  274. IsCorrect := False;
  275. Writeln('Неверный тип данных');
  276. End;
  277. Until IsCorrect;
  278. End;
  279.  
  280. ArrayReadingFromConsole := Arr;
  281. End;
  282.  
  283. Function InputFromConsole() : TArray ;
  284.  
  285. Var
  286. Size, MaxSum : Integer;
  287. Arr : TArray;
  288.  
  289. Begin
  290. Size := InputSizeFromConsole();
  291. SetLength(Arr, Size);
  292. Arr := ArrayReadingFromConsole(Size, Arr);
  293.  
  294. InputFromConsole := Arr;
  295. End;
  296.  
  297. Function SourceChoice() : TArray;
  298. Var
  299. ChoiceNumber : Integer;
  300. Arr : TArray;
  301. IsCorrect : Boolean;
  302.  
  303. Begin
  304. Writeln('Выберите, откуда будут вводиться данные:');
  305. Repeat
  306. IsCorrect := True;
  307. Writeln('Введите 0, если с консоли; введите 1, если с файла.');
  308. Try
  309. Readln(ChoiceNumber);
  310. Except
  311. IsCorrect := False;
  312. End;
  313. If ((IsCorrect = False) Or ((ChoiceNumber <> 1) And (ChoiceNumber <> 0))) Then
  314. Begin
  315. Writeln('Неверный ввод данных!');
  316. IsCorrect := False;
  317. End;
  318. Until IsCorrect;
  319. If (ChoiceNumber = 0) Then
  320. Arr := InputFromConsole()
  321. Else
  322. Arr := InputFromFile();
  323.  
  324. SourceChoice := Arr;
  325.  
  326. End;
  327.  
  328. Var
  329. SortedArray : TArray;
  330. Arr : TArray;
  331.  
  332. Begin
  333. OutputTaskEssence();
  334. Arr := SourceChoice();
  335. SortedArray := SortArray(Arr);
  336. Output(SortedArray);
  337.  
  338. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement