Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.43 KB | None | 0 0
  1. program Lab3_3;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils;
  7.  
  8. type
  9.     TIntArray = array of Integer;
  10. const
  11.    MinNumber = 1;
  12.    MaxNumber = 9999;
  13.  
  14. procedure CountingSort(var Arr : TIntArray; Num, Min, Max: Integer);
  15. var
  16.    Count: array of Integer;
  17.    i, j, Index: Integer;
  18. begin
  19.    SetLength(Count, Max - Min);
  20.    for i := 0 to (Max - Min - 1) do
  21.       Count[i] := 0;
  22.    for i := 0 to (Num - 1) do
  23.       Count[Arr[i] - Min] := Count[Arr[i] - Min] + 1;
  24.    Index := 0;
  25.    for i := Min to Max do
  26.       for j := 0 to (Count[i - Min] - 1) do
  27.       begin
  28.            Arr[Index] := i;
  29.            Index := Index + 1;
  30.       end;
  31. end;
  32.  
  33. procedure OutputToFile(ArrayValue: TIntArray; var OutFile: TextFile; LenArr: Integer; MinElement, MaxElement: Integer);
  34. var
  35.    OutFileName: string;
  36.    i: Integer;
  37. begin
  38.    Write('Please, Enter the Name of Output File in Format name.txt: ');
  39.    ReadLn(OutFileName);
  40.    AssignFile(OutFile, OutFileName);
  41.    ReWrite(OutFile);
  42.    CountingSort(ArrayValue, LenArr, MinElement, MaxElement);
  43.    WriteLn(OutFile, 'Sorted Array: ');
  44.    for i := 0 to LenArr - 1 do
  45.        WriteLn(OutFile, ArrayValue[i]);
  46.    CloseFile(OutFile);
  47. end;
  48.  
  49. function GetArrFromFile(ArrayValue: TIntArray; TheWay: string; var LenArr: Integer; var IsCorrect: Boolean; var MinElement, MaxElement: Integer): TIntArray;
  50. var
  51.     ListInputFile: TextFile;
  52.     i, j: Integer;
  53.     Temp: string;
  54. begin
  55.     Assign(ListInputFile, TheWay);
  56.     Reset(ListInputFile);
  57.     j := 0;
  58.     while (not Eof(ListInputFile)) do
  59.     begin
  60.        Readln(ListInputFile, Temp);
  61.        Inc(j);
  62.     end;
  63.     LenArr := j;
  64.     SetLength(ArrayValue, LenArr);
  65.     Reset(ListInputFile);
  66.     for i := 0 to LenArr - 1 do
  67.        Read(ListInputFile, ArrayValue[i]);
  68.     Reset(ListInputFile);
  69.     MaxElement := ArrayValue[0];
  70.     MinElement := MaxElement;
  71.     for i := 0 to length(ArrayValue) - 1 do
  72.        if ArrayValue[i] > MaxElement then
  73.           MaxElement := ArrayValue[i]
  74.        else
  75.           if ArrayValue[i] < MinElement then
  76.              MinElement := ArrayValue[i];
  77.      CloseFile(ListInputFile);
  78.      GetArrFromFile := ArrayValue;
  79. end;
  80.  
  81. function IsValidElement(var UserFile: TextFile; ArrayValue: TIntArray; LenArr: Integer): Boolean;
  82. var
  83.    i: Integer;
  84.    Error: String;
  85.    IsValid: Boolean;
  86. begin
  87.    Reset(UserFile);
  88.    IsValid := True;
  89.    Error := ' ';
  90.    SetLength (ArrayValue, LenArr);
  91.    for i := 0 to LenArr - 1 do
  92.    begin
  93.          try
  94.             Read(UserFile, ArrayValue[i]);
  95.             if (ArrayValue[i] > MaxNumber) or (ArrayValue[i] < MinNumber) then
  96.             begin
  97.                Error := Error + '[' + IntToStr(i + 1) + '] ';
  98.                IsValid := False;
  99.             end;
  100.          except
  101.             Error := Error + '[' + IntToStr(i + 1) + '] ';
  102.             IsValid := False;
  103.          end;
  104.       ReadLn(UserFile);
  105.    end;
  106.    if not IsValid then
  107.    begin
  108.       Write('Element Must Be In the Range from ', MinNumber, ' to ', MaxNumber, '. Wrong Elements Are:');
  109.       Writeln(Error);
  110.    end;
  111.    IsValidElement := IsValid;
  112.    CloseFile(UserFile);
  113. end;
  114.  
  115. function CheckInputFile(var UserFile: TextFile; var FileName: string): string;
  116. var
  117.    IsCorrect: Boolean;
  118. begin
  119.    IsCorrect := False;
  120.    repeat
  121.       try
  122.          Write('Please, Enter the Name of File with Input Data in Format name.txt: ');
  123.          ReadLn(FileName);
  124.          AssignFile(UserFile, FileName);
  125.          Reset(UserFile);
  126.          if Eof(UserFile) then
  127.             WriteLn('This File Is Empty. So That:');
  128.          CheckInputFile := FileName;
  129.          IsCorrect := True;
  130.       except
  131.          on E:EInOutError do
  132.          begin
  133.             IsCorrect := False;
  134.             WriteLn('This File with Such Name Does Not Exist. Please, Try Again.');
  135.          end;
  136.       end;
  137.    until IsCorrect;
  138.    CloseFile(UserFile);
  139. end;
  140.  
  141. procedure Main();
  142. var
  143.    UserFile: TextFile;
  144.    OutFile: TextFile;
  145.    FileName: string;
  146.    LenArr: Integer;
  147.    IsCorrect: Boolean;
  148.    ArrayValue: TIntArray;
  149.    MinElement, MaxElement: Integer;
  150. begin
  151.    IsCorrect := False;
  152.    SetLength(ArrayValue, LenArr);
  153.    repeat
  154.       FileName := CheckInputFile(UserFile, FileName);
  155.       ArrayValue := GetArrFromFile(ArrayValue, FileName, LenArr, IsCorrect, MinElement, MaxElement);
  156.       IsCorrect := IsValidElement(UserFile, ArrayValue, LenArr);
  157.    until IsCorrect;
  158.    OutputToFile(ArrayValue, OutFile, LenArr, MinElement, MaxElement);
  159.    ReadLn;
  160. end;
  161.  
  162.  
  163. begin
  164.    Main();
  165. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement