Advertisement
deced

Untitled

Nov 7th, 2020
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.75 KB | None | 0 0
  1. program Lab3_2;
  2.  
  3. uses
  4.     System.SysUtils, System.StrUtils;
  5.  
  6. type
  7.     CharSet = Set of AnsiChar;
  8.     CharArray = Array of AnsiChar;
  9.     InputType = (FromConsole, FromFile);
  10.  
  11. function GetInputType(): InputType;
  12. var
  13.     Ret: InputType;
  14.     Input: String;
  15.     IsCorrect: Boolean;
  16. begin
  17.     IsCorrect := False;
  18.     repeat
  19.         Writeln('Выберите способ ввода предложения файл/консоль (ф/к)');
  20.         Readln(Input);
  21.         if (Input = 'ф') or (Input = 'Ф') or (Input = 'Файл') or (Input = 'файл')
  22.         then
  23.         begin
  24.             Ret := InputType.FromFile;
  25.             IsCorrect := True;
  26.         end
  27.         else if (Input = 'к') or (Input = 'К') or (Input = 'Консоль') or
  28.           (Input = 'консоль') then
  29.         begin
  30.             Ret := InputType.FromConsole;
  31.             IsCorrect := True;
  32.         end;
  33.     until IsCorrect;
  34.     GetInputType := Ret;
  35. end;
  36.  
  37. function GetInputFilePath(): String;
  38. var
  39.     Path: String;
  40.     IsCorrect: Boolean;
  41. begin
  42.     IsCorrect := False;
  43.     repeat
  44.         Writeln('Введите абсолютный путь к файлу ');
  45.         Readln(Path);
  46.         if FileExists(Path) then
  47.             IsCorrect := True
  48.         else
  49.             Writeln('Файл не найден');
  50.  
  51.     until IsCorrect;
  52.     GetInputFilePath := Path;
  53. end;
  54.  
  55. function GetInputTextFromConsole(): String;
  56. var
  57.     Ret: String;
  58. begin
  59.     Writeln('Введите исходное предложение');
  60.     Readln(Ret);
  61.     GetInputTextFromConsole := Ret;
  62. end;
  63.  
  64. function GetInputTextFromFile(): String;
  65. var
  66.     Ret, Temp, FilePath: String;
  67.     InputFile: TextFile;
  68. begin
  69.     FilePath := GetInputFilePath();
  70.     AssignFile(InputFile, FilePath);
  71.     Reset(InputFile);
  72.     while not Eof(InputFile) do
  73.     begin
  74.         Readln(InputFile, Temp);
  75.         Ret := Ret + Temp;
  76.     end;
  77.     CloseFile(InputFile);
  78.     GetInputTextFromFile := Ret;
  79. end;
  80.  
  81. function GetInputText(): String;
  82. var
  83.     Ret: String;
  84.     SelectedInputType: InputType;
  85. begin
  86.     SelectedInputType := GetInputType();
  87.     if (SelectedInputType = InputType.FromConsole) then
  88.         Ret := GetInputTextFromConsole()
  89.     else if (SelectedInputType = InputType.FromFile) then
  90.         Ret := GetInputTextFromFile();
  91.     GetInputText := Ret;
  92. end;
  93.  
  94. function GetVowels(InputText: AnsiString): CharSet;
  95. var
  96.     Vowels, Separators, Set1, Set2: CharSet;
  97.     I: Integer;
  98. begin
  99.     Vowels := ['a', 'e', 'i', 'o', 'u', 'y'];
  100.     Separators := [' ','.',',','!','?'];
  101.     Set1 := [];
  102.     Set2 := [];
  103.     InputText := LowerCase(InputText);
  104.     for I := 1 to Length(InputText) + 1 do
  105.     begin
  106.         if InputText[I] in Vowels then
  107.             Include(Set1, InputText[I]);
  108.         if InputText[I] in Set2 then
  109.             Exclude(Vowels, InputText[I]);
  110.         if InputText[I] in Separators then
  111.             Set2 := Set1;
  112.     end;
  113.     GetVowels := Vowels * Set1;
  114. end;
  115.  
  116. function GetOutputDirectory(): String;
  117. var
  118.     Ret: String;
  119.     IsCorrect: Boolean;
  120. begin
  121.     IsCorrect := False;
  122.     repeat
  123.         Writeln('Введите директорию, в которую хотите сохранить вывод программы');
  124.         Readln(Ret);
  125.         if DirectoryExists(Ret) then
  126.             IsCorrect := True
  127.         else
  128.             Writeln('Такой директории не существует.Попробуйте ещё раз');
  129.     until IsCorrect;
  130.     GetOutputDirectory := Ret;
  131. end;
  132.  
  133. procedure PrintOutputToFile(ToPrint: CharSet);
  134. var
  135.     OutputFile: TextFile;
  136.     I: Integer;
  137.     Directory: String;
  138.     Vowels: CharArray;
  139. begin
  140.     Vowels := ['a', 'e', 'i', 'o', 'u', 'y'];
  141.     Directory := GetOutputDirectory();
  142.     AssignFile(OutputFile, Directory + '\output.txt');
  143.     Rewrite(OutputFile);
  144.     Writeln(OutputFile, 'Гласные буквы, которые входят только в одно слово: ');
  145.     for I := 0 to High(Vowels) do
  146.         if Vowels[I] in ToPrint then
  147.             Write(OutputFile, Vowels[I] + '  ');
  148.     Writeln('Файл сохранён по указанному пути');
  149.     CloseFile(OutputFile);
  150. end;
  151.  
  152. procedure PrintOutputToConsole(ToPrint: CharSet);
  153. var
  154.     I: Integer;
  155.     Vowels: CharArray;
  156. begin
  157.     Vowels := ['a', 'e', 'i', 'o', 'u', 'y'];
  158.     Writeln('Глассные буквы, которые входят только в одно слово: ');
  159.     for I := 0 to High(Vowels) do
  160.         if Vowels[I] in ToPrint then
  161.             Write(Vowels[I] + '  ');
  162.     Writeln;
  163. end;
  164.  
  165. Var
  166.     InputString: AnsiString;
  167.     Output: CharSet;
  168.  
  169. begin
  170.     InputString := GetInputText();
  171.     Output := GetVowels(InputString);
  172.     PrintOutputToConsole(Output);
  173.     PrintOutputToFile(Output);
  174.     Readln;
  175.  
  176. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement