Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Lab_3_1;
- {$APPTYPE CONSOLE}
- {$R *.res}
- Uses
- System.SysUtils;
- Var
- IsForInputOutput: Boolean;
- Choice: Integer;
- FirstString, SecondString, Answer: String;
- Procedure WriteTask();
- Begin
- Writeln('Данная программа выполняет следующие операции над данными строками: ');
- Writeln('1. Нахождение символов, встречающихся в обеих строках;');
- Writeln('2. Нахождение символов, встречающихся только в первой строке;');
- Writeln('3. Нахождение символов, встречающихся только во второй строке.');
- End;
- Function TakeStringFromConsole(): String;
- Var
- Str: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Write('Введите непустую строку: ');
- Try
- Readln(Str);
- Except
- IsCorrect := False;
- Writeln('Произошла ошибка ввода. Повторите попытку...');
- End;
- If (IsCorrect) And (Str = '') Then
- Begin
- IsCorrect := False;
- Writeln('Введённая строка должна быть непустой! Повторите попытку...');
- End;
- Until (IsCorrect);
- Writeln('Полученная строка: "', Str, '"');
- TakeStringFromConsole := Str;
- End;
- Function TakePathToFile(): String;
- Var
- Path: String;
- IsCorrect: Boolean;
- F: TextFile;
- Begin
- Repeat
- IsCorrect := True;
- Write('Введите путь к файлу: ');
- Readln(Path);
- AssignFile(F, Path);
- If (Not(FileExists(Path))) Then
- Begin
- IsCorrect := False;
- Writeln('Не удалось найти файл по заданному пути. Повторите попытку...');
- End;
- Until (IsCorrect);
- TakePathToFile := Path;
- End;
- Procedure TakeStringFromFile(Var FirstStr, SecStr: String; Var Choice: Integer);
- Var
- Path: String;
- IsCorrect: Boolean;
- F: TextFile;
- Begin
- Writeln('Требуется файл для чтения строки.');
- Path := TakePathToFile();
- Repeat
- IsCorrect := True;
- AssignFile(F, Path);
- Try
- Reset(F);
- Try
- Readln(F, Choice);
- Readln(F, FirstStr);
- Readln(F, SecStr);
- Finally
- CloseFile(F);
- End;
- If (Choice <> 1) And (Choice <> 2) And (Choice <> 3) Then
- Begin
- IsCorrect := False;
- Writeln('Для выбора операции над строками введите либо 1, либо 2, либо 3');
- End;
- If (FirstStr = '') Or (SecStr = '') Then
- Begin
- IsCorrect := False;
- Writeln('Введённая строка не должна быть пустой!');
- End;
- Except
- IsCorrect := False;
- Write('Произошла ошибка доступа к файлу. ');
- End;
- If Not(IsCorrect) Then
- Begin
- Writeln('Повторите попытку... ');
- Path := TakePathToFile();
- End;
- Until (IsCorrect);
- Writeln('Полученная первая строка: "', FirstStr, '"');
- Writeln('Полученная вторая строка: "', SecStr, '"');
- Writeln('Номер операции над строками: ', Choice);
- End;
- Function ChooseMethod(IsForInputOutput: Boolean): Integer;
- Var
- IsCorrect: Boolean;
- Choice: Integer;
- Begin
- Repeat
- IsCorrect := True;
- Try
- Readln(Choice);
- Except
- Writeln ('Число введено некорректно. Повторите попытку...');
- IsCorrect := False;
- End;
- If (IsCorrect) And (IsForInputOutput) And (Choice <> 1) And (Choice <> 2) Then
- Begin
- Writeln ('Введите либо 1, либо 2. Ваш выбор: ');
- IsCorrect := False;
- End;
- If (IsCorrect) And Not(IsForInputOutput) And (Choice <> 1) And (Choice <> 2) And (Choice <> 3) Then
- Begin
- Write('Введите либо 1, либо 2, либо 3. Ваш выбор: ');
- IsCorrect := False;
- End;
- Until (IsCorrect);
- ChooseMethod := Choice;
- End;
- Procedure GetString(Var FirstStr, SecStr: String; Var Choice: Integer);
- Var
- IsForInputOutput: Boolean;
- Begin
- IsForInputOutput := True;
- Write('Введите способ получения строки(1 - через консоль, 2 - с помощью файла): ');
- Choice := ChooseMethod(IsForInputOutput);
- If (Choice = 1) Then
- Begin
- FirstStr := TakeStringFromConsole();
- SecStr := TakeStringFromConsole();
- IsForInputOutput := False;
- Write('Введите номер операции: ');
- Choice := ChooseMethod(IsForInputOutput);
- End
- Else
- TakeStringFromFile(FirstStr, SecStr, Choice);
- End;
- Function FindIntersectionOfStrings(FirstStr, SecStr: String): String;
- Var
- Answer: String;
- I: Integer;
- Begin
- Answer := '';
- For I := 1 To Length(FirstString) Do
- If Pos(FirstString[I], SecondString) <> 0 Then
- Answer := Answer + FirstString[I];
- FindIntersectionOfStrings := Answer;
- End;
- Function FindSpecialCharInString(FirstStr, SecStr: String): String;
- Var
- Answer: String;
- I: Integer;
- Begin
- Answer := '';
- For I := 1 To Length(FirstStr) Do
- If Pos(FirstStr[I], SecStr) = 0 Then
- Answer := Answer + FirstStr[I];
- FindSpecialCharInString := Answer;
- End;
- Function TakeAnswer(Choice: Integer; FirstString, SecondString: String): String;
- Var
- Answer: String;
- IsForInputOutput: Boolean;
- Begin
- If Choice = 1 Then
- Answer := FindIntersectionOfStrings(FirstString, SecondString)
- Else
- If Choice = 2 Then
- Answer := FindSpecialCharInString(FirstString, SecondString)
- Else
- Answer := FindSpecialCharInString(SecondString, FirstString);
- TakeAnswer := Answer;
- End;
- Procedure OutputAnswerInFile(Answer: String);
- Var
- Path: String;
- IsCorrect: Boolean;
- F: TextFile;
- Begin
- Writeln('Требуется файл для записи строки.');
- Path := TakePathToFile();
- Repeat
- IsCorrect := True;
- AssignFile(F, Path);
- Try
- Rewrite(F);
- Try
- If (Answer = '') Then
- Writeln(F, 'Искомых символов не найдено')
- Else
- Write(F, 'Искомая строка: "');
- Write(F, Answer);
- Writeln(F, '"');
- Finally
- CloseFile(F);
- End;
- Except
- IsCorrect := False;
- Write('Произошла ошибка доступа к файлу. ');
- Writeln('Повторите попытку. Заново введите путь к файлу: ');
- Path := TakePathToFile();
- End;
- Until (IsCorrect);
- Writeln('Ответ записан в файл!');
- End;
- Procedure OutputAnswerInConsole(Answer: String);
- Begin
- If (Answer = '') Then
- Writeln('Искомых символов не найдено')
- Else
- Writeln('Полученная строка: "', Answer, '"');
- End;
- Procedure OutputAnswer(Answer: String);
- Var
- Choice: Integer;
- IsForInputOutput: Boolean;
- Begin
- Write('Выберите способ вывода полученной строки(1 - с помощью консоли, 2 - с помощью файлов): ');
- IsForInputOutput := True;
- Choice := ChooseMethod(IsForInputOutput);
- If (Choice = 1) Then
- OutputAnswerInConsole(Answer)
- Else
- OutputAnswerInFile(Answer);
- End;
- Begin
- WriteTask();
- FirstString := '';
- SecondString := '';
- Choice := 0;
- GetString(FirstString, SecondString, Choice);
- Answer := TakeAnswer(Choice, FirstString, SecondString);
- OutputAnswer(Answer);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement