Advertisement
nblknn

lab 3.1

Nov 18th, 2023
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.38 KB | None | 0 0
  1. Program LAB3_1;
  2.  
  3. Uses
  4.     System.SysUtils;
  5.  
  6. Const
  7.     LETTERS = [#65 .. #90, #97 .. #122];
  8.     OPENBRACE = '(';
  9.     CLOSEBRACE = ')';
  10.  
  11. Procedure WriteCondition();
  12. Begin
  13.     Writeln('Данная программа в каждом четном слове текста заменяет все буквы на прописные,',
  14.       #10, 'а каждое нечетное слово заключает в круглые скобки.');
  15. End;
  16.  
  17. Function CheckChoiceInput(OutputMessage: String): Integer;
  18. Var
  19.     Num: Integer;
  20.     IsCorrect: Boolean;
  21. Begin
  22.     Repeat
  23.         IsCorrect := True;
  24.         Writeln(OutputMessage);
  25.         Try
  26.             Readln(Num);
  27.         Except
  28.             IsCorrect := False;
  29.             Writeln('Введенные данные не соответствуют условию. Повторите попытку.');
  30.         End;
  31.         If IsCorrect And ((Num <> 0) And (Num <> 1)) Then
  32.         Begin
  33.             IsCorrect := False;
  34.             Writeln('Введенные данные не соответствуют условию. Повторите попытку.');
  35.         End;
  36.     Until (IsCorrect);
  37.     Writeln;
  38.     CheckChoiceInput := Num;
  39. End;
  40.  
  41. Function CheckText(Text: String): Boolean;
  42. Var
  43.     I: Integer;
  44.     IsCorrect: Boolean;
  45. Begin
  46.     IsCorrect := False;
  47.     If Text = '' Then
  48.         Writeln('В тексте нет символов. Повторите попытку.')
  49.     Else
  50.     Begin
  51.         I := 1;
  52.         While Not IsCorrect And (I < (Length(Text) + 1)) Do
  53.         Begin
  54.             If Text[I] In LETTERS Then
  55.                 IsCorrect := True;
  56.             Inc(I);
  57.         End;
  58.         If Not IsCorrect Then
  59.             Writeln('В тексте нет латинских букв. Повторите попытку.');
  60.     End;
  61.     CheckText := IsCorrect;
  62. End;
  63.  
  64. Function InputTextFromConsole(): String;
  65. Var
  66.     Text: String;
  67.     IsCorrect: Boolean;
  68. Begin
  69.     Repeat
  70.         IsCorrect := False;
  71.         Writeln('Введите текст (латинскими буквами).');
  72.         Readln(Text);
  73.         IsCorrect := CheckText(Text);
  74.     Until IsCorrect;
  75.     Writeln;
  76.     InputTextFromConsole := Text;
  77. End;
  78.  
  79. Function CheckFilePath(Path: String): Boolean;
  80. Var
  81.     IsCorrect: Boolean;
  82. Begin
  83.     If Not FileExists(Path) Then
  84.     Begin
  85.         Writeln('Введенного файла не существует. Повторите попытку.');
  86.         IsCorrect := False;
  87.     End
  88.     Else If ExtractFileExt(Path) <> '.txt' Then
  89.     Begin
  90.         Writeln('Введенный Вами файл не является текстовым. Повторите попытку.');
  91.         IsCorrect := False;
  92.     End;
  93.     CheckFilePath := IsCorrect;
  94. End;
  95.  
  96. Function CheckFileInputPath(): String;
  97. Var
  98.     Path: String;
  99.     IsCorrect: Boolean;
  100. Begin
  101.     Repeat
  102.         IsCorrect := True;
  103.         Writeln('Введите путь к файлу, содержащему текст (буквы текста должны быть латинскими).');
  104.         Readln(Path);
  105.         IsCorrect := CheckFilePath(Path);
  106.     Until IsCorrect;
  107.     CheckFileInputPath := Path;
  108. End;
  109.  
  110. Function GetTextFromFile(Path: String): String;
  111. Var
  112.     I: Integer;
  113.     Text, Line: String;
  114.     IsCorrect: Boolean;
  115.     FIn: TextFile;
  116. Begin
  117.     Repeat
  118.         IsCorrect := False;
  119.         Assign(FIn, Path);
  120.         Try
  121.             Reset(FIn);
  122.             While Not Eof(FIn) Do
  123.             Begin
  124.                 Readln(FIn, Line);
  125.                 Text := Text + Line + #10;
  126.             End;
  127.             IsCorrect := CheckText(Text);
  128.         Except
  129.             Writeln('Произошла ошибка. Повторите попытку.');
  130.             IsCorrect := False;
  131.         End;
  132.         CloseFile(FIn);
  133.         If Not IsCorrect Then
  134.             Path := CheckFileInputPath();
  135.     Until IsCorrect;
  136.     Writeln('Данные из файла успешно считаны.');
  137.     Writeln;
  138.     GetTextFromFile := Text;
  139. End;
  140.  
  141. Function FormatText(Text: String): String;
  142. Var
  143.     I: Integer;
  144.     IsOdd: Boolean;
  145.     Word: String;
  146. Begin
  147.     IsOdd := True;
  148.     For I := 1 To (Length(Text) - 1) Do
  149.         If Text[I] In LETTERS Then
  150.         Begin
  151.             Word := Word + Text[I];
  152.             If Not(Text[I + 1] In LETTERS) Or
  153.               ((I + 1 = Length(Text)) And (Text[Length(Text)] In LETTERS)) Then
  154.             Begin
  155.                 If (I + 1 = Length(Text)) And
  156.                   (Text[Length(Text)] In LETTERS) Then
  157.                     Word := Word + Text[I + 1];
  158.                 If IsOdd Then
  159.                 Begin
  160.                     Word := OPENBRACE + Word + CLOSEBRACE;
  161.                     Result := Result + Word;
  162.                     Word := '';
  163.                     IsOdd := False;
  164.                 End
  165.                 Else
  166.                 Begin
  167.                     Word := UpperCase(Word);
  168.                     Result := Result + Word;
  169.                     Word := '';
  170.                     IsOdd := True;
  171.                 End;
  172.             End;
  173.         End
  174.         Else
  175.             Result := Result + Text[I];
  176.     If Not(Text[Length(Text)] In LETTERS) Then
  177.         Result := Result + Text[Length(Text)];
  178.     FormatText := Result;
  179. End;
  180.  
  181. Function CheckFileOutputPath(): String;
  182. Var
  183.     Path: String;
  184.     IsCorrect: Boolean;
  185. Begin
  186.     Repeat
  187.         IsCorrect := True;
  188.         Writeln('Введите путь к файлу, в который нужно записать результат.');
  189.         Readln(Path);
  190.         IsCorrect := CheckFilePath(Path);
  191.         If IsCorrect And FileIsReadOnly(Path) Then
  192.         Begin
  193.             Writeln('Введенный Вами файл доступен только для чтения. Повторите попытку.');
  194.             IsCorrect := False;
  195.         End;
  196.     Until IsCorrect;
  197.     CheckFileOutputPath := Path;
  198. End;
  199.  
  200. Procedure WriteResultIntoFile(Result, Path: String);
  201. Var
  202.     FOut: TextFile;
  203.     IsCorrect: Boolean;
  204. Begin
  205.     Repeat
  206.         IsCorrect := True;
  207.         Assign(FOut, Path);
  208.         Try
  209.             Rewrite(FOut);
  210.             Writeln(FOut, Result);
  211.         Except
  212.             Writeln('Произошла ошибка. Повторите попытку.');
  213.             IsCorrect := False;
  214.             Path := CheckFileOutputPath();
  215.         End;
  216.         CloseFile(FOut);
  217.     Until IsCorrect;
  218.     Writeln('Результат записан.');
  219. End;
  220.  
  221. Var
  222.     Choice: Integer;
  223.     Text, Result, FInPath, FOutPath: String;
  224.  
  225. Begin
  226.     WriteCondition();
  227.     Choice := CheckChoiceInput
  228.       ('Если Вы хотите вводить данные в консоль, введите 0. Если использовать файл, введите 1.');
  229.     If Choice = 0 Then
  230.         Text := InputTextFromConsole()
  231.     Else
  232.     Begin
  233.         FInPath := CheckFileInputPath();
  234.         Text := GetTextFromFile(FInPath);
  235.         Writeln('Введенный текст:', #10, Text);
  236.     End;
  237.     Result := FormatText(Text);
  238.     Choice := CheckChoiceInput
  239.       ('Если Вы хотите вывести результат в консоль, введите 0. Если в файл, введите 1.');
  240.     If Choice = 0 Then
  241.         Writeln('Результат:', #10, Result)
  242.     Else
  243.     Begin
  244.         FOutPath := CheckFileOutputPath();
  245.         WriteResultIntoFile(Result, FOutPath);
  246.     End;
  247.     Readln;
  248.  
  249. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement