Advertisement
dxvmxnd

Untitled

Mar 2nd, 2024
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.71 KB | None | 0 0
  1. Program Identifier;
  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 := True;
  82. Writeln('Введите строку: ');
  83. Readln(Str);
  84. For I := 1 To High(Str) Do
  85. If (Str[I] = ' ') Then
  86. IsCorrect := False;
  87. If (Not IsCorrect) Or (Length(Str) < 1) Then
  88. Begin
  89. IsCorrect := False;
  90. Writeln('Ошибка ввода! Повторите попытку.');
  91. End;
  92. Until (IsCorrect);
  93. End;
  94.  
  95. Procedure InputFromFile(var Str : String);
  96. Var
  97. Path : String;
  98. InputFile : TextFile;
  99. IsCorrect : Boolean;
  100. I : Integer;
  101. Begin
  102. Writeln('При записи из файла учтите, что в файле нужные данные должны быть записаны на первой строке.');
  103.  
  104. Path := ChoosePath();
  105. AssignFile(InputFile, Path);
  106. Reset(InputFile);
  107. Readln(InputFile, Str);
  108.  
  109. For I := 1 To High(Str) Do
  110. If (Str[I] = ' ') Then
  111. IsCorrect := False;
  112. If (IsCorrect = False) Or (Length(Str) < 1) Then
  113. Begin
  114. Writeln('Ошибка ввода! Введите нужную строку с клавиатуры.');
  115. InputFromConsole(Str);
  116. End;
  117.  
  118. End;
  119.  
  120. Function InputString(IsFromFile : Boolean) : String;
  121. Var
  122. Str : String;
  123. Begin
  124. If (IsFromFile) Then
  125. InputFromFile(Str)
  126. Else
  127. InputFromConsole(Str);
  128.  
  129. InputString := Str;
  130. End;
  131.  
  132. Procedure CheckForFirstLetter(Str : String; var IsCorrect : Boolean);
  133. Begin
  134. IsCorrect := Not(((Str[1] > 'a') And (Str[1] < 'z')) Or ((Str[1] > 'A') And (Str[1] < 'Z')) Or (Str[1] = '_'));
  135. End;
  136.  
  137. Procedure CheckForLetters(Str : String; var IsCorrect : Boolean);
  138. Var
  139. I : Integer;
  140. Begin
  141. IsCorrect := False;
  142. For I := 1 To High(Str) Do
  143. If Not(((Str[I] > 'a') And (Str[I] < 'z')) Or ((Str[I] > 'A') And (Str[I] < 'Z')) Or (Str[I] = '_') Or ((Str[I] > '0') And (Str[I] < '9'))) Then
  144. IsCorrect := True;
  145. End;
  146.  
  147. Function CheckForTrue(Str : String; var Errors : TBoolean) : Boolean;
  148. Begin
  149. SetLength(Errors, 2);
  150. Errors[1] := False;
  151. Errors[0] := False;
  152. CheckForFirstLetter(Str, Errors[0]);
  153. CheckForLetters(Str, Errors[1]);
  154.  
  155. CheckForTrue := Not(Errors[1] Or Errors[0]);
  156.  
  157. End;
  158.  
  159. Function ChoosePathForOutput() : String;
  160. Var
  161. Path : String;
  162. IsCorrect : Boolean;
  163. OutputFile : TextFile;
  164. Begin
  165. Begin
  166. Repeat
  167. Writeln('Введите путь к файлу для вывода информации: ');
  168. IsCorrect := True;
  169. Readln(Path);
  170. Try
  171. AssignFile(OutputFile, Path);
  172. Reset(OutputFile);
  173. Except
  174. IsCorrect := False;
  175. End;
  176. If (Not IsCorrect) Or (Length(Path) < 5) Then
  177. Begin
  178. IsCorrect := False;
  179. Writeln('Ошибка ввода! Повторите попытку.');
  180. End
  181. Else
  182. Begin
  183. If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then
  184. Begin
  185. IsCorrect := False;
  186. Writeln('Ошибка ввода! Повторите попытку.');
  187. End;
  188. End;
  189. Until IsCorrect;
  190. End;
  191.  
  192. CloseFile(OutputFile);
  193.  
  194. ChoosePathForOutput := Path;
  195. End;
  196.  
  197. Procedure OutputAnswerInFile(IsCorrect : Boolean; Errors : TBoolean);
  198. Var
  199. OutputFile : TextFile;
  200. Path : String;
  201. Begin
  202. Path := ChoosePathForOutput();
  203. AssignFile(OutputFile, Path);
  204. Rewrite(OutputFile);
  205.  
  206. If (IsCorrect) Then
  207. Writeln(OutputFile, 'Строка является идентификатором!')
  208. Else
  209. Begin
  210. Writeln(OutputFile, 'Строка не является идентификатором!');
  211. If (Errors[0]) Then
  212. Writeln(OutputFile, 'Строка начинается не с английской буквы либо нижнего подчеркивания!');
  213. If (Errors[1]) Then
  214. Writeln(OutputFile, 'Строка содержит символы, не являющиеся английскими буквами, цифрами либо нижним подчеркиванием!');
  215. End;
  216.  
  217. CloseFile(OutputFile);
  218. Writeln('Данные успешно записаны в файл!');
  219.  
  220. End;
  221.  
  222. Procedure OutputAnswer(IsCorrect : Boolean; Errors : TBoolean);
  223. Begin
  224. If (IsCorrect) Then
  225. Writeln('Строка является идентификатором!')
  226. Else
  227. Begin
  228. Writeln('Строка не является идентификатором!');
  229. If (Errors[0]) Then
  230. Writeln('Строка начинается не с английской буквы либо нижнего подчеркивания!');
  231. If (Errors[1]) Then
  232. Writeln('Строка содержит символы, не являющиеся английскими буквами, цифрами либо нижним подчеркиванием!');
  233. End;
  234.  
  235. OutputAnswerInFile(IsCorrect, Errors);
  236.  
  237. End;
  238.  
  239. Var
  240. Str : String;
  241. IsFromFile : Boolean;
  242. IsCorrect : Boolean;
  243. Errors : TBoolean;
  244. Begin
  245. OutputTask();
  246. ChooseInput(IsFromFile);
  247. Str := InputString(IsFromFile);
  248. IsCorrect := CheckForTrue(Str, Errors);
  249. OutputAnswer(IsCorrect, Errors);
  250.  
  251.  
  252. Readln;
  253. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement