Advertisement
THOMAS_SHELBY_18

Lab3_2(Delphi)

Nov 19th, 2023 (edited)
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.43 KB | Source Code | 0 0
  1. Program Lab3_2;
  2.  
  3. Uses
  4.     System.SysUtils;
  5.  
  6. Type
  7.     TSet = Set Of Char;
  8. Var
  9.     StrIn: AnsiString;
  10.     AnswerSet: TSet;
  11.  
  12. Function ReadNum(Min, Max: Integer): Integer;
  13. Var
  14.     Num: Integer;
  15.     IsCorrect: Boolean;
  16. Begin
  17.     Repeat
  18.         IsCorrect := True;
  19.         Try
  20.             Readln(Num);
  21.         Except
  22.             Write('Некорректный ввод! Введите значение еще раз: ');
  23.             IsCorrect := False;
  24.         End;
  25.         If (IsCorrect) And ((Num < Min) Or (Num > Max)) Then
  26.         Begin
  27.             Write('Недопустимое значение! Введите значение еще раз: ');
  28.             IsCorrect := False;
  29.         End;
  30.     Until (IsCorrect);
  31.     ReadNum := Num;
  32. End;
  33.  
  34. Function GetLastNotSpaceIndex(Line: String): Integer;
  35. Var
  36.     I: Integer;
  37.     C: Char;
  38. Begin
  39.     I := High(Line);
  40.     Repeat
  41.         Dec(I);
  42.         C := Line[I];
  43.     Until (C <> #32);
  44.     GetLastNotSpaceIndex := I;
  45. End;
  46.  
  47. Function CheckFile(Path: String): Boolean;
  48. Var
  49.     CheckLine, BufLine: String;
  50.     IsFileCorrect: Boolean;
  51.     InputFile: TextFile;
  52.  
  53. Begin
  54.     IsFileCorrect := True;
  55.  
  56.     If FileExists(Path) Then
  57.     Begin
  58.         AssignFile(InputFile, Path);
  59.         Try
  60.             Reset(InputFile);
  61.         Except
  62.             Writeln('Не удалось открыть файл');
  63.             IsFileCorrect := False;
  64.         End;
  65.         If IsFileCorrect Then
  66.         Begin
  67.             Repeat
  68.                 Readln(InputFile, BufLine);
  69.                 CheckLine := CheckLine + BufLine;
  70.             Until Eof(InputFile);
  71.  
  72.             If (CheckLine = '') Or (GetLastNotSpaceIndex(CheckLine) = 0) Then
  73.             Begin
  74.                 Writeln('Файл пустой!');
  75.                 IsFileCorrect := False;
  76.             End;
  77.             Close(InputFile)
  78.         End;
  79.     End
  80.     Else
  81.     Begin
  82.         Writeln('Файла по данному пути не существует!');
  83.         IsFileCorrect := False;
  84.     End;
  85.  
  86.     CheckFile := IsFileCorrect;
  87. End;
  88.  
  89. Function ReadFile(Path: String): AnsiString;
  90. Var
  91.     Line, BufLine: AnsiString;
  92.     InputFile: TextFile;
  93. Begin
  94.     AssignFile(InputFile, Path);
  95.     Reset(InputFile);
  96.  
  97.     Repeat
  98.         Readln(InputFile, BufLine);
  99.         Line := Line + BufLine;
  100.     Until Eof(InputFile);
  101.     Close(InputFile);
  102.  
  103.     ReadFile := Line;
  104. End;
  105.  
  106. Function InputStrFromFile(): AnsiString;
  107. Var
  108.     PathFile, Line: AnsiString;
  109.     IsInputFromFileSuccessfully: Boolean;
  110. Begin
  111. Writeln('Данные в файле должны содержать текст');
  112.     Repeat
  113.         Write('Введите путь к файлу с его расширением: ');
  114.         Readln(PathFile);
  115.         IsInputFromFileSuccessfully := CheckFile(PathFile);
  116.     Until IsInputFromFileSuccessfully;
  117.     Line := ReadFile(PathFile);
  118.  
  119.     InputStrFromFile := Line;
  120. End;
  121.  
  122. Function InputStrFromConsole(): AnsiString;
  123. Var
  124.     Line: AnsiString;
  125.     IsTextEmpty: Boolean;
  126. Begin
  127.     Repeat
  128.         Writeln('Введите текст:');
  129.         Readln(Line);
  130.         IsTextEmpty := (Line = '') Or (GetLastNotSpaceIndex(Line) = 0);
  131.     Until Not IsTextEmpty;
  132.  
  133.     InputStrFromConsole := Line;
  134. End;
  135.  
  136. Function InputStr(): AnsiString;
  137. Var
  138.     Choice: Integer;
  139.     Line: AnsiString;
  140. Begin
  141.     Write('Выберите вариант ввода:', #10, '1. Ввод из консоли', #10, '2. Ввод из файла', #10, 'Использовать вариант: ');
  142.     Choice := ReadNum(1,2);
  143.  
  144.     If Choice = 1 Then
  145.         Line := InputStrFromConsole()
  146.     Else
  147.         Line := InputStrFromFile();
  148.  
  149.     InputStr := Line;
  150. End;
  151.  
  152. Function FindSymbols(Line: AnsiString): TSet;
  153. Var
  154.     I: Integer;
  155.     AnswerSet: TSet;
  156. Const
  157.     SearchCharacters = ['+', '-', '/', '*', '0'..'9'];
  158. Begin
  159.     AnswerSet := [];
  160.     For I := 1 To Length(Line) Do
  161.         If Line[I] In SearchCharacters Then
  162.             Include(AnswerSet, Line[I]);
  163.  
  164.     FindSymbols:= AnswerSet;
  165. End;
  166.  
  167. Procedure OutputAnswerToConsole(Answer: TSet);
  168. Var
  169.     С: Char;
  170. Begin
  171.     If Answer <> [] Then
  172.     Begin
  173.         For С := '*' To '9' Do
  174.             If С In Answer Then
  175.                 Write(С, ' ');
  176.     End
  177.     Else
  178.         Writeln('В строке не было найдено нужных символов');
  179. End;
  180.  
  181. Procedure OutputAnswerToFile(Answer: TSet);
  182. Var
  183.     С: Char;
  184.     IsPathCorrect: Boolean;
  185.     Path: String;
  186.     OutputFile: TextFile;
  187. Begin
  188.     Writeln('Для вывода введите путь к файлу и его имя c расширением. Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)');
  189.     Repeat
  190.         IsPathCorrect := True;
  191.         Write('Введите путь: ');
  192.         Readln(Path);
  193.         If Path = '' Then
  194.             IsPathCorrect := False
  195.         Else
  196.         Begin
  197.             AssignFile(OutputFile, Path);
  198.             Try
  199.                 Rewrite(OutputFile);
  200.             Except
  201.                 Writeln('Не удалось вывести в Файл');
  202.                 IsPathCorrect := False;
  203.             End;
  204.         End;
  205.     Until IsPathCorrect;
  206.  
  207.     If Answer <> [] Then
  208.     Begin
  209.         For С := '*' To '9' Do
  210.             If С In Answer Then
  211.                 Write(OutputFile, С, ' ');
  212.     End
  213.     Else
  214.         Writeln(OutputFile, 'В строке не было найдено нужных символов');
  215.  
  216.     CloseFile(OutputFile);
  217.     Writeln('Вывод данных...  успешно!');
  218. End;
  219.  
  220. Procedure OutputAnswer(Answer: TSet);
  221. Var
  222.     Choice: Integer;
  223. Begin
  224.     Write('Выберите вариант вывода:', #10, '1. Вывод в консоль', #10, '2. Вывод файл', #10, 'Использовать вариант: ');
  225.     Choice := ReadNum(1,2);
  226.  
  227.     If Choice = 1 Then
  228.         OutputAnswerToConsole(Answer)
  229.     Else
  230.         OutputAnswerToFile(Answer);
  231. End;
  232.  
  233. Procedure PrintCondition();
  234. Begin
  235.     Writeln('Данная программа напечатает множество всех встречающихся в строке знаков арифметических операций и цифр');
  236. End;
  237.  
  238. Begin
  239.     PrintCondition();
  240.     StrIn := InputStr();
  241.     AnswerSet := FindSymbols(StrIn);
  242.     OutputAnswer(AnswerSet);
  243.     Readln;
  244. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement