利用逻辑条件在matlab中编程



我有一个小逻辑问题,我希望有一天能解决!!假设你有4个变量,我称它们为a、b、c和d。现在,基于一些逻辑,给出了以下条件。

程序通过:

  • 如果a和c都已填充
  • 如果a和d都充满

  • 如果b和c都充满

  • 如果b和d都充满

  • 如果c和d都充满

程序失败:

  • 如果只填充了a
  • 如果只填充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 

感谢您的阅读!

由于这个问题被标记为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])

如果你想让你的代码更可读,你可以用一个方法来做逻辑,最简单的方法就是翻译你的逻辑。

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);
}

相关内容

  • 没有找到相关文章

最新更新