Advertisement
deced

Untitled

Nov 3rd, 2020
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.36 KB | None | 0 0
  1. program Lab3_1;
  2.  
  3. uses System.SysUtils, System.StrUtils;
  4.  
  5. Const
  6.     Separators = ' ,.:;-?!()[]{}@#$%&';
  7.  
  8. function GetEndIndex(InputString: String; Index: Integer): Integer;
  9. begin
  10.     while not(ContainsText(Separators, InputString[Index])) do
  11.     begin
  12.         inc(Index)
  13.     end;
  14.     dec(Index);
  15.     GetEndIndex := Index;
  16. end;
  17.  
  18. function GetNextWordIndex(InputString: String; Index: Integer): Integer;
  19. begin
  20.     inc(Index);
  21.     while (ContainsText(Separators, InputString[Index])) do
  22.     begin
  23.         inc(Index)
  24.     end;
  25.     GetNextWordIndex := Index;
  26. end;
  27.  
  28. function GetWord(InputString: String; FromIndex, ToIndex: Integer): String;
  29. var
  30.     I: Integer;
  31.     Ret: string;
  32. begin
  33.     Ret := '';
  34.     if ToIndex > high(InputString) then
  35.         ToIndex := high(InputString);
  36.     for I := FromIndex to ToIndex do
  37.         Ret := Ret + InputString[I];
  38.     GetWord := Ret;
  39. end;
  40.  
  41. function GetInputType(): String;
  42. var
  43.     Ret: string;
  44.     IsCorrect: Boolean;
  45. begin
  46.     IsCorrect := False;
  47.     repeat
  48.         Writeln('Выберите способ ввода предложения файл/консоль (ф/к)');
  49.         Readln(Ret);
  50.         if (Ret = 'ф') or (Ret = 'Ф') or (Ret = 'Файл') or (Ret = 'файл') then
  51.         begin
  52.             Ret := 'File';
  53.             IsCorrect := True;
  54.         end
  55.         else if (Ret = 'к') or (Ret = 'К') or (Ret = 'Консоль') or
  56.           (Ret = 'консоль') then
  57.         begin
  58.             Ret := 'Console';
  59.             IsCorrect := True;
  60.         end;
  61.     until IsCorrect;
  62.     GetInputType := Ret;
  63. end;
  64.  
  65. function GetInputFilePath(): String;
  66. var
  67.     Path: String;
  68.     IsCorrect: Boolean;
  69. begin
  70.     IsCorrect := False;
  71.     repeat
  72.         Writeln('Введите абсолютный путь к файлу ');
  73.         Readln(Path);
  74.         if FileExists(Path) then
  75.             IsCorrect := True
  76.         else
  77.             Writeln('Файл не найден');
  78.  
  79.     until IsCorrect;
  80.     GetInputFilePath := Path;
  81. end;
  82.  
  83. function GetInputStringFromConsole(): String;
  84. var
  85.     Ret: String;
  86. begin
  87.     Writeln('Введите исходное предложение');
  88.     Readln(Ret);
  89.     GetInputStringFromConsole := Ret;
  90. end;
  91.  
  92. function GetInputStringFromFile(): String;
  93. var
  94.     Ret, FilePath: String;
  95.     InputFile: TextFile;
  96. begin
  97.     FilePath := GetInputFilePath();
  98.     AssignFile(InputFile, FilePath);
  99.     Reset(InputFile);
  100.     Read(InputFile, Ret);
  101.     CloseFile(InputFile);
  102.     GetInputStringFromFile := Ret;
  103. end;
  104.  
  105. function GetInputString(): String;
  106. var
  107.     Ret, InputType: String;
  108. begin
  109.     InputType := GetInputType();
  110.     if (InputType = 'Console') then
  111.         Ret := GetInputStringFromConsole()
  112.     else if (InputType = 'File') then
  113.         Ret := GetInputStringFromFile();
  114.     GetInputString := Ret;
  115. end;
  116.  
  117. function SwapTwoWords(ToSwap: String;FirstStartindex: Integer): String;
  118. var
  119.     Word1, Word2, Separator: String;
  120.     FirstEndIndex, SecondStartIndex, SecondEndIndex: Integer;
  121. begin
  122.     FirstEndIndex := GetEndIndex(ToSwap, FirstStartindex);
  123.     SecondStartIndex := GetNextWordIndex(ToSwap, FirstEndIndex);
  124.     SecondEndIndex := GetEndIndex(ToSwap, SecondStartIndex);
  125.     Word1 := GetWord(ToSwap, FirstStartindex, FirstEndIndex);
  126.     Word2 := GetWord(ToSwap, SecondStartIndex, SecondEndIndex);
  127.     Separator := GetWord(ToSwap, FirstEndIndex + 1, SecondStartIndex - 1);
  128.     SwapTwoWords := Word2 + Separator + Word1;
  129. end;
  130.  
  131. function SwapString(StringToSwap: String): String;
  132. var
  133.     I: Integer;
  134.     Ret: String;
  135. begin
  136.     I := 1;
  137.     while I < Length(StringToSwap) + 1 do
  138.     begin
  139.         if ContainsText(Separators, StringToSwap[I]) then
  140.             Ret := Ret + StringToSwap[I]
  141.         else
  142.         begin
  143.             Ret := Ret + SwapTwoWords(StringToSwap, I);
  144.                    I:= Ret.Length;
  145.         end;
  146.         inc(I);
  147.     end;
  148.     SwapString := Ret;
  149. end;
  150.  
  151. function GetOutputDirectory(): String;
  152. var
  153.     Ret: String;
  154.     IsCorrect: Boolean;
  155. begin
  156.     IsCorrect := False;
  157.     repeat
  158.         Writeln('Введите директорию, в которую хотите сохранить вывод программы');
  159.         Readln(Ret);
  160.         if DirectoryExists(Ret) then
  161.             IsCorrect := True
  162.         else
  163.             Writeln('Такой директории не существует.Попробуйте ещё раз');
  164.     until IsCorrect;
  165.     GetOutputDirectory := Ret;
  166. end;
  167.  
  168. procedure PrintOutputToFile(Input, Output: String);
  169. var
  170.     OutputFile: TextFile;
  171.     Directory: String;
  172. begin
  173.     Directory := GetOutputDirectory();
  174.     AssignFile(OutputFile, Directory + '\output.txt');
  175.     Rewrite(OutputFile);
  176.     Writeln(OutputFile, 'Входная строка: ');
  177.     Writeln(OutputFile, Input);
  178.     Writeln(OutputFile, 'Выходная строка: ');
  179.     Writeln(OutputFile, Output);
  180.  
  181.     Writeln('Файл сохранён по указанному пути');
  182.     CloseFile(OutputFile);
  183. end;
  184.  
  185. procedure PrintOutputToConsole(Input, Output: String);
  186. begin
  187.     Writeln('Входная строка: ');
  188.     Writeln(Input);
  189.     Writeln('Выходная строка: ');
  190.     Writeln(Output);
  191. end;
  192.  
  193. var
  194.     Input, Output: String;
  195.  
  196. begin
  197.     Input := GetInputString();
  198.     Output := SwapString(Input);
  199.     PrintOutputToConsole(Input, Output);
  200.     PrintOutputToFile(Input, Output);
  201.     Readln;
  202.  
  203. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement