Показать сообщение отдельно
Старый 07.01.2010, 12:04   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Значит, вот. Сделал кое-что на совсем школьном уровне, т.е. без динамических массивов, как в исходном модуле, без преобразования чисел в строки и т.п. Если так не годится - напишите.

Модуль (файл должен называться 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.
Результат:Название: 27a5342efa08.jpg
Просмотров: 127

Размер: 83.3 Кб
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070