Advertisement
Guest User

Untitled

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