使用逻辑条件在MATLAB中编程

时间:2018-12-10 01:03:52

标签: matlab logic logical-operators

我有一天想解决的一个逻辑问题!! 假设您有4个变量,我将它们称为a,b,c和d。 现在基于一些逻辑给出以下条件。

程序通过:

  • 如果同时填充了a和c
  • 如果同时填充了a和d

  • 如果b和c都被填充

  • 如果b和d都被填充

  • 如果同时填充了c和d

程序失败:

  • 如果仅填充一个
  • 如果仅填充b
  • 如果仅填充c
  • 仅填充d
  • 如果同时填充了a和b

因此,如果您填写一个变量,则必须填写更多变量。如果您不填写任何变量,则无需采取任何措施。

为简单起见,我说过1等于填充,0等于未填充。我的代码段工作不正常,因为如果我说只有d填充,它会回馈这是可以的。但是它不应该工作,因为只有d是失败的。

任何想法是我能做什么?我对此的思考方式可能不正确?请记住,0和1只是为了保持简单,因此添加和将无济于事!

这是我的代码:

a = 0; 
b = 0; 
c = 0; 
d = 1; 

if a ~=0 || b ~=0 || c ~=0 || d ~=0
    if ~(a~=0 || b~=0 && c~=0 || d~=0 ) 
       works = 1;
    else
       no = 1;
    end
end 

感谢您的阅读!

2 个答案:

答案 0 :(得分:1)

如果您希望代码更具可读性,则可以使用一种方法来执行逻辑,而最简单的方法就是翻译逻辑。

public static boolean isParamFilled(boolean a, boolean b, boolean c, boolean d) {
    if ((a || b) && (c || d)) return true;
    if (c && d) return true;
    int ia = a ? 1 : 0;
    int ib = b ? 1 : 0;
    int ic = c ? 1 : 0;
    int id = d ? 1 : 0;
    // Only one of the 4 parameters is filled.
    if (ia + ib + ic + id == 1) return true;
    if (a && b) return false;
    // default value
    return false;
}

public static void main(String...args) {
    boolean a = false; 
    boolean b = false; 
    boolean c = false; 
    boolean d = true; 

    booledan worked = isParamFilled(a, b, c, d);
}

答案 1 :(得分:1)

该问题被标记为MATLAB,因此我还将为您提供MATLAB解决方案。基本上,添加总和的想法只是解决问题的方法,只需先将变量转换为二进制即可,这可以通过logical完成。因此,可以使用

进行失败检查
arr = logical([a,b,c,d]);
fail = sum(logical(arr))==1 || all(arr(1:2))

第一个条件检查已填充的数量,第二个条件检查是否同时设置了ab

请注意,有些情况同时满足通过和失败条件(例如设置了所有变量)。上面的解决方案是失败贪婪。通过贪婪的解决方案是(如克里斯·伦戈(Cris Luengo)在评论中建议的那样)

arr = logical([a,b,c,d]);
fail = sum(logical(arr))==1 || all(arr==[1,1,0,0])