Advertisement
dxvmxnd

Delph_1

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