Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Laba3_1;
- Uses
- Windows, System.SysUtils;
- Var
- IsCorrect: Boolean;
- Procedure PrintTask();
- Begin
- Writeln('Данная программа находит самое короткое слово в предложении и выводит позицию, с которой оно начинается.');
- End;
- Function SubString(Text: String; IndexBegin, IndexEnd: Integer): String;
- Var
- Res: String;
- I: Integer;
- Begin
- Res := '';
- For I := IndexBegin To IndexEnd Do
- Begin
- Res := Res + Text[I];
- End;
- SubString := Res;
- End;
- Function MinWordLen(Text: String; Var IndexBegin: Integer): String;
- Var
- MinWord, Word: String;
- Index, I: Integer;
- CheckPr: Boolean;
- Begin
- MinWord := Text;
- Word := '';
- Index := 1;
- For I := 1 To Length(Text) Do
- Begin
- CheckPr := False;
- If Text[I] = ' ' Then
- Begin
- CheckPr := True;
- Word := SubString(Text, Index, I - 1);
- End;
- If I = Length(Text) Then
- Begin
- Word := SubString(Text, Index, I);
- End;
- If (Length(MinWord) > Length(Word)) And (Length(Word) <> 0) Then
- Begin
- IndexBegin := Index;
- MinWord := Word;
- End;
- If CheckPr = True Then
- Begin
- Index := I + 1;
- End;
- End;
- MinWordLen := MinWord;
- End;
- Function IsCorrectPath(): String;
- Var
- Path: String;
- IsCorrect: Boolean;
- Begin
- Writeln('Введите путь к файлу:');
- Repeat
- IsCorrect := True;
- Readln(Path);
- If Not FileExists(Path) Then
- Begin
- IsCorrect := False;
- Writeln('Файл недоступен. Повторите ввод:');
- End
- Else If Not(ExtractFileExt(Path) = '.txt') Then
- Begin
- IsCorrect := False;
- Writeln('Неправильное расширение файла. Повторите ввод:');
- End;
- Until IsCorrect;
- IsCorrectPath := Path;
- End;
- Function PathForRead(): String;
- Var
- MyFile: TextFile;
- Path: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Path := IsCorrectPath();
- Try
- AssignFile(MyFile, Path);
- Reset(MyFile);
- Except
- IsCorrect := False;
- Writeln('Нет доступа к файлу. Измените настройки и повторите ввод.');
- End;
- CloseFile(MyFile);
- Until IsCorrect;
- PathForRead := Path;
- End;
- Function IsOpen(Path: String): Boolean;
- Var
- MyFile: TextFile;
- IsCorrect: Boolean;
- Begin
- IsCorrect := True;
- AssignFile(MyFile, Path);
- Try
- Rewrite(MyFile);
- Except
- Writeln('Ошибка. Файл пуст.');
- IsCorrect := False;
- Readln;
- End;
- CloseFile(MyFile);
- IsOpen := IsCorrect;
- End;
- Function PathForWrite(): String;
- Var
- Path: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Path := IsCorrectPath();
- If Not(IsOpen(Path)) Then
- IsCorrect := False;
- Until IsCorrect;
- PathForWrite := Path;
- End;
- Function Input(Var IsCorrect: Boolean): String;
- Var
- Str: String;
- Begin
- Readln(Str);
- If Str = '' Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка. Строка не может быть пустой.');
- End;
- Input := Str;
- End;
- Function ReadTextConsole(): String;
- Var
- Text: String;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите строку:');
- Text := Input(IsCorrect);
- Until IsCorrect;
- ReadTextConsole := Text;
- End;
- Function ReadTextFile(Var MyFile: TextFile; Var IsCorrect: Boolean): String;
- Var
- Text: String;
- Begin
- Readln(MyFile, Text);
- If Text = '' Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка.Файл пуст.');
- End;
- ReadTextFile := Text;
- End;
- Function ReadFile(): String;
- Var
- Path: String;
- MyFile: TextFile;
- Text: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Path := PathForRead();
- AssignFile(MyFile, Path);
- Reset(MyFile);
- Text := ReadTextFile(MyFile, IsCorrect);
- CloseFile(MyFile);
- Until IsCorrect;
- ReadFile := Text;
- End;
- Function ChooseAction(): String;
- Var
- Input: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Readln(Input);
- Input := LowerCase(Input);
- If (Input <> 'console') And (Input <> 'file') Then
- Begin
- Writeln('Ошибка. Введите "console" или "file".');
- IsCorrect := False;
- End;
- Until IsCorrect;
- ChooseAction := Input;
- End;
- Function ChooseInput(): String;
- Var
- Option: String;
- MyFile: TextFile;
- Text: String;
- Begin
- Writeln('Выберите способ ввода данных.', #13#10,
- 'Введите "console", если хотите ввести данные через консоль', #13#10,
- 'Введите "file", если хотите передать данные из файла');
- Option := ChooseAction();
- If Option = 'console' Then
- Begin
- Text := ReadTextConsole();
- End
- Else
- Text := ReadFile();
- ChooseInput := Text;
- End;
- Procedure WriteConsole(Text: String);
- Var
- IndexBeginWord: Integer;
- Res: String;
- Begin
- IndexBeginWord := 0;
- Res := MinWordLen(Text, IndexBeginWord);
- Writeln('Самое короткое слово в строке: ', Res);
- Writeln('Позиция, с которой оно начинается: ', IndexBeginWord);
- End;
- Procedure WriteFile(Text: String);
- Var
- MyFile: TextFile;
- Path, Res: String;
- IndexBeginWord: Integer;
- Begin
- Path := PathForWrite();
- AssignFile(MyFile, Path);
- Rewrite(MyFile);
- IndexBeginWord := 0;
- Res := MinWordLen(Text, IndexBeginWord);
- Writeln(MyFile, 'Самое короткое слово в строке: ', Res);
- Writeln(MyFile, 'Позиция, с которой оно начинается: ', IndexBeginWord);
- CloseFile(MyFile);
- Writeln('Информация успешно записана в файл.');
- End;
- Procedure ChooseOutput(Text: String);
- Var
- Option: String;
- Begin
- Writeln('Выберите способ вывода результата.', #13#10,
- 'Введите "console", если хотите вывести результат через консоль', #13#10,
- 'Введите "file", если хотите передать результат в файл');
- Option := ChooseAction;
- If Option = 'console' Then
- WriteConsole(Text)
- Else
- WriteFile(Text);
- End;
- Var
- Text: String;
- Begin
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- PrintTask();
- Text := ChooseInput();
- ChooseOutput(Text);
- Readln;
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement