Advertisement
Vernon_Roche

Задание 2 Delphi (Лабораторная работа 3)

Nov 12th, 2023
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.72 KB | None | 0 0
  1. Program Lab2;
  2.  
  3. Uses
  4.     System.SysUtils;
  5.  
  6. Type
  7.     TArray = Array[0..3] Of Integer;
  8.     TSet = Set Of Char;
  9.  
  10. Const
  11.     INPUT = 1;
  12.     OUTPUT = 2;
  13.     NULL_CODE = 48;
  14.     NINE_CODE = 57;
  15.  
  16. Function ChooseWay(Const IorOput: Integer): Integer;
  17. Var
  18.     Choice: Integer;
  19.     IsCorrect: Boolean;
  20. Begin
  21.     Case IorOput Of
  22.         INPUT:
  23.         Begin
  24.             Writeln('Выберите вариант ввода:');
  25.             Writeln('1.Данные вводятся из текстового файла.');
  26.             Writeln('2.Данные вводятся через консоль.');
  27.         End;
  28.         OUTPUT:
  29.         Begin
  30.             Writeln('Выберите вариант вывода:');
  31.             Writeln('1.Данные выводятся в текстовый файл.');
  32.             Writeln('2.Данные выводятся в консоль.');
  33.         End;
  34.     End;
  35.     Repeat
  36.         IsCorrect := True;
  37.         Try
  38.             Readln(Choice);
  39.         Except
  40.             Writeln('Ошибка ввода. Выберите вариант 1 или 2.');
  41.             IsCorrect := False;
  42.         End;
  43.         If IsCorrect And ((Choice < 1) Or (Choice > 2)) Then
  44.         Begin
  45.             Writeln('Ошибка ввода. Выберите вариант 1 или 2.');
  46.             IsCorrect := False;
  47.         End;
  48.     Until IsCorrect;
  49.     ChooseWay := Choice;
  50. End;
  51.  
  52. Function InputFileName(Const InOrOut: Integer): String;
  53. Var
  54.     CheckFile: TextFile;
  55.     FileName: String;
  56.     IsCorrect: Boolean;
  57. Begin
  58.     Case (InOrOut) Of
  59.         INPUT:
  60.         Begin
  61.             Writeln('Введите имя файла, из которого будут вводиться данные:');
  62.             Repeat
  63.                 IsCorrect := True;
  64.                 Readln(FileName);
  65.                 If ExtractFileExt(FileName) = '.txt' Then
  66.                 Begin
  67.                     If Not FileExists(FileName) Then
  68.                     Begin
  69.                         Writeln('Файла с таким именем не существует. Повторите ввод имени файла.');
  70.                         IsCorrect := False;
  71.                     End
  72.                     Else
  73.                         Try
  74.                             Assign(CheckFile, FileName);
  75.                             Reset(CheckFile);
  76.                             Close(CheckFile);
  77.                         Except
  78.                             Writeln('Невозможно открыть файл с таким именем! Повторите ввод имени файла:');
  79.                             IsCorrect := False;
  80.                         End;
  81.                 End
  82.                 Else
  83.                 Begin
  84.                     Writeln('Файл должен иметь расширение .txt! Повторите ввод имени файла.');
  85.                     IsCorrect := False;
  86.                 End;
  87.             Until IsCorrect;
  88.             InputFileName := FileName;
  89.         End;
  90.         OUTPUT:
  91.         Begin
  92.             Writeln('Введите имя файла, в который будут выводиться полученные данные (если файл вводится без расширения, то ему автоматически будет добавлено расширение .txt):');
  93.             Repeat
  94.                 IsCorrect := True;
  95.                 Readln(FileName);
  96.                 If ExtractFileExt(FileName) = '' Then
  97.                     FileName := FileName + '.txt';
  98.                 Try
  99.                     Assign(CheckFile, FileName);
  100.                     ReWrite(CheckFile);
  101.                     Close(CheckFile);
  102.                 Except
  103.                     Writeln('Невозможно открыть для записи файл с таким именем! Повторите ввод имени файла:');
  104.                     IsCorrect := False;
  105.                 End;
  106.             Until IsCorrect;
  107.             InputFileName := FileName;
  108.         End;
  109.     End;
  110. End;
  111.  
  112. Procedure InputFromFile(Var Text: AnsiString; Var FileName: String);
  113. Var
  114.     FileString: String;
  115.     InputFile: TextFile;
  116. Begin
  117.     Text := '';
  118.     Assign(InputFile, FileName);
  119.     Reset(InputFile);
  120.     While (Not EoF(InputFile)) Do
  121.     Begin
  122.         Readln(InputFile, FileString);
  123.         Text := Text + FileString;
  124.     End;
  125.     Close(InputFile);
  126. End;
  127.  
  128. Procedure InputFromConsole(Var Text: AnsiString);
  129. Begin
  130.     Writeln('Введите строку для обработки:');
  131.     Readln(Text);
  132. End;
  133.  
  134. Procedure InputText(Var Text: AnsiString; Var Choice: Integer);
  135. Var
  136.     FileName: String;
  137.     InputFile: TextFile;
  138. Begin
  139.     Case Choice Of
  140.         1:
  141.         Begin
  142.             FileName := InputFileName(INPUT);
  143.             InputFromFile(Text, FileName);
  144.         End;
  145.         2:
  146.             InputFromConsole(Text);
  147.     End;
  148. End;
  149.  
  150. Procedure OutputInFile(Var FileName: String; Var ResultSet: TSet);
  151. Var
  152.     OutputFile: TextFile;
  153.     I: Char;
  154. Begin
  155.     Assign(OutputFile, FileName);
  156.     ReWrite(OutputFile);
  157.     For I In ResultSet Do
  158.         Write(OutputFile, I, ' ');
  159.     Close(OutputFile);
  160. End;
  161.  
  162. Procedure OutputInConsole(Var ResultSet: TSet);
  163. Var
  164.     I: Char;
  165. Begin
  166.     Writeln('Искомое множество:');
  167.     For I In ResultSet Do
  168.         Write(I, ' ');
  169. End;
  170.  
  171. Procedure OutputResult(Var ResultSet: TSet; Var Choice: Integer);
  172. Var
  173.     FileName: String;
  174. Begin
  175.     Case Choice Of
  176.         1:
  177.         Begin
  178.             FileName := InputFileName(OUTPUT);
  179.             OutputInFile(FileName, ResultSet);
  180.             Write('Искомые данные выведены в файл ');
  181.             Writeln(FileName);
  182.         End;
  183.         2:
  184.             OutputInConsole(ResultSet);
  185.     End;
  186. End;
  187.  
  188. Procedure SearchNumsAndSigns(Var ResultSet: TSet; Var NumsAndSigns: TSet; Var Text: AnsiString);
  189. Var
  190.     I: Integer;
  191. Begin
  192.     For I := 1 To High(Text) Do
  193.         If Text[I] In NumsAndSigns Then
  194.             Include(ResultSet, Text[I]);
  195. End;
  196.  
  197. Var
  198.     Text: AnsiString;
  199.     Choice: Integer;
  200.     NumsAndSigns: TSet = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '/', '*'];
  201.     ResultSet: TSet;
  202. Begin
  203.     Writeln('Программа выводит содержащиеся в тексте (текст должен содержать от 1 до 4 цифровых символов, отображающих целые числа от 1 до 2000) числа в десятичной и римской системах счисления.');
  204.     Choice := ChooseWay(INPUT);
  205.     InputText(Text, Choice);
  206.     SearchNumsAndSigns(ResultSet, NumsAndSigns, Text);
  207.     Choice := ChooseWay(OUTPUT);
  208.     OutputResult(ResultSet, Choice);
  209.     Readln;
  210. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement