Advertisement
deced

Untitled

Dec 23rd, 2020
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.52 KB | None | 0 0
  1. program Project6;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. uses
  7.     System.SysUtils;
  8.  
  9. type
  10.     Matrix = array of array of integer;
  11.  
  12. procedure PrintMatrix(InputMatrix: Matrix);
  13. var
  14.     I, J: integer;
  15. begin
  16.     for I := 0 to High(InputMatrix) do
  17.     begin
  18.         for J := 0 to High(InputMatrix) do
  19.         begin
  20.             Write(InputMatrix[I, J]:5);
  21.         end;
  22.         Writeln;
  23.     end;
  24. end;
  25.  
  26. function GetMatrix(): Matrix;
  27. var
  28.     OutputMatrix: Matrix;
  29.     Size, I, J: integer;
  30. begin
  31.     Writeln('Enter matrix size');
  32.     Readln(Size);
  33.     SetLength(OutputMatrix, Size, Size);
  34.     for I := 0 to High(OutputMatrix) do
  35.         for J := 0 to High(OutputMatrix) do
  36.         begin
  37.             Write('a[', I, ',', J, '] = ');
  38.             Readln(OutputMatrix[I, J]);
  39.         end;
  40.     GetMatrix := OutputMatrix;
  41. end;
  42.  
  43. procedure Sort(InputMatrix: Matrix);
  44. var
  45.     I, J, PosCount, NegCount: integer;
  46.     Positive: array of integer;
  47.     Negative: array of integer;
  48. begin
  49.     for I := 0 to High(InputMatrix) do
  50.         for J := 0 to High(InputMatrix) do
  51.         // считаем кол-во положительных и отрицательных
  52.         begin
  53.             if InputMatrix[I, J] > 0 then
  54.                 inc(PosCount);
  55.             if InputMatrix[I, J] < 0 then
  56.                 inc(NegCount);
  57.         end;
  58.     SetLength(Positive, PosCount);
  59.     // создаем массивы для хранения положительных и отрицательных
  60.     SetLength(Negative, NegCount);
  61.     PosCount := 0; // по этим индексам будем заполнять массивы, обнуляю
  62.     NegCount := 0;
  63.     for I := 0 to High(InputMatrix) do
  64.         for J := 0 to High(InputMatrix) do // заполняем
  65.         begin
  66.             if InputMatrix[I, J] > 0 then
  67.             begin
  68.                 Positive[PosCount] := InputMatrix[I, J];
  69.                 inc(PosCount);
  70.             end;
  71.             if InputMatrix[I, J] < 0 then
  72.             begin
  73.                 Negative[NegCount] := InputMatrix[I, J];
  74.                 inc(NegCount);
  75.             end;
  76.         end;
  77.     for I := 0 to High(Negative) do
  78.         for J := 1 to High(Negative) do
  79.         // сортируем отрицательные по модулю, как и сказано в условии
  80.         begin
  81.             if Negative[J] > Negative[J - 1] then
  82.             begin
  83.                 Negative[J] := Negative[J] xor Negative[J - 1];
  84.                 Negative[J - 1] := Negative[J] xor Negative[J - 1];
  85.                 Negative[J] := Negative[J] xor Negative[J - 1];
  86.             end;
  87.         end;
  88.     PosCount := 0; // по этим индексам будем брать занчения из массивов, обнуляю
  89.     NegCount := 0;
  90.     for I := 0 to High(InputMatrix) do
  91.         for J := 0 to High(InputMatrix) do  // заполняем матрицу
  92.         begin
  93.             if NegCount < high(Negative) then
  94.             begin
  95.                 InputMatrix[I, J] := Negative[NegCount];
  96.                 inc(NegCount);
  97.             end
  98.             else if PosCount < high(Positive) then
  99.             begin
  100.                 InputMatrix[I, J] := Positive[PosCount];
  101.                 inc(PosCount);
  102.             end
  103.             else
  104.                 InputMatrix[I, J] := 0;
  105.         end;
  106.  
  107. end;
  108.  
  109. var
  110.     DefaultMatrix: Matrix;
  111.  
  112. begin
  113.      DefaultMatrix := GetMatrix();
  114.     PrintMatrix(DefaultMatrix);
  115.     Sort(DefaultMatrix);
  116.     Writeln;
  117.     PrintMatrix(DefaultMatrix);
  118.     Readln;
  119.  
  120. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement