Advertisement
believe_me

Untitled

Nov 23rd, 2021
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.94 KB | None | 0 0
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. uses
  7.   System.SysUtils;
  8.  
  9. Function CheckExtension(Path: String): Boolean; forward;
  10.  
  11. Function InputNumber(MinNumber, MaxNumber: Integer): Integer;
  12.  
  13. var
  14.     IsCorrect: Boolean;
  15.     Number: Integer;
  16.  
  17. begin
  18.     repeat
  19.         IsCorrect := true;
  20.         try
  21.             Readln(Number);
  22.         except
  23.             Writeln('Нужно ввести целое число, которое не меньше ', MinNumber,
  24.                     ' и не больше ', MaxNumber);
  25.             IsCorrect := false;
  26.         end;
  27.         if IsCorrect and ((Number < MinNumber) or (Number > MaxNumber)) then
  28.         begin
  29.             Writeln('Нужно ввести целое число, которое не меньше ', MinNumber,
  30.                     ' и не больше ', MaxNumber);
  31.             IsCorrect := false;
  32.         end;
  33.     until IsCorrect;
  34.     InputNumber := Number;
  35. end;
  36.  
  37. Function ChooseWayOfInputOrOutput(): Integer;
  38.  
  39. const
  40.     CONSOLE_WAY = 1;
  41.     FILE_WAY = 2;
  42.  
  43. var
  44.     UserWay: Integer;
  45.  
  46. begin
  47.     Repeat
  48.         UserWay := InputNumber(1, 2);
  49.     Until (UserWay = CONSOLE_WAY) or (UserWay = FILE_WAY);
  50.     ChooseWayOfInputOrOutput := UserWay;
  51. end;
  52.  
  53. Function InputPathToFile(): String;
  54.  
  55. var
  56.     Path: String;
  57.     IsCorrect: Boolean;
  58.     NewFile: TextFile;
  59. begin
  60.     Writeln('Введите путь к файлу:');
  61.     repeat
  62.         Readln(Path);
  63.         IsCorrect := CheckExtension(Path);
  64.     until IsCorrect;
  65.     InputPathToFile := Path;
  66. end;
  67.  
  68. Function CheckPermissionForReading(Path: String): Boolean;
  69.  
  70. var
  71.     OutputFile: TextFile;
  72.     RightPermission: Boolean;
  73.  
  74. begin
  75.     Assign(OutputFile, Path);
  76.     RightPermission := true;
  77.     try
  78.         Reset(OutputFile);
  79.         Close(OutputFile);
  80.     except
  81.         Writeln('Файл закрыт для чтения.');
  82.         RightPermission := false;
  83.     end;
  84.     CheckPermissionForReading := RightPermission;
  85. end;
  86.  
  87. Function ReceiveTextFromConsole(): String;
  88.  
  89. var
  90.     XStart, XEnd: Integer;
  91.     Text: String;
  92.  
  93. begin
  94.     Writeln('Введите строку:');
  95.     Readln(Text);
  96.     ReceiveTextFromConsole := Text;
  97. end;
  98.  
  99. Function ReceiveTextFromFile(Path: String): String;
  100.  
  101. var
  102.     InputFile: TextFile;
  103.     Text: String;
  104.     IsCorrect: Boolean;
  105.  
  106. begin;
  107.     IsCorrect := true;
  108.     Assign(InputFile, Path);
  109.     Reset(InputFile);
  110.     Read(InputFile, Text);
  111.     Close(InputFile);
  112.     ReceiveTextFromFile := Text;
  113. end;
  114.  
  115. Function FindPlusOrMinus(Text: String): Integer;
  116.  
  117. var
  118.     i: Integer;
  119.     NumberOfElement: Integer;
  120.     IsCorrect: Boolean;
  121.  
  122. begin
  123.     NumberOfELement := 0;
  124.     IsCorrect := True;
  125.     i := 1;
  126.     while (i < length(Text)) and IsCorrect do
  127.     begin
  128.         if (Text[i] = '+') or (Text[i] = '-') then
  129.         begin
  130.            NumberOfElement := i;
  131.            IsCorrect := False;
  132.         end;
  133.         Inc(i);
  134.     end;
  135.     FindPlusOrMinus := NumberOfElement;
  136. end;
  137.  
  138. Function CheckText(Text: String): Boolean;
  139. var
  140.     IsCorrect, IsStringCorrect: Boolean;
  141.     i, Index, EndNumber: Integer;
  142. begin
  143.     IsCorrect := True;
  144.     Index := FindPlusOrMinus(Text);
  145.     if Index = 0 then
  146.         IsStringCorrect := false
  147.     else
  148.     begin
  149.         IsStringCorrect := true;
  150.         Inc(Index);
  151.         i := Index;
  152.         EndNumber:= length(Text) + 1;
  153.         while (i < EndNumber) and IsCorrect do
  154.         begin
  155.             if (Ord(Text[i]) > 47) and (Ord(Text[i]) < 58) then
  156.             begin
  157.                 IsCorrect := false;
  158.                 IsStringCorrect := true;
  159.             end
  160.             else
  161.                 IsStringCorrect := false;
  162.             Inc(i);
  163.         end;
  164.     end;
  165.     CheckText := IsStringCorrect;
  166. end;
  167.  
  168. Function ReceiveString(): String;
  169.  
  170. const
  171.     CONSOLE_WAY = 1;
  172.     FILE_WAY = 2;
  173.  
  174. var
  175.     Path: String;
  176.     Text: String;
  177.     UserWay: Integer;
  178.     IsTextCorrect: Boolean;
  179.     IsCorrect: Boolean;
  180.  
  181. begin;
  182.     repeat
  183.     begin
  184.     Writeln('Выберите способ ввода:'#13#10'Нажмите "1", если хотите ввести число с консоли.'#13#10'Нажмите "2", если хотите считать строку из файла.');
  185.     UserWay := ChooseWayOfInputOrOutput();
  186.     case UserWay of
  187.         CONSOLE_WAY:
  188.             begin
  189.                 Text := ReceiveTextFromConsole();
  190.             end;
  191.          FILE_WAY:
  192.             begin
  193.                 repeat
  194.                 Path := InputPathToFile();
  195.                 IsCorrect:= CheckPermissionForReading(Path);
  196.                 until IsCorrect;
  197.                 Text := ReceiveTextFromFile(Path);
  198.             end;
  199.     end;
  200.     IsTextCorrect := CheckText(Text);
  201.     if not IsTextCorrect then
  202.        Writeln('Нет знака или последующих за ним цифр.');
  203.     end;
  204.     until IsTextCorrect;
  205.     ReceiveString := Text;
  206. end;
  207.  
  208. Function ReceiveNumber(Text: String): String;
  209.  
  210. var
  211.     i, EndNumber: Integer;
  212.     ResultNumber: String;
  213.     IsCorrect : Boolean;
  214.  
  215. begin
  216.     IsCorrect := False;
  217.     i := FindPlusOrMinus(Text);
  218.     ResultNumber := Text[i];
  219.     Inc(i);
  220.     EndNumber := Length(Text) + 1;
  221.     while i < EndNumber do
  222.     begin
  223.         if (Ord(Text[i]) > 47) and (Ord(Text[i]) <58) then
  224.         begin
  225.             ResultNumber := ResultNumber + Copy(Text, I, 1);
  226.         end;
  227.         Inc(i);
  228.     end;
  229.     ReceiveNumber := ResultNumber;
  230. end;
  231.  
  232. Function CheckExtension(Path: String): Boolean;
  233.  
  234. var
  235.     RigthExtension: Boolean;
  236.  
  237. begin
  238.     if (ExtractFileExt(Path) = '.txt') then
  239.         RigthExtension := true
  240.     else
  241.     begin
  242.         Writeln('Неверное расширение файла.');
  243.         RigthExtension := false;
  244.     end;
  245.     CheckExtension := RigthExtension;
  246. end;
  247.  
  248. Function CheckPermissionForWriting(Path: String): Boolean;
  249.  
  250. var
  251.     OutputFile: TextFile;
  252.     RightPermission: Boolean;
  253.  
  254. begin
  255.     Assign(OutputFile, Path);
  256.     RightPermission := true;
  257.     try
  258.         Rewrite(OutputFile);
  259.         Close(OutputFile);
  260.     except
  261.         Writeln('Файл закрыт для записи.');
  262.         RightPermission := false;
  263.     end;
  264.     CheckPermissionForWriting := RightPermission;
  265. end;
  266.  
  267. Procedure PrintResultToFile(Path: String; ResultString: String);
  268.  
  269. var
  270.     OutputFile: TextFile;
  271.  
  272. begin
  273.     Assign(OutputFile, Path);
  274.     Rewrite(OutputFile);
  275.     Writeln(OutputFile,'Полученное число: ', ResultString);
  276.     Close(OutputFile);
  277. end;
  278.  
  279. Procedure PrintResultInConsole(ResultString: String);
  280.  
  281. begin;
  282.     Writeln('Полученное число: ', ResultString);
  283. end;
  284.  
  285. Procedure PrintResult(ResultString: String);
  286.  
  287. const
  288.     CONSOLE_WAY = 1;
  289.     FILE_WAY = 2;
  290.  
  291. var
  292.     UserWay: Integer;
  293.     Path: String;
  294.     IsCorrect: Boolean;
  295.  
  296. begin;
  297.     Writeln('Выберите способ вывода:'#13#10'Нажмите "1", если хотите вывести число в консоль.'#13#10'Нажмите "2", если хотите вывести число в файл.');
  298.     UserWay := ChooseWayOfInputOrOutput();
  299.     case UserWay of
  300.         CONSOLE_WAY:
  301.             begin
  302.                 PrintResultInConsole(ResultString);
  303.             end;
  304.          FILE_WAY:
  305.             begin
  306.                 repeat
  307.                 Path := InputPathToFile;
  308.                 IsCorrect := CheckPermissionForWriting(Path);
  309.                 until IsCorrect;
  310.                 PrintResultToFile(Path, ResultString);
  311.             end;
  312.     end;
  313. end;
  314.  
  315. Procedure Main();
  316.  
  317. var
  318.     Text, ResultNumber: String;
  319.     MaxFunctionValue: Double;
  320.  
  321. begin
  322.     Writeln('Программа выделяет из строки подстроку, которая соответствует целому числу, начинающемуся с ''+'' или ''-''.');
  323.     Text := ReceiveString();
  324.     ResultNumber := ReceiveNumber(Text);
  325.     PrintResult(ResultNumber);
  326.     Writeln('Программа завершена.');
  327.     Readln;
  328. end;
  329.  
  330. begin
  331.     Main();
  332. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement