Показать сообщение отдельно
  #2  
Старый 08.05.2017, 05:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, например, так:
Код:
type
  TDynIntMatrix = Array Of Array Of Integer;

function GetPositiveNum(A : TDynIntMatrix) : Integer;
var
  I, J : Integer;
  mI, mJ : Integer;
begin
  Result := 0;

  // Top-Left item - current min item
  mI := Low(A);
  mJ := Low(A[mI]);

  // Search for min item
  For I := Low(A) To High(A) Do
    For J := Low(A[i]) To High(A[i]) Do
      If A[I,J] < A[mI,mJ] Then
        Begin
          mI := I;
          mJ := J;
        End;

  // Cont positive items
  For I := mI To High(A) Do
    For J := Low(A[i]) To High(A[i]) Do
      Begin
        If (I = mI) And (J <= mJ) Then Continue; // Before min item
        If A[I,J] > 0 Then Inc(Result); // positive item - increase counter
      End;
end;

procedure RandomInitArray(var A : TDynIntMatrix; AI, AJ : Integer);
var
  I, J : Integer;
begin
  SetLength(A,AI,AJ);
  For I := Low(A) To High(A) Do
    For J := Low(A[i]) To High(A[i]) Do
      A[i,J] := Random(100)-50; // Generate random value -50..49
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  M1 : TDynIntMatrix;
  M2 : TDynIntMatrix;

  S : String;
begin
  RandomInitArray(M1,5,10);
  RandomInitArray(M2,10,5);

  S := 'Positive item after min item count.'#13#10;
  S := S + Format('M1 : %d'#13#10,[GetPositiveNum(M1)]);
  S := S + Format('M2 : %d',[GetPositiveNum(M2)]);

  ShowMessage(S);
end;
Ответить с цитированием