求助一个超难的条件选择语句

时间:2022-06-02 00:18:27
命题:有A,B,C,D四个数,A只能取值0或1,B只能取值0或2,C只能取值0或3,D只能取值0或4,
并且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;

#2


如果要快速就把这个写成一个函数 function Sum(const a,b,c,d: Integer): Interger;
然后再像我那样写 把Z改成Result 
因为你这四个数都是自己定义的变量 没有数据来源,所以没有更好的办法
这是个O(N)算法 

#3


谢谢两位热心人,我的意思是,delphi有没有像lUA语言那样简单的一个if后面可以拖多个elseif的语句,
或者有
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


引用 4 楼 sz_haitao 的回复:
Delphi(Pascal) code
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(ca……


太棒了,要的就是这个效果,简单易读!
但是不知道这是不是也还是if语句嵌套使用,我听中山大学黎培兴老师的录像里面讲if语句一般不要超过5层嵌套,我经常要用到十几个条件选择的,不知道这样用会不会影响程序效率,我很菜的,谢谢指教了。

#6


这是if语句的嵌套使用,delphi没有单层的if逐个选择语法
但是它不是层次嵌套,而是逐个选择,相当于是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;

#2


如果要快速就把这个写成一个函数 function Sum(const a,b,c,d: Integer): Interger;
然后再像我那样写 把Z改成Result 
因为你这四个数都是自己定义的变量 没有数据来源,所以没有更好的办法
这是个O(N)算法 

#3


谢谢两位热心人,我的意思是,delphi有没有像lUA语言那样简单的一个if后面可以拖多个elseif的语句,
或者有
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


引用 4 楼 sz_haitao 的回复:
Delphi(Pascal) code
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(ca……


太棒了,要的就是这个效果,简单易读!
但是不知道这是不是也还是if语句嵌套使用,我听中山大学黎培兴老师的录像里面讲if语句一般不要超过5层嵌套,我经常要用到十几个条件选择的,不知道这样用会不会影响程序效率,我很菜的,谢谢指教了。

#6


这是if语句的嵌套使用,delphi没有单层的if逐个选择语法
但是它不是层次嵌套,而是逐个选择,相当于是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
      ...
;