Advertisement
gguuppyy

лаба3н1

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