并且A,B,C,D这四个数某一时刻肯定有也只能有一个数是非零,其他三个数肯定是零。
求随机情况某时间点下z=A+B+C+D的和。
定义变量的步骤就省略了,
如果用LUA语言的话很简单:
if A>0 then
z=1
elseif b>0 then
z=2
elseif c>0 then
z=3
elseif d>0 then
z=4
end
如果用delphi
我只能用连续套用 if then else
if A>0 then
z:=1
else
if B>0 then
z:=2
else
if C>0 then
z:=3
else
z:=4;
幸好只有4个数,要是有几十个数,那不就很麻烦而且格式很难看,要是用case语句,我不会写,或者case语句根本解决不了这样多个不同变量取不同值情况
有哪位高手能用delphi语句很好解决这个问题吗,谢谢!
6 个解决方案
#1
简单:判断一个不为零就把值赋予Z
if a > 0 then
begin
Z := A;
Exit;
end;
if b > 0 then
begin
Z := b;
Exit;
end;
if c > 0 then
begin
Z := c;
Exit;
end;
if d > 0 then
begin
Z := d;
Exit;
end;
if a > 0 then
begin
Z := A;
Exit;
end;
if b > 0 then
begin
Z := b;
Exit;
end;
if c > 0 then
begin
Z := c;
Exit;
end;
if d > 0 then
begin
Z := d;
Exit;
end;
#2
如果要快速就把这个写成一个函数 function Sum(const a,b,c,d: Integer): Interger;
然后再像我那样写 把Z改成Result
因为你这四个数都是自己定义的变量 没有数据来源,所以没有更好的办法
这是个O(N)算法
然后再像我那样写 把Z改成Result
因为你这四个数都是自己定义的变量 没有数据来源,所以没有更好的办法
这是个O(N)算法
#3
谢谢两位热心人,我的意思是,delphi有没有像lUA语言那样简单的一个if后面可以拖多个elseif的语句,
或者有
case A>0 --------
case B>0 --------
case C>0 --------
等等多个条件选择的语句?
这样的语句使得程序体简单易读。
否则要是用一群if语句嵌套,看得眼都花了,而且自己写码时麻烦又容易错。
或者有
case A>0 --------
case B>0 --------
case C>0 --------
等等多个条件选择的语句?
这样的语句使得程序体简单易读。
否则要是用一群if语句嵌套,看得眼都花了,而且自己写码时麻烦又容易错。
#4
delphi也支持:
if A>0 then
result:=1
else if b>0 then
result:=2
else if c>0 then
result:=3
else if d>0 then
result:=4
;
而且这种写法可以不用逐层缩进的,因为这是同时只有一项为真
相当于一种扩展的case(case的每项都是确定值,本例是大于)
#5
太棒了,要的就是这个效果,简单易读!
但是不知道这是不是也还是if语句嵌套使用,我听中山大学黎培兴老师的录像里面讲if语句一般不要超过5层嵌套,我经常要用到十几个条件选择的,不知道这样用会不会影响程序效率,我很菜的,谢谢指教了。
#6
这是if语句的嵌套使用,delphi没有单层的if逐个选择语法
但是它不是层次嵌套,而是逐个选择,相当于是case语法的分解(但是灵活了)
层次嵌套是:
但是它不是层次嵌套,而是逐个选择,相当于是case语法的分解(但是灵活了)
层次嵌套是:
if a>0 then
if b>0 then
if c>0 then
...
else // c<=0
...
else
if c>0 then
...
else // c<=0
...
else
if b>0 then
if c>0 then
...
else // c<=0
...
else
if c>0 then
...
else // c<=0
...
;
#1
简单:判断一个不为零就把值赋予Z
if a > 0 then
begin
Z := A;
Exit;
end;
if b > 0 then
begin
Z := b;
Exit;
end;
if c > 0 then
begin
Z := c;
Exit;
end;
if d > 0 then
begin
Z := d;
Exit;
end;
if a > 0 then
begin
Z := A;
Exit;
end;
if b > 0 then
begin
Z := b;
Exit;
end;
if c > 0 then
begin
Z := c;
Exit;
end;
if d > 0 then
begin
Z := d;
Exit;
end;
#2
如果要快速就把这个写成一个函数 function Sum(const a,b,c,d: Integer): Interger;
然后再像我那样写 把Z改成Result
因为你这四个数都是自己定义的变量 没有数据来源,所以没有更好的办法
这是个O(N)算法
然后再像我那样写 把Z改成Result
因为你这四个数都是自己定义的变量 没有数据来源,所以没有更好的办法
这是个O(N)算法
#3
谢谢两位热心人,我的意思是,delphi有没有像lUA语言那样简单的一个if后面可以拖多个elseif的语句,
或者有
case A>0 --------
case B>0 --------
case C>0 --------
等等多个条件选择的语句?
这样的语句使得程序体简单易读。
否则要是用一群if语句嵌套,看得眼都花了,而且自己写码时麻烦又容易错。
或者有
case A>0 --------
case B>0 --------
case C>0 --------
等等多个条件选择的语句?
这样的语句使得程序体简单易读。
否则要是用一群if语句嵌套,看得眼都花了,而且自己写码时麻烦又容易错。
#4
delphi也支持:
if A>0 then
result:=1
else if b>0 then
result:=2
else if c>0 then
result:=3
else if d>0 then
result:=4
;
而且这种写法可以不用逐层缩进的,因为这是同时只有一项为真
相当于一种扩展的case(case的每项都是确定值,本例是大于)
#5
太棒了,要的就是这个效果,简单易读!
但是不知道这是不是也还是if语句嵌套使用,我听中山大学黎培兴老师的录像里面讲if语句一般不要超过5层嵌套,我经常要用到十几个条件选择的,不知道这样用会不会影响程序效率,我很菜的,谢谢指教了。
#6
这是if语句的嵌套使用,delphi没有单层的if逐个选择语法
但是它不是层次嵌套,而是逐个选择,相当于是case语法的分解(但是灵活了)
层次嵌套是:
但是它不是层次嵌套,而是逐个选择,相当于是case语法的分解(但是灵活了)
层次嵌套是:
if a>0 then
if b>0 then
if c>0 then
...
else // c<=0
...
else
if c>0 then
...
else // c<=0
...
else
if b>0 then
if c>0 then
...
else // c<=0
...
else
if c>0 then
...
else // c<=0
...
;