Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program laba_3_1_del;
- uses
- System.SysUtils;
- const
- MES_TASK = 'В заданном тексте в каждом четном слове заменить все строчные буквенные символы на прописные, а каждое нечетное слово заключить в круглые скобки.';
- ERROR_FILE_NOT_FOUND = 'Файл не найден.';
- MES_INPUT_OF_PATH = 'Пожалуйста, введите путь к файлу';
- MES_ASK_INPUT_METHOD = 'Откуда брать данные?' + #10 + #13 + '1 - из файла' + #10 + #13 + '2 - ввести вручную';
- MES_ASK_AGAIN_INPUT_METHOD = '"1" - повторить попытку.' + #10 + #13 + '"2" - ввести данные из консоли.';
- ERROR_FILE_CANNOT_BE_READ_OR_IS_EMPTY = 'Файл не может быть прочитан или пуст.';
- MES_ASK_OUTPUT_TO_FILE = 'Хотите вывести ответ в файл?' + #10 + #13 + '1 - да' + #10 + #13 + '2 - нет';
- ERROR_FILE_CANNOT_BE_CREATED_OT_OPENED = 'Файл не может быть создан или открыт. Повторите попытку:';
- ERROR_CHOICE_IS_INCORRECT = 'Надо ввести "1" или "2".' + #10 + #13 + 'Повторите попытку: ';
- function Choose(SChoice1: String; SChoice2: String; SQuestion: String) : String;
- var
- NChoice: ShortInt;
- BIsCorrect: Boolean;
- SAnswer: String;
- begin
- NChoice := 2;
- writeln(sQuestion, #10 + #13 + 'Ваш выбор: ');
- repeat
- BIsCorrect := true;
- try
- readln(NChoice);
- except
- BIsCorrect := false;
- end;
- if (BIsCorrect and (nChoice <> 1) and (nChoice <> 2)) then
- BIsCorrect := false;
- if (not BIsCorrect) then
- writeln(ERROR_CHOICE_IS_INCORRECT);
- until (BIsCorrect);
- if (NChoice = 1) then
- SAnswer := sChoice1
- else
- SAnswer := sChoice2;
- Choose := SAnswer;
- end;
- function InputPathToFile(IsInput: Boolean) : String;
- var
- SPartOfText, SPath: String;
- begin
- if (IsInput) then
- SPartOfText := 'ввода'
- else
- SPartOfText := 'вывода';
- writeln('Пожалуйста, введите путь к файлу ', SPartOfText, ': ');
- readln(SPath);
- InputPathToFile := SPath;
- end;
- function ReadStringFromFile(SPathToFile: String; var MyError: ShortInt) : String;
- var
- FInput: TextFile;
- SInput, SString: String;
- begin
- SInput := '';
- if (FileExists(SPathToFile)) then
- try
- AssignFile(FInput, SPathToFile);
- Reset(FInput);
- except
- MyError := 1;
- end
- else
- MyError := 1;
- if (MyError = 0) then
- begin
- if (Eof(FInput)) then
- MyError := 2
- else
- repeat
- readln(FInput, SString);
- SInput := SInput + SString + #10#13;
- until (EoF(FInput));
- CloseFile(FInput);
- end;
- ReadStringFromFile := SInput;
- end;
- function ReadStringFromConsole() : String;
- var
- SInput: String;
- begin
- writeln('Введите строку:');
- readln(SInput);
- readStringFromConsole := SInput;
- end;
- function GetInput() : String;
- var
- SInput, SInputMethod, SPathToFile: String;
- BInputIsDone: Boolean;
- MyError: ShortInt;
- begin
- SInput := '';
- BInputIsDone := false;
- SInputMethod := Choose('FromFile', 'FromConsole', MES_ASK_INPUT_METHOD);
- repeat
- if (SInputMethod = 'FromFile') then
- begin
- MyError := 0;
- SPathToFile := InputPathToFile(true);
- SInput := ReadStringFromFile(SPathToFile, MyError);
- if (MyError > 0) then
- begin
- case MyError of
- 1: writeln(ERROR_FILE_NOT_FOUND);
- 2: writeln(ERROR_FILE_CANNOT_BE_READ_OR_IS_EMPTY);
- end;
- SInputMethod := choose('FromFile', 'FromConsole', MES_ASK_AGAIN_INPUT_METHOD);
- end
- else
- BInputIsDone := true;
- end
- else
- begin
- SInput := ReadStringFromConsole();
- BInputIsDone := true;
- end
- until (BInputIsDone);
- GetInput := SInput;
- end;
- procedure AddOneWordInStringAns(var i, NWord: Integer; var BFirstWordInRow: Boolean; var SAnswer, SWord: String; Sinput: String; ChChar: Char);
- begin
- if (NWord mod 2 = 0) then
- begin
- if BFirstWordInRow then
- begin
- SAnswer := SAnswer + #13;
- BFirstWordInRow := false;
- end;
- if (i = Length(SInput)) then
- SAnswer := SAnswer + UpperCase(SWord + ChChar)
- else
- SAnswer := SAnswer + UpperCase(SWord) + ChChar;
- end
- else
- begin
- if BFirstWordInRow then
- begin
- SAnswer := SAnswer + #13;
- BFirstWordInRow := false;
- end;
- if (i = Length(SInput)) then
- SAnswer := SAnswer + '(' + SWord + ChChar + ')'
- else
- SAnswer := SAnswer + '(' + SWord + ')' + ChChar;
- end;
- if (ChChar = #10) then
- begin
- BFirstWordInRow := true;
- Inc(i);
- end;
- SWord := '';
- Inc(NWord);
- end;
- function ChangeStringToAns(SInput: String) : String;
- var
- SAnswer, SWord: String;
- ChChar: Char;
- i, NWord: Integer;
- BFirstWordInRow: Boolean;
- begin
- SAnswer := '';
- SWord := '';
- NWord := 1;
- BFirstWordInRow := true;
- i := 1;
- while (i <= Length(SInput)) do
- begin
- ChChar := SInput[i];
- if ((ChChar = ' ') or (ChChar = #10) or (i = Length(SInput))) then
- AddOneWordInStringAns(i, NWord, BFirstWordInRow, SAnswer, SWord, SInput, ChChar)
- else
- SWord := SWord + ChChar;
- Inc(i);
- end;
- ChangeStringToAns := SAnswer;
- end;
- procedure OutputToFile(SAnswer: String; SPathToFIle: String);
- var
- BOutputNotReady: Boolean;
- FOutput: TextFile;
- begin
- BOutputNotReady := true;
- repeat
- try
- AssignFile(FOutput, SPathToFIle);
- Rewrite(FOutput);
- writeln(FOutput, SAnswer);
- CloseFile(FOutput);
- BOutputNotReady := false;
- except
- writeln(ERROR_FILE_CANNOT_BE_CREATED_OT_OPENED);
- end;
- until (bOutputNotReady);
- end;
- procedure OutputAnswer(SAnswer: String);
- var
- SShouldOutputInfoToFile, SPathToFile: String;
- BOutputIsReady: Boolean;
- begin
- writeln('Ответ:' + #10 + #13 + SAnswer);
- repeat
- BOutputIsReady := true;
- SShouldOutputInfoToFile := Choose('Output to file', 'Don''t output to file', MES_ASK_OUTPUT_TO_FILE);
- if (SShouldOutputInfoToFile = 'Output to file') then
- begin
- SPathToFile := InputPathToFile(false);
- if (FileExists(SPathToFile)) then
- OutputToFile(SAnswer, SPathToFile)
- else
- begin
- BOutputIsReady := false;
- writeln(ERROR_FILE_NOT_FOUND);
- end;
- end;
- until (BOutputIsReady);
- end;
- var
- SInput, SAnswer: String;
- begin
- writeln(MES_TASK);
- // Путь к моему файлу ввода: C:\Users\Aleksandr\Desktop\input.txt
- // Путь к моему файлу вывода: C:\Users\Aleksandr\Desktop\output.txt
- SInput := GetInput();
- SAnswer := ChangeStringToAns(SInput);
- OutputAnswer(SAnswer);
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment