Advertisement
venik2405

lab3_3_1

Dec 16th, 2020
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.29 KB | None | 0 0
  1. Program lab3_3;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   System.SysUtils;
  7.  
  8. Type
  9.     TArray = array of array of array of Integer;
  10.  
  11. Function InputFileLocation(): string;
  12. Var
  13.     IsCorrect: Boolean;
  14.     Location: String;
  15. Begin
  16.     Repeat
  17.         IsCorrect := false;
  18.         WriteLn('Enter file location:');
  19.         ReadLn(Location);
  20.         If FileExists(Location) then
  21.             IsCorrect := true
  22.         Else
  23.         Begin
  24.             WriteLn('Please enter the correct location');
  25.             WriteLn('');
  26.         End;
  27.     Until IsCorrect;
  28.     InputFileLocation := Location;
  29. End;
  30.  
  31. Procedure GetArrayFromConsole(Arrays: TArray; Size: Integer);
  32. Var
  33.     I, J, Temp: Integer;
  34.     IsCorrect: Boolean;
  35.     K: Integer;
  36. Begin
  37.     WriteLn('Enter the matrix');
  38.     Temp := (Size - 1);
  39.     For I := 0 to Temp do
  40.         For J := 0 to Temp do
  41.             for K := 0 to Temp do
  42.                 Repeat
  43.                     IsCorrect := false;
  44.                     WriteLn('Enter element number [', I + 1, '|' ,  J + 1, '|', K + 1, ']');
  45.                     Try
  46.                         ReadLn(Arrays[I, J, K]);
  47.                         IsCorrect := true;
  48.                     Except
  49.                         WriteLn('Enter the Number')
  50.                     End;
  51.                 Until IsCorrect;
  52. End;
  53.  
  54. Function ChooseInput(): Integer;
  55. Var
  56.     Line: String;
  57.     IsCorrect: Boolean;
  58. Begin
  59.     Repeat
  60.         IsCorrect := true;
  61.         WriteLn('Do you want to input from file? (y/n)');
  62.         ReadLn(line);
  63.         Line := Line.ToLower();
  64.         If(Line <> '') and (Line <> 'y') and (Line <> 'n') then
  65.         Begin
  66.             IsCorrect := false;
  67.             WriteLn('Enter valid answer');
  68.         End;
  69.     Until IsCorrect;
  70.     If (Line = '') or (Line = 'y') then
  71.         ChooseInput := 0
  72.     Else
  73.         ChooseInput := 1;
  74. End;
  75.  
  76. Procedure GetArrayFromFile(Size: Integer; Arrays: TArray);
  77. Var
  78.     TxtFile: TextFile;
  79.     I, J, Temp: Integer;
  80.   K: Integer;
  81. Begin
  82.     Temp := Size - 1;
  83.     AssignFile(TxtFile, InputFileLocation());
  84.     Reset(TxtFile);
  85.     For I := 0 to Temp do
  86.         For J := 0 to Temp do
  87.             For K := 0 to Temp do
  88.                 Read(TxtFile, Arrays[I, J, K]);
  89.     ReadLn(TxtFile);
  90.     SetLength(Arrays, Temp);
  91.     CloseFile(TxtFile);
  92. End;
  93.  
  94. Procedure ResultPrint(Arrays: TArray; Time: Integer);
  95. Var
  96.     I, J, K, Temp: Integer;
  97. Begin
  98.     Writeln('Iteraration number', Time);
  99.     Writeln('__________________');
  100.     for I := 0 to High(Arrays) do
  101.     Begin
  102.         Writeln('Slay number ', I + 1);
  103.         for J := 0 to High(Arrays) do
  104.         Begin
  105.             For K := 0 to High(Arrays) do
  106.             Begin
  107.                 Write(arrays[I, J, K], ' ');
  108.             End;
  109.             Writeln;
  110.         End;
  111.         Writeln;
  112.     End;
  113. End;
  114.  
  115.  
  116. Procedure OutputToFile(Arrays: TArray; Size: Integer);
  117. Var
  118.     I, J, K, Temp: Integer;
  119.     TxtFile: TextFile;
  120.     Line: String;
  121. Begin
  122.     Temp := Size - 1;
  123.     AssignFile(TxtFile, InputFileLocation());
  124.     Rewrite(TxtFile);
  125.     Begin
  126.         For I := 0 to Temp do
  127.         Begin
  128.             For J := 0 to Temp do
  129.             Begin
  130.                 for K := 0 to Temp do
  131.                     Write(TxtFile, Arrays[I, J, K], ' ');
  132.                 writeln;
  133.             End;
  134.             Writeln;
  135.         End;
  136.         CloseFile(TxtFile);
  137.     End;
  138. End;
  139.  
  140. Procedure SortMatrix(Arrays: TArray; Size: Integer);
  141. Var
  142.     I, J, K, I1, J1, K1, Temp, Up, Time:Integer;
  143. Begin
  144.     Up := Size - 1;
  145.     Time := 0;
  146.     for I := 0 to Up do
  147.         for J := 0 to Up do
  148.             for K := 0 to Up do
  149.                 for I1 := 0 to Up do
  150.                     for J1 := 0 to Up do
  151.                         for K1 := 0 to Up do
  152.                             if Arrays[I1, J1, K1] > Arrays[I, J, K] then
  153.                             Begin
  154.                                 Temp := Arrays[I1, J1, K1];
  155.                                 Arrays[I1, J1, K1] := Arrays[I, J, K];
  156.                                 Arrays[I, J, K] := Temp;
  157.                                 Inc(Time);
  158.                                 ResultPrint(Arrays, Time);
  159.                             End;
  160. End;
  161.  
  162. Function DimensionInput(IsNatural: Boolean = false): Integer;
  163. Var
  164.     IsCorrect: Boolean;
  165.     Size: Integer;
  166. Begin
  167.     Size := 0;
  168.     WriteLn('Enter the matrix size');
  169.     Repeat
  170.         IsCorrect := false;
  171.         Try
  172.            ReadLn(Size);
  173.            IsCorrect := true;
  174.         Except
  175.            WriteLn('Enter the Number')
  176.         End;
  177.         If IsCorrect and IsNatural and (Size < 1) then
  178.         Begin
  179.            IsCorrect := false;
  180.            WriteLn('Please enter a natural value');
  181.         End;
  182.     Until IsCorrect ;
  183.     DimensionInput := Size;
  184. End;
  185.  
  186. Procedure Main();
  187. Var
  188.     ChosenInput: Integer;
  189.     MatrixArray: TArray;
  190.     Size : Integer;
  191. Begin
  192.     WriteLn('This program sorts a three-dimensional array in ascending order.');
  193.     Size := DimensionInput(true);
  194.     ChosenInput := ChooseInput();
  195.     SetLength(MatrixArray, Size, Size, Size);
  196.     If(ChosenInput = 0) then
  197.         GetArrayFromFile(Size, MatrixArray)
  198.     Else
  199.         GetArrayFromConsole(MatrixArray, Size);
  200.     WriteLn;
  201.     Writeln('Sorted Matrix:');
  202.     SortMatrix(MatrixArray, Size);
  203.     OutputToFile(MatrixArray, Size);
  204.     ReadLn;
  205. End;
  206.  
  207. Begin
  208.     Main();
  209. End.
  210.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement