Advertisement
gguuppyy

лаба3н2

Dec 2nd, 2023 (edited)
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 10.23 KB | Source Code | 0 0
  1. Program Laba3_2;
  2.  
  3. Uses
  4.     Windows, System.SysUtils;
  5.  
  6. Type
  7.     TSetChar = Set Of AnsiChar;
  8.  
  9. Var
  10.     IsCorrect: Boolean;
  11.  
  12. Procedure PrintTask();
  13. Begin
  14.     Writeln('Программа описывает множество гласных и согласных букв русского алфавита и формирует множество гласных и согласных букв из предложения');
  15. End;
  16.  
  17. Function GetSetInText(StAlpha: TSetChar; Text: AnsiString): TSetChar;
  18. Var
  19.     SetInText: TSetChar;
  20.     I: Integer;
  21. Begin
  22.     SetInText := [];
  23.     For I := 1 To Length(Text) Do
  24.     Begin
  25.         If Text[I] In StAlpha Then
  26.         Begin
  27.             Include(SetInText, Text[I]);
  28.         End;
  29.     End;
  30.     GetSetInText := SetInText;
  31. End;
  32.  
  33. Function IsCorrectPath(): String;
  34. Var
  35.     Path: String;
  36.     IsCorrect: Boolean;
  37. Begin
  38.     Writeln('Введите путь к файлу:');
  39.     Repeat
  40.         IsCorrect := True;
  41.         Readln(Path);
  42.         If Not FileExists(Path) Then
  43.         Begin
  44.             IsCorrect := False;
  45.             Writeln('Файл недоступен. Повторите ввод:');
  46.         End
  47.         Else If Not(ExtractFileExt(Path) = '.txt') Then
  48.         Begin
  49.             IsCorrect := False;
  50.             Writeln('Неправильное расширение файла. Повторите ввод:');
  51.         End;
  52.     Until IsCorrect;
  53.     IsCorrectPath := Path;
  54. End;
  55.  
  56. Function PathForRead(): String;
  57. Var
  58.     MyFile: TextFile;
  59.     Path: String;
  60.     IsCorrect: Boolean;
  61. Begin
  62.     Repeat
  63.         IsCorrect := True;
  64.         Path := IsCorrectPath();
  65.         Try
  66.             AssignFile(MyFile, Path);
  67.             Reset(MyFile);
  68.         Except
  69.             IsCorrect := False;
  70.             Writeln('Нет доступа к файлу. Измените настройки и повторите ввод.');
  71.         End;
  72.         CloseFile(MyFile);
  73.     Until IsCorrect;
  74.     PathForRead := Path;
  75. End;
  76.  
  77. Function IsOpen(Path: String): Boolean;
  78. Var
  79.     MyFile: TextFile;
  80.     IsCorrect: Boolean;
  81. Begin
  82.     IsCorrect := True;
  83.     AssignFile(MyFile, Path);
  84.     Try
  85.         Rewrite(MyFile);
  86.     Except
  87.         Writeln('Ошибка. Файл пуст.');
  88.         IsCorrect := False;
  89.         Readln;
  90.     End;
  91.     CloseFile(MyFile);
  92.     IsOpen := IsCorrect;
  93. End;
  94.  
  95. Function PathForWrite(): AnsiString;
  96. Var
  97.     Path: String;
  98.     MyFile: TextFile;
  99.     IsCorrect: Boolean;
  100. Begin
  101.     Repeat
  102.         IsCorrect := True;
  103.         Path := IsCorrectPath();
  104.         If Not(IsOpen(Path)) Then
  105.             IsCorrect := False;
  106.     Until IsCorrect;
  107.     PathForWrite := Path;
  108. End;
  109.  
  110. Function Input(Var IsCorrect: Boolean): AnsiString;
  111. Var
  112.     Str: AnsiString;
  113. Begin
  114.     Readln(Str);
  115.     If Str = '' Then
  116.     Begin
  117.         IsCorrect := False;
  118.         Writeln('Ошибка. Строка не может быть пустой.');
  119.     End;
  120.     Input := Str;
  121. End;
  122.  
  123. Function ReadTextConsole(): AnsiString;
  124. Var
  125.     Text: AnsiString;
  126. Begin
  127.     Repeat
  128.         IsCorrect := True;
  129.         Writeln('Введите строку:');
  130.         Text := Input(IsCorrect);
  131.     Until IsCorrect;
  132.     ReadTextConsole := Text;
  133. End;
  134.  
  135. Function ReadTextFile(Var MyFile: TextFile; Var IsCorrect: Boolean): AnsiString;
  136. Var
  137.     Text: AnsiString;
  138. Begin
  139.     Readln(MyFile, Text);
  140.     If Text = '' Then
  141.     Begin
  142.         IsCorrect := False;
  143.         Writeln('Ошибка.Файл пуст.');
  144.     End;
  145.     ReadTextFile := Text;
  146. End;
  147.  
  148. Function ReadFile(): AnsiString;
  149. Var
  150.     Path: String;
  151.     MyFile: TextFile;
  152.     Text: AnsiString;
  153.     IsCorrect: Boolean;
  154. Begin
  155.     Repeat
  156.         IsCorrect := True;
  157.         Path := PathForRead();
  158.         AssignFile(MyFile, Path);
  159.         Reset(MyFile);
  160.         Text := ReadTextFile(MyFile, IsCorrect);
  161.         CloseFile(MyFile);
  162.     Until IsCorrect;
  163.     ReadFile := Text;
  164. End;
  165.  
  166. Function ChooseAction(): String;
  167. Var
  168.     Input: String;
  169.     IsCorrect: Boolean;
  170. Begin
  171.     Repeat
  172.         IsCorrect := True;
  173.         Readln(Input);
  174.         Input := LowerCase(Input);
  175.         If (Input <> 'console') And (Input <> 'file') Then
  176.         Begin
  177.             Writeln('Ошибка. Введите "console" или "file".');
  178.             IsCorrect := False;
  179.         End;
  180.     Until IsCorrect;
  181.     ChooseAction := Input;
  182. End;
  183.  
  184. Function ChooseInput(): AnsiString;
  185. Var
  186.     Option: String;
  187.     MyFile: TextFile;
  188.     Text: AnsiString;
  189. Begin
  190.     Writeln('Выберите способ ввода данных.', #13#10,
  191.       'Введите "console", если хотите ввести данные через консоль', #13#10,
  192.       'Введите "file", если хотите передать данные из файла');
  193.     Option := ChooseAction();
  194.     If Option = 'console' Then
  195.     Begin
  196.         Text := ReadTextConsole();
  197.     End
  198.     Else
  199.         Text := ReadFile();
  200.     ChooseInput := Text;
  201. End;
  202.  
  203. Procedure WriteConsole(Text: AnsiString; Vowels, Consonants: TSetChar);
  204. Var
  205.     CountAlphaConsonants, CountAlphaVowels: Integer;
  206.     VowelsInText, ConsonantsInText: TSetChar;
  207.     I: Integer;
  208.     Alpha: AnsiString;
  209. Begin
  210.     Alpha := 'ауюеэёоыибвгджзйлмнркпстфчхцшщ';
  211.     VowelsInText := GetSetInText(Vowels, Text);
  212.     CountAlphaVowels := 0;
  213.  
  214.     For I := 1 To Length(Alpha) Do
  215.     Begin
  216.         If Alpha[I] In VowelsInText Then
  217.         Begin
  218.             Inc(CountAlphaVowels);
  219.         End;
  220.     End;
  221.     If CountAlphaVowels <> 0 Then
  222.     Begin
  223.  
  224.         Writeln('Элементы в множестве гласных букв: ');
  225.         For I := 1 to Length(Alpha) Do
  226.         Begin
  227.             If Alpha[I] In VowelsInText Then
  228.             Begin
  229.                 Write(Alpha[I], ' ');
  230.             End;
  231.         End;
  232.         Writeln;
  233.         Writeln('Количество элементов в множестве гласных букв: ',
  234.           CountAlphaVowels);
  235.  
  236.     End
  237.     Else
  238.         Writeln('В множестве гласных букв нет элементов.');
  239.  
  240.     ConsonantsInText := GetSetInText(Consonants, Text);
  241.     CountAlphaConsonants := 0;
  242.  
  243.     For I := 1 To Length(Alpha) Do
  244.     Begin
  245.         If Alpha[I] In ConsonantsInText Then
  246.         Begin
  247.             Inc(CountAlphaConsonants);
  248.         End;
  249.     End;
  250.  
  251.     If CountAlphaConsonants <> 0 Then
  252.     Begin
  253.  
  254.         Writeln('Элементы в множестве согласных букв: ');
  255.         For I := 1 to Length(Alpha) Do
  256.         Begin
  257.             If Alpha[I] In ConsonantsInText Then
  258.             Begin
  259.                 Write(Alpha[I], ' ');
  260.             End;
  261.         End;
  262.         Writeln;
  263.         Writeln('Количество элементов в множестве согласных букв: ',
  264.           CountAlphaConsonants);
  265.     End
  266.     Else
  267.         Writeln('В множестве согласных букв нет элементов.');;
  268.  
  269. End;
  270.  
  271. Procedure WriteFile(Text: AnsiString; Vowels, Consonants: TSetChar);
  272. Var
  273.     CountAlphaConsonants, CountAlphaVowels: Integer;
  274.     VowelsInText, ConsonantsInText: TSetChar;
  275.     MyFile: TextFile;
  276.     Path, Res: String;
  277.     I: Integer;
  278.     Alpha: AnsiString;
  279. Begin
  280.     Path := PathForWrite();
  281.     AssignFile(MyFile, Path);
  282.     Rewrite(MyFile);
  283.     Alpha := 'аяуюеэёоыибвгджзйлмнркпстфчхцшщ';
  284.     VowelsInText := GetSetInText(Vowels, Text);
  285.     CountAlphaVowels := 0;
  286.  
  287.     For I := 1 To Length(Alpha) Do
  288.     Begin
  289.         If Alpha[I] In VowelsInText Then
  290.         Begin
  291.             Inc(CountAlphaVowels);
  292.         End;
  293.     End;
  294.  
  295.     If CountAlphaVowels <> 0 Then
  296.     Begin
  297.         Writeln(MyFile, 'Элементы в множестве гласных букв: ');
  298.         For I := 1 To Length(Alpha) Do
  299.         Begin
  300.             If Alpha[I] In VowelsInText Then
  301.             Begin
  302.                 Write(MyFile, Alpha[I], ' ');
  303.             End;
  304.         End;
  305.         Writeln(MyFile, '');
  306.         Writeln(MyFile, 'Количество элементов в множестве гласных букв: ',
  307.           CountAlphaVowels);
  308.     End
  309.     Else
  310.         Writeln(MyFile, 'В множестве гласных букв нет элементов.');;
  311.  
  312.     ConsonantsInText := GetSetInText(Consonants, Text);
  313.     CountAlphaConsonants := 0;
  314.  
  315.     For I := 1 To Length(Alpha) Do
  316.     Begin
  317.         If Alpha[I] In ConsonantsInText Then
  318.         Begin
  319.             Inc(CountAlphaConsonants);
  320.         End;
  321.     End;
  322.  
  323.     If CountAlphaConsonants <> 0 Then
  324.     Begin
  325.         Writeln(MyFile, 'Элементы в множестве согласных букв: ');
  326.         For I := 1 To Length(Alpha) Do
  327.         Begin
  328.             If Alpha[I] In ConsonantsInText Then
  329.             Begin
  330.                 Write(MyFile, Alpha[I], ' ');
  331.             End;
  332.         End;
  333.         Writeln(MyFile);
  334.         Writeln(MyFile, 'Количество элементов в множестве согласных букв: ',
  335.           CountAlphaConsonants);
  336.     End
  337.     Else
  338.         Writeln(MyFile, 'В множестве согласных букв нет элементов.');;
  339.     CloseFile(MyFile);
  340.     Writeln('Информация успешно записана в файл.');
  341. End;
  342.  
  343. Procedure ChooseOutput(Text: AnsiString; Vowels, Consonants: TSetChar);
  344. Var
  345.     Option: String;
  346. Begin
  347.     Writeln('Выберите способ вывода результата.', #13#10,
  348.       'Введите "console", если хотите вывести результат через консоль', #13#10,
  349.       'Введите "file", если хотите передать результат в файл');
  350.  
  351.     Option := ChooseAction;
  352.     If Option = 'console' Then
  353.         WriteConsole(Text, Vowels, Consonants)
  354.     Else
  355.         WriteFile(Text, Vowels, Consonants);
  356. End;
  357.  
  358. Var
  359.     Text: AnsiString;
  360.     Vowels, Consonants: TSetChar;
  361.  
  362. Begin
  363.     SetConsoleCP(1251);
  364.     SetConsoleOutputCP(1251);
  365.     Vowels := ['а', 'я', 'у', 'ю', 'е', 'э', 'ё', 'о', 'ы', 'и'];
  366.     Consonants := ['б', 'в', 'г', 'д', 'ж', 'з', 'й', 'л', 'м', 'н', 'р', 'к',
  367.       'п', 'с', 'т', 'ф', 'ч', 'х', 'ц', 'ш', 'щ'];
  368.  
  369.     PrintTask();
  370.     Text := ChooseInput();
  371.     ChooseOutput(Text, Vowels, Consonants);
  372.     Readln
  373.  
  374. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement