Advertisement
Vladislav8653

laba 3_3_delphi

Dec 4th, 2022
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.95 KB | None | 0 0
  1. Program Laba3;
  2. Uses
  3.     System.SysUtils;
  4. Type
  5.     TArray = Array of Integer;
  6.  
  7. Function InputData() : Integer;
  8. Var
  9.     IsCorrect : Boolean;
  10.     N : Integer;
  11. Begin
  12.     N := 0;
  13.     Repeat
  14.         IsCorrect := True;
  15.         Try
  16.             Readln(N)
  17.         Except
  18.             Writeln('Please, enter a integer number:');
  19.             IsCorrect := False;
  20.         End;
  21.     Until(IsCorrect);
  22.     InputData := N;
  23. End;
  24.  
  25. Function Choose() : Boolean;
  26. Var
  27.     InputNumber : Integer;
  28.     IsCorrect : Boolean;
  29. Const
  30.     MIN_NUM = 0;
  31.     MAX_NUM = 1;
  32. Begin
  33.     InputNumber := 0;
  34.     Repeat
  35.         IsCorrect := True;
  36.         InputNumber := InputData();
  37.         If ((InputNumber < MIN_NUM) or (InputNumber > MAX_NUM)) then
  38.         Begin
  39.             Writeln('You are out of input range!');
  40.             IsCorrect := False;
  41.         End;
  42.  
  43.     Until IsCorrect;
  44.     If (InputNumber = 1) then
  45.         Choose := True
  46.     Else
  47.         Choose := False;
  48. End;
  49.  
  50. Function InputArraySize () : Integer;
  51. Var
  52.     Num : Integer;
  53.     IsCorrect : Boolean;
  54. Const
  55.     MIN_SIZE = 2;
  56. Begin
  57.     Repeat
  58.         IsCorrect := True;
  59.         Num := InputData();
  60.         If (Num < MIN_SIZE) Then
  61.         Begin
  62.             Writeln('Please, enter a number > 2:');
  63.             IsCorrect := False
  64.         End;
  65.     Until IsCorrect;
  66.     InputArraySize := Num;
  67. End;
  68.  
  69. Function InputArray (N : Integer) : TArray;
  70. Var
  71.     I: Integer;
  72.     Arr : TArray;
  73. Begin
  74.     SetLength (Arr, N);
  75.     For I := 0 to High(Arr) do
  76.         Arr[I] := InputData();
  77.     InputArray := Arr;
  78. End;
  79.  
  80. Function SortArrayBySelectionSort (Arr : TArray): TArray;
  81. Var
  82.     I, J, Temp, Min : Integer;
  83. Begin
  84.     Writeln('Sort stages:');
  85.     For I := 0 To High(Arr) - 1 do
  86.         Begin
  87.             For J :=  I + 1 To High(Arr)  do
  88.                 If (Arr[J] < Arr[I]) then
  89.                 Begin
  90.                     Min := Arr[J];
  91.                     Arr[J] := Arr[I];
  92.                     Arr[I] := Min;
  93.                 End;
  94.             Write('Stage ', I + 1, ': ');
  95.             For Temp := 0 To High(Arr) Do
  96.                 Write(Arr[Temp], ' ');
  97.             Writeln;
  98.         End;
  99.      SortArrayBySelectionSort := Arr;
  100. End;
  101.  
  102. Procedure OutputArray (Arr : TArray);
  103. Var
  104.     I : Integer;
  105. Begin
  106.     For I := 0 to High(Arr) do
  107.         Write(Arr[I], ' ');
  108.     Writeln;
  109. End;
  110.  
  111. Function InputFilePath() : String;
  112. Var
  113.     IsCorrect : Boolean;
  114.     Path : String;
  115. Begin
  116.     Writeln('Input path to file: ');
  117.     Repeat
  118.         IsCorrect := True;
  119.         Readln(Path);
  120.         If(Not FileExists(Path)) Then
  121.         Begin
  122.             IsCorrect := False;
  123.             Writeln('Wrong way to file. Input correct path.');
  124.         End
  125.         Else If (ExtractFileExt(Path) <> '.txt') Then
  126.         Begin
  127.             Writeln('Must have .txt');
  128.             IsCorrect := False;
  129.         End;
  130.     Until IsCorrect;
  131.     InputFilePath := Path;
  132. End;
  133.  
  134. Function InputSizeOfArrayFromFile(Path : String) : Integer;
  135. Var
  136.     Num : Integer;
  137.     IsCorrect : Boolean;
  138.     InputFile : TextFile;
  139. Const
  140.     MIN = 2;
  141. Begin
  142.     Num := 0;
  143.     AssignFile(InputFile, Path);
  144.     Reset(InputFile);
  145.     IsCorrect := True;
  146.     Try
  147.         Readln(InputFile, Num);
  148.     Except
  149.         IsCorrect := False;
  150.         Writeln('Mistake of reading size of array from file.');
  151.     End;
  152.     If (IsCorrect And (Num < MIN)) Then
  153.         Writeln('Mistake of array elements.');
  154.     CloseFile(InputFile);
  155.     InputSizeOfArrayFromFile := Num;
  156. End;
  157.  
  158. Function InputArrayFile(Path : String; Num : Integer) : TArray;
  159. Var
  160.     I: Integer;
  161.     IsCorrect : Boolean;
  162.     InputFile : TextFile;
  163.     Arr : TArray;
  164. Begin
  165.     SetLength(Arr, Num);
  166.     AssignFile(InputFile, Path);
  167.     Reset(InputFile);
  168.     Readln(InputFile);
  169.     Repeat
  170.         IsCorrect := True;
  171.         For I := 0 To High(Arr) Do
  172.         Begin
  173.             Try
  174.                 Read(InputFile, Arr[I]);
  175.             Except
  176.                 IsCorrect := False;
  177.                 Writeln('Mistake of reading from file.')
  178.             End;
  179.         End;
  180.     Until IsCorrect;
  181.     Close(InputFile);
  182.     InputArrayFile := Arr;
  183. End;
  184.  
  185. Procedure FileOutput(Path : String; Arr : TArray);
  186. Var
  187.     IsCorrect : Boolean;
  188.     OutputFile : TextFile;
  189.     I: Integer;
  190. Begin
  191.     AssignFile(OutputFile, Path);
  192.     Repeat
  193.         IsCorrect := True;
  194.         Try
  195.             Rewrite(OutputFile);
  196.         Except
  197.             IsCorrect := False;
  198.             Writeln('Mistake with writing in file. Input another path.');
  199.             Path := InputFilePath();
  200.         End;
  201.     Until IsCorrect;
  202.     Writeln(OutputFile, 'Sorted array:');
  203.     For I := 0 To High(Arr) Do
  204.         Write(OutputFile, Arr[I], ' ');
  205.     CloseFile(OutputFile);
  206.     Write('Success!');
  207. End;
  208.  
  209. Function Input () : TArray;
  210. Var
  211.     Arr : TArray;
  212.     Num : Integer;
  213.     Path : String;
  214.     Chose : Boolean;
  215. Begin
  216.     Writeln('Selection sort. Demonstration.');
  217.     Writeln('Enter type of input: ');
  218.     Writeln('1 is console input, 0 is file input.');
  219.     Chose := Choose();
  220.     If Chose then
  221.     Begin
  222.         Writeln('Input size of array:');
  223.         Num := InputArraySize();
  224.         Writeln('Input array elements:');
  225.         Arr := InputArray(Num);
  226.         Writeln ('Unsorted array:');
  227.         OutputArray(Arr);
  228.     End
  229.     Else
  230.     Begin
  231.         Path := InputFilePath();
  232.         Num := InputSizeOfArrayFromFile(Path);
  233.         Arr := InputArrayFile(Path, Num);
  234.     End;
  235.     Input := Arr;
  236. End;
  237.  
  238. Procedure Output (Arr : TArray);
  239. Var
  240.     Path : String;
  241.     Chose : Boolean;
  242. Begin
  243.     Writeln('Enter type of output:');
  244.     Writeln('1 is console output, 0 is file output.');
  245.     Chose := Choose();
  246.     If Chose then
  247.     Begin
  248.         Writeln ('Sorted array:');
  249.         OutputArray(Arr);
  250.     End
  251.     Else
  252.     Begin
  253.         Path := InputFilePath();
  254.         FileOutput(Path, Arr);
  255.     End;
  256.     Readln;
  257. End;
  258.  
  259. Var
  260.     Arr : TArray;
  261. Begin
  262.     Arr := Input();
  263.     Arr := SortArrayBySelectionSort(Arr);
  264.     Output (Arr);
  265. End.
  266.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement