为同一个数组传递两个差异数组

时间:2015-12-06 06:13:33

标签: pascal

我试图对两种类型的阵列使用相同的打印程序(第一个arry长度为10,第二个数组长度为15)。

我在互联网上找不到任何解决方案。有没有人解决这个问题。

这是两个数组

program pp1;
const 
  m=10;
  n=15;
type
  matrix1=array[1..m] of integer;
  matrix2=array[1..n] of integer;
var
m1:matrix1;
m2:matrix2;

这是它尝试过的方法。在方法'x'中,数组的长度。

procedure writeMatrix(var data: array of integer ;x:integer);
var
  j:integer;
begin
   for j:=1 to x do
   begin
     write(data[j]:3);
   end;

end;

我的主要方法

    begin
    writeMatrix(m1,10);
    writeMatrix(m2,10);
    end.

如何使用相同的writeMatrix方法打印两个数组..是否有任何搁浅的方法。

2 个答案:

答案 0 :(得分:0)

正如我在之前的评论中所说的那样,你的实现很好,但你必须在打印之前在矩阵中放一些东西,否则你会在屏幕上得到一堆零(最好的)。

试试这个:

program pp1;
const 
  m=10;
  n=15;
type
  matrix1=array[1..m] of integer;
  matrix2=array[1..n] of integer;
var
m1:matrix1;
m2:matrix2;

procedure fillMatrix(var data:array of integer; x:integer);
var
j:integer;
begin
for j:= 1 to x do begin
  data[j]:=j;
end;
end;


procedure writeMatrix(var data: array of integer; x:integer);
var
  j:integer;
begin
   for j:=1 to x do
   begin
     write(data[j]:3);
   end;    
end;

begin
  fillMatrix(m1,10);
  fillMatrix(m2,10);
  writeMatrix(m1,10);
  writeMatrix(m2,10);
  readln;
  readln;
end.

提示:考虑避免使用全局变量,在这种情况下m1m2应该在主程序中声明。

答案 1 :(得分:0)

<块引用>

我如何使用相同的 writeMatrix 方法来打印两个数组.. 有没有办法做到这一点。

是的,有一个标准的方法。它被称为conformant-array 参数。它在 ISO standard 7185(标准“未扩展”帕斯卡)的(级别 1)中进行了标准化。它看起来像这样:

procedure print(protected matrix: array[
        columnMinimum..columnMaximum: integer;
        rowMinimum..rowMaximum: integer
    ] of integer);
const
    totalWidth = 6;
var
    x: type of columnMinimum;
    y: type of rowMinimum;
begin
    for y := rowMinimum to rowMaximum do
    begin
        for x := columnMinimum to columnMaximum do
        begin
            write(matrix[x, y]:totalWidth);
        end;
        writeLn;
    end;
end;

就好像有额外的 const 值,但它们是动态的,取决于传递的 matrix。此代码还使用类型查询 (type of …) 和 protected 修饰符,两者均在 ISO 10206 (Extended Pascal) 中定义,该标准建立在 ISO 7185 之上。在 EP 中,您可以也可以考虑通过架构诸如参数之类的数据。