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 则可以,如何改写? 展开
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 则可以,如何改写? 展开
3个回答
展开全部
因为你在函数中传递的数组的形参的类型的是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.
展开全部
可以设置你的数组为一个枚举型, Type TArr = Array[0..3] of char;
procedure Test(Arr:TArr);
或者用动指针
procedure Test(Arr:TArr);
或者用动指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在函数中如果数组的个数不定,可以使用开放数组参数
实参可以接受静态数组和动态数组
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;
实参可以接受静态数组和动态数组
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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询