1

配列に繰り返しデータがあるかどうかを確認する関数があります。それは以下のようになります。タスクは、その関数を使用して、繰り返しデータのないマトリックス内の列を見つけます。問題は、行列の列をその関数に渡す方法です。

PS私はPascal/Delphiを使用しています

type
  myArray = array [1..10] of integer;

function noRepeat(A: myArray; n: integer): Boolean;
var
  i: integer;
begin
  Result := true;
  for i:=1 to n do
    for j := i + 1 to n do
      if  (A[i] = A[j]) then
        Result := true;
end; 
4

1 に答える 1

5

以下の例では:

matrix[column][row]

「myMatrix」タイプの構造は次のとおりです。最初の配列を反復処理して、テスト関数に送信するだけです。

また、テスト関数では、最初に結果を false に設定してください。

type
  myArray = array [1..10] of integer;
  myMatrix = array[1..10] of myArray;

var
  matrix: myMatrix;

function noRepeat(const A: myArray): Boolean;
var
  i: integer;
begin
  //Result := true; //?
  Result := false;
  for i:=1 to high(A) do
    for j := i + 1 to high(A) do
      if  (A[i] = A[j]) then
        Result := true;
end; 

procedure sendColumn;
var
  b, wasRepeat: boolean;
  i: Integer;
Begin

  for i := low(matrix) to high(matrix) do
  Begin
    b := noRepeat(matrix[i]);
    if b then
      wasRepeat := true;
  End;

End;

行優先の場合は、テストする列をテスト ルーチンに通知する必要があります。

type
  myArray = array [1..10] of integer;
  myMatrix = array[1..10] of myArray;

var
  matrix: myMatrix;

function noRepeat(const A: myMatrix; Col: Integer): Boolean;
var
  i, j: integer;
begin

  Result := false;
  for i := low(A) to high(A) do      
    for j := i + low(A) to high(A) do
      if  (A[i][Col] = A[j][Col]) then
        Result := true;
end; 

procedure sendColumn;
var
  b, wasRepeat: boolean;
  i: Integer;
Begin

  for i := 1 to 10 do
  Begin
    b := noRepeat(matrix, i);
    if b then
      wasRepeat := true;
  End;

End;
于 2012-12-25T21:43:52.307 に答える