Advertisement
dxvmxnd

Untitled

Oct 23rd, 2024 (edited)
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 10.18 KB | None | 0 0
  1. Program Lab2Num4;
  2.  
  3. Uses
  4.  SysUtils;
  5.  
  6. Type
  7.  TArrOI = Array Of Integer;
  8.  
  9. Procedure OutputTaskCondition();
  10. Begin
  11.  Writeln('Данная программа определяет является ли последовательность, состоящая из элементов а_1, а_2,...,а_n восходящей.');
  12. End;
  13.  
  14. Procedure OutputInputChoice();
  15. Begin
  16.  Write('Введите 0, если хотите ввести данные из консоли, и 1 - из файла: ');
  17. End;
  18.  
  19. Function IsUserChoice(): Boolean;
  20. Const
  21.  MIN = 0;
  22.  MAX = 1;
  23. Var
  24.  IsCorrect, IsChoice: Boolean;
  25.  K: Byte;
  26. Begin
  27.  Repeat
  28.  IsCorrect := True;
  29.  Try
  30.  Readln(K);
  31.  Except
  32.  Writeln('Введены некорректные данные. Повторите ввод:');
  33.             IsCorrect := False;
  34.         End;
  35.         If IsCorrect And ((K > MAX) Or (K < MIN)) Then
  36.         Begin
  37.             Writeln('Число вне допустимого диапазона. Повторите ввод:');
  38.             IsCorrect := False;
  39.         End;
  40.     Until IsCorrect;
  41.     If (K = MIN) Then
  42.         IsChoice := False
  43.     Else
  44.         IsChoice := True;
  45.     IsUserChoice := IsChoice;
  46. End;
  47.  
  48. Procedure OutputPathInputCondition();
  49. Begin
  50.     Writeln('Введите путь к файлу, содержащему последовательность: ');
  51. End;
  52.  
  53. Function IsFileCorrect(Path: String): Boolean;
  54. Var
  55.     F: TextFile;
  56.     IsCorrect: Boolean;
  57. Begin
  58.     IsCorrect := True;
  59.     If Not FileExists(Path) Then
  60.     Begin
  61.         IsCorrect := False;
  62.         Write('Файл по заданному пути отсутствует. ');
  63.     End
  64.     Else If ExtractFileExt(Path) <> '.txt' Then
  65.     Begin
  66.         IsCorrect := False;
  67.         Write('Недопустимое расширение файла. ');
  68.     End;
  69.     If IsCorrect Then
  70.     Begin
  71.         AssignFile(F, Path);
  72.         Try
  73.             Reset(F);
  74.         Except
  75.             IsCorrect := False;
  76.             Write('Файл недоступен для открытия. ');
  77.         End;
  78.         CloseFile(F);
  79.     End;
  80.     IsFileCorrect := IsCorrect;
  81. End;
  82.  
  83. Function IsNumberOfElementsCorrect(Var InputF: TextFile): Boolean;
  84. Const
  85.     MIN = 2;
  86. Var
  87.     N: Integer;
  88.     IsCorrect: Boolean;
  89. Begin
  90.     IsCorrect := True;
  91.     Try
  92.         Read(InputF, N);
  93.     Except
  94.         IsCorrect := False;
  95.         Write('Размер массива введён некорректно. ');
  96.     End;
  97.     If IsCorrect And (N < MIN) Then
  98.     Begin
  99.         IsCorrect := False;
  100.         Write('Слишком малый размер массива. ');
  101.     End;
  102.     IsNumberOfElementsCorrect := IsCorrect;
  103. End;
  104.  
  105. Function IsDataForArrayCorrect(Var InputF: TextFile): Boolean;
  106. Const
  107.     NUM_MIN = 1;
  108. Var
  109.     N, Count, X: Integer;
  110.     IsCorrect: Boolean;
  111. Begin
  112.     Count := 0;
  113.     IsCorrect := True;
  114.     Reset(InputF);
  115.     Read(InputF, N);
  116.     While Not EoF(InputF) Do
  117.     Begin
  118.         Try
  119.             Read(InputF, X);
  120.         Except
  121.             IsCorrect := False;
  122.         End;
  123.         If IsCorrect And (X < NUM_MIN) Then
  124.             IsCorrect := False;
  125.         Inc(Count);
  126.     End;
  127.     If Not IsCorrect Then
  128.         Write('Файл содержит некорректные данные. ')
  129.     Else If (Count < N) Then
  130.     Begin
  131.         IsCorrect := False;
  132.         Write('Недостаточно данных в файле. ');
  133.     End;
  134.     IsDataForArrayCorrect := IsCorrect;
  135. End;
  136.  
  137. Function IsDataInFileCorrect(Path: String): Boolean;
  138. Var
  139.     InputF: TextFile;
  140.     IsCorrect: Boolean;
  141. Begin
  142.     AssignFile(InputF, Path);
  143.     Reset(InputF);
  144.     IsCorrect := IsNumberOfElementsCorrect(InputF);
  145.     If IsCorrect Then
  146.         IsCorrect := IsDataForArrayCorrect(InputF);
  147.     CloseFile(InputF);
  148.     IsDataInFileCorrect := IsCorrect;
  149. End;
  150.  
  151. Function InputPathToFileIn(): String;
  152. Var
  153.     Path: String;
  154.     IsCorrect: Boolean;
  155. Begin
  156.     Repeat
  157.         IsCorrect := True;
  158.         Readln(Path);
  159.         IsCorrect := IsFileCorrect(Path);
  160.         If IsCorrect Then
  161.             IsCorrect := IsDataInFileCorrect(Path);
  162.         If Not IsCorrect Then
  163.             Writeln('Повторите ввод пути к файлу: ');
  164.     Until IsCorrect;
  165.     InputPathToFileIn := Path;
  166. End;
  167.  
  168. Function InputNumberFromFile(Path : String): Integer;
  169. Var
  170.     N: Integer;
  171.     InputF: TextFile;
  172. Begin
  173.     AssignFile(InputF, Path);
  174.     Reset(InputF);
  175.     Read(InputF, N);
  176.     CloseFile(InputF);
  177.     InputNumberFromFile := N;
  178. End;
  179.  
  180. Function InputArrayFromFile(Path : String; A: TArrOI): TArrOI;
  181. Var
  182.     I: Integer;
  183.     Line : String;
  184.     InputF: TextFile;
  185. Begin
  186.     AssignFile(InputF, Path);
  187.     Reset(InputF);
  188.     Readln(InputF, Line);
  189.     For I := 0 To High(A) Do
  190.         Readln(InputF, A[I]);
  191.     CloseFile(InputF);
  192.     InputArrayFromFile := A;
  193. End;
  194.  
  195. Procedure OutputSuccessfulInput();
  196. Begin
  197.     Writeln('Данные из файла считаны успешно.');
  198. End;
  199.  
  200. Procedure OutputNumberConditionForConsole();
  201. Begin
  202.     Writeln('Введите количество элементов в последовательности: ');
  203. End;
  204.  
  205. Function InputNumberFromConsole(): Integer;
  206. Const
  207.     MIN = 2;
  208. Var
  209.     N: Integer;
  210.     IsCorrect: Boolean;
  211. Begin
  212.     Repeat
  213.         IsCorrect := True;
  214.         Try
  215.             Readln(N);
  216.         Except
  217.             Writeln('Введены некорректные данные. Повторите ввод:');
  218.             IsCorrect := False;
  219.         End;
  220.         If IsCorrect And (N < MIN) Then
  221.         Begin
  222.             Writeln('Введено недопустимое число элементов. Повторите ввод:');
  223.             IsCorrect := False;
  224.         End;
  225.     Until IsCorrect;
  226.     InputNumberFromConsole := N;
  227. End;
  228.  
  229. Procedure OutputInputConditionForConsole();
  230. Begin
  231.     Writeln('Поочерёдно введите натуральные числа, являющиеся элементами последовательности.');
  232. End;
  233.  
  234. Function InputArrayFromConsole(A: TArrOI): TArrOI;
  235. Const
  236.     NUM_MIN = 1;
  237. Var
  238.     I: Integer;
  239.     IsCorrect: Boolean;
  240. Begin
  241.     For I := 0 To High(A) Do
  242.     Begin
  243.         Repeat
  244.             Writeln('Введите ', I + 1, ' элемент:');
  245.             IsCorrect := True;
  246.             Try
  247.                 Readln(A[I]);
  248.             Except
  249.                 Writeln('Введены некорректные данные. Повторите ввод.');
  250.                 IsCorrect := False;
  251.             End;
  252.             If IsCorrect Then
  253.                 Writeln('Введён элемент: ', A[I]);  // Добавлен отладочный вывод
  254.             If IsCorrect And (A[I] < NUM_MIN) Then
  255.             Begin
  256.                 Writeln('Введённые данные не соответствуют условию. Повторите ввод.');
  257.                 IsCorrect := False;
  258.             End;
  259.         Until IsCorrect;
  260.     End;
  261.     InputArrayFromConsole := A;
  262. End;
  263.  
  264. Function IsNonIncreasing(Sequence: TArrOI): Boolean;
  265. Var
  266.     I: Integer;
  267. Begin
  268.     Result := True;
  269.     For I := 1 To High(Sequence) Do
  270.     Begin
  271.         If Sequence[I] > Sequence[I - 1] Then
  272.         Result := False;
  273.     End;
  274. End;
  275.  
  276. Procedure OutputOutputChoice();
  277. Begin
  278.     Writeln('Введите 0, если хотите вывести данные в консоль, и 1 - в файл: ');
  279. End;
  280.  
  281. Procedure OutputPathOutputCondition();
  282. Begin
  283.     Writeln('Введите путь к файлу, в который вы хотите вывести результат:');
  284. End;
  285.  
  286. Function InputPathToFileOut(): String;
  287. Var
  288.     Path: String;
  289.     IsCorrect: Boolean;
  290. Begin
  291.     Repeat
  292.         IsCorrect := True;
  293.         Readln(Path);
  294.         IsCorrect := IsFileCorrect(Path);
  295.         If Not IsCorrect Then
  296.             Writeln('Повторите ввод пути к файлу:');
  297.     Until IsCorrect;
  298.     InputPathToFileOut := Path;
  299. End;
  300.  
  301. Procedure OutputInFile(Var OutputF: TextFile; IsNonIncreasing: Boolean);
  302. Begin
  303.     If IsNonIncreasing Then
  304.         Writeln(OutputF, 'Последовательность является невозрастающей.')
  305.     Else
  306.         Writeln(OutputF, 'Последовательность не является невозрастающей.');
  307. End;
  308.  
  309. Procedure OutputSuccessfulOutput();
  310. Begin
  311.     Writeln('Данные записаны в файл успешно.');
  312. End;
  313.  
  314. Procedure OutputInConsole(IsNonIncreasing: Boolean);
  315. Begin
  316.     If IsNonIncreasing Then
  317.         Writeln('Последовательность является невозрастающей.')
  318.     Else
  319.         Writeln('Последовательность не является невозрастающей.');
  320. End;
  321.  
  322. Function InputArray(IsInput: Boolean): TArrOI;
  323. Var
  324.     N: Integer;
  325.     A: TArrOI;
  326.     Path: String;
  327. Begin
  328.     If IsInput Then
  329.     Begin
  330.         OutputPathInputCondition();
  331.         Path := InputPathToFileIn();
  332.         N := InputNumberFromFile(Path);
  333.         SetLength(A, N);
  334.         A := InputArrayFromFile(Path, A);
  335.         OutputSuccessfulInput();
  336.     End
  337.     Else
  338.     Begin
  339.         OutputNumberConditionForConsole();
  340.         N := InputNumberFromConsole();
  341.         SetLength(A, N);
  342.         OutputInputConditionForConsole();
  343.         A := InputArrayFromConsole(A);
  344.     End;
  345.     InputArray := A;
  346. End;
  347.  
  348. Procedure OutputResult(IsOutput: Boolean; IsNotIncreasing: Boolean);
  349. Var
  350.     Path: String;
  351.     OutputF: TextFile;
  352. Begin
  353.     If IsOutput Then
  354.     Begin
  355.         OutputPathOutputCondition();
  356.         Path := InputPathToFileOut();
  357.         AssignFile(OutputF, Path);
  358.         Rewrite(OutputF);
  359.         OutputInFile(OutputF, IsNotIncreasing);
  360.         CloseFile(OutputF);
  361.         OutputSuccessfulOutput();
  362.     End
  363.     Else
  364.         OutputInConsole(IsNotIncreasing);
  365. End;
  366.  
  367. Var
  368.     Sequence: TArrOI;
  369.     IsInput, IsNonIncreasingSequence, IsOutput: Boolean;
  370. Begin
  371.     OutputTaskCondition();
  372.     OutputInputChoice();
  373.     IsInput := IsUserChoice();
  374.     Sequence := InputArray(IsInput);
  375.     IsNonIncreasingSequence := IsNonIncreasing(Sequence);
  376.     OutputOutputChoice();
  377.     IsOutput := IsUserChoice();
  378.     OutputResult(IsOutput, IsNonIncreasingSequence);
  379.     Readln;
  380. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement