Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project6;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils;
- type
- Matrix = array of array of integer;
- procedure PrintMatrix(InputMatrix: Matrix);
- var
- I, J: integer;
- begin
- for I := 0 to High(InputMatrix) do
- begin
- for J := 0 to High(InputMatrix) do
- begin
- Write(InputMatrix[I, J]:5);
- end;
- Writeln;
- end;
- end;
- function GetMatrix(): Matrix;
- var
- OutputMatrix: Matrix;
- Size, I, J: integer;
- begin
- Writeln('Enter matrix size');
- Readln(Size);
- SetLength(OutputMatrix, Size, Size);
- for I := 0 to High(OutputMatrix) do
- for J := 0 to High(OutputMatrix) do
- begin
- Write('a[', I, ',', J, '] = ');
- Readln(OutputMatrix[I, J]);
- end;
- GetMatrix := OutputMatrix;
- end;
- procedure Sort(InputMatrix: Matrix);
- var
- I, J, PosCount, NegCount: integer;
- Positive: array of integer;
- Negative: array of integer;
- begin
- for I := 0 to High(InputMatrix) do
- for J := 0 to High(InputMatrix) do
- // считаем кол-во положительных и отрицательных
- begin
- if InputMatrix[I, J] > 0 then
- inc(PosCount);
- if InputMatrix[I, J] < 0 then
- inc(NegCount);
- end;
- SetLength(Positive, PosCount);
- // создаем массивы для хранения положительных и отрицательных
- SetLength(Negative, NegCount);
- PosCount := 0; // по этим индексам будем заполнять массивы, обнуляю
- NegCount := 0;
- for I := 0 to High(InputMatrix) do
- for J := 0 to High(InputMatrix) do // заполняем
- begin
- if InputMatrix[I, J] > 0 then
- begin
- Positive[PosCount] := InputMatrix[I, J];
- inc(PosCount);
- end;
- if InputMatrix[I, J] < 0 then
- begin
- Negative[NegCount] := InputMatrix[I, J];
- inc(NegCount);
- end;
- end;
- for I := 0 to High(Negative) do
- for J := 1 to High(Negative) do
- // сортируем отрицательные по модулю, как и сказано в условии
- begin
- if Negative[J] > Negative[J - 1] then
- begin
- Negative[J] := Negative[J] xor Negative[J - 1];
- Negative[J - 1] := Negative[J] xor Negative[J - 1];
- Negative[J] := Negative[J] xor Negative[J - 1];
- end;
- end;
- PosCount := 0; // по этим индексам будем брать занчения из массивов, обнуляю
- NegCount := 0;
- for I := 0 to High(InputMatrix) do
- for J := 0 to High(InputMatrix) do // заполняем матрицу
- begin
- if NegCount < high(Negative) then
- begin
- InputMatrix[I, J] := Negative[NegCount];
- inc(NegCount);
- end
- else if PosCount < high(Positive) then
- begin
- InputMatrix[I, J] := Positive[PosCount];
- inc(PosCount);
- end
- else
- InputMatrix[I, J] := 0;
- end;
- end;
- var
- DefaultMatrix: Matrix;
- begin
- DefaultMatrix := GetMatrix();
- PrintMatrix(DefaultMatrix);
- Sort(DefaultMatrix);
- Writeln;
- PrintMatrix(DefaultMatrix);
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement