Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program LabStr;
- Uses
- System.SysUtils;
- Procedure OutputAnswer(Str : String; Num : Integer);
- Var
- IsCorrect : Boolean;
- Path : String;
- TextF : TextFile;
- Begin
- Writeln('Самое короткое слово: ', Str );
- Writeln('Начинается оно с символа ', Num);
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла для вывода: ');
- Try
- Readln(Path);
- AssignFile(TextF, Path);
- Reset(TextF);
- Except
- IsCorrect := False;
- End;
- If (Not IsCorrect Or ((Path[Length(Path)] <> 't') And (Path[Length(Path) - 1] <> 'x') And
- (Path[Length(Path) - 2] <> 't') And (Path[Length(Path) - 3] <> '.'))) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка открытия файла! Учтите, что файл должен быть формата *.txt');
- End;
- Until IsCorrect;
- Append(TextF);
- Writeln(TextF);
- Writeln(TextF, 'Самое короткое слово: ', Str );
- Writeln(TextF, 'Начинается оно с символа ', Num);
- CloseFile(TextF);
- Writeln('Данные успешно записаны в файл!');
- Readln;
- End;
- Procedure OutputTask();
- Begin
- Writeln('Данная программа ищет самое короткое слово в тексте.');
- End;
- Function ChoicePath() : String;
- Var
- Path : String;
- TextF : TextFile;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите путь файла: ');
- Try
- Readln(Path);
- AssignFile(TextF, Path);
- Reset(TextF);
- Except
- IsCorrect := False;
- End;
- If (Not IsCorrect Or (Path[Length(Path)] <> 't') And (Path[Length(Path) - 1] <> 'x') And (Path[Length(Path) - 2] <> 't') And (Path[Length(Path) - 3] <> '.')) Then
- Begin
- Writeln('Неверный путь файла!');
- IsCorrect := False;
- End;
- Until IsCorrect;
- Writeln('Файл успешно открыт!');
- ChoicePath := Path;
- CloseFile(TextF);
- End;
- Function InputFromConsole() : String;
- Var
- Str : String;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите предложение: ');
- Try
- Readln(Str);
- Except
- Writeln('Ошибка ввода! Текст слишком большой!');
- IsCorrect := False;
- End;
- If ((Length(Str) < 1) or ((Str[1] = ' ') and (Length(Str) > 0))) Then
- Begin
- IsCorrect := False;
- Writeln('Текст должен содержать минимум 1 символ!');
- End;
- Until IsCorrect;
- InputFromConsole := Str
- End;
- Function InputStrFromFile(var TextF : TextFile; Path : String) : String;
- Var
- Str : String;
- Begin
- AssignFile(TextF, Path);
- Reset(TextF);
- Writeln('Запись строки...');
- Readln(TextF, Str);
- If Length(Str) < 1 Then
- Begin
- Writeln('Ошибка ввода! Строка должна иметь хотя бы 1 символ! Введите строку с клавиатуры.');
- Str := InputFromConsole();
- End;
- Writeln('Введенная строка: ', Str);
- CloseFile(TextF);
- InputStrFromFile := Str
- End;
- Function InputFromFile() : String;
- Var
- TextF : TextFile;
- Path, Str : String;
- Begin
- Path := ChoicePath();
- Str := InputStrFromFile(TextF, Path);
- InputFromFile := Str;
- End;
- Function ChoiceOfInput() : String;
- Var
- Str : String;
- Choice : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Выберите, откуда вводить данные. Введите 0, если с консоли; 1, если с файла');
- Try
- Readln(Choice);
- Except
- IsCorrect := False;
- End;
- If ((Not IsCorrect) Or ((Choice <> 0) And (Choice <> 1))) Then
- Begin
- Writeln('Неверный ввод данных!');
- IsCorrect := False;
- End;
- Until IsCorrect;
- If (Choice = 0) Then
- Str := InputFromConsole()
- Else
- Str := InputFromFile();
- ChoiceOfInput := Str;
- End;
- Function FindShortestWord(Str : String; Var NumOfWord : Integer) : String;
- Var
- StartPos, EndPos, CurrentLength: Integer;
- ShortestWord: String;
- IsFirstWord: Boolean;
- Begin
- StartPos := 1;
- ShortestWord := '';
- NumOfWord := -1;
- IsFirstWord := True;
- While StartPos <= Length(Str) Do
- Begin
- EndPos := StartPos;
- While (EndPos <= Length(Str)) And (Str[EndPos] <> ' ') Do
- Inc(EndPos);
- CurrentLength := EndPos - StartPos;
- If (CurrentLength > 0) And ( (IsFirstWord) Or (CurrentLength < Length(ShortestWord))) Then
- Begin
- ShortestWord := Copy(Str, StartPos, CurrentLength);
- NumOfWord := StartPos;
- IsFirstWord := False;
- End;
- StartPos := EndPos + 1;
- End;
- FindShortestWord := ShortestWord;
- end;
- Var
- Str, AnswerStr : String;
- NumOfWord : Integer;
- Begin
- OutputTask();
- Str := ChoiceOfInput();
- AnswerStr := FindShortestWord(Str, NumOfWord);
- OutputAnswer(AnswerStr, NumOfWord);
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement