Advertisement
dxvmxnd

Untitled

Nov 12th, 2023
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.16 KB | None | 0 0
  1. Program L3_1_D;
  2.  
  3. Uses
  4. System.SysUtils, Windows;
  5.  
  6. Type
  7. TStrings = Array of String;
  8.  
  9. Procedure OutputAnswer(Strings : TStrings);
  10. Var
  11. IsCorrect : Boolean;
  12. Path : String;
  13. TextF : TextFile;
  14. Begin
  15. Writeln('Слово после перекодировки: ', Strings[0]);
  16. If (Length(Strings) = 2) Then
  17. Writeln('Слово после обратной перекодировки: ', Strings[1]);
  18.  
  19. Repeat
  20. IsCorrect := True;
  21. Writeln('Введите путь файла для вывода: ');
  22. Try
  23. Readln(Path);
  24. AssignFile(TextF, Path);
  25. Reset(TextF);
  26. Except
  27. IsCorrect := False;
  28. End;
  29. 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
  30. Begin
  31. IsCorrect := False;
  32. Writeln('Ошибка открытия файла! Учтите, что файл должен быть формата *.txt');
  33. End;
  34. Until IsCorrect;
  35. Append(TextF);
  36. Writeln(TextF);
  37. Writeln(TextF, 'Слово после перекодировки: ', Strings[0]);
  38. If (Length(Strings) = 2) Then
  39. Writeln(TextF, 'Слово после обратной перекодировки: ', Strings[1]);
  40. CloseFile(TextF);
  41.  
  42. Writeln('Данные успешно записаны в файл!');
  43. Readln;
  44. End;
  45.  
  46. Function Uncoding(Strings : TStrings; IsChanged : Array of Boolean; Str : String) : String;
  47.  
  48. Var
  49. I, J : Integer;
  50. Str1, Str2 : String;
  51.  
  52. Begin
  53. Str1 := Strings[1];
  54. Str2 := Strings[2];
  55.  
  56. For I := 1 To High(Str) Do
  57. Begin
  58. For J := 1 To High(Str2) Do
  59. Begin
  60. If ((Str[I] = Str2[J]) And (IsChanged[I-1])) Then
  61. Begin
  62. Str[I] := Str1[J];
  63. IsChanged[I-1] := False;
  64. End;
  65. End;
  66. End;
  67.  
  68. Uncoding := Str;
  69.  
  70. End;
  71.  
  72. Function Coding(Strings : TStrings) : TStrings;
  73.  
  74. Var
  75. Str1, Str2, StringAfterCoding, StringAfterDecoding : String;
  76. I, J, UncodingChoice : Integer;
  77. IsCorrect : Boolean;
  78. IsChanged : Array of Boolean;
  79.  
  80. Begin
  81. StringAfterCoding := Strings[0];
  82. Str1 := Strings[1];
  83. Str2 := Strings[2];
  84. SetLength(IsChanged, Length(StringAfterCoding));
  85.  
  86. For I := 1 To High(StringAfterCoding) Do
  87. Begin
  88. For J := 1 To High(Str1) Do
  89. Begin
  90. If ((StringAfterCoding[I] = Str1[J]) And (Not IsChanged[I-1])) Then
  91. Begin
  92. StringAfterCoding[I] := Str2[J];
  93. IsChanged[I-1] := True;
  94. End;
  95. End;
  96. End;
  97.  
  98.  
  99. Repeat
  100. Writeln('Желаете ли Вы перекодировать текст обратно в читаемый? Введите 0, если нет. 1, если да');
  101. IsCorrect := True;
  102. Try
  103. Readln(UncodingChoice);
  104. Except
  105. IsCorrect := False;
  106. End;
  107. If ((UncodingChoice <> 0) And (UncodingChoice <> 1) Or (Not IsCorrect)) Then
  108. Begin
  109. IsCorrect := False;
  110. Writeln('Неверный ввод!');
  111. End;
  112. Until IsCorrect;
  113.  
  114. If (UncodingChoice = 1) Then
  115. Begin
  116. StringAfterDecoding := Uncoding(Strings, IsChanged, StringAfterCoding);
  117. SetLength(Strings, 2);
  118. Strings[0] := StringAfterCoding;
  119. Strings[1] := StringAfterDecoding;
  120. End
  121. Else
  122. Begin
  123. SetLength(Strings, 1);
  124. Strings[0] := StringAfterCoding;
  125. End;
  126.  
  127. Coding := Strings;
  128.  
  129.  
  130. End;
  131.  
  132. Procedure OutputTask();
  133. Begin
  134.  
  135. Writeln('Данная программа кодирует текст по выбранным кодировкам и обратно.');
  136.  
  137. End;
  138.  
  139. Function ReadStringFromConsole() : String;
  140. Var
  141. Str : String;
  142. Begin
  143. Writeln('Введите строку с клавиатуры: ');
  144. Readln(Str);
  145.  
  146. ReadStringFromConsole := Str;
  147. End;
  148.  
  149. Function ReadFirstKeyFromConsole() : String;
  150. Var
  151. Str : String;
  152. I : Integer;
  153. IsCorrect : Boolean;
  154. Begin
  155. Repeat
  156. IsCorrect := True;
  157. Writeln('Введите Str1(ключ): ');
  158. Readln(Str);
  159. For I := 1 To High(Str) Do
  160. Begin
  161. If (Str[I] = ' ') Then
  162. Begin
  163. IsCorrect := False;
  164. End;
  165. End;
  166. If (Not IsCorrect) Then
  167. Writeln('Ключ не может содержать пробел! Повторите попытку.');
  168. Until IsCorrect;
  169.  
  170. ReadFirstKeyFromConsole := Str;
  171. End;
  172.  
  173. Function ReadSecondKeyFromConsole() : String;
  174. Var
  175. Str : String;
  176. IsCorrect : Boolean;
  177. I : Integer;
  178.  
  179. Begin
  180. Repeat
  181. IsCorrect := True;
  182. Writeln('Введите Str2(ключ): ');
  183. Readln(Str);
  184. For I := 1 To High(Str) Do
  185. Begin
  186. If (Str[I] = ' ') Then
  187. Begin
  188. IsCorrect := False;
  189. End;
  190. End;
  191. If (Not IsCorrect) Then
  192. Writeln('Ключ не может содержать пробел! Повторите попытку.');
  193.  
  194. Until IsCorrect;
  195.  
  196. ReadSecondKeyFromConsole := Str;
  197. End;
  198.  
  199. Function ChoicePath() : String;
  200. Var
  201. Path : String;
  202. TextF : TextFile;
  203. IsCorrect : Boolean;
  204.  
  205. Begin
  206. Repeat
  207. IsCorrect := True;
  208. Writeln('Введите путь файла: ');
  209. Try
  210. Readln(Path);
  211. AssignFile(TextF, Path);
  212. Reset(TextF);
  213. Except
  214. IsCorrect := False;
  215. Writeln('Неверный путь файла!');
  216. End;
  217. Until IsCorrect;
  218. Writeln('Файл успешно открыт!');
  219. ChoicePath := Path;
  220. CloseFile(TextF);
  221. End;
  222.  
  223. Function InputStrFromFile(var TextF : TextFile; Path : String) : String;
  224.  
  225. Var
  226. Str : String;
  227. IsCorrect : Boolean;
  228.  
  229. Begin
  230. AssignFile(TextF, Path);
  231. Reset(TextF);
  232. Writeln('Запись строки...');
  233. Readln(TextF, Str);
  234. If Length(Str) < 1 Then
  235. Begin
  236. Writeln('Ошибка ввода! Строка должна иметь хотя бы 1 символ! Введите строку с клавиатуры.');
  237. Str := ReadStringFromConsole();
  238. End;
  239.  
  240. Writeln('Строка для перекодирования: ', Str);
  241. CloseFile(TextF);
  242.  
  243. InputStrFromFile := Str
  244. End;
  245.  
  246. Function InputKeyFromFile(var TextF : TextFile; Path : String) : TStrings;
  247.  
  248. Var
  249. Str1, Str2, Line : String;
  250. Keys : TStrings;
  251. IsCorrect : Boolean;
  252. I : Integer;
  253.  
  254. Begin
  255. AssignFile(TextF, Path);
  256. Reset(TextF);
  257. Readln(TextF, Line);
  258.  
  259. IsCorrect := True;
  260. Writeln('Запись ключа str1...');
  261. Readln(TextF, Str1);
  262. If (Length(Str1) < 1) Then
  263. Begin
  264. Writeln('Ошибка ввода! Введите ключ Str1 с клавиатуры!');
  265. Str1 := ReadFirstKeyFromConsole();
  266. End
  267. Else
  268. Begin
  269. For I := 1 To Length(Str1) Do
  270. Begin
  271. If (Str1[I] = ' ') Then
  272. Begin
  273. IsCorrect := False;
  274. End;
  275. End;
  276. If (Not IsCorrect) Then
  277. Begin
  278. Writeln('Ключ не может содержать пробел! Введите ключ Str1 с клавиатуры.');
  279. Str1 := ReadFirstKeyFromConsole();
  280. End
  281. End;
  282.  
  283. Writeln('Ключ 1: ', Str1);
  284.  
  285. IsCorrect := True;
  286. Writeln('Запись ключа str2...');
  287. Readln(TextF, Str2);
  288. If (Length(Str2) < 1) Then
  289. Begin
  290. Writeln('Ошибка ввода! Введите ключ Str2 с клавиатуры!');
  291. Str1 := ReadSecondKeyFromConsole();
  292. End
  293. Else
  294. Begin
  295. For I := 1 To Length(Str2) Do
  296. Begin
  297. If (Str2[I] = ' ') Then
  298. Begin
  299. IsCorrect := False;
  300. End;
  301. End;
  302. If (Not IsCorrect) Then
  303. Begin
  304. Writeln('Ключ не может содержать пробел! Введите ключ Str2 с клавиатуры.');
  305. Str2 := ReadSecondKeyFromConsole();
  306. End
  307. End;
  308.  
  309. Writeln('Ключ 2: ', Str2);
  310. Repeat
  311. IsCorrect := True;
  312. If (Length(Str1) <> Length(Str2)) Then
  313. Begin
  314. Writeln('Ключи должны иметь одинаковую длину! Введите корректные ключи с клавиатуры!');
  315. IsCorrect := False;
  316. Str1 := ReadFirstKeyFromConsole();
  317. Str2 := ReadSecondKeyFromConsole();
  318. End;
  319. Until IsCorrect;
  320.  
  321. CloseFile(TextF);
  322.  
  323. SetLength(Keys, 2);
  324. Keys[0] := Str1;
  325. Keys[1] := Str2;
  326.  
  327. InputKeyFromFile := Keys;
  328. End;
  329.  
  330. Function InputFromFile() : TStrings;
  331.  
  332. Var
  333. TextF : TextFile;
  334. Path, Str : String;
  335. Strings, Keys : TStrings;
  336.  
  337.  
  338. Begin
  339. Path := ChoicePath();
  340.  
  341. Str := InputStrFromFile(TextF, Path);
  342. Keys := InputKeyFromFile(TextF, Path);
  343.  
  344. SetLength(Strings, 3);
  345. Strings[0] := Str;
  346. Strings[1] := Keys[0];
  347. Strings[2] := Keys[1];
  348.  
  349. InputFromFile := Strings;
  350. End;
  351.  
  352. Function InputFromConsole() : TStrings;
  353.  
  354. Var
  355. Strings : TStrings;
  356. IsCorrect : Boolean;
  357. Str, Str1, Str2 : String;
  358.  
  359. Begin
  360. Repeat
  361. IsCorrect := True;
  362. Writeln('Введите строку, которую нужно перекодировать: ');
  363. Try
  364. Readln(Str);
  365. Except
  366. Writeln('Ошибка ввода! Текст слишком большой!');
  367. IsCorrect := False;
  368. End;
  369. Until IsCorrect;
  370.  
  371.  
  372. Repeat
  373. Str1 := ReadFirstKeyFromConsole();
  374. Str2 := ReadSecondKeyFromConsole();
  375. If (Length(Str1) <> Length(Str2)) Then
  376. Begin
  377. IsCorrect := False;
  378. Writeln('Ключи должны иметь одинаковую длину!');
  379. End;
  380.  
  381. Until IsCorrect;
  382.  
  383. SetLength(Strings, 3);
  384.  
  385. Strings[0] := Str;
  386. Strings[1] := Str1;
  387. Strings[2] := Str2;
  388.  
  389. InputFromConsole := Strings;
  390. End;
  391.  
  392. Function ChoiceOfInput() : TStrings;
  393.  
  394. Var
  395. Strings : TStrings;
  396. Choice : Integer;
  397. IsCorrect : Boolean;
  398. Begin
  399.  
  400. Repeat
  401. IsCorrect := True;
  402. Writeln('Выберите, откуда вводить данные. Введите 0, если с консоли; 1, если с файла');
  403. Try
  404. Readln(Choice);
  405. Except
  406. IsCorrect := False;
  407. End;
  408. If ((Not IsCorrect) Or ((Choice <> 0) And (Choice <> 1))) Then
  409. Begin
  410. Writeln('Неверный ввод данных!');
  411. IsCorrect := False;
  412. End;
  413. Until IsCorrect;
  414. If (Choice = 0) Then
  415. Strings := InputFromConsole()
  416. Else
  417. Strings := InputFromFile();
  418.  
  419. ChoiceOfInput := Strings;
  420. End;
  421.  
  422. Var
  423. Strings : TStrings;
  424. Str : String;
  425.  
  426. Begin
  427. OutputTask();
  428. Strings := ChoiceOfInput();
  429. Strings := Coding(Strings);
  430. OutputAnswer(Strings);
  431. End.
  432.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement