Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Lab3_2;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils;
- type
- TSetOfChar = set of Char;
- function InputFromKeyboard() : AnsiString;
- var
- Input : AnsiString;
- IsCorrect : Boolean;
- begin
- IsCorrect := False;
- WriteLn('Введите последовательность символов : ');
- repeat
- ReadLn(Input);
- if Input = '' then
- WriteLn ('Ошибка! Вы ввели пустую последовательность!' +
- ' Попробуйте еще раз :')
- else
- IsCorrect := True;
- until IsCorrect;
- InputFromKeyboard := Input;
- end;
- function InputFromFile() : AnsiString;
- var
- TxtFile : TextFile;
- Input : AnsiString;
- FileName : string;
- IsCorrect : Boolean;
- begin
- IsCorrect := False;
- repeat
- WriteLn('Введите имя текстового (.txt) файла, ',
- 'из которого желаете ввести последовательность символов :');
- ReadLn(FileName);
- FileName := FileName + '.txt';
- if FileExists(FileName) then
- begin
- AssignFile(TxtFile, FileName);
- try
- Reset(TxtFile);
- ReadLn(TxtFile, Input);
- IsCorrect := True;
- except
- WriteLn('Ошибка чтения файла!');
- end;
- if Input = '' then
- begin
- IsCorrect := False;
- Close(TxtFile);
- WriteLn('Данный файл пуст!');
- end
- end
- else
- WriteLn('Файл ', FileName,' не существует!');
- until IsCorrect;
- WriteLn('Введенная последовательность : ', Input);
- Close(TxtFile);
- InputFromFile := Input;
- end;
- procedure OutputToConsole(ResultSet : TSetOfChar);
- var
- i, Counter : Byte;
- Check : Char;
- begin
- Counter := 0;
- WriteLn ('Полученное множество : ');
- if ResultSet = [] then
- WriteLn('Множество пусто, так как во введенной строке нет ' +
- 'ни одного знака арифметической операции, скобки или четного числа.')
- else
- begin
- Write('[');
- for Check := Chr(0) to Chr(255) do
- if Check in ResultSet then
- Write(' ', Check, ' ');
- Write(']');
- end
- end;
- procedure OutputToFile(ResultSet : TSetOfChar);
- var
- TxtFile : TextFile;
- i : Byte;
- FileName : string;
- IsCorrect : Boolean;
- Check : Char;
- begin
- IsCorrect := False;
- repeat
- WriteLn ('Введите имя текстового (.txt) файла, ',
- 'в который вы хотите вывести данные :');
- ReadLn(FileName);
- FileName := FileName + '.txt';
- AssignFile(TxtFile, FileName);
- try
- ReWrite(TxtFile);
- IsCorrect := True;
- except
- WriteLn('Ошибка записи файла! Введите ',
- 'другое имя файла.');
- end;
- until IsCorrect;
- WriteLn ('Полученное множество : ');
- if ResultSet = [] then
- begin
- WriteLn('Множество пусто, так как во введенной строке нет ни ' +
- 'одного знака арифметической операции, скобки или четного числа');
- WriteLn(TxtFile, 'Множество пусто, так как во введенной строке нет' +
- ' ни одного знака арифметической операции, скобки или четного числа');
- end
- else
- begin
- Write('[');
- Write(TxtFile, '[');
- for Check := Chr(0) to Chr(255) do
- begin
- if Check in ResultSet then
- begin
- Write(' ', Check, ' ');
- Write(TxtFile, ' ', Check, ' ');
- end;
- end;
- Write(']');
- Write(TxtFile, ']');
- WriteLn;
- end;
- Close(TxtFile);
- WriteLn('Результат успешно записан в файл ', FileName);
- end;
- procedure BuidNewSet (Input : AnsiString; var ResultSet : TSetOfChar);
- const
- DefaultSet =
- ['2', '4', '6', '8', '(', ')', '+', '-', '/', '*', '<', '>', '='];
- var
- i, HighBorder: Byte;
- begin
- HighBorder := Length(Input) + 1;
- i := 1;
- while i < HighBorder do
- begin
- if Input[i] in DefaultSet then
- begin
- Include(ResultSet, Input[i]);
- Inc(i);
- end
- else
- Inc(i);
- end;
- end;
- function UserChoiceForInput() : AnsiString;
- var
- Choice : Byte;
- IsCorrect : Boolean;
- Input : AnsiString;
- begin
- Choice := 0;
- repeat
- WriteLn('Если Вы желаете ввести строку вручную - введите 1.' + #10#13 +
- 'Если Вы желаете ввести строку из файла - введите 2.');
- IsCorrect := True;
- try
- ReadLn(Choice);
- except
- end;
- case Choice of
- 1 : Input := InputFromKeyboard();
- 2 : Input := InputFromFile();
- else
- begin
- IsCorrect := False;
- WriteLn('Ошибка ввода! Введите 1 или 2.');
- end;
- end;
- until IsCorrect;
- UserChoiceForInput := Input;
- end;
- procedure UserChoiceForOutput(ResultSet : TSetOfChar);
- var
- Choice : Byte;
- IsCorrect : Boolean;
- begin
- Choice := 0;
- repeat
- WriteLn('Если Вы желаете вывести результат в консоль - введите 1.' + #10#13 +
- 'Если Вы желаете вывести результат в файл - введите 2.');
- IsCorrect := True;
- try
- ReadLn(Choice);
- except
- end;
- case Choice of
- 1 : OutputToConsole(ResultSet);
- 2 : OutputToFile(ResultSet);
- else
- begin
- IsCorrect := False;
- WriteLn('Ошибка ввода! Введите 1 или 2.');
- end;
- end;
- until IsCorrect;
- end;
- procedure Main();
- var
- Input : AnsiString;
- ResultSet : TSetOfChar;
- begin
- WriteLn('Данная программа на основе введенной последовательности символов'+
- ' строит и выводит множество, состоящее из четных цифр, знаков'+
- ' арифметических операций и скобок, содержащихся в последовательности.');
- ResultSet := [];
- Input := UserChoiceForInput();
- BuidNewSet(Input, ResultSet);
- UserChoiceForOutput(ResultSet);
- ReadLn;
- end;
- begin
- Main();
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement