Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Lab_3_2;
- {$APPTYPE CONSOLE}
- {$R *.res}
- Uses
- System.SysUtils;
- Type
- TSet = Set Of Char;
- Var
- Choice: Integer;
- Answer: TSet;
- Sequence: AnsiString;
- Procedure WriteTask();
- Begin
- Writeln('Данная программа строит и печатает множество, элементами которого являются встречающиеся в последовательности скобки: () [] {} и цифры');
- End;
- Function TakeCharacterSequenceFromConsole(): AnsiString;
- Const
- MIN_LENGTH = 1;
- MAX_LENGTH = 255;
- Var
- Sequence: AnsiString;
- I: Integer;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Write('Введите непустую последовательность: ');
- Try
- Readln(Sequence);
- Except
- IsCorrect := False;
- Writeln('Произошла ошибка ввода. Повторите попытку...');
- End;
- Until (IsCorrect);
- TakeCharacterSequenceFromConsole := Sequence;
- 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;
- Function TakeCharacterSequenceFromFile(): AnsiString;
- Const
- MIN_LENGTH = 1;
- MAX_LENGTH = 255;
- Var
- Sequence: AnsiString;
- Path: String;
- IsCorrect: Boolean;
- F: TextFile;
- Begin
- Writeln('Требуется файл для чтения строки.');
- Path := TakePathToFile();
- Repeat
- IsCorrect := True;
- AssignFile(F, Path);
- Try
- Reset(F);
- Try
- Readln(F, Sequence);
- Finally
- CloseFile(F);
- End
- Except
- IsCorrect := False;
- Write('Произошла ошибка доступа к файлу. ');
- Writeln('Повторите попытку. Заново введите путь к файлу: ');
- Path := TakePathToFile();
- End;
- Until (IsCorrect);
- Writeln('Полученная строка: ', Sequence);
- TakeCharacterSequenceFromFile := Sequence;
- End;
- Function GetSearchСharactersSet(Sequence: AnsiString): TSet;
- Const
- SearchCharacters = [#40, #41, #91, #93, #123, #125, #48..#57];
- Var
- SearchSet: TSet;
- I: Integer;
- Begin
- SearchSet := [];
- For I := 1 To Length(Sequence) Do
- If Sequence[I] In SearchCharacters Then
- Include(SearchSet, Sequence[I]);
- GetSearchСharactersSet := SearchSet;
- End;
- Procedure OutputSetInConsole(CharactersSet: TSet);
- Var
- I: Integer;
- Begin
- If CharactersSet <> [] Then
- Begin
- For I := 0 To 255 Do
- If Chr(I) In CharactersSet Then
- Write(Chr(I), ' ');
- Writeln;
- End
- Else
- Writeln('В строке не было найдено скобок и цифр.');
- End;
- Procedure OutputSetInFile(CharactersSet: TSet);
- Var
- I: Integer;
- F: TextFile;
- Path: String;
- IsCorrect: Boolean;
- Begin
- Writeln('Требуется файл для записи искомого множества.');
- Path := TakePathToFile();
- Repeat
- IsCorrect := True;
- AssignFile(F, Path);
- Try
- Rewrite(F);
- Try
- If (CharactersSet <> []) Then
- Begin
- I := 0;
- While (IsCorrect) And (I In [0..255]) Do
- Begin
- If Chr(I) In CharactersSet Then
- Begin
- Write(F, Chr(I));
- Write(F, ' ');
- End;
- Inc(I);
- End;
- End
- Else
- Write(F, 'В последовательности не были найдены искомые символы.');
- Finally
- CloseFile(F);
- End;
- Except
- IsCorrect := False;
- Write('Произошла ошибка доступа к файлу. ');
- Writeln('Повторите попытку. Заново введите путь к файлу: ');
- Path := TakePathToFile();
- End;
- Until (IsCorrect);
- Writeln('Множество записано в файл!');
- End;
- Function ChooseInputOutputMethod(): Integer;
- Var
- IsCorrect: Boolean;
- Choice: Integer;
- Begin
- Repeat
- IsCorrect := True;
- Try
- Readln(Choice);
- Except
- Writeln ('Число введено некорректно. Повторите попытку...');
- IsCorrect := False;
- End;
- If (IsCorrect) And (Choice <> 1) And (Choice <> 2) Then
- Begin
- Writeln ('Введите либо 1, либо 2. Ваш выбор: ');
- IsCorrect := False;
- End;
- Until (IsCorrect);
- ChooseInputOutputMethod := Choice;
- End;
- Function GetCharacterSequence(Choice: Integer): AnsiString;
- Var
- Sequence: AnsiString;
- Begin
- If (Choice = 1) Then
- Sequence := TakeCharacterSequenceFromConsole()
- Else
- Sequence := TakeCharacterSequenceFromFile();
- GetCharacterSequence := Sequence;
- End;
- Procedure OutputResult(Choice: Integer; Answer: TSet);
- Begin
- If (Choice = 1) Then
- OutputSetInConsole(Answer)
- Else
- OutputSetInFile(Answer);
- End;
- Begin
- WriteTask();
- Write('Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ');
- Choice := ChooseInputOutputMethod();
- Sequence := GetCharacterSequence(Choice);
- Answer := GetSearchСharactersSet(Sequence);
- Write('Выберите способ вывода данных (1 - через консоль, 2 - с помощью файлов): ');
- Choice := ChooseInputOutputMethod();
- OutputResult(Choice, Answer);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement