Advertisement
venik2405

lab3_4

Dec 9th, 2020
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.50 KB | None | 0 0
  1. Program lab3_4;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.     System.SysUtils;
  7.  
  8. Function InputFileLocation(): string;
  9. Var
  10.     IsCorrect: Boolean;
  11.     Location: String;
  12. Begin
  13.     Repeat
  14.         IsCorrect := false;
  15.         WriteLn('Enter file location:');
  16.         ReadLn(Location);
  17.         If FileExists(Location) then
  18.             IsCorrect := true
  19.         Else
  20.         Begin
  21.             WriteLn('Please enter the correct location');
  22.             WriteLn('');
  23.         End;
  24.     Until IsCorrect;
  25.     InputFileLocation := Location;
  26. End;
  27.  
  28.  
  29. Function ChooseInput(): integer;
  30. Var
  31.     Line: String;
  32.     IsCorrect: Boolean;
  33. Begin
  34.     Repeat
  35.         IsCorrect := true;
  36.         WriteLn('Do you want to input from file? (y/n)');
  37.         ReadLn(line);
  38.         Line := Line.ToLower();
  39.         If(Line <> '') and (Line <> 'y') and (Line <> 'n') then
  40.         Begin
  41.             IsCorrect := false;
  42.             WriteLn('Enter valid answer');
  43.         End;
  44.     Until IsCorrect;
  45.     If (Line = '') or (Line = 'y') then
  46.         ChooseInput := 0
  47.     Else
  48.         ChooseInput := 1;
  49. End;
  50.  
  51. Procedure OutputToFile(Flag: Integer);
  52. var
  53.     TFile: TextFile;
  54. begin
  55.     AssignFile(TFile, InputFileLocation());
  56.     Rewrite(TFile);
  57.     if Flag = 0 then
  58.         writeln(TFile, 'Баланск скобок соблюдён')
  59.     Else
  60.         writeln(TFile, 'Баланск скобок нарушен');
  61.     CloseFile(TFile);
  62. end;
  63.  
  64. Function FindBalance(Str: String): Integer;
  65. Var
  66.     I, Flag: Integer;
  67. Begin
  68.     I := 1;
  69.     Flag := 0;
  70.     while ((Flag >= 0) And (I <= High(Str))) do
  71.     begin
  72.         if Str[I] = '(' then flag := flag + 1;
  73.         if Str[I] = ')' then flag := flag - 1;
  74.         i:=i+1
  75.     end;
  76.     FindBalance := Flag;
  77. End;
  78.  
  79. Procedure PrintToConsole(Flag: Integer);
  80. Begin
  81.     if Flag = 0 then
  82.         writeln('Баланск скобок соблюдён')
  83.     Else
  84.         writeln('Баланск скобок нарушен');
  85. End;
  86.  
  87. Function GetLineFromConsole(): String;
  88. var
  89.     IsCorrect: Boolean;
  90.     Str: String;
  91. begin
  92.     repeat
  93.         IsCorrect := true;
  94.         ReadLn(Str);
  95.         if Length(Str) = 0 then
  96.         begin
  97.             WriteLn('The line is empty, please, try to enter it one more time');
  98.             IsCorrect := false;
  99.         end;
  100.     until IsCorrect;
  101.     GetLineFromConsole := Str;
  102. end;
  103.  
  104. Function GetLineFromFile(): String;
  105. var
  106.     IsCorrect: Boolean;
  107.     TFile: TextFile;
  108.     Str: String;
  109. begin
  110.     repeat
  111.         Str := '';
  112.         IsCorrect := true;
  113.         AssignFile(TFile, InputFileLocation());
  114.         Reset(TFile);
  115.         ReadLn(TFile, Str);
  116.         CloseFile(TFile);
  117.         if (Length(Str) = 0) then
  118.         begin
  119.             WriteLn('String is empty. Enter another file location');
  120.             IsCorrect := false;
  121.         end;
  122.     until IsCorrect;
  123.     GetLineFromFile := Str;
  124. end;
  125.  
  126. Procedure Main();
  127. Var
  128.     ChosenInput: Integer;
  129.     Str: String;
  130.     I, Flag : Integer;
  131. Begin
  132.     Str := '';
  133.     WriteLn('Проверить, имеется ли в заданном тексте баланс открывающих и закрывающих скобок.');
  134.     ChosenInput := ChooseInput();
  135.     If (ChosenInput = 0) then
  136.         Str := GetLineFromFile()
  137.     Else
  138.     Begin
  139.         writeln('Введите строку');
  140.         Str := GetLineFromConsole();
  141.     End;
  142.     writeln('Результат:');
  143.     Flag := FindBalance(Str);
  144.     PrintToConsole(Flag);
  145.     WriteLn;
  146.     OutputToFile(Flag);
  147.     Readln;
  148. End;
  149.  
  150. Begin
  151.     Main();
  152. End.
  153.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement