Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.78 KB | None | 0 0
  1. program Lab3_2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8.    System.SysUtils;
  9.  
  10. type
  11.    TSetOfChar = set of Char;
  12.  
  13. function InputFromKeyboard() : AnsiString;
  14.  
  15. var
  16.    Input : AnsiString;
  17.    IsCorrect : Boolean;
  18.  
  19. begin
  20.    IsCorrect := False;
  21.    WriteLn('Введите последовательность символов : ');
  22.    repeat
  23.       ReadLn(Input);
  24.       if Input = '' then
  25.          WriteLn ('Ошибка! Вы ввели пустую последовательность!' +
  26.             ' Попробуйте еще раз :')
  27.       else
  28.          IsCorrect := True;
  29.    until IsCorrect;
  30.    InputFromKeyboard := Input;
  31. end;
  32.  
  33. function InputFromFile() : AnsiString;
  34.  
  35. var
  36.    TxtFile : TextFile;
  37.    Input : AnsiString;
  38.    FileName : string;
  39.    IsCorrect : Boolean;
  40.  
  41. begin
  42.    IsCorrect := False;
  43.    repeat
  44.       WriteLn('Введите имя текстового (.txt) файла, ',
  45.          'из которого желаете ввести последовательность символов :');
  46.       ReadLn(FileName);
  47.       FileName := FileName + '.txt';
  48.       if FileExists(FileName) then
  49.       begin
  50.          AssignFile(TxtFile, FileName);
  51.          try
  52.             Reset(TxtFile);
  53.             ReadLn(TxtFile, Input);
  54.             IsCorrect := True;
  55.          except
  56.             WriteLn('Ошибка чтения файла!');
  57.          end;
  58.          if Input = '' then
  59.          begin
  60.             IsCorrect := False;
  61.             Close(TxtFile);
  62.             WriteLn('Данный файл пуст!');
  63.          end
  64.       end
  65.       else
  66.          WriteLn('Файл ', FileName,' не существует!');
  67.    until IsCorrect;
  68.    WriteLn('Введенная последовательность : ', Input);
  69.    Close(TxtFile);
  70.    InputFromFile := Input;
  71. end;
  72.  
  73. procedure OutputToConsole(ResultSet : TSetOfChar);
  74.  
  75. var
  76.    i, Counter : Byte;
  77.    Check : Char;
  78.  
  79. begin
  80.    Counter := 0;
  81.    WriteLn ('Полученное множество : ');
  82.    if ResultSet = [] then
  83.       WriteLn('Множество пусто, так как во введенной строке нет ' +
  84.          'ни одного знака арифметической операции, скобки или четного числа.')
  85.    else
  86.    begin
  87.       Write('[');
  88.       for Check := Chr(0) to Chr(255) do
  89.          if Check in ResultSet then
  90.             Write(' ', Check, ' ');
  91.       Write(']');
  92.    end
  93. end;
  94.  
  95. procedure OutputToFile(ResultSet : TSetOfChar);
  96.  
  97. var
  98.    TxtFile : TextFile;
  99.    i : Byte;
  100.    FileName : string;
  101.    IsCorrect : Boolean;
  102.    Check : Char;
  103.  
  104. begin
  105.    IsCorrect := False;
  106.    repeat
  107.       WriteLn ('Введите имя текстового (.txt) файла, ',
  108.          'в который вы хотите вывести данные :');
  109.       ReadLn(FileName);
  110.       FileName := FileName + '.txt';
  111.       AssignFile(TxtFile, FileName);
  112.       try
  113.          ReWrite(TxtFile);
  114.          IsCorrect := True;
  115.       except
  116.          WriteLn('Ошибка записи файла! Введите ',
  117.             'другое имя файла.');
  118.       end;
  119.    until IsCorrect;
  120.    WriteLn ('Полученное множество : ');
  121.    if ResultSet = [] then
  122.    begin
  123.       WriteLn('Множество пусто, так как во введенной строке нет ни ' +
  124.          'одного знака арифметической операции, скобки или четного числа');
  125.       WriteLn(TxtFile, 'Множество пусто, так как во введенной строке нет' +
  126.          ' ни одного знака арифметической операции, скобки или четного числа');
  127.    end
  128.    else
  129.    begin
  130.       Write('[');
  131.       Write(TxtFile, '[');
  132.       for Check := Chr(0) to Chr(255) do
  133.       begin
  134.          if Check in ResultSet then
  135.          begin
  136.             Write(' ', Check, ' ');
  137.             Write(TxtFile, ' ', Check, ' ');
  138.          end;
  139.       end;
  140.       Write(']');
  141.       Write(TxtFile, ']');
  142.       WriteLn;
  143.    end;
  144.    Close(TxtFile);
  145.    WriteLn('Результат успешно записан в файл ', FileName);
  146. end;
  147.  
  148. procedure BuidNewSet (Input : AnsiString; var ResultSet : TSetOfChar);
  149.  
  150. const
  151.    DefaultSet =
  152.       ['2', '4', '6', '8', '(', ')', '+', '-', '/', '*', '<', '>', '='];
  153.  
  154. var
  155.    i, HighBorder: Byte;
  156.  
  157. begin
  158.    HighBorder := Length(Input) + 1;
  159.    i := 1;
  160.    while i < HighBorder do
  161.    begin
  162.       if Input[i] in DefaultSet then
  163.       begin
  164.          Include(ResultSet, Input[i]);
  165.          Inc(i);
  166.       end
  167.       else
  168.          Inc(i);
  169.    end;
  170. end;
  171.  
  172. function UserChoiceForInput() : AnsiString;
  173.  
  174. var
  175.    Choice : Byte;
  176.    IsCorrect : Boolean;
  177.    Input : AnsiString;
  178.  
  179. begin
  180.    Choice := 0;
  181.    repeat
  182.       WriteLn('Если Вы желаете ввести строку вручную - введите 1.' + #10#13 +
  183.          'Если Вы желаете ввести строку из файла - введите 2.');
  184.       IsCorrect := True;
  185.       try
  186.          ReadLn(Choice);
  187.       except
  188.       end;
  189.       case Choice of
  190.          1 : Input := InputFromKeyboard();
  191.          2 : Input := InputFromFile();
  192.       else
  193.       begin
  194.          IsCorrect := False;
  195.          WriteLn('Ошибка ввода! Введите 1 или 2.');
  196.       end;
  197.       end;
  198.    until IsCorrect;
  199.    UserChoiceForInput := Input;
  200. end;
  201.  
  202. procedure UserChoiceForOutput(ResultSet : TSetOfChar);
  203.  
  204. var
  205.    Choice : Byte;
  206.    IsCorrect : Boolean;
  207.  
  208. begin
  209.    Choice := 0;
  210.    repeat
  211.       WriteLn('Если Вы желаете вывести результат в консоль - введите 1.' + #10#13 +
  212.          'Если Вы желаете вывести результат в файл - введите 2.');
  213.       IsCorrect := True;
  214.       try
  215.          ReadLn(Choice);
  216.       except
  217.       end;
  218.       case Choice of
  219.          1 : OutputToConsole(ResultSet);
  220.          2 : OutputToFile(ResultSet);
  221.       else
  222.       begin
  223.          IsCorrect := False;
  224.          WriteLn('Ошибка ввода! Введите 1 или 2.');
  225.       end;
  226.       end;
  227.    until IsCorrect;
  228. end;
  229.  
  230. procedure Main();
  231.  
  232. var
  233.    Input : AnsiString;
  234.    ResultSet : TSetOfChar;
  235.  
  236. begin
  237.    WriteLn('Данная программа на основе введенной последовательности символов'+
  238.       ' строит и выводит множество, состоящее из четных цифр, знаков'+
  239.       ' арифметических операций и скобок, содержащихся в последовательности.');
  240.    ResultSet := [];
  241.    Input := UserChoiceForInput();
  242.    BuidNewSet(Input, ResultSet);
  243.    UserChoiceForOutput(ResultSet);
  244.    ReadLn;
  245. end;
  246.  
  247. begin
  248.    Main();
  249. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement