【问题标题】:matrix as the array of arrays矩阵作为数组的数组
【发布时间】:2012-12-25 20:51:33
【问题描述】:

我有一个函数可以检查数组中是否有重复数据;如下所示。任务是使用该函数查找矩阵中没有重复数据的列。问题是如何将矩阵的列传递给该函数。

附:我正在使用 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; 

【问题讨论】:

  • 在 MxN 矩阵中,M 是行大小,N 是列大小,这将为您提供列:for i:=0 to n do for j:=0 to m a[i, j]。
  • 你的矩阵类型定义是什么样的?
  • 通过 const 传递数组。不要复制它们。使用开放数组。无需显式传递长度,如果您的数组是 ro major,那么您需要将列挑选到临时数组中,然后传递。

标签: arrays delphi function matrix pascal


【解决方案1】:

在下面的例子中:

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;

【讨论】:

  • 很多,但是你的代码将行发送给 noRepeat 函数,而不是矩阵的列
  • 您是否决定将数组排序为 [Column][Row] 或 [Row][Column] 完全取决于您。它本质上是相同的结构。
  • @user 的意思是他/她的数组是行专业的。
  • 添加了行主矩阵的示例。
  • @user 如果你有一个二维数组,你没有一维数组代表行和列。因此,如果您是行专业的,那么您需要以一种或另一种方式挑选列。这对我来说似乎是一个很好的答案。如果有问题,那就是问题甚至没有显示您的矩阵类型,让我们猜测。加倍努力。
猜你喜欢
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多