Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Laba3_2;
- Uses
- Windows, System.SysUtils;
- Type
- TSetChar = Set Of AnsiChar;
- Var
- IsCorrect: Boolean;
- Procedure PrintTask();
- Begin
- Writeln('Программа описывает множество гласных и согласных букв русского алфавита и формирует множество гласных и согласных букв из предложения');
- End;
- Function GetSetInText(StAlpha: TSetChar; Text: AnsiString): TSetChar;
- Var
- SetInText: TSetChar;
- I: Integer;
- Begin
- SetInText := [];
- For I := 1 To Length(Text) Do
- Begin
- If Text[I] In StAlpha Then
- Begin
- Include(SetInText, Text[I]);
- End;
- End;
- GetSetInText := SetInText;
- 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(): AnsiString;
- Var
- Path: String;
- MyFile: TextFile;
- 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): AnsiString;
- Var
- Str: AnsiString;
- Begin
- Readln(Str);
- If Str = '' Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка. Строка не может быть пустой.');
- End;
- Input := Str;
- End;
- Function ReadTextConsole(): AnsiString;
- Var
- Text: AnsiString;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Введите строку:');
- Text := Input(IsCorrect);
- Until IsCorrect;
- ReadTextConsole := Text;
- End;
- Function ReadTextFile(Var MyFile: TextFile; Var IsCorrect: Boolean): AnsiString;
- Var
- Text: AnsiString;
- Begin
- Readln(MyFile, Text);
- If Text = '' Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка.Файл пуст.');
- End;
- ReadTextFile := Text;
- End;
- Function ReadFile(): AnsiString;
- Var
- Path: String;
- MyFile: TextFile;
- Text: AnsiString;
- 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(): AnsiString;
- Var
- Option: String;
- MyFile: TextFile;
- Text: AnsiString;
- 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: AnsiString; Vowels, Consonants: TSetChar);
- Var
- CountAlphaConsonants, CountAlphaVowels: Integer;
- VowelsInText, ConsonantsInText: TSetChar;
- I: Integer;
- Alpha: AnsiString;
- Begin
- Alpha := 'ауюеэёоыибвгджзйлмнркпстфчхцшщ';
- VowelsInText := GetSetInText(Vowels, Text);
- CountAlphaVowels := 0;
- For I := 1 To Length(Alpha) Do
- Begin
- If Alpha[I] In VowelsInText Then
- Begin
- Inc(CountAlphaVowels);
- End;
- End;
- If CountAlphaVowels <> 0 Then
- Begin
- Writeln('Элементы в множестве гласных букв: ');
- For I := 1 to Length(Alpha) Do
- Begin
- If Alpha[I] In VowelsInText Then
- Begin
- Write(Alpha[I], ' ');
- End;
- End;
- Writeln;
- Writeln('Количество элементов в множестве гласных букв: ',
- CountAlphaVowels);
- End
- Else
- Writeln('В множестве гласных букв нет элементов.');
- ConsonantsInText := GetSetInText(Consonants, Text);
- CountAlphaConsonants := 0;
- For I := 1 To Length(Alpha) Do
- Begin
- If Alpha[I] In ConsonantsInText Then
- Begin
- Inc(CountAlphaConsonants);
- End;
- End;
- If CountAlphaConsonants <> 0 Then
- Begin
- Writeln('Элементы в множестве согласных букв: ');
- For I := 1 to Length(Alpha) Do
- Begin
- If Alpha[I] In ConsonantsInText Then
- Begin
- Write(Alpha[I], ' ');
- End;
- End;
- Writeln;
- Writeln('Количество элементов в множестве согласных букв: ',
- CountAlphaConsonants);
- End
- Else
- Writeln('В множестве согласных букв нет элементов.');;
- End;
- Procedure WriteFile(Text: AnsiString; Vowels, Consonants: TSetChar);
- Var
- CountAlphaConsonants, CountAlphaVowels: Integer;
- VowelsInText, ConsonantsInText: TSetChar;
- MyFile: TextFile;
- Path, Res: String;
- I: Integer;
- Alpha: AnsiString;
- Begin
- Path := PathForWrite();
- AssignFile(MyFile, Path);
- Rewrite(MyFile);
- Alpha := 'аяуюеэёоыибвгджзйлмнркпстфчхцшщ';
- VowelsInText := GetSetInText(Vowels, Text);
- CountAlphaVowels := 0;
- For I := 1 To Length(Alpha) Do
- Begin
- If Alpha[I] In VowelsInText Then
- Begin
- Inc(CountAlphaVowels);
- End;
- End;
- If CountAlphaVowels <> 0 Then
- Begin
- Writeln(MyFile, 'Элементы в множестве гласных букв: ');
- For I := 1 To Length(Alpha) Do
- Begin
- If Alpha[I] In VowelsInText Then
- Begin
- Write(MyFile, Alpha[I], ' ');
- End;
- End;
- Writeln(MyFile, '');
- Writeln(MyFile, 'Количество элементов в множестве гласных букв: ',
- CountAlphaVowels);
- End
- Else
- Writeln(MyFile, 'В множестве гласных букв нет элементов.');;
- ConsonantsInText := GetSetInText(Consonants, Text);
- CountAlphaConsonants := 0;
- For I := 1 To Length(Alpha) Do
- Begin
- If Alpha[I] In ConsonantsInText Then
- Begin
- Inc(CountAlphaConsonants);
- End;
- End;
- If CountAlphaConsonants <> 0 Then
- Begin
- Writeln(MyFile, 'Элементы в множестве согласных букв: ');
- For I := 1 To Length(Alpha) Do
- Begin
- If Alpha[I] In ConsonantsInText Then
- Begin
- Write(MyFile, Alpha[I], ' ');
- End;
- End;
- Writeln(MyFile);
- Writeln(MyFile, 'Количество элементов в множестве согласных букв: ',
- CountAlphaConsonants);
- End
- Else
- Writeln(MyFile, 'В множестве согласных букв нет элементов.');;
- CloseFile(MyFile);
- Writeln('Информация успешно записана в файл.');
- End;
- Procedure ChooseOutput(Text: AnsiString; Vowels, Consonants: TSetChar);
- Var
- Option: String;
- Begin
- Writeln('Выберите способ вывода результата.', #13#10,
- 'Введите "console", если хотите вывести результат через консоль', #13#10,
- 'Введите "file", если хотите передать результат в файл');
- Option := ChooseAction;
- If Option = 'console' Then
- WriteConsole(Text, Vowels, Consonants)
- Else
- WriteFile(Text, Vowels, Consonants);
- End;
- Var
- Text: AnsiString;
- Vowels, Consonants: TSetChar;
- Begin
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- Vowels := ['а', 'я', 'у', 'ю', 'е', 'э', 'ё', 'о', 'ы', 'и'];
- Consonants := ['б', 'в', 'г', 'д', 'ж', 'з', 'й', 'л', 'м', 'н', 'р', 'к',
- 'п', 'с', 'т', 'ф', 'ч', 'х', 'ц', 'ш', 'щ'];
- PrintTask();
- Text := ChooseInput();
- ChooseOutput(Text, Vowels, Consonants);
- Readln
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement