Advertisement
ksyshshot

Lab.3.1**

Nov 22nd, 2022
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 8.40 KB | Source Code | 0 0
  1. Program Lab_3_1;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. Uses
  7.     System.SysUtils;
  8.  
  9. Var
  10.     IsForInputOutput: Boolean;
  11.     Choice: Integer;
  12.     FirstString, SecondString, Answer: String;
  13.  
  14. Procedure WriteTask();
  15. Begin
  16.     Writeln('Данная программа выполняет следующие операции над данными строками: ');
  17.     Writeln('1. Нахождение символов, встречающихся в обеих строках;');
  18.     Writeln('2. Нахождение символов, встречающихся только в первой строке;');
  19.     Writeln('3. Нахождение символов, встречающихся только во второй строке.');
  20. End;
  21.  
  22. Function TakeStringFromConsole(): String;
  23. Var
  24.     Str: String;
  25.     IsCorrect: Boolean;
  26. Begin
  27.     Repeat
  28.         IsCorrect := True;
  29.         Write('Введите непустую строку: ');
  30.         Try
  31.             Readln(Str);
  32.         Except
  33.             IsCorrect := False;
  34.             Writeln('Произошла ошибка ввода. Повторите попытку...');
  35.         End;
  36.         If (IsCorrect) And (Str = '') Then
  37.         Begin
  38.             IsCorrect := False;
  39.             Writeln('Введённая строка должна быть непустой! Повторите попытку...');
  40.         End;
  41.     Until (IsCorrect);
  42.     Writeln('Полученная строка: "', Str, '"');
  43.     TakeStringFromConsole := Str;
  44. End;
  45.  
  46. Function TakePathToFile(): String;
  47. Var
  48.     Path: String;
  49.     IsCorrect: Boolean;
  50.     F: TextFile;
  51. Begin
  52.     Repeat
  53.         IsCorrect := True;
  54.         Write('Введите путь к файлу: ');
  55.         Readln(Path);
  56.         AssignFile(F, Path);
  57.         If (Not(FileExists(Path))) Then
  58.         Begin
  59.             IsCorrect := False;
  60.             Writeln('Не удалось найти файл по заданному пути. Повторите попытку...');
  61.         End;
  62.     Until (IsCorrect);
  63.     TakePathToFile := Path;
  64. End;
  65.  
  66. Procedure TakeStringFromFile(Var FirstStr, SecStr: String; Var Choice: Integer);
  67. Var
  68.     Path: String;
  69.     IsCorrect: Boolean;
  70.     F: TextFile;
  71. Begin
  72.     Writeln('Требуется файл для чтения строки.');
  73.     Path := TakePathToFile();
  74.     Repeat
  75.         IsCorrect := True;
  76.         AssignFile(F, Path);
  77.         Try
  78.             Reset(F);
  79.             Try
  80.                 Readln(F, Choice);
  81.                 Readln(F, FirstStr);
  82.                 Readln(F, SecStr);
  83.             Finally
  84.                 CloseFile(F);
  85.             End;
  86.             If (Choice <> 1) And (Choice <> 2) And (Choice <> 3) Then
  87.             Begin
  88.                 IsCorrect := False;
  89.                 Writeln('Для выбора операции над строками введите либо 1, либо 2, либо 3');
  90.             End;
  91.             If (FirstStr = '') Or (SecStr = '') Then
  92.             Begin
  93.                 IsCorrect := False;
  94.                 Writeln('Введённая строка не должна быть пустой!');
  95.             End;
  96.         Except
  97.             IsCorrect := False;
  98.             Write('Произошла ошибка доступа к файлу. ');
  99.         End;
  100.         If Not(IsCorrect) Then
  101.         Begin
  102.             Writeln('Повторите попытку... ');
  103.             Path := TakePathToFile();
  104.         End;
  105.     Until (IsCorrect);
  106.     Writeln('Полученная первая строка: "', FirstStr, '"');
  107.     Writeln('Полученная вторая строка: "', SecStr, '"');
  108.     Writeln('Номер операции над строками: ', Choice);
  109. End;
  110.  
  111. Function ChooseMethod(IsForInputOutput: Boolean): Integer;
  112. Var
  113.     IsCorrect: Boolean;
  114.     Choice: Integer;
  115. Begin
  116.     Repeat
  117.         IsCorrect := True;
  118.         Try
  119.             Readln(Choice);
  120.         Except
  121.             Writeln ('Число введено некорректно. Повторите попытку...');
  122.             IsCorrect := False;
  123.         End;
  124.         If (IsCorrect) And (IsForInputOutput) And (Choice <> 1) And (Choice <> 2) Then
  125.         Begin
  126.             Writeln ('Введите либо 1, либо 2. Ваш выбор: ');
  127.             IsCorrect := False;
  128.         End;
  129.         If (IsCorrect) And Not(IsForInputOutput) And (Choice <> 1) And (Choice <> 2) And (Choice <> 3) Then
  130.         Begin
  131.             Write('Введите либо 1, либо 2, либо 3. Ваш выбор: ');
  132.             IsCorrect := False;
  133.         End;
  134.     Until (IsCorrect);
  135.     ChooseMethod := Choice;
  136. End;
  137.  
  138. Procedure GetString(Var FirstStr, SecStr: String; Var Choice: Integer);
  139. Var
  140.     IsForInputOutput: Boolean;
  141. Begin
  142.     IsForInputOutput := True;
  143.     Write('Введите способ получения строки(1 - через консоль, 2 - с помощью файла): ');
  144.     Choice := ChooseMethod(IsForInputOutput);
  145.     If (Choice = 1) Then
  146.     Begin
  147.         FirstStr := TakeStringFromConsole();
  148.         SecStr := TakeStringFromConsole();
  149.         IsForInputOutput := False;
  150.         Write('Введите номер операции: ');
  151.         Choice := ChooseMethod(IsForInputOutput);
  152.     End
  153.     Else
  154.         TakeStringFromFile(FirstStr, SecStr, Choice);
  155. End;
  156.  
  157. Function FindIntersectionOfStrings(FirstStr, SecStr: String): String;
  158. Var
  159.     Answer: String;
  160.     I: Integer;
  161. Begin
  162.     Answer := '';
  163.     For I := 1 To Length(FirstString) Do
  164.         If Pos(FirstString[I], SecondString) <> 0 Then
  165.             Answer := Answer + FirstString[I];
  166.     FindIntersectionOfStrings := Answer;
  167. End;
  168.  
  169. Function FindSpecialCharInString(FirstStr, SecStr: String): String;
  170. Var
  171.     Answer: String;
  172.     I: Integer;
  173. Begin
  174.     Answer := '';
  175.     For I := 1 To Length(FirstStr) Do
  176.         If Pos(FirstStr[I], SecStr) = 0 Then
  177.             Answer := Answer + FirstStr[I];
  178.     FindSpecialCharInString := Answer;
  179. End;
  180.  
  181. Function TakeAnswer(Choice: Integer; FirstString, SecondString: String): String;
  182. Var
  183.     Answer: String;
  184.     IsForInputOutput: Boolean;
  185. Begin
  186.     If Choice = 1 Then
  187.         Answer := FindIntersectionOfStrings(FirstString, SecondString)
  188.     Else
  189.         If Choice = 2 Then
  190.             Answer := FindSpecialCharInString(FirstString, SecondString)
  191.         Else
  192.             Answer := FindSpecialCharInString(SecondString, FirstString);
  193.     TakeAnswer := Answer;
  194. End;
  195.  
  196. Procedure OutputAnswerInFile(Answer: String);
  197. Var
  198.     Path: String;
  199.     IsCorrect: Boolean;
  200.     F: TextFile;
  201. Begin
  202.     Writeln('Требуется файл для записи строки.');
  203.     Path := TakePathToFile();
  204.     Repeat
  205.         IsCorrect := True;
  206.         AssignFile(F, Path);
  207.         Try
  208.             Rewrite(F);
  209.             Try
  210.                 If (Answer = '') Then
  211.                     Writeln(F, 'Искомых символов не найдено')
  212.                 Else
  213.                     Write(F, 'Искомая строка: "');
  214.                     Write(F, Answer);
  215.                     Writeln(F, '"');
  216.             Finally
  217.                 CloseFile(F);
  218.             End;
  219.         Except
  220.             IsCorrect := False;
  221.             Write('Произошла ошибка доступа к файлу. ');
  222.             Writeln('Повторите попытку. Заново введите путь к файлу: ');
  223.             Path := TakePathToFile();
  224.         End;
  225.     Until (IsCorrect);
  226.     Writeln('Ответ записан в файл!');
  227. End;
  228.  
  229. Procedure OutputAnswerInConsole(Answer: String);
  230. Begin
  231.     If (Answer = '') Then
  232.         Writeln('Искомых символов не найдено')
  233.     Else
  234.         Writeln('Полученная строка: "', Answer, '"');
  235. End;
  236.  
  237. Procedure OutputAnswer(Answer: String);
  238. Var
  239.     Choice: Integer;
  240.     IsForInputOutput: Boolean;
  241. Begin
  242.     Write('Выберите способ вывода полученной строки(1 - с помощью консоли, 2 - с помощью файлов): ');
  243.     IsForInputOutput := True;
  244.     Choice := ChooseMethod(IsForInputOutput);
  245.     If (Choice = 1) Then
  246.         OutputAnswerInConsole(Answer)
  247.     Else
  248.         OutputAnswerInFile(Answer);
  249. End;
  250.  
  251. Begin
  252.     WriteTask();
  253.     FirstString := '';
  254.     SecondString := '';
  255.     Choice := 0;
  256.     GetString(FirstString, SecondString, Choice);
  257.     Answer := TakeAnswer(Choice, FirstString, SecondString);
  258.     OutputAnswer(Answer);
  259.     Readln;
  260. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement