delphi 7 中数组如何当参数

usesSysUtils;vara,k,t,i,j:longint;vars:array[1..8]oflongint;typetdigits=array[1..8]of... uses SysUtils;
var a,k,t,i,j:longint;var s:array[1..8] of longint;type tdigits=array[1..8] of longint;function findt(F:tdigits; a, n:longint):boolean;var i:longint; begin
for i:=1 to n do begin if(f[i]=a) then begin findt:=false; break; end;
end; if (i=n) then findt:=true;
end;beginrandomize;k:=1; j:=1; for i:=1 to 8 do begin a:=random(8)+1; K:=k+1; if (k<=2) then begin s[i]:=a; t:=a; end else begin for j:=1 to i-1 do begin if s[j]= a then begin repeat a:=random(8)+1; until(findt(s,a,8)=false); if(findt(s,a,8)=false) then s[i]:=a; end else begin
end; end; if(j=i) then s[i]:=a; end; end; for i:=1 to 8 do write(s[i],' '); readln;end.
为何编译不能通过,而在free pascal 则可以,如何改写?
展开
 我来答
至少让我看一眼
推荐于2016-05-01 · TA获得超过451个赞
知道小有建树答主
回答量:188
采纳率:0%
帮助的人:242万
展开全部

因为你在函数中传递的数组的形参的类型的是tdigits。但是实参s却不是tdigits而是array[1..8] of longint。固然实参的声明与形参就形式上来说是一致的(都是array[1..8] of longint)。但是在程序中tdigits与实参s的类型却不能被认定为同种类型。所以自然无法通过编译。解决的方法事实上非常简单,只需要将实参s的类型修改为tdigits即可。整理后的代码如下:

uses
  SysUtils;

type
  tdigits = array [1 .. 8] of longint;

var
  a, k, t, i, j: longint; s: tdigits;

function findt(F: tdigits; a, n: longint): boolean;
var
  i: longint;
begin
  for i := 1 to n do
  begin
    if (F[i] = a) then
    begin
      findt := false;
      break;
    end;
  end;
  if (i = n) then
    findt := true;
end;

begin
  randomize;
  k := 1;
  j := 1;
  for i := 1 to 8 do
  begin
    a := random(8) + 1;
    k := k + 1;
    if (k <= 2) then
    begin
      s[i] := a;
      t := a;
    end
    else
    begin
      for j := 1 to i - 1 do
      begin
        if s[j] = a then
        begin
          repeat
            a := random(8) + 1;
          until (findt(s, a, 8) = false);
          if (findt(s, a, 8) = false) then
            s[i] := a;
        end
        else
        begin
        end;
      end;
      if (j = i) then
        s[i] := a;
    end;
  end;
  for i := 1 to 8 do
    write(s[i], ' ');
  readln;

end.
ayi033
2014-01-15 · TA获得超过144个赞
知道小有建树答主
回答量:317
采纳率:100%
帮助的人:105万
展开全部
可以设置你的数组为一个枚举型, Type TArr = Array[0..3] of char;
procedure Test(Arr:TArr);
或者用动指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
糖糖寳寳
推荐于2018-05-09 · TA获得超过6.4万个赞
知道大有可为答主
回答量:1.8万
采纳率:92%
帮助的人:3966万
展开全部
在函数中如果数组的个数不定,可以使用开放数组参数
实参可以接受静态数组和动态数组
procedure p1(a:array of Byte);
begin
ShowMessage( IntToHex( Integer(@a),2));
ShowMessage(IntToStr(a[0]));
end;
procedure TForm1.btn1Click(Sender: TObject);
var
a:array[0..5] of Byte;
begin
ShowMessage(IntToHex( Integer(@a),2));
p1(a);
end;
function Find(A: array of Char): Integer;
以上函数使用字符数组作为参数传值,其中A:array of Char虽然有着与动态数组
dynamic array相近的形式,但是在这里它并不代表着动态数组。这里A:array of Char
可以使用任意静态或动态数组。
另外,如果一定使A:array of Char为动态数组,则须使用以下形式:
type TDynamicCharArray = array of Char;
function Find(A: TDynamicCharArray): Integer;

例子(e.g.)
function Find(A: array of Char): Integer;
begin
setlength(A,100);//出错,应为setlength只能用于动态数组。
end;
function Find(A: TDynamicCharArray): Integer;
begin
setlength(A, 100);//正确。
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式