命题:有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语句很好解决这个问题吗,谢谢! 

解决方案 »

  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.   


    太棒了,要的就是这个效果,简单易读!
    但是不知道这是不是也还是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
          ...
    ;