Advertisement
THOMAS_SHELBY_18

Lab3_1(Delphi)

Nov 11th, 2023 (edited)
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.94 KB | Source Code | 0 0
  1. Program Lab3_1;
  2.  
  3. Uses
  4.     System.SysUtils;
  5. Var
  6.     TextIn, NewText: String;
  7.  
  8. Procedure PrintCondition();
  9. Begin
  10.     Writeln('Данная программа выведет каждое нечетное слово в кавычках, а каждое четное - в квадратных скобках');
  11. End;
  12.  
  13. Function ReadNum(Min, Max: Integer): Integer;
  14. Var
  15.     Num: Integer;
  16.     IsCorrect: Boolean;
  17. Begin
  18.     Repeat
  19.         IsCorrect := True;
  20.         Try
  21.             Readln(Num);
  22.         Except
  23.             Write('Некорректный ввод! Введите значение еще раз: ');
  24.             IsCorrect := False;
  25.         End;
  26.         If (IsCorrect) And ((Num < Min) Or (Num > Max)) Then
  27.         Begin
  28.             Write('Недопустимое значение! Введите значение еще раз: ');
  29.             IsCorrect := False;
  30.         End;
  31.     Until (IsCorrect);
  32.     ReadNum := Num;
  33. End;
  34.  
  35. Function GetLastSymbIndex(Text: String): Integer;
  36. Var
  37.     I: Integer;
  38.     C: Char;
  39. Begin
  40.     I := High(Text);
  41.     Repeat
  42.         Dec(I);
  43.         C := Text[I];
  44.     Until (C <> #32);
  45.     GetLastSymbIndex := I;
  46. End;
  47.  
  48. Function GetNextSpaceIndex(Text: String; SpaceIndex: Integer): Integer;
  49. Var
  50.     I: Integer;
  51.     C: Char;
  52. Begin
  53.     I := SpaceIndex;
  54.     Repeat
  55.         Inc(I);
  56.         C := Text[I];
  57.     Until (C = #32);
  58.     GetNextSpaceIndex := I;
  59. End;
  60.  
  61. Function GetNewWord(Text: String; Var SpaceIndex: Integer; NumWord: Integer): String;
  62. Var
  63.     I, NextSpaceIndex: Integer;
  64.     Word: String;
  65.     BeginSym, EndSym: Char;
  66. Begin
  67.     Repeat
  68.         NextSpaceIndex := GetNextSpaceIndex(Text, SpaceIndex);
  69.         Inc(SpaceIndex);
  70.     Until NextSpaceIndex - SpaceIndex > 0;
  71.  
  72.     I := SpaceIndex;
  73.  
  74.     If NumWord Mod 2 = 1 Then
  75.     Begin
  76.         BeginSym := '"';
  77.         EndSym := '"';
  78.     End
  79.     Else
  80.     Begin
  81.         BeginSym := '[';
  82.         EndSym := ']';
  83.     End;
  84.  
  85.     Word := BeginSym;
  86.     Repeat
  87.         Word := Word + Text[I];
  88.         Inc(I);
  89.     Until (I = NextSpaceIndex);
  90.     Word := Word + EndSym;
  91.  
  92.     SpaceIndex := NextSpaceIndex;
  93.  
  94.     GetNewWord := Word;
  95. End;
  96.  
  97. Function GetNewText(Text: String): String;
  98. Var
  99.     SpaceIndex, NumWord, LastSpaceIndex: Integer;
  100.     NewWord, NewText: String;
  101. Begin
  102.     NumWord := 1;
  103.     SpaceIndex := 0;
  104.     LastSpaceIndex := GetLastSymbIndex(Text) + 1;
  105.  
  106.     Repeat
  107.         NewWord := GetNewWord(Text, SpaceIndex, NumWord);
  108.         NewText := NewText + NewWord + ' ';
  109.         Inc(NumWord);
  110.     Until SpaceIndex = LastSpaceIndex;
  111.  
  112.     GetNewText := NewText;
  113. End;
  114.  
  115. Function CheckFile(Path: String): Boolean;
  116. Var
  117.     CheckText, BufText: String;
  118.     IsFileCorrect: Boolean;
  119.     InputFile: TextFile;
  120.  
  121. Begin
  122.     IsFileCorrect := True;
  123.  
  124.     If FileExists(Path) Then
  125.     Begin
  126.         AssignFile(InputFile, Path);
  127.         Try
  128.             Reset(InputFile);
  129.         Except
  130.             Writeln('Не удалось открыть файл');
  131.             IsFileCorrect := False;
  132.         End;
  133.         If IsFileCorrect Then
  134.         Begin
  135.             Repeat
  136.                 Readln(InputFile, BufText);
  137.                 CheckText := CheckText + BufText;
  138.             Until Eof(InputFile);
  139.  
  140.             If (High(CheckText) = 0) Or (GetLastSymbIndex(CheckText) = 0) Then
  141.             Begin
  142.                 Writeln('Файл пустой!');
  143.                 IsFileCorrect := False;
  144.             End;
  145.             Close(InputFile)
  146.         End;
  147.     End
  148.     Else
  149.     Begin
  150.         Writeln('Файла по данному пути не существует!');
  151.         IsFileCorrect := False;
  152.     End;
  153.  
  154.     CheckFile := IsFileCorrect;
  155. End;
  156.  
  157. Function ReadFile(Path: String): String;
  158. Var
  159.     Text, BufText: String;
  160.     InputFile: TextFile;
  161. Begin
  162.     AssignFile(InputFile, Path);
  163.     Reset(InputFile);
  164.  
  165.     Repeat
  166.         Readln(InputFile, BufText);
  167.         Text := Text + BufText + ' ';
  168.     Until Eof(InputFile);
  169.     Close(InputFile);
  170.  
  171.     ReadFile := Text;
  172. End;
  173.  
  174. Function InputTextFromFile(): String;
  175. Var
  176.     PathFile, Text: String;
  177.     IsInputFromFileSuccessfully: Boolean;
  178. Begin
  179. Writeln('Данные в файле должны содержать текст');
  180.     Repeat
  181.         Write('Введите путь к файлу с его раширением: ');
  182.         Readln(PathFile);
  183.         IsInputFromFileSuccessfully := CheckFile(PathFile);
  184.     Until IsInputFromFileSuccessfully;
  185.     Text := ReadFile(PathFile);
  186.  
  187.     InputTextFromFile := Text;
  188. End;
  189.  
  190. Function InputTextFromConsole(): String;
  191. Var
  192.     Text: String;
  193.     IsTextEmpty: Boolean;
  194. Begin
  195.     Repeat
  196.         Writeln('Введите текст:');
  197.         Readln(Text);
  198.         IsTextEmpty := (High(Text) = 0) Or (GetLastSymbIndex(Text) = 0);
  199.     Until Not IsTextEmpty;
  200.  
  201.     InputTextFromConsole := Text;
  202. End;
  203.  
  204. Function InputText(): String;
  205. Var
  206.     Choice: Integer;
  207.     Text: String;
  208. Begin
  209.     Write('Выберите вариант ввода:', #10, '1. Ввод из консоли', #10, '2. Ввод из файла', #10, 'Использовать вариант: ');
  210.     Choice := ReadNum(1,2);
  211.  
  212.     If Choice = 1 Then
  213.         Text := InputTextFromConsole()
  214.     Else
  215.         Text := InputTextFromFile();
  216.  
  217.     Text := Text + ' ';
  218.  
  219.     InputText := Text;
  220. End;
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227. Procedure OutputTextToConsole(Text: String);
  228. Begin
  229.     Writeln(Text);
  230. End;
  231.  
  232. Procedure OutputTextToFile(Text: String);
  233. Var
  234.     IsPathCorrect: Boolean;
  235.     Path: String;
  236.     OutputFile: TextFile;
  237. Begin
  238.     Writeln('Для вывода введите путь к файлу и его имя c расширением. Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)');
  239.     Repeat
  240.         IsPathCorrect := True;
  241.         Write('Введите путь: ');
  242.         Readln(Path);
  243.         If Path = '' Then
  244.             IsPathCorrect := false
  245.         Else
  246.         Begin
  247.             AssignFile(OutputFile, Path);
  248.             Try
  249.                 Rewrite(OutputFile);
  250.             Except
  251.                 Writeln('Не удалось вывести в Файл');
  252.                 IsPathCorrect := False;
  253.             End;
  254.         End;
  255.     Until IsPathCorrect;
  256.  
  257.     Writeln(OutputFile, Text);
  258.     CloseFile(OutputFile);
  259.     Writeln('Вывод данных...  успешно!');
  260. End;
  261.  
  262.  
  263. Procedure OutputText(Text: String);
  264. Var
  265.     Choice: Integer;
  266. Begin
  267.     Write('Выберите вариант вывода:', #10, '1. Вывод в консоль', #10, '2. Вывод файл', #10, 'Использовать вариант: ');
  268.     Choice := ReadNum(1,2);
  269.  
  270.     If Choice = 1 Then
  271.         OutputTextToConsole(Text)
  272.     Else
  273.         OutputTextToFile(Text);
  274. End;
  275.  
  276.  
  277. Begin
  278.     PrintCondition();
  279.     TextIn := InputText();
  280.     NewText := GetNewText(TextIn);
  281.     OutputText(NewText);
  282.     Readln;
  283. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement