Advertisement
gangsterpp12

dfdsf

Mar 23rd, 2024
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.77 KB | Software | 0 0
  1. Program Project2;
  2. uses
  3.   System.SysUtils,
  4.   System.Math;
  5.  
  6. Const
  7.   CHOICE_OF_CONSOLE = 1;
  8.   CHOICE_OF_FILE = 2;
  9.   LENGTH_OF_TXT_EXTENSION = 4;
  10.   TXT_EXT = '.txt';
  11.   LENGTH_OF_EMPTY_STRING = 0;
  12.  
  13. Var
  14.   MainString, PathToFile, TargetLetters, OutputPathToFile: String;
  15.   IsCorrect: Boolean;
  16.  
  17. Function ChooseVariant(Condition: String): Integer;
  18. Var
  19.   IsCorrect: Boolean;
  20.   Variant: Integer;
  21. Begin
  22.   IsCorrect := False;
  23.   Repeat
  24.     Write(Condition);
  25.     IsCorrect := True;
  26.     Try
  27.       Readln(Variant);
  28.     Except
  29.       Writeln('Выбор должен быть числом.');
  30.       IsCorrect := False;
  31.     End;
  32.  
  33.     If IsCorrect And ((Variant < CHOICE_OF_CONSOLE) Or (Variant > CHOICE_OF_FILE)) Then
  34.     Begin
  35.       Writeln('Выбор должен равняться либо ', CHOICE_OF_CONSOLE, ' либо ', CHOICE_OF_FILE);
  36.       IsCorrect := False;
  37.     End;
  38.   Until IsCorrect;
  39.  
  40.   Result := Variant;
  41. End;
  42.  
  43. Function IsFilesExtTxt(PathToFile: String): Boolean;
  44. Var
  45.   ExtensionFromPath: String;
  46.   LengthOfPath: Integer;
  47. Begin
  48.   LengthOfPath := Length(PathToFile);
  49.   If LengthOfPath <= LENGTH_OF_TXT_EXTENSION Then
  50.     Result := False
  51.   Else
  52.   Begin
  53.     ExtensionFromPath := Copy(PathToFile, LengthOfPath - LENGTH_OF_TXT_EXTENSION + 1, LENGTH_OF_TXT_EXTENSION);
  54.     Result := (ExtensionFromPath = TXT_EXT);
  55.   End;
  56. End;
  57.  
  58. Procedure GetDataFromFile(Var PathToFile: String; Var MainString:String);
  59. Var
  60.   F: TextFile;
  61.   IsCorrectFile: Boolean;
  62.   NumElements: Integer;
  63.   ElementsString: String;
  64. Begin
  65.   Repeat
  66.     Write('Введите путь к файлу для чтения информации: ');
  67.     Readln(PathToFile);
  68.     If FileExists(PathToFile) Then
  69.     Begin
  70.       If IsFilesExtTxt(PathToFile) Then
  71.       Begin
  72.         Assignfile(F, PathToFile);
  73.         Reset(F);
  74.         IsCorrectFile := True;
  75.         Readln(F, NumElements);
  76.         Readln(F, ElementsString);
  77.         Close(F);
  78.         MainString := ElementsString;
  79.       End
  80.       Else
  81.       Begin
  82.         Writeln('Неправильное расширение файла. Файл должен иметь расширение ', TXT_EXT);
  83.         IsCorrectFile := False;
  84.       End;
  85.     End
  86.     Else
  87.     Begin
  88.       Writeln('Файла с таким названием не существует, повторите попытку.');
  89.       IsCorrectFile := False;
  90.     End;
  91.   Until IsCorrectFile;
  92. End;
  93.  
  94. Function ReadData(Var PathToFile, MainString:String): String;
  95. Var
  96.   Condition: String;
  97.   Variant: Integer;
  98. Begin
  99.   Condition := 'Введите ' + IntToStr(CHOICE_OF_CONSOLE) + ' если хотите ввести данные в консоль или введите ' + IntToStr(CHOICE_OF_FILE) + ' если хотите использовать данные из файла: ';
  100.   Variant := ChooseVariant(Condition);
  101.   If Variant = CHOICE_OF_CONSOLE Then
  102.     ReadDataFromConsole(MainString)
  103.   Else If Variant = CHOICE_OF_FILE Then
  104.     GetDataFromFile(PathToFile, MainString);
  105.  
  106.   Result := MainString;
  107. End;
  108.  
  109. Function LongestIncreasingSubsequence(Const Sequence: String): String;
  110. Var
  111.   Lengths: Array Of Integer;
  112.   Predecessors: Array Of Integer;
  113.   ResultSeq: string;
  114.   I, J, MaxLength, MaxIndex: Integer;
  115. Begin
  116.   SetLength(Lengths, Length(Sequence));
  117.   SetLength(Predecessors, Length(Sequence));
  118.  
  119.   MaxLength := 0;
  120.   MaxIndex := 0;
  121.  
  122.   For I := 1 To Length(Sequence) Do
  123.   Begin
  124.     Lengths[I] := 1;
  125.     Predecessors[I] := 0;
  126.     For J := 1 To I - 1 Do
  127.     Begin
  128.       If (Sequence[J] < Sequence[I]) And (Lengths[J] + 1 > Lengths[I]) Then
  129.       Begin
  130.         Lengths[I] := Lengths[J] + 1;
  131.         Predecessors[I] := J;
  132.       End;
  133.     End;
  134.     If Lengths[I] > MaxLength Then
  135.     Begin
  136.       MaxLength := Lengths[I];
  137.       MaxIndex := I;
  138.     End;
  139.   End;
  140.  
  141.   I := MaxIndex;
  142.   ResultSeq := '';
  143.   While I <> 0 Do
  144.   Begin
  145.     ResultSeq := Sequence[I] + ResultSeq;
  146.     I := Predecessors[I];
  147.   End;
  148.  
  149.   Result := ResultSeq;
  150. End;
  151.  
  152. Procedure PrintLongestIncreasingSubsequence(Const Sequence: String);
  153. Var
  154.   LongestSubsequence: String;
  155. Begin
  156.   LongestSubsequence := LongestIncreasingSubsequence(Sequence);
  157.   Writeln('Наибольшая возрастающая последователньость: ', LongestSubsequence);
  158. End;
  159.  
  160. Procedure WriteCountToFile(OutputPathToFile: String; MainString: String; FilePath: String);
  161. Var
  162.   Subsequence: String;
  163.   FileHandle: TextFile;
  164.   IsCorrectFile: Boolean;
  165. Begin
  166.   Repeat
  167.     Write('Введите имя файла для записи ответа: ');
  168.     Readln(OutputPathToFile);
  169.     IsCorrectFile := True;
  170.     If Not IsFilesExtTxt(OutputPathToFile) Then
  171.     Begin
  172.       Writeln('Вы обратились к файлу с расширением, отличным от текстового, повторите поп
  173.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement