Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Lab3_3;
- {$APPTYPE CONSOLE}
- uses
- System.SysUtils;
- Type
- TArr = Array of Integer;
- Const
- MIN_ARR_LENGTH = 1;
- MAX_ARR_LENGTH = 10;
- MAX_A_VALUE = 1000000;
- MIN_A_VALUE = -1000000;
- Var
- ChoiceInput, ChoiceOutput: Integer;
- Arr: TArr;
- Answer: Boolean;
- Function InputInt(Min, Max: Integer): Integer;
- Var
- IsCorrect: Boolean;
- Int: Integer;
- Begin
- Repeat
- IsCorrect := True;
- Write('Введите число: ');
- Try
- Readln(Int);
- Except
- IsCorrect := False;
- Writeln('Вы ввели некорректные данные. Попробуйте снова.');
- End;
- If IsCorrect And ((Int > Max ) Or (Int < Min)) Then
- Begin
- IsCorrect := False;
- Writeln('Введено значение не входящее в диапазон допустимых значений');
- End;
- Until IsCorrect;
- InputInt := Int;
- End;
- Procedure InputArrFromConsole(Var Arr: TArr);
- Var
- IsCorrect: Boolean;
- I, Len: Integer;
- Begin
- Write('Введите количество элементов массива: ');
- Len := InputInt(MIN_ARR_LENGTH, MAX_ARR_LENGTH);
- SetLength(Arr, Len);
- For I := 0 To High(Arr) Do
- Begin
- Write('Введите элемент массива № ', I + 1, ': ');
- Arr[I] := InputInt(MIN_A_VALUE, MAX_A_VALUE);
- End;
- End;
- Function CheckFile(Path: String; Var Arr: TArr): Boolean;
- Var
- IsFileCorrect: Boolean;
- InputFile: TextFile;
- Len, I: Integer;
- Begin
- IsFileCorrect := True;
- I := 0;
- If FileExists(Path) Then
- Begin
- AssignFile(InputFile, Path);
- Try
- Reset(InputFile);
- Try
- Read(InputFile, Len);
- Except
- Write('Файл в неправильном формате');
- IsFileCorrect := False;
- CloseFile(InputFile);
- End;
- If IsFileCorrect And (Len < MIN_ARR_LENGTH) Or
- (Len > MAX_ARR_LENGTH) Then
- Begin
- Writeln('В файле количество элементов массива выходит за возможные пределы');
- IsFileCorrect := False;
- End;
- SetLength(Arr, Len);
- While (I < Len) And IsFileCorrect Do
- Begin
- Try
- Read(InputFile, Arr[I]);
- Except
- Writeln('В файле элементы массива представленны в неправильном формате');
- IsFileCorrect := False;
- CloseFile(InputFile);
- End;
- If (Arr[I] < MIN_A_VALUE) Or (Arr[I] > MAX_A_VALUE) Then
- Begin
- Writeln('В файле точки выходят за возможные пределы');
- IsFileCorrect := False;
- End;
- Inc(I);
- End;
- If IsFileCorrect and Not(EoF(InputFile)) Then
- Begin
- Writeln('В файле точки представленны в неправильном формате');
- IsFileCorrect := False;
- End;
- CloseFile(InputFile);
- Except
- Writeln('Не удалось открыть файл');
- End;
- End
- Else
- Begin
- Write('Файла по данному пути не существует');
- IsFileCorrect := False;
- End;
- CheckFile := IsFileCorrect;
- End;
- Procedure InputArr(Choice: Integer; Var Arr: TArr);
- Var
- IsFileCorrect: Boolean;
- Path: String;
- InputFile: TextFile;
- Begin
- If Choice = 1 Then
- Begin
- InputArrFromConsole(Arr);
- End
- Else
- Begin
- Repeat
- Writeln('Введите путь к файлу: ');
- Readln(Path);
- IsFileCorrect := CheckFile(Path, Arr);
- Until IsFileCorrect;
- End;
- End;
- Procedure SortArr(Var Arr: TArr);
- Var
- I, J, Buff: Integer;
- Begin
- for I := 1 to High(Arr) do
- Begin
- Buff := Arr[I];
- J := I;
- while ((J > 0) and (Arr[J-1] > Buff)) do
- begin
- Arr[J] := Arr[J-1];
- Dec(J);
- end;
- Arr[J] := Buff;
- End;
- end;
- Procedure OutputAnswer(Arr: TArr; Choice: Integer);
- Var
- Path: String;
- OutputFile: TextFile;
- I: Integer;
- IsFileCorrect: Boolean;
- Begin
- If Choice = 1 Then
- Begin
- Writeln('Результат: ');
- For I := 0 To High(Arr) Do
- Begin
- Write(Arr[I], ' ');
- End;
- End
- Else
- Begin
- IsFileCorrect := True;
- Repeat
- Writeln('Введите путь к файлу для вывода. Если файл отсутствует то он будет создан автоматически');
- Readln(Path);
- AssignFile(OutputFile, Path);
- Try
- Rewrite(OutputFile);
- Try
- Writeln(OutputFile, 'Результат');
- For I := 0 To High(Arr) Do
- Begin
- Write(OutputFile, Arr[I], ' ');
- End;
- Finally
- CloseFile(OutputFile);
- End;
- Except
- Writeln('Не удалось вывести в Файл');
- IsFileCorrect := False
- End;
- Until IsFileCorrect;
- End;
- End;
- Begin
- Write('Программа сортирует массив методом простых вставок. ', #10, 'Диапазон значений для длины массива - от 1 до 10.', #10, 'Диапазон для элементов массива - от -1000000 до 1000000.', #10);
- Writeln('Выберите вариант ввода' , #10 , '1. Через консоль', #10, '2. Из файла');
- ChoiceInput := InputInt(1,2);
- InputArr(ChoiceInput, Arr);
- SortArr(Arr);
- Writeln('Выберите вариант вывода' , #10 , '1. Через консоль', #10, '2. В файл');
- ChoiceOutput := InputInt(1,2);
- OutputAnswer(Arr, ChoiceOutput);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement