Advertisement
dxvmxnd

Untitled

Dec 20th, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.52 KB | None | 0 0
  1. Program LabStr;
  2.  
  3. Uses
  4. System.SysUtils;
  5.  
  6. Procedure OutputAnswer(Str : String; Num : Integer);
  7. Var
  8. IsCorrect : Boolean;
  9. Path : String;
  10. TextF : TextFile;
  11. Begin
  12. Writeln('Самое короткое слово: ', Str );
  13. Writeln('Начинается оно с символа ', Num);
  14.  
  15. Repeat
  16. IsCorrect := True;
  17. Writeln('Введите путь файла для вывода: ');
  18. Try
  19. Readln(Path);
  20. AssignFile(TextF, Path);
  21. Reset(TextF);
  22. Except
  23. IsCorrect := False;
  24. End;
  25. If (Not IsCorrect Or ((Path[Length(Path)] <> 't') And (Path[Length(Path) - 1] <> 'x') And
  26. (Path[Length(Path) - 2] <> 't') And (Path[Length(Path) - 3] <> '.'))) Then
  27. Begin
  28. IsCorrect := False;
  29. Writeln('Ошибка открытия файла! Учтите, что файл должен быть формата *.txt');
  30. End;
  31. Until IsCorrect;
  32. Append(TextF);
  33. Writeln(TextF);
  34. Writeln(TextF, 'Самое короткое слово: ', Str );
  35. Writeln(TextF, 'Начинается оно с символа ', Num);
  36. CloseFile(TextF);
  37.  
  38. Writeln('Данные успешно записаны в файл!');
  39. Readln;
  40. End;
  41.  
  42. Procedure OutputTask();
  43. Begin
  44.  
  45. Writeln('Данная программа ищет самое короткое слово в тексте.');
  46.  
  47. End;
  48.  
  49. Function ChoicePath() : String;
  50. Var
  51. Path : String;
  52. TextF : TextFile;
  53. IsCorrect : Boolean;
  54.  
  55. Begin
  56. Repeat
  57. IsCorrect := True;
  58. Writeln('Введите путь файла: ');
  59. Try
  60. Readln(Path);
  61. AssignFile(TextF, Path);
  62. Reset(TextF);
  63. Except
  64. IsCorrect := False;
  65. End;
  66. If (Not IsCorrect Or (Path[Length(Path)] <> 't') And (Path[Length(Path) - 1] <> 'x') And (Path[Length(Path) - 2] <> 't') And (Path[Length(Path) - 3] <> '.')) Then
  67. Begin
  68. Writeln('Неверный путь файла!');
  69. IsCorrect := False;
  70. End;
  71.  
  72. Until IsCorrect;
  73. Writeln('Файл успешно открыт!');
  74. ChoicePath := Path;
  75. CloseFile(TextF);
  76. End;
  77.  
  78. Function InputFromConsole() : String;
  79. Var
  80. Str : String;
  81. IsCorrect : Boolean;
  82.  
  83. Begin
  84.  
  85. Repeat
  86. IsCorrect := True;
  87. Writeln('Введите предложение: ');
  88. Try
  89. Readln(Str);
  90. Except
  91. Writeln('Ошибка ввода! Текст слишком большой!');
  92. IsCorrect := False;
  93. End;
  94. If ((Length(Str) < 1) or ((Str[1] = ' ') and (Length(Str) > 0))) Then
  95. Begin
  96. IsCorrect := False;
  97. Writeln('Текст должен содержать минимум 1 символ!');
  98. End;
  99.  
  100. Until IsCorrect;
  101.  
  102. InputFromConsole := Str
  103. End;
  104.  
  105. Function InputStrFromFile(var TextF : TextFile; Path : String) : String;
  106.  
  107. Var
  108. Str : String;
  109.  
  110. Begin
  111. AssignFile(TextF, Path);
  112. Reset(TextF);
  113. Writeln('Запись строки...');
  114. Readln(TextF, Str);
  115. If Length(Str) < 1 Then
  116. Begin
  117. Writeln('Ошибка ввода! Строка должна иметь хотя бы 1 символ! Введите строку с клавиатуры.');
  118. Str := InputFromConsole();
  119. End;
  120.  
  121. Writeln('Введенная строка: ', Str);
  122. CloseFile(TextF);
  123.  
  124. InputStrFromFile := Str
  125. End;
  126.  
  127. Function InputFromFile() : String;
  128.  
  129. Var
  130. TextF : TextFile;
  131. Path, Str : String;
  132.  
  133. Begin
  134. Path := ChoicePath();
  135.  
  136. Str := InputStrFromFile(TextF, Path);
  137.  
  138. InputFromFile := Str;
  139. End;
  140.  
  141. Function ChoiceOfInput() : String;
  142.  
  143. Var
  144. Str : String;
  145. Choice : Integer;
  146. IsCorrect : Boolean;
  147. Begin
  148.  
  149. Repeat
  150. IsCorrect := True;
  151. Writeln('Выберите, откуда вводить данные. Введите 0, если с консоли; 1, если с файла');
  152. Try
  153. Readln(Choice);
  154. Except
  155. IsCorrect := False;
  156. End;
  157. If ((Not IsCorrect) Or ((Choice <> 0) And (Choice <> 1))) Then
  158. Begin
  159. Writeln('Неверный ввод данных!');
  160. IsCorrect := False;
  161. End;
  162. Until IsCorrect;
  163. If (Choice = 0) Then
  164. Str := InputFromConsole()
  165. Else
  166. Str := InputFromFile();
  167.  
  168. ChoiceOfInput := Str;
  169. End;
  170.  
  171.  
  172. Function FindShortestWord(Str : String; Var NumOfWord : Integer) : String;
  173. Var
  174. StartPos, EndPos, CurrentLength: Integer;
  175. ShortestWord: String;
  176. IsFirstWord: Boolean;
  177. Begin
  178. StartPos := 1;
  179. ShortestWord := '';
  180. NumOfWord := -1;
  181. IsFirstWord := True;
  182.  
  183. While StartPos <= Length(Str) Do
  184. Begin
  185. EndPos := StartPos;
  186. While (EndPos <= Length(Str)) And (Str[EndPos] <> ' ') Do
  187. Inc(EndPos);
  188.  
  189. CurrentLength := EndPos - StartPos;
  190.  
  191. If (CurrentLength > 0) And ( (IsFirstWord) Or (CurrentLength < Length(ShortestWord))) Then
  192. Begin
  193. ShortestWord := Copy(Str, StartPos, CurrentLength);
  194. NumOfWord := StartPos;
  195. IsFirstWord := False;
  196. End;
  197.  
  198. StartPos := EndPos + 1;
  199. End;
  200.  
  201. FindShortestWord := ShortestWord;
  202. end;
  203.  
  204. Var
  205. Str, AnswerStr : String;
  206. NumOfWord : Integer;
  207. Begin
  208. OutputTask();
  209. Str := ChoiceOfInput();
  210. AnswerStr := FindShortestWord(Str, NumOfWord);
  211. OutputAnswer(AnswerStr, NumOfWord);
  212. End.
  213.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement