Vanilla_Fury

laba_3_1_del

Nov 14th, 2020
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.33 KB | None | 0 0
  1. program laba_3_1_del;
  2.  
  3. uses
  4. System.SysUtils;
  5.  
  6. const
  7. MES_TASK = 'В заданном тексте в каждом четном слове заменить все строчные буквенные символы на прописные, а каждое нечетное слово заключить в круглые скобки.';
  8. ERROR_FILE_NOT_FOUND = 'Файл не найден.';
  9. MES_INPUT_OF_PATH = 'Пожалуйста, введите путь к файлу';
  10. MES_ASK_INPUT_METHOD = 'Откуда брать данные?' + #10 + #13 + '1 - из файла' + #10 + #13 + '2 - ввести вручную';
  11. MES_ASK_AGAIN_INPUT_METHOD = '"1" - повторить попытку.' + #10 + #13 + '"2" - ввести данные из консоли.';
  12. ERROR_FILE_CANNOT_BE_READ_OR_IS_EMPTY = 'Файл не может быть прочитан или пуст.';
  13. MES_ASK_OUTPUT_TO_FILE = 'Хотите вывести ответ в файл?' + #10 + #13 + '1 - да' + #10 + #13 + '2 - нет';
  14. ERROR_FILE_CANNOT_BE_CREATED_OT_OPENED = 'Файл не может быть создан или открыт. Повторите попытку:';
  15. ERROR_CHOICE_IS_INCORRECT = 'Надо ввести "1" или "2".' + #10 + #13 + 'Повторите попытку: ';
  16.  
  17. function Choose(SChoice1: String; SChoice2: String; SQuestion: String) : String;
  18. var
  19. NChoice: ShortInt;
  20. BIsCorrect: Boolean;
  21. SAnswer: String;
  22.  
  23. begin
  24. NChoice := 2;
  25.  
  26. writeln(sQuestion, #10 + #13 + 'Ваш выбор: ');
  27. repeat
  28. BIsCorrect := true;
  29. try
  30. readln(NChoice);
  31. except
  32. BIsCorrect := false;
  33. end;
  34. if (BIsCorrect and (nChoice <> 1) and (nChoice <> 2)) then
  35. BIsCorrect := false;
  36. if (not BIsCorrect) then
  37. writeln(ERROR_CHOICE_IS_INCORRECT);
  38. until (BIsCorrect);
  39. if (NChoice = 1) then
  40. SAnswer := sChoice1
  41. else
  42. SAnswer := sChoice2;
  43.  
  44. Choose := SAnswer;
  45. end;
  46.  
  47. function InputPathToFile(IsInput: Boolean) : String;
  48. var
  49. SPartOfText, SPath: String;
  50. begin
  51. if (IsInput) then
  52. SPartOfText := 'ввода'
  53. else
  54. SPartOfText := 'вывода';
  55.  
  56. writeln('Пожалуйста, введите путь к файлу ', SPartOfText, ': ');
  57. readln(SPath);
  58. InputPathToFile := SPath;
  59. end;
  60.  
  61. function ReadStringFromFile(SPathToFile: String; var MyError: ShortInt) : String;
  62. var
  63. FInput: TextFile;
  64. SInput, SString: String;
  65.  
  66. begin
  67. SInput := '';
  68. if (FileExists(SPathToFile)) then
  69. try
  70. AssignFile(FInput, SPathToFile);
  71. Reset(FInput);
  72. except
  73. MyError := 1;
  74. end
  75. else
  76. MyError := 1;
  77. if (MyError = 0) then
  78. begin
  79. if (Eof(FInput)) then
  80. MyError := 2
  81. else
  82. repeat
  83. readln(FInput, SString);
  84. SInput := SInput + SString + #10#13;
  85. until (EoF(FInput));
  86.  
  87. CloseFile(FInput);
  88. end;
  89. ReadStringFromFile := SInput;
  90. end;
  91.  
  92. function ReadStringFromConsole() : String;
  93. var
  94. SInput: String;
  95.  
  96. begin
  97. writeln('Введите строку:');
  98. readln(SInput);
  99.  
  100. readStringFromConsole := SInput;
  101. end;
  102.  
  103. function GetInput() : String;
  104. var
  105. SInput, SInputMethod, SPathToFile: String;
  106. BInputIsDone: Boolean;
  107. MyError: ShortInt;
  108.  
  109. begin
  110. SInput := '';
  111. BInputIsDone := false;
  112.  
  113. SInputMethod := Choose('FromFile', 'FromConsole', MES_ASK_INPUT_METHOD);
  114.  
  115. repeat
  116. if (SInputMethod = 'FromFile') then
  117. begin
  118. MyError := 0;
  119. SPathToFile := InputPathToFile(true);
  120.  
  121. SInput := ReadStringFromFile(SPathToFile, MyError);
  122. if (MyError > 0) then
  123. begin
  124. case MyError of
  125. 1: writeln(ERROR_FILE_NOT_FOUND);
  126. 2: writeln(ERROR_FILE_CANNOT_BE_READ_OR_IS_EMPTY);
  127. end;
  128. SInputMethod := choose('FromFile', 'FromConsole', MES_ASK_AGAIN_INPUT_METHOD);
  129. end
  130. else
  131. BInputIsDone := true;
  132. end
  133. else
  134. begin
  135. SInput := ReadStringFromConsole();
  136. BInputIsDone := true;
  137. end
  138. until (BInputIsDone);
  139.  
  140. GetInput := SInput;
  141. end;
  142.  
  143. procedure AddOneWordInStringAns(var i, NWord: Integer; var BFirstWordInRow: Boolean; var SAnswer, SWord: String; Sinput: String; ChChar: Char);
  144. begin
  145. if (NWord mod 2 = 0) then
  146. begin
  147. if BFirstWordInRow then
  148. begin
  149. SAnswer := SAnswer + #13;
  150. BFirstWordInRow := false;
  151. end;
  152. if (i = Length(SInput)) then
  153. SAnswer := SAnswer + UpperCase(SWord + ChChar)
  154. else
  155. SAnswer := SAnswer + UpperCase(SWord) + ChChar;
  156. end
  157. else
  158. begin
  159. if BFirstWordInRow then
  160. begin
  161. SAnswer := SAnswer + #13;
  162. BFirstWordInRow := false;
  163. end;
  164. if (i = Length(SInput)) then
  165. SAnswer := SAnswer + '(' + SWord + ChChar + ')'
  166. else
  167. SAnswer := SAnswer + '(' + SWord + ')' + ChChar;
  168. end;
  169.  
  170. if (ChChar = #10) then
  171. begin
  172. BFirstWordInRow := true;
  173. Inc(i);
  174. end;
  175.  
  176. SWord := '';
  177. Inc(NWord);
  178. end;
  179.  
  180. function ChangeStringToAns(SInput: String) : String;
  181. var
  182. SAnswer, SWord: String;
  183. ChChar: Char;
  184. i, NWord: Integer;
  185. BFirstWordInRow: Boolean;
  186.  
  187. begin
  188. SAnswer := '';
  189. SWord := '';
  190. NWord := 1;
  191. BFirstWordInRow := true;
  192.  
  193. i := 1;
  194. while (i <= Length(SInput)) do
  195. begin
  196. ChChar := SInput[i];
  197. if ((ChChar = ' ') or (ChChar = #10) or (i = Length(SInput))) then
  198. AddOneWordInStringAns(i, NWord, BFirstWordInRow, SAnswer, SWord, SInput, ChChar)
  199. else
  200. SWord := SWord + ChChar;
  201. Inc(i);
  202. end;
  203.  
  204. ChangeStringToAns := SAnswer;
  205. end;
  206.  
  207. procedure OutputToFile(SAnswer: String; SPathToFIle: String);
  208. var
  209. BOutputNotReady: Boolean;
  210. FOutput: TextFile;
  211.  
  212. begin
  213. BOutputNotReady := true;
  214. repeat
  215. try
  216. AssignFile(FOutput, SPathToFIle);
  217. Rewrite(FOutput);
  218. writeln(FOutput, SAnswer);
  219. CloseFile(FOutput);
  220. BOutputNotReady := false;
  221. except
  222. writeln(ERROR_FILE_CANNOT_BE_CREATED_OT_OPENED);
  223. end;
  224.  
  225. until (bOutputNotReady);
  226. end;
  227.  
  228. procedure OutputAnswer(SAnswer: String);
  229. var
  230. SShouldOutputInfoToFile, SPathToFile: String;
  231. BOutputIsReady: Boolean;
  232.  
  233. begin
  234. writeln('Ответ:' + #10 + #13 + SAnswer);
  235.  
  236. repeat
  237. BOutputIsReady := true;
  238. SShouldOutputInfoToFile := Choose('Output to file', 'Don''t output to file', MES_ASK_OUTPUT_TO_FILE);
  239.  
  240. if (SShouldOutputInfoToFile = 'Output to file') then
  241. begin
  242. SPathToFile := InputPathToFile(false);
  243. if (FileExists(SPathToFile)) then
  244. OutputToFile(SAnswer, SPathToFile)
  245. else
  246. begin
  247. BOutputIsReady := false;
  248. writeln(ERROR_FILE_NOT_FOUND);
  249. end;
  250. end;
  251. until (BOutputIsReady);
  252. end;
  253.  
  254. var
  255. SInput, SAnswer: String;
  256.  
  257. begin
  258. writeln(MES_TASK);
  259. // Путь к моему файлу ввода: C:\Users\Aleksandr\Desktop\input.txt
  260. // Путь к моему файлу вывода: C:\Users\Aleksandr\Desktop\output.txt
  261. SInput := GetInput();
  262. SAnswer := ChangeStringToAns(SInput);
  263. OutputAnswer(SAnswer);
  264. readln;
  265. end.
Advertisement
Add Comment
Please, Sign In to add comment