Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Задание: отсортироватть методом простого выбора первую четверть матрицы.
- Program KR4;
- Uses
- System.SysUtils;
- Type
- TMatrix = Array of Array of Integer;
- TArray = Array of Integer;
- Function InputMatrixSize () : Integer; // вводим количество элементов в матрице. Целесообразно вводить число не менее 4
- Var
- N : Integer;
- Begin
- Writeln ('Введите размер матрицы:');
- Readln(N);
- InputMatrixSize := N;
- End;
- Function InputMatrix (N : Integer) : Tmatrix; // вводим элементы матрицы
- Var
- I, J : Integer;
- Matrix : TMatrix;
- Begin
- Writeln ('Введите элементы матрицы:');
- SetLength (Matrix, N, N);
- For I := 0 to High(Matrix) do
- For J := 0 to High(Matrix) do
- Readln(Matrix[I,J]);
- InputMatrix := Matrix;
- End;
- Function FirstQuarterToArray (Matrix : TMatrix; N : Integer) : TArray; // нужные для сортировки элементы (1-ая четверть) добавляются в одномерный массив
- Var
- Quarter : TArray;
- I, J, K : Integer;
- Begin
- K := 0;
- SetLength (Quarter, (N div 2) * (N div 2));
- For I := 0 to High(Matrix) do
- For J := 0 to High(Matrix) do
- If (( I < N div 2) and (J < N div 2)) then
- Begin
- Quarter[K] := Matrix [I][J];
- Inc (K);
- End;
- FirstQuarterToArray := Quarter;
- End;
- Function SortArrayByBubble (Quarter : TArray; N : Integer): TArray; // сортировка пузырьком, как я делал на кр, тк я не знал на тот момент другую.
- Var
- I, J, K : Integer;
- Begin
- For I := 0 to High(Quarter) do
- For J := 0 to High(Quarter) - 1 do
- If (Quarter[J + 1] < Quarter [J]) then
- Begin
- K := Quarter[J];
- Quarter [J] := Quarter [J + 1];
- Quarter [J + 1] := K;
- End;
- SortArrayByBubble := Quarter;
- End;
- Function SortArrayBySelectionSort (Quarter : TArray; N : Integer): TArray; // сортировка вставками, как надо было сделать.
- Var
- I, J, IndexMin, Min : Integer;
- Begin
- For I := 0 To High(Quarter) - 1 do
- Begin
- IndexMin := I;
- For J := I + 1 To High(Quarter) do
- If (Quarter[J] < Quarter[I]) then
- IndexMin := J;
- Min := Quarter[IndexMin];
- Quarter[IndexMin] := Quarter[I];
- Quarter[I] := Min;
- End;
- SortArrayBySelectionSort := Quarter;
- End;
- Function InputArrayInMatrix (Quarter : TArray; Matrix : TMatrix; N : Integer): TMatrix; // отсортированные элементы массива заносятся в матрицу обратно
- Var
- I, J, K : Integer;
- Begin
- K := 0;
- For I := 0 to High(Quarter) do
- For J := 0 to High(Quarter) do
- If (( I < N div 2) and (J < N div 2)) then
- Begin
- Matrix [I][J] := Quarter[K];
- Inc (K);
- End;
- InputArrayInMatrix := Matrix;
- End;
- Function Solution (N : Integer; Matrix : TMatrix) : TMatrix; // тут просисходят весь алгоритм(input в массив из матрицы - сортировка - output в матрицу из массива)
- Var
- Quarter : TArray;
- Begin
- Quarter := FirstQuarterToArray(Matrix, N);
- Quarter := SortArrayBySelectionSort(Quarter, N);
- Matrix := InputArrayInMatrix (Quarter, Matrix, N);
- Solution := Matrix;
- End;
- Procedure OutputMatrix ( N: Integer; Matrix : TMatrix); // вывод матрицы в консоль
- Var
- I, J : Integer;
- Begin
- For I := 0 to High(Matrix) do
- Begin
- For J := 0 to High(Matrix) do
- Write(Matrix[I,J], ' ');
- Writeln;
- End;
- End;
- Var
- N : Integer;
- Matrix : TMatrix;
- Begin
- N := InputMatrixSize();
- Matrix := InputMatrix(N);
- Writeln('Исходная матрица:');
- OutputMatrix (N, Matrix);
- Matrix := Solution (N, Matrix);
- Writeln('Отсортированная матрица:');
- OutputMatrix (N, Matrix);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement