Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project1;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils;
- const
- NMAX = 100;
- type
- TIntArray = array of Integer;
- function GetArraySize(): Integer;
- const
- MAXSIZE = 101;
- MINSIZE = 1;
- var
- IsCorrect: Boolean;
- SizeOfArray: Integer;
- begin
- IsCorrect := False;
- repeat
- try
- Writeln('Введите количество элементов массива, число должно быть больше ', MinSize, ' но меньше ', MaxSize);
- Readln(SizeOfArray);
- isCorrect := True;
- except
- Writeln('Число должно быть целым!');
- end;
- until (IsCorrect and (SizeOfArray > MINSIZE) and (SizeOfArray < MAXSIZE));
- GetArraySize:= SizeOfArray;
- end;
- function GetArrayFromKeyboard(SizeOfArray: Integer): TIntArray;
- const
- MINNUMB = - 51;
- MAXNUMB = 51;
- var
- i, Temp: Integer;
- IsCorrect: Boolean;
- ArrayOfInt: TIntArray;
- begin
- IsCorrect:= False;
- SetLength(ArrayOfInt, SizeOfArray);
- Temp:= SizeOfArray - 1;
- for i := 0 to Temp do
- begin
- repeat
- try
- Writeln('Введите ', i, ' элемент массива. Он должен быть больше ', MINNUMB, ' но меньше, чем ', MAXNUMB);
- Readln(ArrayOfInt[i]);
- IsCorrect := True;
- except
- Writeln('Число должно быть целым!');
- end;
- until (IsCorrect and (ArrayOfInt[i] > MINNUMB) and (ArrayOfInt[i] < MAXNUMB));
- end;
- Writeln('Исходный массив:');
- Temp:= SizeOfArray - 1;
- for i:= 0 to Temp do
- Write(ArrayOfInt[i]:4);
- GetArrayFromKeyboard:= ArrayOfInt;
- end;
- function GetArrayFromFile(SizeOfArray: Integer): TIntArray;
- var
- Input: TextFile;
- i, Temp: Integer;
- Path: String;
- ArrayOfInt: TIntArray;
- begin
- SetLength(ArrayOfInt, SizeOfArray);
- Writeln('Введите, пожалуйста, путь к файлу, например C:\Users\Think\Desktop\Input.txt');
- Readln(Path);
- AssignFile(Input, Path);
- Reset(Input);
- Writeln('-------------------------------------------------------');
- Writeln('Были введены числа:');
- Temp:= SizeOfArray - 1;
- for i:= 0 to Temp do
- begin
- Read(Input, ArrayOfInt[i]);
- Write(ArrayOfInt[i]:4);
- end;
- Writeln;
- Writeln('-------------------------------------------------------');
- Close(Input);
- GetArrayFromFile:= ArrayOfInt;
- end;
- function Input(SizeOfArray: Integer): TIntArray;
- var
- IsCorrect: Boolean;
- InputKeyboardOrFile: Char;
- ArrayOfInt: TIntArray;
- begin
- Writeln('Если ввод массива будет осуществляться с клавиатуры, напишите букву K, если из файла - напишите F');
- IsCorrect := False;
- repeat
- Readln(InputKeyboardOrFile);
- case InputKeyboardOrFile of
- 'K':
- begin
- ArrayOfInt:= GetArrayFromKeyboard(SizeOfArray);
- IsCorrect:= True;
- end;
- 'F':
- begin
- ArrayOfInt:= GetArrayFromFile(SizeOfArray);
- IsCorrect:= True;
- end;
- else
- Writeln('Пожалуйста, введите K или F');
- end;
- until(IsCorrect);
- Input := ArrayOfInt;
- end;
- procedure BinarySorting(var ArrayOfInt: TIntArray; SizeOfArray: Integer);
- var
- i, j, Temp, TempPlus, TempMinus, LeftSide, RightSide, CurrentElement, Middle: Integer;
- begin
- Temp:= SizeOfArray - 1;
- for i:= 1 to Temp do
- begin
- CurrentElement:= ArrayOfInt[i];{запомним элемент}
- LeftSide:= 0;{левый край}
- RightSide := i - 1;{правый}
- while LeftSide <= RightSide do {пока левый не больше правого}
- begin
- Middle:= (LeftSide + RightSide) div 2;{находим середину}
- TempPlus:= Middle + 1;
- TempMinus:= Middle - 1;
- if CurrentElement < ArrayOfInt[Middle] then
- RightSide:= TempMinus{если элемент меньше среднего, правый край левее середины}
- else
- LeftSide:= TempPlus{иначе левый правее середины}
- end;
- TempMinus:= i - 1;
- for j:= TempMinus downto LeftSide do
- ArrayOfInt[j + 1]:= ArrayOfInt[j];{сдвигаем массив вправо на 1}
- ArrayOfInt[LeftSide]:= CurrentElement{вставляем элемент на место}
- end; { Окончание алгоритма сортировки}
- end;
- procedure SaveToFile(ArrayOfInt: TIntArray; SizeOfArray: Integer);
- var
- OutputFile: TextFile;
- i, Temp: Integer;
- Path: String;
- begin
- Writeln('Введите, пожалуйста, путь к файлу, например: C:\Users\Think\Desktop\Output.txt');
- Readln(Path);
- AssignFile(OutputFile, Path);
- Rewrite(OutputFile);
- Writeln(OutputFile, '-------------------------------------------------------');
- Writeln(OutputFile, 'Отсортированный массив');
- Temp:= SizeOfArray - 1;
- for i:= 0 to Temp do
- Write(OutputFile, ArrayOfInt[i]:4);
- Writeln;
- Writeln(OutputFile, '-------------------------------------------------------');
- Close(OutputFile);
- end;
- procedure Output(ArrayOfInt: TIntArray; SizeOfArray: Integer);
- var
- ChooseOutput: Char;
- IsCorrect: Boolean;
- i, Temp: Integer;
- begin
- Writeln('-------------------------------------------------------');
- Writeln('Отсортированный массив:');
- Temp:= SizeOfArray - 1;
- for i:= 0 to Temp do
- Write(ArrayOfInt[i]:4);
- Writeln;
- Writeln('-------------------------------------------------------');
- Writeln('Вы хотите записать результат в файл? Если да - введите Y, если нет - введите N');
- IsCorrect:= False;
- repeat
- Readln(ChooseOutput);
- case ChooseOutput of
- 'Y':
- begin
- SaveToFile(ArrayOfInt, SizeOfArray);
- Writeln('Результат был записан в файл');
- IsCorrect := True;
- end;
- 'N':
- begin
- Writeln('Результат не был записан в файл');
- IsCorrect := True;
- end;
- else
- Writeln('Пожалуйста, введите Y или N');
- end;
- until(IsCorrect);
- end;
- var
- ArrayOfInt: TIntArray;
- SizeOfArray: Integer;
- begin
- Writeln('Эта программа выполняет сортировку массива бинарными вставками');
- SizeOfArray:= GetArraySize();
- SetLength(ArrayOfInt, SizeOfArray);
- ArrayOfInt:= Input(SizeOfArray);
- Writeln;
- BinarySorting(ArrayOfInt, SizeOfArray);
- Output(ArrayOfInt, SizeOfArray);
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement