Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Lab3_1;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils;
- type
- StringArray = array of string;
- function InputFromKeyboard() : string;
- var
- Input : string;
- IsCorrect : Boolean;
- begin
- IsCorrect := False;
- WriteLn('Введите строку символов : ');
- repeat
- ReadLn(Input);
- if Input = '' then
- WriteLn ('Ошибка! Вы ввели пустую строку! Попробуйте еще раз :')
- else
- IsCorrect := True;
- until IsCorrect;
- InputFromKeyboard := Input;
- end;
- function InputFromFile() : string;
- var
- TxtFile : TextFile;
- FileName, Input : 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(ResultArr : StringArray);
- var
- i, Counter : Byte;
- begin
- Counter := 0;
- WriteLn ('Результат : ');
- if Length(ResultArr) = 0 then
- WriteLn('Во введенной строке не содержится ни одного целого числа.')
- else
- begin
- for i := 0 to High(ResultArr) do
- begin
- if (ResultArr[i] <> '-') and (ResultArr[i] <> '+') then
- WriteLn(ResultArr[i])
- else
- Inc(Counter);
- end;
- if Counter = Length(ResultArr) then
- Writeln('Во введенной строке не содержится ни одного целого числа.');
- end;
- end;
- procedure OutputToFile(ResultArr : StringArray);
- var
- TxtFile : TextFile;
- i, Counter : Byte;
- FileName : string;
- IsCorrect : Boolean;
- begin
- IsCorrect := False;
- Counter := 0;
- repeat
- WriteLn ('Введите имя текстового (.txt) файла, ',
- 'в который вы хотите вывести данные :');
- ReadLn(FileName);
- FileName := FileName + '.txt';
- AssignFile(TxtFile, FileName);
- try
- ReWrite(TxtFile);
- IsCorrect := True;
- except
- WriteLn('Ошибка записи файла! Введите ',
- 'другое имя файла.');
- end;
- until IsCorrect;
- Writeln ('Результат : ');
- if Length(ResultArr) = 0 then
- begin
- WriteLn('Во введенной строке не содержится ни одного целого числа.');
- WriteLn(TxtFile, 'Во введенной строке не содержится ни одного целого числа.')
- end
- else
- begin
- for i := 0 to High(ResultArr) do
- begin
- if (ResultArr[i] <> '-') and (ResultArr[i] <> '+') then
- begin
- Writeln(ResultArr[i]);
- Writeln(TxtFile, ResultArr[i])
- end
- else
- Inc(Counter);
- end;
- if Counter = Length(ResultArr) then
- begin
- Writeln('Во введенной строке не содержится ни одного целого числа.');
- Writeln(TxtFile, 'Во введенной строке не содержится ни одного целого числа.');
- end;
- end;
- Close(TxtFile);
- WriteLn('Результат успешно записан в файл ', FileName);
- end;
- function SetResultArr(Input : string) : StringArray;
- var
- i, Counter : Byte;
- ResultArr : StringArray;
- begin
- Counter := 0;
- for i := 1 to Length(Input) do
- begin
- if (Input[i] = '+') or (Input[i] = '-') then
- Inc(Counter);
- end;
- SetLength(ResultArr, Counter);
- SetResultArr := ResultArr;
- end;
- procedure SelectionOfSubstrings (Input : string; var Output : StringArray);
- const
- Digits = ['0'..'9'];
- var
- i, HighBorder, j: Byte;
- begin
- j := 0;
- HighBorder := Length(Input) + 1;
- i := 1;
- while i < HighBorder do
- begin
- if (Input[i] = '+') or (Input[i] = '-') then
- begin
- Output[j] := Output[j] + Input[i];
- Inc(i);
- while Input[i] in Digits do
- begin
- Output[j] := Output[j] + Input[i];
- Inc(i);
- end;
- Inc(j);
- end
- else
- Inc(i);
- end;
- end;
- function UserChoiceForInput() : string;
- var
- Choice : Byte;
- IsCorrect : Boolean;
- Input : string;
- 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(ResultArr : StringArray);
- 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(ResultArr);
- 2 : OutputToFile(ResultArr);
- else
- begin
- IsCorrect := False;
- WriteLn('Ошибка ввода! Введите 1 или 2.');
- end;
- end;
- until IsCorrect;
- end;
- procedure Main();
- var
- Input : string;
- ResultArr : StringArray;
- begin
- WriteLn('Данная программа из введенной строки символов'+
- ' выделяет подстроку, состоящую из цифр, соответствующую'+
- ' целому числу');
- Input := UserChoiceForInput();
- ResultArr := SetResultArr(Input);
- SelectionOfSubstrings(Input, ResultArr);
- UserChoiceForOutput(ResultArr);
- ReadLn;
- end;
- begin
- Main();
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement