Advertisement
THOMAS_SHELBY_18

Lab with file

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