Advertisement
ksyshshot

Lab.3.1*

Nov 22nd, 2022
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.89 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. Function TakeStringFromFile(): String;
  67. Var
  68.     Str, 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, Str);
  81.             Finally
  82.                 CloseFile(F);
  83.             End;
  84.             If (Str = '') Then
  85.             Begin
  86.                 IsCorrect := False;
  87.                 Writeln('Введённая строка не должна быть пустой!');
  88.             End;
  89.         Except
  90.             IsCorrect := False;
  91.             Writeln('Произошла ошибка доступа к файлу. ');
  92.             Write('Повторите попытку... ');
  93.             Path := TakePathToFile();
  94.         End;
  95.     Until (IsCorrect);
  96.     Writeln('Полученная строка: ', Str);
  97.     TakeStringFromFile := Str;
  98. End;
  99.  
  100. Function ChooseMethod(IsForInputOutput: Boolean): Integer;
  101. Var
  102.     IsCorrect: Boolean;
  103.     Choice: Integer;
  104. Begin
  105.     Repeat
  106.         IsCorrect := True;
  107.         Try
  108.             Readln(Choice);
  109.         Except
  110.             Writeln ('Число введено некорректно. Повторите попытку...');
  111.             IsCorrect := False;
  112.         End;
  113.         If (IsCorrect) And (IsForInputOutput) And (Choice <> 1) And (Choice <> 2) Then
  114.         Begin
  115.             Writeln ('Введите либо 1, либо 2. Ваш выбор: ');
  116.             IsCorrect := False;
  117.         End;
  118.         If (IsCorrect) And Not(IsForInputOutput) And (Choice <> 1) And (Choice <> 2) And (Choice <> 3) Then
  119.         Begin
  120.             Write('Введите либо 1, либо 2, либо 3. Ваш выбор: ');
  121.             IsCorrect := False;
  122.         End;
  123.     Until (IsCorrect);
  124.     ChooseMethod := Choice;
  125. End;
  126.  
  127. Function GetString(): String;
  128. Var
  129.     Choice: Integer;
  130.     Str: String;
  131.     IsForInputOutput: Boolean;
  132. Begin
  133.     IsForInputOutput := True;
  134.     Choice := ChooseMethod(IsForInputOutput);
  135.     If (Choice = 1) Then
  136.         Str := TakeStringFromConsole()
  137.     Else
  138.         Str := TakeStringFromFile();
  139.     GetString := Str;
  140. End;
  141.  
  142. Function FindIntersectionOfStrings(FirstStr, SecStr: String): String;
  143. Var
  144.     Answer: String;
  145.     I: Integer;
  146. Begin
  147.     Answer := '';
  148.     For I := 1 To Length(FirstString) Do
  149.         If Pos(FirstString[I], SecondString) <> 0 Then
  150.             Answer := Answer + FirstString[I];
  151.     FindIntersectionOfStrings := Answer;
  152. End;
  153.  
  154. Function FindSpecialCharInString(FirstStr, SecStr: String): String;
  155. Var
  156.     Answer: String;
  157.     I: Integer;
  158. Begin
  159.     Answer := '';
  160.     For I := 1 To Length(FirstStr) Do
  161.         If Pos(FirstStr[I], SecStr) = 0 Then
  162.             Answer := Answer + FirstStr[I];
  163.     FindSpecialCharInString := Answer;
  164. End;
  165.  
  166. Function TakeAnswer(Choice: Integer; FirstString, SecondString: String): String;
  167. Var
  168.     Answer: String;
  169.     IsForInputOutput: Boolean;
  170. Begin
  171.     If Choice = 1 Then
  172.         Answer := FindIntersectionOfStrings(FirstString, SecondString)
  173.     Else
  174.         If Choice = 2 Then
  175.             Answer := FindSpecialCharInString(FirstString, SecondString)
  176.         Else
  177.             Answer := FindSpecialCharInString(SecondString, FirstString);
  178.     TakeAnswer := Answer;
  179. End;
  180.  
  181. Procedure OutputAnswerInFile(Answer: String);
  182. Var
  183.     Path: String;
  184.     IsCorrect: Boolean;
  185.     F: TextFile;
  186. Begin
  187.     Writeln('Требуется файл для записи строки.');
  188.     Path := TakePathToFile();
  189.     Repeat
  190.         IsCorrect := True;
  191.         AssignFile(F, Path);
  192.         Try
  193.             Rewrite(F);
  194.             Try
  195.                 If (Answer = '') Then
  196.                     Writeln(F, 'Искомых символов не найдено')
  197.                 Else
  198.                     Write(F, 'Искомая строка: "');
  199.                     Write(F, Answer);
  200.                     Writeln(F, '"');
  201.             Finally
  202.                 CloseFile(F);
  203.             End;
  204.         Except
  205.             IsCorrect := False;
  206.             Write('Произошла ошибка доступа к файлу. ');
  207.             Writeln('Повторите попытку. Заново введите путь к файлу: ');
  208.             Path := TakePathToFile();
  209.         End;
  210.     Until (IsCorrect);
  211.     Writeln('Ответ записан в файл!');
  212. End;
  213.  
  214. Procedure OutputAnswerInConsole(Answer: String);
  215. Begin
  216.     If (Answer = '') Then
  217.         Writeln('Искомых символов не найдено')
  218.     Else
  219.         Writeln('Полученная строка: "', Answer, '"');
  220. End;
  221.  
  222. Procedure OutputAnswer(Answer: String);
  223. Var
  224.     Choice: Integer;
  225.     IsForInputOutput: Boolean;
  226. Begin
  227.     Write('Выберите способ вывода полученной строки(1 - с помощью консоли, 2 - с помощью файлов): ');
  228.     IsForInputOutput := True;
  229.     Choice := ChooseMethod(IsForInputOutput);
  230.     If (Choice = 1) Then
  231.         OutputAnswerInConsole(Answer)
  232.     Else
  233.         OutputAnswerInFile(Answer);
  234. End;
  235.  
  236. Begin
  237.     WriteTask();
  238.     Writeln('Необходимо ввести первую строку. Выберите способ ввода(1 - с помощью консоли, 2 - с помощью файлов)');
  239.     FirstString := GetString();
  240.     Writeln('Необходимо ввести вторую строку. Выберите способ ввода(1 - с помощью консоли, 2 - с помощью файлов)');
  241.     SecondString := GetString();
  242.     IsForInputOutput := False;
  243.     Write('Введите номер операции: ');
  244.     Choice := ChooseMethod(IsForInputOutput);
  245.     Answer := TakeAnswer(Choice, FirstString, SecondString);
  246.     OutputAnswer(Answer);
  247.     Readln;
  248. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement