negtab

2.19.4 Delphi

Oct 29th, 2024 (edited)
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 12.21 KB | None | 0 0
  1. Program Lab2194;
  2.  
  3. Uses
  4.     System.SysUtils;
  5.  
  6. Type
  7.     TArray = Array Of Integer;
  8.  
  9. Procedure PrintTask();
  10. Begin
  11.     Writeln('Эта программа находит количество всех возиожных треугольников по заданным точкам');
  12. End;
  13.  
  14. Function ReadPathToFile() : String;
  15. Var
  16.     PathToFile: String;
  17.     IsCorrect: Boolean;
  18. Begin
  19.     Repeat
  20.         IsCorrect:=True;
  21.         Write('Введите путь к файлу с расширением.txt с количеством точек и координатами точек: ');
  22.         Readln(PathToFile);
  23.         If ExtractFileExt(PathToFile) <> '.txt' Then
  24.         Begin
  25.             Writeln('Расширение файла не .txt!');
  26.             IsCorrect := False;
  27.         End;
  28.     Until(IsCorrect);
  29.     ReadPathToFile := PathToFile;
  30. End;
  31.  
  32. Function IsExists(PathToFile : String) : Boolean;
  33. Var
  34.     IsRight: Boolean;
  35. Begin
  36.     IsRight := False;
  37.     If FileExists(PathToFile) Then
  38.         IsRight := True;
  39.     IsExists := IsRight;
  40. End;
  41.  
  42. Function IsNotAbleToReading(Var T: TextFile) : Boolean;
  43. Var
  44.     IsRight: Boolean;
  45. Begin
  46.     IsRight := False;
  47.     Try
  48.         Reset(T);
  49.         CloseFile(T);
  50.     Except
  51.         IsRight := True;
  52.     End;
  53.     IsNotAbleToReading := IsRight;
  54. End;
  55.  
  56. Function IsNotAbleToWriting(PathToFile: String) : Boolean;
  57. Var
  58.     IsRight: Boolean;
  59. Begin
  60.     IsRight := False;
  61.     If FileIsReadOnly(PathToFile) Then
  62.         IsRight := True;
  63.     IsNotAbleToWriting := IsRight;
  64. End;
  65.  
  66. Function IsEmpty(Var T: TextFile) : Boolean;
  67. Var
  68.     IsRight: Boolean;
  69. Begin
  70.     IsRight := False;
  71.     Reset(T);
  72.     If EOF(T) Then
  73.         IsRight := True;
  74.     CloseFile(T);
  75.     IsEmpty := IsRight;
  76. End;
  77.  
  78. Procedure GetFileNormalReading(Var PathToFile: String);
  79. Var
  80.     IsCorrect: Boolean;
  81.     T : TextFile;
  82. Begin
  83.     Repeat
  84.         IsCorrect := True;
  85.         PathToFile := ReadPathToFile();
  86.         If Not IsExists(PathToFile) Then
  87.         Begin
  88.             IsCorrect := False;
  89.             Writeln('Проверьте корректность ввода пути к файлу!');
  90.         End;
  91.         If IsCorrect Then
  92.             AssignFile(T, PathToFile);
  93.         If IsCorrect And IsNotAbleToReading(T) Then
  94.         Begin
  95.             IsCorrect := False;
  96.             Writeln('Файл закрыт для чтения!');
  97.         End;
  98.         If IsCorrect And IsEmpty(T) Then
  99.         Begin
  100.             IsCorrect := False;
  101.             WriteLn('Файл пуст!');
  102.         End;
  103.     Until IsCorrect;
  104. End;
  105.  
  106. Procedure GetFileNormalWriting(Var PathToFile: String);
  107. Var
  108.     T : TextFile;
  109.     IsCorrect: Boolean;
  110. Begin
  111.     Repeat
  112.         IsCorrect := True;
  113.         PathToFile := ReadPathToFile();
  114.         If Not IsExists(PathToFile) Then
  115.         Begin
  116.             IsCorrect := False;
  117.             Writeln('Проверьте корректность ввода пути к файлу!');
  118.         End;
  119.         If IsCorrect Then
  120.             AssignFile(T, PathToFile);
  121.         If IsCorrect And IsNotAbleToWriting(PathToFile) Then
  122.         Begin
  123.             IsCorrect := False;
  124.             WriteLn('Файл закрыт для записи!');
  125.         End;
  126.     Until IsCorrect;
  127. End;
  128.  
  129. Function InputInt(Min, Max : Integer) : Integer;
  130. Var
  131.     IsCorrect : Boolean;
  132.     Num : Integer;
  133. Begin
  134.     Repeat
  135.         IsCorrect := True;
  136.         Try
  137.             Read(Num);
  138.         Except
  139.             IsCorrect := False;
  140.         End;
  141.         If(Not IsCorrect Or (Num < Min) Or (Num > Max)) Then
  142.         Begin
  143.             Writeln('Неверный ввод');
  144.             IsCorrect := False;
  145.         End;
  146.     Until IsCorrect;
  147.     InputInt := Num;
  148. End;
  149.  
  150. Function InputIntWithText(S : String; Min, Max : Integer) : Integer;
  151. Var
  152.     IsCorrect : Boolean;
  153.     Num : Integer;
  154. Begin
  155.     Repeat
  156.         IsCorrect := True;
  157.         Write(S, ' от ', Min, ' до ', Max, ' : ');
  158.         Try
  159.             Read(Num);
  160.         Except
  161.             IsCorrect := False;
  162.         End;
  163.         If(Not IsCorrect Or (Num < Min) Or (Num > Max)) Then
  164.         Begin
  165.             Writeln('Неверный ввод');
  166.             IsCorrect := False;
  167.         End;
  168.     Until IsCorrect;
  169.     InputIntWithText := Num;
  170. End;
  171.  
  172. Function InputIntArray(S : String; Size, Min, Max : Integer) : TArray;
  173. Var
  174.     Arr : TArray;
  175.     IsCorrect : Boolean;
  176.     I : Integer;
  177. Begin
  178.     SetLength(Arr, Size);
  179.     For I := 0 To High(Arr) Do
  180.     Begin
  181.         Repeat
  182.             Write(S, ' от ', Min, ' до ', Max, ' : ');
  183.             IsCorrect := True;
  184.             Try
  185.                 Read(Arr[I]);
  186.             Except
  187.                 IsCorrect := False;
  188.             End;
  189.             If(Not IsCorrect Or (Arr[I] > Max) Or (Arr[I] < Min)) Then
  190.             Begin
  191.                 Writeln('Неверный ввод');
  192.                 IsCorrect := False;
  193.             End;
  194.         Until IsCorrect;
  195.     End;
  196.     InputIntArray := Arr;
  197. End;
  198.  
  199. Procedure ReadFileSizeOfArray(PathToFile : String; Var Size1 : Integer; Var Size2 : Integer; Min, Max : Integer);
  200. Var
  201.     T : TextFile;
  202.     IsCorrect : Boolean;
  203. Begin
  204.     AssignFile(T, PathToFile);
  205.     Reset(T);
  206.  
  207.     IsCorrect := True;
  208.     Try
  209.         Readln(T, Size1);
  210.     Except
  211.         IsCorrect := False;
  212.     End;
  213.     If(Not IsCorrect Or (Size1 > Max) Or (Size1 < Min)) Then
  214.     Begin
  215.         Writeln('Неверный ввод размера первого массива, введите с консоли');
  216.         Size1 := InputInt(Min, Max);
  217.         IsCorrect := False;
  218.     End;
  219.  
  220.     For Var I := 0 To Size1 Do
  221.       Read(T);
  222.     Readln(T);
  223.     IsCorrect := True;
  224.     Try
  225.         Readln(T, Size2);
  226.     Except
  227.         IsCorrect := False;
  228.     End;
  229.     If(Not IsCorrect Or (Size2 > Max) Or (Size2 < Min)) Then
  230.     Begin
  231.         Writeln('Неверный ввод размера второго массива, введите с консоли');
  232.         Size2 := InputInt(Min, Max);
  233.         IsCorrect := False;
  234.     End;
  235.     Close(T);
  236. End;
  237.  
  238. procedure ReadFileIntArray(PathToFile: String; Var Array1, Array2: TArray; Size1, Size2, Min, Max : Integer);
  239. Var
  240.     T: TextFile;
  241.     I: Integer;
  242.     IsCorrect : Boolean;
  243. Begin
  244.     AssignFile(T, PathToFile);
  245.     Reset(T);
  246.  
  247.     SetLength(Array1, Size1);
  248.     SetLength(Array2, Size2);
  249.     Readln(T);
  250.  
  251.     For I := 0 To Size1 - 1 Do
  252.     Begin
  253.         IsCorrect := True;
  254.         Try
  255.             Read(T, Array1[I]);
  256.         Except
  257.             IsCorrect := False;
  258.         End;
  259.         If (Not IsCorrect) Or (Array1[I] > Max) Or (Array1[I] < Min) Then
  260.         Begin
  261.             Write('Неверный ввод, введите с клавиатуры: ');
  262.             Array1[I] := InputInt(Min, Max);
  263.         End;
  264.     End;
  265.     Readln(T);
  266.     Readln(T);
  267.  
  268.     For I := 0 To Size2 - 1 Do
  269.     Begin
  270.         IsCorrect := True;
  271.         Try
  272.             Read(T, Array2[I]);
  273.         Except
  274.             IsCorrect := False;
  275.         End;
  276.         If (Not IsCorrect) or (Array2[I] > Max) or (Array2[I] < Min) then
  277.         Begin
  278.             Write('Неверный ввод, введите с клавиатуры: ');
  279.             Array1[I] := InputInt(Min, Max);
  280.         End;
  281.     End;
  282.     CloseFile(T);
  283. End;
  284.  
  285.  
  286. Function SortArray(Arr : TArray) : TArray;
  287. Var
  288.     I, J, Temp : Integer;
  289. Begin
  290.     For I := 0 To High(Arr) Do
  291.         For J := 0 To (High(Arr) - I - 1) Do
  292.             If(Arr[J] > Arr[J + 1]) Then
  293.             Begin
  294.                 Temp := Arr[J];
  295.                 Arr[J] := Arr[J + 1];
  296.                 Arr[J + 1] := Temp;
  297.             End;
  298.     SortArray := Arr;
  299. End;
  300.  
  301. Function RemoveZeros(ResultArray : TArray; Var Size : Integer; IsOneZero : Boolean) : TArray;
  302. Var
  303.     NewSize, I, Index : Integer;
  304.     NewArray : TArray;
  305. Begin
  306.     NewSize := 0;
  307.     For I := 0 To High(ResultArray) Do
  308.         If(ResultArray[I] <> 0) Then
  309.             Inc(NewSize);
  310.  
  311.     If (IsOneZero) Then
  312.         Inc(NewSize);
  313.  
  314.     If(NewSize = 0) Then
  315.     Begin
  316.         SetLength(NewArray, 1);
  317.         NewArray[1] := 0;
  318.         Size := 1;
  319.     End
  320.     Else
  321.     Begin
  322.         SetLength(NewArray, NewSize);
  323.         Index := 0;
  324.  
  325.         For I := 0 To High(ResultArray) Do
  326.         Begin
  327.             If(ResultArray[I] <> 0) Then
  328.             Begin
  329.                 NewArray[Index] := ResultArray[I];
  330.                 Inc(Index);
  331.             End
  332.             Else
  333.                 If(ResultArray[I] = 0) And (IsOneZero) Then
  334.                 Begin
  335.                     Inc(Index);
  336.                     NewArray[Index]:= 0;
  337.                     IsOneZero := False;
  338.                 End;
  339.         End;
  340.         Size := NewSize;
  341.     End;
  342.  
  343.     RemoveZeros := NewArray;
  344. End;
  345.  
  346.  
  347. Procedure Unification(Arr1, Arr2 : TArray; Size1, Size2 : Integer; Var ResultArray : TArray; Var ResultSize : Integer);
  348. Var
  349.     IsUnic, IsFirst : Boolean;
  350.     I, J : Integer;
  351. Begin
  352.     IsFirst := False;
  353.     ResultSize:= Size1 + Size2;
  354.     SortArray(Arr1);
  355.     SortArray(Arr2);
  356.  
  357.     SetLength(ResultArray, ResultSize);
  358.     For I := 0 To High(Arr1) Do
  359.         ResultArray[I] := Arr1[I];
  360.  
  361.     For I := 0 To High(Arr2) Do
  362.     Begin
  363.         IsUnic := True;
  364.         If(Not IsFirst) And (Arr2[I] = 0) Then
  365.             IsFirst := True;
  366.         For J := 0 to High(Arr1) do
  367.         Begin
  368.             If(Not IsFirst) And (Arr1[I] = 0) Then
  369.                 IsFirst := True;
  370.             If(Arr1[J] = Arr2[I]) Then
  371.                 IsUnic := False;
  372.         End;
  373.         If(IsUnic) Then
  374.             ResultArray[Size1 + I] := Arr2[I];
  375.     End;
  376.  
  377.     ResultArray := RemoveZeros(ResultArray, ResultSize, IsFirst);
  378.     ResultArray := SortArray(ResultArray);
  379. End;
  380.  
  381. Procedure WriteSolveToFile(PathToFile : String; Arr : TArray);
  382. Var
  383.     T : TextFile;
  384. Begin
  385.     AssignFile(T, PathToFile);
  386.     ReWrite(T);
  387.     For Var I := 0 To High(Arr) Do
  388.     Begin
  389.         Write(T, Arr[I]);
  390.         Write(T, ' ');
  391.     End;
  392.     Close(T);
  393. End;
  394.  
  395. Function ChooseTheInput() : Integer;
  396. Begin
  397.     Write('Выберите ввод из консоли(1) или из файла(2): ');
  398.     ChooseTheInput := InputInt(1, 2);
  399. End;
  400.  
  401. Function ChooseTheOutput() : Integer;
  402. Begin
  403.     Write('Выберите вывод в консоль(1) или в файл(2): ');
  404.     ChooseTheOutput := InputInt(1, 2);
  405. End;
  406.  
  407. Procedure Input(Var Size1, Size2 : Integer; Var Array1, Array2 : TArray);
  408. Var
  409.     IntChooseTheInput : Integer;
  410.     PathToFile : String;
  411. Begin
  412.     IntChooseTheInput := ChooseTheInput();
  413.     If(IntChooseTheInput = 1) Then
  414.     Begin
  415.         Size1 := InputIntWithText('Введите количество элементов числовой последовательности', 1, 100);
  416.         Array1 := InputIntArray('Введите члены числовой последовательности', size1, -10000, 10000);
  417.         Size2 := InputIntWithText('Введите количество элементов числовой последовательности', 1, 100);
  418.         Array2 := InputIntArray('Введите члены числовой последовательности', size2, -10000, 10000);
  419.     End
  420.     Else
  421.     Begin
  422.         GetFileNormalReading(PathtoFile);
  423.         ReadFileSizeOfArray(PathToFile, Size1, Size2, 1, 100);
  424.         ReadFileIntArray(PathToFile, Array1, Array2, Size1, Size2, -10000, 10000);
  425.     End;
  426. End;
  427.  
  428. procedure Output(Array3 : TArray);
  429. Var
  430.     IntChooseTheOutput : Integer;
  431.     PathToFile : String;
  432. Begin
  433.     IntChooseTheOutput := ChooseTheOutput();
  434.     If(IntChooseTheOutput = 1) Then
  435.     Begin
  436.         Write('Полученная числова последовательноть: ');
  437.         For Var I := 0 To High(Array3) Do
  438.             Write(Array3[I], ' ');
  439.         Readln;
  440.     End
  441.     Else
  442.     Begin
  443.         GetFileNormalWriting(PathtoFile);
  444.         Write('Полученная числова последовательноть: ');
  445.         For Var I := 0 To High(Array3) Do
  446.             Write(Array3[I], ' ');
  447.         WriteSolveToFile(PathToFile, Array3);
  448.     End;
  449.     Readln;
  450. End;
  451.  
  452.  
  453. Var
  454.     Size1, Size2, Size3 : Integer;
  455.     Array1, Array2, Array3 : TArray;
  456. Begin
  457.     PrintTask();
  458.     Input(Size1, Size2, Array1, Array2);
  459.     Unification(Array1, Array2, Size1, Size2, Array3, Size3);
  460.     Output(Array3);
  461. End.
Advertisement
Add Comment
Please, Sign In to add comment