Advertisement
deced

Untitled

Nov 3rd, 2020
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.31 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; I: Integer): Integer;
  9. begin
  10.     while not(ContainsText(Separators, InputString[I])) do
  11.     begin
  12.         inc(I)
  13.     end;
  14.     dec(I);
  15.     GetEndIndex := I;
  16. end;
  17.  
  18. function GetNextWordIndex(InputString: String; I: Integer): Integer;
  19. begin
  20.     inc(I);
  21.     while (ContainsText(Separators, InputString[I])) do
  22.     begin
  23.         inc(I)
  24.     end;
  25.     GetNextWordIndex := I;
  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.     repeat
  71.         Writeln('Введите абсолютный путь к файлу ');
  72.         Readln(Path);
  73.         IsCorrect := False;
  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; var FirstStartCounts: Integer): String;
  118. var
  119.     Word1, Word2, Separator: String;
  120.     FirstEndIndex, SecondStartIndex, SecondEndIndex: Integer;
  121. begin
  122.     FirstEndIndex := GetEndIndex(ToSwap, FirstStartCounts);
  123.     SecondStartIndex := GetNextWordIndex(ToSwap, FirstEndIndex);
  124.     SecondEndIndex := GetEndIndex(ToSwap, SecondStartIndex);
  125.     Word1 := GetWord(ToSwap, FirstStartCounts, FirstEndIndex);
  126.     Word2 := GetWord(ToSwap, SecondStartIndex, SecondEndIndex);
  127.     Separator := GetWord(ToSwap, FirstEndIndex + 1, SecondStartIndex - 1);
  128.     FirstStartCounts := SecondEndIndex;
  129.     SwapTwoWords := Word2 + Separator + Word1;
  130. end;
  131.  
  132. function SwapString(StringToSwap: String): String;
  133. var
  134.     I: Integer;
  135.     Ret: String;
  136. begin
  137.     I := 1;
  138.     while I < Length(StringToSwap) + 1 do
  139.     begin
  140.         if ContainsText(Separators, StringToSwap[I]) then
  141.             Ret := Ret + StringToSwap[I]
  142.         else
  143.             Ret := Ret + SwapTwoWords(StringToSwap, I);
  144.         inc(I);
  145.     end;
  146.     SwapString := Ret;
  147. end;
  148.  
  149. function GetOutputDirectory(): String;
  150. var
  151.     Ret: String;
  152.     IsCorrect: Boolean;
  153. begin
  154.     IsCorrect := False;
  155.     repeat
  156.         Writeln('Введите директорию, в которую хотите сохранить вывод программы');
  157.         Readln(Ret);
  158.         if DirectoryExists(Ret) then
  159.             IsCorrect := True
  160.         else
  161.             Writeln('Такой директории не существует.Попробуйте ещё раз');
  162.     until IsCorrect;
  163.     GetOutputDirectory := Ret;
  164. end;
  165.  
  166. procedure PrintOutputToFile(Input, Output: String);
  167. var
  168.     OutputFile: TextFile;
  169.     Directory: String;
  170. begin
  171.     Directory := GetOutputDirectory();
  172.     AssignFile(OutputFile, Directory + '\output.txt');
  173.     Rewrite(OutputFile);
  174.     Writeln(OutputFile, 'Входная строка: ');
  175.     Writeln(OutputFile, Input);
  176.     Writeln(OutputFile, 'Выходная строка: ');
  177.     Writeln(OutputFile, Output);
  178.  
  179.     Writeln('Файл сохранён по указанному пути');
  180.     CloseFile(OutputFile);
  181. end;
  182.  
  183. procedure PrintOutputToConsole(Input, Output: String);
  184. begin
  185.     Writeln('Входная строка: ');
  186.     Writeln(Input);
  187.     Writeln('Выходная строка: ');
  188.     Writeln(Output);
  189. end;
  190.  
  191. var
  192.     Input, Output: String;
  193.  
  194. begin
  195.     Input := GetInputString();
  196.     Output := SwapString(Input);
  197.     PrintOutputToConsole(Input, Output);
  198.     PrintOutputToFile(Input, Output);
  199.     Readln;
  200.  
  201. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement