Advertisement
dxvmxnd

Untitled

Mar 5th, 2024
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.65 KB | None | 0 0
  1. Program Words;
  2.  
  3. Uses
  4. System.SysUtils;
  5.  
  6. Type
  7. TArray = Array Of Integer;
  8.  
  9. Procedure OutputTask();
  10. Begin
  11. Writeln('Данная программа записывает в массив встреченные в строке числа.');
  12. End;
  13.  
  14. Procedure ChooseInput(var IsFromFile : Boolean);
  15. Var
  16. Num : Integer;
  17. IsCorrect : Boolean;
  18. Begin
  19. Repeat
  20. IsCorrect := True;
  21. Writeln('Выберите, откуда вводить данные: 0, если с консоли; 1, если с файла.');
  22. Try
  23. Readln(Num);
  24. Except
  25. IsCorrect := False;
  26. End;
  27. If ((Not IsCorrect) Or ((Num <> 0) And (Num <> 1))) Then
  28. Begin
  29. IsCorrect := False;
  30. Writeln('Ошибка ввода! Повторите попытку.');
  31. End;
  32. Until IsCorrect;
  33.  
  34. IsFromFile := (Num = 1);
  35. End;
  36.  
  37. Function ChoosePath() : String;
  38. Var
  39. Path : String;
  40. IsCorrect : Boolean;
  41. InputFile : TextFile;
  42. Begin
  43. Begin
  44. Repeat
  45. Writeln('Введите путь к файлу для ввода информации: ');
  46. IsCorrect := True;
  47. Readln(Path);
  48. Try
  49. AssignFile(InputFile, Path);
  50. Reset(InputFile);
  51. Except
  52. IsCorrect := False;
  53. End;
  54. If (Not IsCorrect) Or (Length(Path) < 5) Then
  55. Begin
  56. IsCorrect := False;
  57. Writeln('Ошибка ввода! Повторите попытку.');
  58. End
  59. Else
  60. Begin
  61. If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then
  62. Begin
  63. IsCorrect := False;
  64. Writeln('Ошибка ввода! Повторите попытку.');
  65. End;
  66. End;
  67. Until IsCorrect;
  68. End;
  69.  
  70. CloseFile(InputFile);
  71.  
  72. ChoosePath := Path;
  73. End;
  74.  
  75. Procedure InputFromConsole(var Str : String);
  76. Var
  77. I : Integer;
  78. IsCorrect : Boolean;
  79. Begin
  80. Repeat
  81. IsCorrect := False;
  82. Writeln('Введите строку: ');
  83. Readln(Str);
  84. For I := 1 To High(Str) Do
  85. Begin
  86. If (Str[I] <> ' ') Then
  87. IsCorrect := True;
  88. End;
  89. If (Not IsCorrect) Or (Length(Str) < 1) Then
  90. Begin
  91. IsCorrect := False;
  92. Writeln('Ошибка ввода! Повторите попытку.');
  93. End;
  94. Until (IsCorrect);
  95. End;
  96.  
  97. Procedure InputFromFile(var Str : String);
  98. Var
  99. Path : String;
  100. InputFile : TextFile;
  101. IsCorrect : Boolean;
  102. I : Integer;
  103. Begin
  104. Writeln('При записи из файла учтите, что в файле нужные данные должны быть записаны на первой строке.');
  105.  
  106. Path := ChoosePath();
  107. AssignFile(InputFile, Path);
  108. Reset(InputFile);
  109. Readln(InputFile, Str);
  110. IsCorrect := False;
  111. For I := 1 To High(Str) Do
  112. Begin
  113. If (Str[I] <> ' ') Then
  114. IsCorrect := True;
  115. End;
  116. If (Not IsCorrect) Or (Length(Str) < 1) Then
  117. Begin
  118. Writeln('Ошибка ввода! Введите нужную строку с клавиатуры.');
  119. InputFromConsole(Str);
  120. End;
  121.  
  122.  
  123. End;
  124.  
  125. Function InputString(IsFromFile : Boolean) : String;
  126. Var
  127. Str : String;
  128. Begin
  129. If (IsFromFile) Then
  130. InputFromFile(Str)
  131. Else
  132. InputFromConsole(Str);
  133.  
  134. InputString := Str;
  135. End;
  136.  
  137. Function ChoosePathForOutput() : String;
  138. Var
  139. Path : String;
  140. IsCorrect : Boolean;
  141. OutputFile : TextFile;
  142. Begin
  143. Begin
  144. Repeat
  145. Writeln('Введите путь к файлу для вывода информации: ');
  146. IsCorrect := True;
  147. Readln(Path);
  148. Try
  149. AssignFile(OutputFile, Path);
  150. Reset(OutputFile);
  151. Except
  152. IsCorrect := False;
  153. End;
  154. If (Not IsCorrect) Or (Length(Path) < 5) Then
  155. Begin
  156. IsCorrect := False;
  157. Writeln('Ошибка ввода! Повторите попытку.');
  158. End
  159. Else
  160. Begin
  161. If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then
  162. Begin
  163. IsCorrect := False;
  164. Writeln('Ошибка ввода! Повторите попытку.');
  165. End;
  166. End;
  167. Until IsCorrect;
  168. End;
  169.  
  170. CloseFile(OutputFile);
  171.  
  172. ChoosePathForOutput := Path;
  173. End;
  174.  
  175. Procedure OutputAnswerInFile(Arr : TArray);
  176. Var
  177. OutputFile : TextFile;
  178. Path : String;
  179. I : Integer;
  180. Begin
  181. Path := ChoosePathForOutput();
  182. AssignFile(OutputFile, Path);
  183. Rewrite(OutputFile);
  184.  
  185. If (Not(Length(Arr) = 0)) Then
  186. Begin
  187. Write(OutputFile, 'Массив чисел: ');
  188. For I := 0 To High(Arr) Do
  189. Write(OutputFile, Arr[I] , ' ');
  190. End
  191. Else
  192. Writeln(OutputFile, 'Цифры и числа не были встречены в строке!');
  193.  
  194. CloseFile(OutputFile);
  195. Writeln('Данные успешно записаны в файл!');
  196.  
  197. End;
  198.  
  199. Procedure OutputAnswer(Arr : TArray);
  200. Var
  201. I : Integer;
  202. Begin
  203. If (Not(Length(Arr) = 0)) Then
  204. Begin
  205. Write('Массив чисел: ');
  206. For I := 0 To High(Arr) Do
  207. Write(Arr[I] , ' ');
  208. End
  209. Else
  210. Writeln('Цифры и числа не были встречены в строке!');
  211.  
  212. OutputAnswerInFile(Arr);
  213.  
  214. End;
  215.  
  216. Function CountNumbersAmount(Str : String) : Integer;
  217. Var
  218. I, J : Integer;
  219. Num : Integer;
  220. Begin
  221. I := 1;
  222. Num := 0;
  223. While(I <> High(Str)) Do
  224. Begin
  225. J := 0;
  226. If ((Str[I] >= '0') And (Str[I] <= '9')) Then
  227. Begin
  228. Inc(Num);
  229. J := I+1;
  230. While((Str[J] >= '0') And (Str[J] <= '9')) Do
  231. Inc(J);
  232. I := J;
  233. End
  234. Else
  235. Inc(I);
  236. End;
  237.  
  238. CountNumbersAmount := Num;
  239. End;
  240.  
  241. Function AddNumbersInArray(Str : String; Num : Integer) : TArray;
  242. Var
  243. Arr : TArray;
  244. I, J : Integer;
  245. Index : Integer;
  246. Number, Multiplier : Integer;
  247. Begin
  248. SetLength(Arr, Num);
  249.  
  250. I := 1;
  251. Index := -1;
  252. While(I <> High(Str)) Do
  253. Begin
  254. Number := 0;
  255. J := 0;
  256. If ((Str[I] >= '0') And (Str[I] <= '9')) Then
  257. Begin
  258. Inc(Index);
  259. J := I+1;
  260. Number := StrToInt(Str[I]);
  261. Multiplier := 10;
  262. While((Str[J] >= '0') And (Str[J] <= '9')) Do
  263. Begin
  264. Number := Number * Multiplier + StrToInt(Str[J]);
  265. Inc(J);
  266. Multiplier := Multiplier * 10;
  267. End;
  268. Arr[Index] := Number;
  269. I := J;
  270. End
  271. Else
  272. Inc(I);
  273. End;
  274.  
  275.  
  276. AddNumbersInArray := Arr;
  277. End;
  278.  
  279.  
  280. Var
  281. Str : String;
  282. IsFromFile : Boolean;
  283. AmountOfNumbers : Integer;
  284. ArrayOfNumbers : TArray;
  285.  
  286. Begin
  287. OutputTask();
  288. ChooseInput(IsFromFile);
  289. Str := InputString(IsFromFile);
  290. AmountOfNumbers := CountNumbersAmount(Str);
  291. ArrayOfNumbers := AddNumbersInArray(Str, AmountOfNumbers);
  292. OutputAnswer(ArrayOfNumbers);
  293.  
  294.  
  295.  
  296. Readln;
  297. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement