ValeriaAVR

lab32 delphi

Nov 8th, 2024
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.85 KB | None | 0 0
  1. Program Lab32;
  2.  
  3. Uses
  4.     SysUtils;
  5.  
  6. Const
  7.     MIN_C = 1;
  8.     MAX_C = 2;
  9.     MIN_LENGTH = 1;
  10.     MAX_LENGTH = 100;
  11.  
  12. Type
  13.     TSet = Set Of Char;
  14.  
  15. Function InputChoice(Const MIN, MAX: Integer): Integer;
  16. Var
  17.     N: Integer;
  18.     IsCorrect: Boolean;
  19. Begin
  20.     N := 0;
  21.     Repeat
  22.         IsCorrect := True;
  23.         WriteLn('Введите значение: ');
  24.         Try
  25.             ReadLn(N);
  26.         Except
  27.             IsCorrect := False;
  28.             WriteLn('Некорректный ввод.');
  29.         End;
  30.  
  31.         If IsCorrect And ((N < MIN) Or (N > MAX)) Then
  32.         Begin
  33.             WriteLn('Введите корректное значение.');
  34.             IsCorrect := False;
  35.         End;
  36.     Until IsCorrect;
  37.     InputChoice := N;
  38. End;
  39.  
  40. Function IsFileExists(Const FileName: String): Boolean;
  41. Begin
  42.     IsFileExists := FileExists(FileName);
  43.     If Not FileExists(FileName) Then
  44.         WriteLn('Файл не существует.');
  45. End;
  46.  
  47. Function IsFileTxt(Const FileName: String): Boolean;
  48. Begin
  49.     IsFileTxt := False;
  50.     If Length(FileName) >= 4 Then
  51.     Begin
  52.         If (FileName[Length(FileName) - 3] = 't') And (FileName[Length(FileName) - 2] = 'x') And (FileName[Length(FileName) - 1] = 't') And
  53.             (FileName[Length(FileName)] = '.') Then
  54.         Begin
  55.             IsFileTxt := True;
  56.         End
  57.         Else
  58.         Begin
  59.             WriteLn('Файл не является текстовым. ');
  60.         End;
  61.     End;
  62. End;
  63.  
  64. Function IsFileNotEmpty(Var MyFile: TextFile): Boolean;
  65. Var
  66.     IsNotEmpty: Boolean;
  67. Begin
  68.     Try
  69.         Try
  70.             Reset(MyFile);
  71.             IsNotEmpty := Not Eof(MyFile);
  72.             If (Not IsNotEmpty) Then
  73.                 WriteLn('Этот файл пустой. ');
  74.         Except
  75.             WriteLn('Непредвиденная ошибка.');
  76.             IsNotEmpty := False;
  77.         End;
  78.     Finally
  79.         CloseFile(MyFile);
  80.     End;
  81.     IsFileNotEmpty := IsNotEmpty;
  82. End;
  83.  
  84. Function IsFileWritable(Var MyFile: TextFile): Boolean;
  85. Begin
  86.     IsFileWritable := True;
  87.     Try
  88.         Rewrite(MyFile);
  89.     Except
  90.         IsFileWritable := False;
  91.         WriteLn('Этот файл невозможно открыть для записи.');
  92.     End;
  93. End;
  94.  
  95. Function IsFileReadable(Var MyFile: TextFile): Boolean;
  96. Begin
  97.     IsFileReadable := True;
  98.     Try
  99.         Reset(MyFile);
  100.     Except
  101.         IsFileReadable := False;
  102.         WriteLn('Этот файл невозможно открыть для чтения.');
  103.     End;
  104. End;
  105.  
  106. Function RequestFileNameForReading(Var MyFile: TextFile): String;
  107. Var
  108.     FileName: String;
  109.     IsCorrect: Boolean;
  110. Begin
  111.     Repeat
  112.         WriteLn('Введите имя файла с путём:');
  113.         ReadLn(FileName);
  114.         AssignFile(MyFile, FileName);
  115.         IsCorrect := IsFileExists(FileName) And IsFileTxt(FileName) And IsFileReadable(MyFile) And IsFileNotEmpty(MyFile);
  116.     Until IsCorrect;
  117.     RequestFileNameForReading := FileName;
  118. End;
  119.  
  120. Function RequestFileNameForWriting(Var MyFile: TextFile): String;
  121. Var
  122.     FileName: String;
  123.     IsCorrect: Boolean;
  124. Begin
  125.     Repeat
  126.         WriteLn('Введите имя файла с путём: ');
  127.         ReadLn(FileName);
  128.         AssignFile(MyFile, FileName);
  129.         IsCorrect := IsFileExists(FileName) And IsFileTxt(FileName) And IsFileWritable(MyFile);
  130.     Until IsCorrect;
  131.     RequestFileNameForWriting := FileName;
  132. End;
  133.  
  134. Function InputSequenceFromConsole: String;
  135. Var
  136.     Sequence: String;
  137.     IsCorrect: Boolean;
  138. Begin
  139.     Sequence := '';
  140.     Repeat
  141.         IsCorrect := True;
  142.         WriteLn('Введите строку: ');
  143.         Try
  144.             ReadLn(Sequence);
  145.         Except
  146.             IsCorrect := False;
  147.             WriteLn('Некорректный ввод.');
  148.         End;
  149.         If IsCorrect And ((Length(Sequence) < MIN_LENGTH) Or (Length(Sequence) > MAX_LENGTH)) Then
  150.         Begin
  151.             IsCorrect := False;
  152.             WriteLn('Длина строки выходит за допустимый диапазон.');
  153.         End;
  154.     Until IsCorrect;
  155.     InputSequenceFromConsole := Sequence;
  156. End;
  157.  
  158. Function InputSequenceFromFile(Var Sequence: String; Var MyFile: TextFile): Boolean;
  159. Var
  160.     IsCorrect: Boolean;
  161. Begin
  162.     IsCorrect := True;
  163.     Sequence := '';
  164.     Try
  165.         Try
  166.             ReadLn(MyFile, Sequence);
  167.         Except
  168.             Writeln('Проверьте корректность строки.');
  169.             IsCorrect := False;
  170.         End;
  171.  
  172.         If IsCorrect And ((Length(Sequence) < MIN_LENGTH) Or (Length(Sequence) > MAX_LENGTH)) Then
  173.         Begin
  174.             WriteLn('Длина строки выходит за диапазон допустимых значений.');
  175.             IsCorrect := False;
  176.         End;
  177.     Finally
  178.         CloseFile(MyFile);
  179.     End;
  180.  
  181.     InputSequenceFromFile := IsCorrect;
  182. End;
  183.  
  184. Procedure FindSymbols(Const Sequence: String; Var FinalSet: TSet);
  185. Var
  186.     I: Integer;
  187.     Symbols: Set Of Char;
  188. Begin
  189.     Symbols := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', ';', ':', '!', '?', '(', ')', '[', ']', '{', '}', '+', '-', '=',
  190.         '*', '/'];
  191.     For I := 1 To Length(Sequence) Do
  192.     Begin
  193.         If (Sequence[I] In Symbols) Then
  194.         Begin
  195.             Include(FinalSet, AnsiChar(Sequence[I]));
  196.         End;
  197.     End;
  198. End;
  199.  
  200. Procedure PrintToConsole(Const FinalSet: TSet);
  201. Var
  202.     Ch: Char;
  203. Begin
  204.     For Ch In FinalSet Do
  205.     Begin
  206.         Write(Ch);
  207.     End;
  208. End;
  209.  
  210. Function PrintToFile(Var MyFile: TextFile; Const FinalSet: TSet): Boolean;
  211. Var
  212.     IsCorrect: Boolean;
  213.     Ch: Char;
  214. Begin
  215.     IsCorrect := True;
  216.     Try
  217.         Try
  218.             Rewrite(MyFile);
  219.             For Ch In FinalSet Do
  220.             Begin
  221.                 WriteLn(MyFile, Ch);
  222.             End;
  223.             WriteLn('Результат выведен в файле.');
  224.         Except
  225.             WriteLn('Непредвиденная ошибка.');
  226.             IsCorrect := False;
  227.         End;
  228.     Finally
  229.         CloseFile(MyFile);
  230.     End;
  231.     PrintToFile := IsCorrect;
  232. End;
  233.  
  234. Procedure InputData(Var Sequence: String; Var MyFile: TextFile);
  235. Var
  236.     IsCorrect: Boolean;
  237.     Choice: Integer;
  238.     MyFileName: String;
  239. Begin
  240.     WriteLn('Данная программа находит в последовательности символов знаки арифметических операций, знаки препинания и цифры. ', #13#10,
  241.         'Длина последовательности от ', MIN_LENGTH, ' до ', MAX_LENGTH, #13#10, 'Откуда Вы хотите вводить данные?', #13#10,
  242.         '1 - консоль, 2 - файл.');
  243.     Choice := InputChoice(MIN_C, MAX_C);
  244.     If (Choice = 1) Then
  245.     Begin
  246.         Sequence := InputSequenceFromConsole;
  247.     End
  248.     Else
  249.     Begin
  250.         Repeat
  251.             MyFileName := RequestFileNameForReading(MyFile);
  252.             IsCorrect := InputSequenceFromFile(Sequence, MyFile);
  253.             ;
  254.         Until IsCorrect;
  255.     End;
  256. End;
  257.  
  258. Procedure OutputData(Const FinalSet: TSet; Var MyFile: TextFile);
  259. Var
  260.     IsCorrect: Boolean;
  261.     Choice: Integer;
  262.     MyFileName: String;
  263. Begin
  264.     WriteLn('Куда Вы хотите вывести результат?', #13#10, '1 - консоль, 2 - файл');
  265.     Choice := InputChoice(MIN_C, MAX_C);
  266.     If (Choice = 1) Then
  267.     Begin
  268.         PrintToConsole(FinalSet);
  269.     End
  270.     Else
  271.     Begin
  272.         Repeat
  273.             MyFileName := RequestFileNameForWriting(MyFile);
  274.             IsCorrect := PrintToFile(MyFile, FinalSet);
  275.         Until IsCorrect;
  276.     End;
  277. End;
  278.  
  279. Var
  280.     MyFile: TextFile;
  281.     Sequence: String;
  282.     FinalSet: TSet;
  283.  
  284. Begin
  285.     InputData(Sequence, MyFile);
  286.     FindSymbols(Sequence, FinalSet);
  287.     OutputData(FinalSet, MyFile);
  288.     ReadLn;
  289.  
  290. End.
Advertisement
Add Comment
Please, Sign In to add comment