可变类型数组的调用问题?(50分)

  • 主题发起人 主题发起人 filter
  • 开始时间 开始时间
F

filter

Unregistered / Unconfirmed
GUEST, unregistred user!
我知道SUMALL函数的作用是可以对不同类型的数据进行求和运算,ARGS
是一个可变类型的开放数组),但我下面的函数调用有些不清楚的地方,
哪位能帮助我呢!这是书上的一个程序。
另请问INC函数的功能是什么。
function sumall (const args:array of const):extended;
var
i:integer;
begin
result:=0;
for i:=low(args) to high(args)do
case args(i).vtype of
vinteger:result+args.vinteger
vtboolean;
if args.vboolean then
result:=result+i;
vtchar:result:=result+ord(args.vchar);
vtextended:result+args.vextended^;
vtstring:result:=result+strtointdef((args.vstring^),0);
vtansistring:result:=result+strtointdef(string(args.vansistring),0);
vtcurrency:result:=result+args.vcurrency)^;
end;
end;

procedure Tform1.button1Click(sender:Robject);
var
x:Extended;
y:integer;
begin
y:=10;
x:=SumALL([y*y,'A',true,10.34,' 999 ' ]);
//这是什么意思,
是代表整型,字符型,实型,字符串共四个元素组成的数组代入计算吗?它
们的计算出来的X为什么成为1,175.34
showmessage(Format(‘SumAll(Y*Y,''A'',true,10.34,''999''])=%n'
,[x]));
end;

书上得出的SHOWMESSAGE为
“SUMALL([Y*Y,‘A’,TRUE,10.34,‘999’])=1,1175.34”
这个1,175.34如何得出的?
 
说明:
Y*Y = 100
'A' = 65
True = 1
10.34 = 10.34
+ '999' = 999
------------------
1175.34
Inc(X) 相当于 X := X + 1;
Inc(X, Y) 相当于 X := X + Y;
您提供的代码有误,改正如下:
function sumall (const args: array of const):extended;
var
i:integer;
begin
Result := 0;
for i := low(args) to high(args)do
case args.vtype of
vtinteger: Result := Result + args.vinteger;
vtboolean: if args.vboolean then
Result := Result + Ord(args.vBoolean);
vtchar: Result := Result + Ord(args.vchar);
vtextended: Result := Result + args.vextended^;
vtstring: Result := Result + strtointdef((args.vstring^),0);
vtansistring: Result := Result + strtointdef(string(args.vansistring),0);
vtcurrency: Result := Result + args.vcurrency^;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
x:Extended;
y:integer;
begin
y:=10;
x:=SumALL([y*y,'A', TRUE, 10.34, '999']);
showmessage(Format('SumAll(Y*Y,''A'',true,10.34,''999''])=%n' ,[x]));
end;

 
来迟了。
vtboolean 那一行可以直接加,ord(false)=0 ord(true)=1
从来没见过这种用法,学习学习。
 
filter:
建议见者有分。
 
谢谢两位
 
多人接受答案了。
 
后退
顶部