Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Lab3_3;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- type
- TIntArray = array of Integer;
- const
- MinNumber = 1;
- MaxNumber = 9999;
- procedure CountingSort(var Arr : TIntArray; Num, Min, Max: Integer);
- var
- Count: array of Integer;
- i, j, Index: Integer;
- begin
- SetLength(Count, Max - Min);
- for i := 0 to (Max - Min - 1) do
- Count[i] := 0;
- for i := 0 to (Num - 1) do
- Count[Arr[i] - Min] := Count[Arr[i] - Min] + 1;
- Index := 0;
- for i := Min to Max do
- for j := 0 to (Count[i - Min] - 1) do
- begin
- Arr[Index] := i;
- Index := Index + 1;
- end;
- end;
- procedure OutputToFile(ArrayValue: TIntArray; var OutFile: TextFile; LenArr: Integer; MinElement, MaxElement: Integer);
- var
- OutFileName: string;
- i: Integer;
- begin
- Write('Please, Enter the Name of Output File in Format name.txt: ');
- ReadLn(OutFileName);
- AssignFile(OutFile, OutFileName);
- ReWrite(OutFile);
- CountingSort(ArrayValue, LenArr, MinElement, MaxElement);
- WriteLn(OutFile, 'Sorted Array: ');
- for i := 0 to LenArr - 1 do
- WriteLn(OutFile, ArrayValue[i]);
- CloseFile(OutFile);
- end;
- function GetArrFromFile(ArrayValue: TIntArray; TheWay: string; var LenArr: Integer; var IsCorrect: Boolean; var MinElement, MaxElement: Integer): TIntArray;
- var
- ListInputFile: TextFile;
- i, j: Integer;
- Temp: string;
- begin
- Assign(ListInputFile, TheWay);
- Reset(ListInputFile);
- j := 0;
- while (not Eof(ListInputFile)) do
- begin
- Readln(ListInputFile, Temp);
- Inc(j);
- end;
- LenArr := j;
- SetLength(ArrayValue, LenArr);
- Reset(ListInputFile);
- for i := 0 to LenArr - 1 do
- Read(ListInputFile, ArrayValue[i]);
- Reset(ListInputFile);
- MaxElement := ArrayValue[0];
- MinElement := MaxElement;
- for i := 0 to length(ArrayValue) - 1 do
- if ArrayValue[i] > MaxElement then
- MaxElement := ArrayValue[i]
- else
- if ArrayValue[i] < MinElement then
- MinElement := ArrayValue[i];
- CloseFile(ListInputFile);
- GetArrFromFile := ArrayValue;
- end;
- function IsValidElement(var UserFile: TextFile; ArrayValue: TIntArray; LenArr: Integer): Boolean;
- var
- i: Integer;
- Error: String;
- IsValid: Boolean;
- begin
- Reset(UserFile);
- IsValid := True;
- Error := ' ';
- SetLength (ArrayValue, LenArr);
- for i := 0 to LenArr - 1 do
- begin
- try
- Read(UserFile, ArrayValue[i]);
- if (ArrayValue[i] > MaxNumber) or (ArrayValue[i] < MinNumber) then
- begin
- Error := Error + '[' + IntToStr(i + 1) + '] ';
- IsValid := False;
- end;
- except
- Error := Error + '[' + IntToStr(i + 1) + '] ';
- IsValid := False;
- end;
- ReadLn(UserFile);
- end;
- if not IsValid then
- begin
- Write('Element Must Be In the Range from ', MinNumber, ' to ', MaxNumber, '. Wrong Elements Are:');
- Writeln(Error);
- end;
- IsValidElement := IsValid;
- CloseFile(UserFile);
- end;
- function CheckInputFile(var UserFile: TextFile; var FileName: string): string;
- var
- IsCorrect: Boolean;
- begin
- IsCorrect := False;
- repeat
- try
- Write('Please, Enter the Name of File with Input Data in Format name.txt: ');
- ReadLn(FileName);
- AssignFile(UserFile, FileName);
- Reset(UserFile);
- if Eof(UserFile) then
- WriteLn('This File Is Empty. So That:');
- CheckInputFile := FileName;
- IsCorrect := True;
- except
- on E:EInOutError do
- begin
- IsCorrect := False;
- WriteLn('This File with Such Name Does Not Exist. Please, Try Again.');
- end;
- end;
- until IsCorrect;
- CloseFile(UserFile);
- end;
- procedure Main();
- var
- UserFile: TextFile;
- OutFile: TextFile;
- FileName: string;
- LenArr: Integer;
- IsCorrect: Boolean;
- ArrayValue: TIntArray;
- MinElement, MaxElement: Integer;
- begin
- IsCorrect := False;
- SetLength(ArrayValue, LenArr);
- repeat
- FileName := CheckInputFile(UserFile, FileName);
- ArrayValue := GetArrFromFile(ArrayValue, FileName, LenArr, IsCorrect, MinElement, MaxElement);
- IsCorrect := IsValidElement(UserFile, ArrayValue, LenArr);
- until IsCorrect;
- OutputToFile(ArrayValue, OutFile, LenArr, MinElement, MaxElement);
- ReadLn;
- end;
- begin
- Main();
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement