Advertisement
Ewerlost

Lab2_4(Delphi)

Oct 24th, 2023 (edited)
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.46 KB | None | 0 0
  1. Program Lab2_4;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. Uses
  6.     System.SysUtils;
  7.  
  8. Type
  9.     TArr = Array Of Integer;
  10.  
  11. Var
  12.     N, LengthA : Integer;
  13.     ArrA : TArr;
  14.  
  15. Const
  16.     MIN_ARR_LENGTH = 1;
  17.     MAX_ARR_LENGTH = 100;
  18.     MAX_ARR_VALUE = 100;
  19.     MIN_ARR_VALUE = -100;
  20.  
  21. Function GetInt(Min, Max : Integer): Integer;
  22. Var
  23.     IsCorrect : Boolean;
  24.     N : Integer;
  25. Begin
  26.     Repeat
  27.         IsCorrect := True;
  28.         Try
  29.             Readln(N);
  30.         Except
  31.             IsCorrect := False;
  32.             Writeln('Вы ввели некорректные данные. Попробуйте снова.');
  33.         End;
  34.  
  35.         If IsCorrect And ((N > Max) Or (N < Min)) Then
  36.         Begin
  37.             IsCorrect := False;
  38.             Writeln('Введено значение не входящее в диапазон допустимых значений');
  39.         End;
  40.  
  41.     Until IsCorrect;
  42.     GetInt := N;
  43. End;
  44.  
  45. Procedure InputArrFromConsole(Var Arr : TArr);
  46. Var
  47.     I, LengthArr : Integer;
  48. Begin
  49.     Writeln('Введите длину массива');
  50.     LengthArr := GetInt(MIN_ARR_LENGTH, MAX_ARR_LENGTH);
  51.     SetLength(Arr, LengthArr);
  52.     For I := 0 To High(Arr) Do
  53.     Begin
  54.         Writeln('Введите элемент массива №', I + 1, ': ');
  55.         Arr[I] := GetInt(MIN_ARR_VALUE, MAX_ARR_VALUE);
  56.     End;
  57.  
  58. End;
  59.  
  60. Function CheckFile(Path : String) : Boolean;
  61. Var
  62.     IsFileCorrect : Boolean;
  63.     InputFile : TextFile;
  64.     I, Length : Integer;
  65.     Arr : TArr;
  66.  
  67. Begin
  68.     IsFileCorrect := True;
  69.  
  70.     If FileExists(Path) Then
  71.     Begin
  72.         AssignFile(InputFile, Path);
  73.  
  74.         Try
  75.             Reset(InputFile);
  76.         Except
  77.             Writeln('Не удалось открыть файл');
  78.             IsFileCorrect := False;
  79.         End;
  80.  
  81.         If IsFileCorrect Then
  82.         Begin
  83.             Try
  84.                 Read(InputFile, Length);
  85.             Except
  86.                 Writeln('Данные в файле представлены в неправильном формате!');
  87.                 IsFileCorrect := False;
  88.             End;
  89.  
  90.             If (Length < MIN_ARR_LENGTH) Or (Length > MAX_ARR_LENGTH) Then
  91.             Begin
  92.                 Writeln('Введена длина массива, не входящая в диапазон допустимых значений');
  93.                 IsFileCorrect := False;
  94.             End;
  95.  
  96.             SetLength(Arr, Length);
  97.  
  98.  
  99.             While (IsFileCorrect And (I < Length)) Do
  100.  
  101.             Begin
  102.                 Try
  103.                     Read(InputFile, Arr[I]);
  104.                 Except
  105.                     Writeln('Данные в файле в неправильном формате');
  106.                     IsFileCorrect := False;
  107.                 End;
  108.  
  109.                 If (Arr[I] < MIN_ARR_VALUE) Or (Arr[I] > MAX_ARR_VALUE) Then
  110.                 Begin
  111.                     Write('Элементы массива не входят в диапазон допустимых значений');
  112.                     IsFileCorrect := False;
  113.                 End;
  114.  
  115.                 Inc(I);
  116.             End;
  117.  
  118.             If IsFileCorrect And Not(EoLn(InputFile)) Then
  119.             Begin
  120.                 Writeln('Данные в файле представлены в неправильном формате');
  121.                 IsFileCorrect := False;
  122.             End;
  123.  
  124.  
  125.             If IsFileCorrect And Not(EoF(InputFile)) Then
  126.             Begin
  127.                 Writeln('Данные в файле представлены в неправильном формате');
  128.                 IsFileCorrect := False;
  129.             End;
  130.         End;
  131.  
  132.         CloseFile(InputFile);
  133.     End
  134.  
  135.     Else
  136.  
  137.     Begin
  138.         Writeln('Файла по данному пути не существует!');
  139.         IsFileCorrect := False
  140.     End;
  141.     CheckFile := IsFileCorrect;
  142. End;
  143.  
  144. Function AnalizeArr(Arr : TArr) : Boolean;
  145. Var
  146.     I : Integer;
  147.     IsNonIncreasing : Boolean;
  148.  
  149. Begin
  150.     IsNonIncreasing := True;
  151.     For I := 0 To High(Arr) - 1 Do
  152.         If Arr[I + 1] > Arr[I] Then
  153.             IsNonIncreasing := False;
  154.     AnalizeArr := IsNonIncreasing;
  155. End;
  156.  
  157.  
  158. Procedure InputArrayFromFile(Path: String; Var Arr : TArr);
  159. Var
  160.     InputFile: TextFile;
  161.     LengthArr, I: Integer;
  162. Begin
  163.     AssignFile(InputFile, Path);
  164.     Reset(InputFile);
  165.     Read(InputFile, LengthArr);
  166.     SetLength(Arr, LengthArr);
  167.  
  168.     For I := 0 To High(Arr) Do
  169.         Read(InputFile, Arr[I]);
  170.  
  171.     CloseFile(InputFile);
  172. End;
  173.  
  174.  
  175. Procedure InputArray(Var Arr: TArr);
  176. Var
  177.     IsFileCorrect: Boolean;
  178.     Path: String;
  179.     InputFile: TextFile;
  180.     Choice : Integer;
  181.  
  182. Begin
  183.     Writeln('Выберите способ ввода: ', #10, '1.Ввод из консоли', #10, '2.Ввод из файла');
  184.     Choice := GetInt(1,2);
  185.  
  186.     If Choice = 1 Then
  187.  
  188.     Begin
  189.         InputArrFromConsole(Arr);
  190.     End
  191.  
  192.     Else
  193.  
  194.     Begin
  195.         Repeat
  196.             Writeln('Введите путь к файлу: ');
  197.             Readln(Path);
  198.             IsFileCorrect := CheckFile(Path);
  199.         Until IsFileCorrect;
  200.  
  201.         InputArrayFromFile(Path, Arr);
  202.     End;
  203. End;
  204.  
  205. Procedure OutputVerdict (ArrA : TArr);
  206. Var
  207.     I,Choice : Integer;
  208.     OutputFile : TextFile;
  209.     Path: String;
  210.     IsPathCorrect, Verdict : Boolean;
  211. Begin
  212.       Writeln('Выберите способ вывода: ', #10, '1.Вывод в консоль', #10, '2.Вывод в файл');
  213.       Choice := GetInt(1,2);
  214.       Verdict := AnalizeArr(ArrA);
  215.  
  216.       If Choice = 1 Then
  217.       Begin
  218.           If Verdict Then
  219.               Writeln('Последовательность является невозрастающей')
  220.           Else
  221.               Writeln('Последовательность не является невозрастающей');
  222.           Readln;
  223.       End
  224.       Else
  225.       Begin
  226.           Writeln('Для вывода введите путь к файлу и его имя(например, С:\Projects\Number\Имя файла.txt). Если файл отсутствует, то он будет создан автоматически по указанному пути или в корневой папке программы(по умолчанию)');
  227.           Repeat
  228.               IsPathCorrect := True;
  229.               Write('Введите путь: ');
  230.               Readln(Path);
  231.               If Path = '' Then
  232.                   IsPathCorrect := False
  233.               Else
  234.               Begin
  235.                   AssignFile(OutputFile, Path);
  236.                   Try
  237.                       Rewrite(OutputFile);
  238.                   Except
  239.                       Writeln('Не удалось вывести в файл');
  240.                       IsPathCorrect := False;
  241.                   End;
  242.               End;
  243.  
  244.           Until IsPathCorrect;
  245.  
  246.       If Verdict Then
  247.           Write(OutputFile, 'Последовательность является невозрастающей')
  248.       Else
  249.           Write(OutputFile, 'Последовательность не является невозрастающей');
  250.       CloseFile(OutputFile);
  251.       Writeln('Вывод данных прошёл успешно!');
  252.       Readln;
  253.       End;
  254. End;
  255.  
  256. Begin
  257.     Writeln('Эта программа определит, является ли заданная последовательность невозрастающей');
  258.     InputArray(ArrA);
  259.     OutputVerdict(ArrA);
  260.     Readln;
  261. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement