Advertisement
dxvmxnd

Untitled

Mar 3rd, 2024
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.50 KB | None | 0 0
  1. Program Words;
  2.  
  3. Uses
  4. System.SysUtils;
  5.  
  6. Type
  7. TBoolean = Array Of Boolean;
  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(LongestWord : String; Num : Integer);
  176. Var
  177. OutputFile : TextFile;
  178. Path : String;
  179. Begin
  180. Path := ChoosePathForOutput();
  181. AssignFile(OutputFile, Path);
  182. Rewrite(OutputFile);
  183.  
  184. Writeln(OutputFile, 'Самое длинное слово среди заданной строки: ', LongestWord);
  185. Writeln(OutputFile, 'Количество слов в заданной строке: ', Num);
  186.  
  187. CloseFile(OutputFile);
  188. Writeln('Данные успешно записаны в файл!');
  189.  
  190. End;
  191.  
  192. Procedure OutputAnswer(LongestWord : String; Num : Integer);
  193. Begin
  194. Writeln('Самое длинное слово среди заданной строки: ', LongestWord);
  195. Writeln('Количество слов в заданной строке: ', Num);
  196.  
  197. OutputAnswerInFile(LongestWord, Num);
  198.  
  199. End;
  200.  
  201. Function CountWordsAmount(Str : String) : Integer;
  202. Var
  203. Num : Integer;
  204. I : Integer;
  205. Word : String;
  206. Begin
  207. Num := 0;
  208. Word := '';
  209.  
  210. For I := 1 To High(Str) Do
  211. Begin
  212. If (Str[I] <> ' ') Then
  213. Begin
  214. Word := Word + Str[I];
  215. End
  216. Else
  217. Begin
  218. If (High(Word) > 0) Then
  219. Inc(Num);
  220. Word := '';
  221. End;
  222. End;
  223. If (Str[High(Str)] <> ' ') Then
  224. Inc(Num);
  225.  
  226. CountWordsAmount := Num;
  227. End;
  228.  
  229. Function FindLongestWord (Num : Integer; Str : String) : String;
  230. Var
  231. Words : Array Of String;
  232. I, NumOfWord : Integer;
  233. Word : String;
  234. LongestWord : String;
  235. Begin
  236. SetLength(Words, Num);
  237.  
  238. NumOfWord := 0;
  239. Word := '';
  240. For I := 1 To High(Str) Do
  241. Begin
  242. If (Str[I] <> ' ') Then
  243. Begin
  244. Word := Word + Str[I];
  245. End
  246. Else
  247. Begin
  248. If (High(Word) > 0) Then
  249. Begin
  250. Words[NumOfWord] := Word;
  251. Inc(NumOfWOrd);
  252. End;
  253. Word := '';
  254. End;
  255. End;
  256.  
  257.  
  258. LongestWord := '';
  259. For I := 0 To High(Words) Do
  260. Begin
  261. If (Length(Words[I]) > Length(LongestWord)) Then
  262. LongestWord := Words[I]
  263. End;
  264.  
  265. FindLongestWord := LongestWord;
  266. End;
  267.  
  268. Var
  269. Str : String;
  270. IsFromFile : Boolean;
  271. Errors : TBoolean;
  272. AmountOfWords : Integer;
  273. LongestWord : String;
  274.  
  275. Begin
  276. OutputTask();
  277. ChooseInput(IsFromFile);
  278. Str := InputString(IsFromFile);
  279. AmountOfWords := CountWordsAmount(Str);
  280. LongestWord := FindLongestWord(AmountOfWords, Str);
  281. OutputAnswer(LongestWord, AmountOfWords);
  282.  
  283.  
  284.  
  285. Readln;
  286. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement