Advertisement
Ewerlost

Lab3_3Delphi

Nov 19th, 2023
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 6.37 KB | None | 0 0
  1. program Lab3_3;
  2. {$APPTYPE CONSOLE}
  3. uses
  4.   System.SysUtils;
  5.  
  6. Type
  7.     TArr = Array of Integer;
  8.  
  9. Const
  10.     MIN_ARR_LENGTH = 1;
  11.     MAX_ARR_LENGTH = 10;
  12.     MAX_A_VALUE = 1000000;
  13.     MIN_A_VALUE = -1000000;
  14.  
  15. Var
  16.     ChoiceInput, ChoiceOutput: Integer;
  17.     Arr: TArr;
  18.     Answer: Boolean;
  19.  
  20. Function InputInt(Min, Max: Integer): Integer;
  21. Var
  22.     IsCorrect: Boolean;
  23.     Int: Integer;
  24. Begin
  25.     Repeat
  26.         IsCorrect := True;
  27.         Write('Введите число: ');
  28.         Try
  29.             Readln(Int);
  30.         Except
  31.             IsCorrect := False;
  32.             Writeln('Вы ввели некорректные данные. Попробуйте снова.');
  33.         End;
  34.         If IsCorrect And ((Int > Max ) Or (Int < Min)) Then
  35.         Begin
  36.             IsCorrect := False;
  37.             Writeln('Введено значение не входящее в диапазон допустимых значений');
  38.         End;
  39.     Until IsCorrect;
  40.     InputInt := Int;
  41. End;
  42. Procedure InputArrFromConsole(Var Arr: TArr);
  43. Var
  44.     IsCorrect: Boolean;
  45.     I, Len: Integer;
  46.  
  47. Begin
  48.     Write('Введите количество элементов массива: ');
  49.     Len := InputInt(MIN_ARR_LENGTH, MAX_ARR_LENGTH);
  50.     SetLength(Arr, Len);
  51.     For I := 0 To High(Arr) Do
  52.     Begin
  53.         Write('Введите элемент массива № ', I + 1, ': ');
  54.         Arr[I] := InputInt(MIN_A_VALUE, MAX_A_VALUE);
  55.     End;
  56. End;
  57.  
  58. Function CheckFile(Path: String; Var Arr: TArr): Boolean;
  59. Var
  60.     IsFileCorrect: Boolean;
  61.     InputFile: TextFile;
  62.     Len, I: Integer;
  63.  
  64. Begin
  65.     IsFileCorrect := True;
  66.     I := 0;
  67.     If FileExists(Path) Then
  68.     Begin
  69.         AssignFile(InputFile, Path);
  70.         Try
  71.             Reset(InputFile);
  72.             Try
  73.                 Read(InputFile, Len);
  74.             Except
  75.                 Write('Файл в неправильном формате');
  76.                 IsFileCorrect := False;
  77.                 CloseFile(InputFile);
  78.             End;
  79.             If IsFileCorrect And (Len < MIN_ARR_LENGTH) Or
  80.                (Len > MAX_ARR_LENGTH) Then
  81.             Begin
  82.                 Writeln('В файле количество элементов массива выходит за возможные пределы');
  83.                 IsFileCorrect := False;
  84.             End;
  85.             SetLength(Arr, Len);
  86.             While (I < Len) And IsFileCorrect Do
  87.             Begin
  88.                 Try
  89.                     Read(InputFile, Arr[I]);
  90.                 Except
  91.                     Writeln('В файле элементы массива представленны в неправильном формате');
  92.                     IsFileCorrect := False;
  93.                     CloseFile(InputFile);
  94.                 End;
  95.                 If (Arr[I] < MIN_A_VALUE) Or (Arr[I] > MAX_A_VALUE) Then
  96.                 Begin
  97.                     Writeln('В файле точки выходят за возможные пределы');
  98.                     IsFileCorrect := False;
  99.                 End;
  100.                 Inc(I);
  101.             End;
  102.             If IsFileCorrect and Not(EoF(InputFile)) Then
  103.             Begin
  104.                 Writeln('В файле точки представленны в неправильном формате');
  105.                 IsFileCorrect := False;
  106.             End;
  107.             CloseFile(InputFile);
  108.         Except
  109.             Writeln('Не удалось открыть файл');
  110.         End;
  111.     End
  112.     Else
  113.     Begin
  114.         Write('Файла по данному пути не существует');
  115.         IsFileCorrect := False;
  116.     End;
  117.     CheckFile := IsFileCorrect;
  118. End;
  119.  
  120. Procedure InputArr(Choice: Integer; Var Arr: TArr);
  121. Var
  122.     IsFileCorrect: Boolean;
  123.     Path: String;
  124.     InputFile: TextFile;
  125. Begin
  126.     If Choice = 1 Then
  127.     Begin
  128.         InputArrFromConsole(Arr);
  129.     End
  130.     Else
  131.     Begin
  132.         Repeat
  133.             Writeln('Введите путь к файлу: ');
  134.             Readln(Path);
  135.             IsFileCorrect := CheckFile(Path, Arr);
  136.         Until IsFileCorrect;
  137.     End;
  138. End;
  139.  
  140. Procedure SortArr(Var Arr: TArr);
  141. Var
  142.     I, J, Buff: Integer;
  143. Begin
  144.    for I := 1 to High(Arr)  do
  145.    Begin
  146.       Buff := Arr[I];
  147.       J := I;
  148.       while ((J > 0) and (Arr[J-1] > Buff)) do
  149.       begin
  150.           Arr[J] := Arr[J-1];
  151.           Dec(J);
  152.       end;
  153.       Arr[J] := Buff;
  154.    End;
  155. end;
  156.  
  157.  
  158. Procedure OutputAnswer(Arr: TArr; Choice: Integer);
  159. Var
  160.     Path: String;
  161.     OutputFile: TextFile;
  162.     I: Integer;
  163.     IsFileCorrect: Boolean;
  164. Begin
  165.     If Choice = 1 Then
  166.     Begin
  167.         Writeln('Результат: ');
  168.         For I := 0 To High(Arr) Do
  169.         Begin
  170.             Write(Arr[I], ' ');
  171.         End;
  172.     End
  173.     Else
  174.     Begin
  175.     IsFileCorrect := True;
  176.         Repeat
  177.             Writeln('Введите путь к файлу для вывода. Если файл отсутствует то он будет создан автоматически');
  178.             Readln(Path);
  179.             AssignFile(OutputFile, Path);
  180.             Try
  181.                 Rewrite(OutputFile);
  182.                 Try
  183.                     Writeln(OutputFile, 'Результат');
  184.                     For I := 0 To High(Arr) Do
  185.                     Begin
  186.                         Write(OutputFile, Arr[I], ' ');
  187.                     End;
  188.                 Finally
  189.                     CloseFile(OutputFile);
  190.                 End;
  191.             Except
  192.                 Writeln('Не удалось вывести в Файл');
  193.                 IsFileCorrect := False
  194.             End;
  195.         Until IsFileCorrect;
  196.     End;
  197. End;
  198.  
  199. Begin
  200.     Write('Программа сортирует массив методом простых вставок. ', #10, 'Диапазон значений для длины массива - от 1 до 10.', #10, 'Диапазон для элементов массива - от -1000000 до 1000000.', #10);
  201.     Writeln('Выберите вариант ввода' , #10 , '1. Через консоль', #10, '2. Из файла');
  202.     ChoiceInput := InputInt(1,2);
  203.     InputArr(ChoiceInput, Arr);
  204.     SortArr(Arr);
  205.     Writeln('Выберите вариант вывода' , #10 , '1. Через консоль', #10, '2. В файл');
  206.     ChoiceOutput := InputInt(1,2);
  207.     OutputAnswer(Arr, ChoiceOutput);
  208.     Readln;
  209. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement