Значит, вот. Сделал кое-что на совсем школьном уровне, т.е. без динамических массивов, как в исходном модуле, без преобразования чисел в строки и т.п. Если так не годится - напишите.
Модуль (файл должен называться Arr_Mod.pas):
Код:
unit Arr_Mod;
interface
Const
n = 9; {values can be changed at will}
m = 11;
type
TArray = Array [0..(m+1)*(n+1)-1] of Integer; {Array type for positive and
negative numbers}
TMatrix = Array[0..n, 0..m] of Integer; {Two-dimesional array type}
procedure CreatMe(var Matrix:TMatrix); {Filling the matrix}
procedure ChangeMe(Matrix:TMatrix; var Otr,Poloj:TArray;
var Nneg, Npos:INTEGER); {Changing the matrix}
Procedure ResultOutput(Matrix:TMatrix; Otr,Poloj:TArray;
Nneg, Npos:INTEGER); {Creating output}
implementation
procedure CreatMe(var Matrix:TMatrix);
var
i,j: Integer;
begin
Randomize;
For i:=0 to n do
For j:=0 to m do
begin
Matrix[i,j]:= Random(255)+1;{Adding one is to avoid zero value}
If Random(2)=1 then Matrix[i,j]:=-Matrix[i,j];
{Radom choosing of "+" or "-" sign}
end;
end;
procedure ChangeMe(Matrix:TMatrix; var Otr,Poloj:TArray;
var Nneg, Npos:INTEGER);
var
i,j: Integer;
begin
Nneg:=-1; {Number of negative elements}
Npos:=-1; {Number of positive elements}
For i:=0 to n do
For j:=0 to m do
begin
If Matrix[i,j]<0 then
begin
Inc(Nneg);
Otr[Nneg]:=Matrix[i,j];
end
Else
begin
Inc(Npos);
Poloj[Npos]:=Matrix[i,j];
end;
end;
end;
Procedure ResultOutput(Matrix:TMatrix; Otr,Poloj:TArray;
Nneg,Npos:INTEGER);
var
i,j:Integer;
begin
For i:=0 to n do
begin
For j:=0 to m do
Write(Matrix[i,j]:5);
WriteLn;
end;
Writeln;
For i:=1 to (Nneg div (m+1)) do
begin
For j:=0 to m do Write(Otr[(i-1)*(m+1)+j]:5);
WriteLn;
end;
For i:=(Nneg div (m+1))*(m+1) to Nneg do
Write(Otr[i]:5);
WriteLn;
WriteLn;
For i:=1 to (Npos div (m+1)) do
begin
For j:=0 to m do Write(Poloj[(i-1)*(m+1)+j]:5);
WriteLn;
end;
For i:=(Npos div (m+1))*(m+1) to Npos do
Write(Poloj[i]:5);
WriteLn;
end;
end.
Тестирующая программа:
Код:
uses Arr_Mod;
var
A:TMatrix;
P,N:TArray;
Nn,Np:INTEGER;
Begin
CreatMe(A);
ChangeMe(A,N,P,Nn,Np);
ResultOutput(A,N,P,Nn,Np);
ReadLn;
End.
Результат: