如何将“IF CONDITION”重写为 ON 3 分钟和 OFF 10 分钟直到 4 小时(240 分钟)
Posted
技术标签:
【中文标题】如何将“IF CONDITION”重写为 ON 3 分钟和 OFF 10 分钟直到 4 小时(240 分钟)【英文标题】:How to Rewrite "IF CONDITION " for ON for 3min and OFF for 10min until 4Hr (240min) 【发布时间】:2020-07-16 15:12:36 【问题描述】:我想缩短 if 条件。我怎样才能简化这个? 其中 step = 1 到 240 in min
我想要第一个 3 分钟开启 = 1,第二个 10 分钟关闭 = 0,它将重复到 248 分钟 我写了由许多条件组成的“如果条件”。如何用简单的表达式重写代码
#include "udf.h"
DEFINE_PROFILE(ON_3min_OFF_10min_4Hr,thread,position)
face_t f;
real step,hf_3min,hf_10min;
hf_3min = 1; /*ON */
hf_10min = 0; /*OFF */
step=N_TIME;
begin_f_loop(f,thread)
if ((step<=3) || ((step>13) && (step<=16)) || ((step>26) && (step<=29)) || ((step>39) && (step<=42)) || ((step>52) && (step<=55)) || ((step>65) && (step<=68)) || ((step>78) && (step<=81)) || ((step>91) && (step<=94)) || ((step>104) && (step<=107)) || ((step>117) && (step<=120)) || ((step>130) && (step<=133)) || ((step>143) && (step<=146)) || ((step>156) && (step<=159)) || ((step>169) && (step<=172)) || ((step>182) && (step<=185)) || ((step>195) && (step<=198)) || ((step>208) && (step<=211)) || ((step>222) && (step<=225)) || ((step>235) && (step<=238)))
F_PROFILE(f,thread,position)=hf_3min;
else
F_PROFILE(f,thread,position)=hf_10min;
end_f_loop(f,thread)
【问题讨论】:
请选择 C 或 C++,因为答案很可能不同。 @ChaseRLewis:我的想法更像是std::vector
的std::pair<int, int>
,每个条目都是范围之一。类似的想法。
我会使用 2D-Array 并对其进行迭代,因为它始终属于这种类型:(step >n1)&&(step <= n2)
重要的第一件事是解释这个条件测试什么。范围总是3长吗?他们总是相隔 10 (基于(step <= 211)) || ((step > 222)
不是)?
这个问题说得不好。您应该描述这段代码应该做什么。如果我们知道我们可以用许多不同的更狡猾的方式来解决它。另请阅读Magic Numbers。
【参考方案1】:
从您检查的范围来看,您的代码似乎等同于:
if ((step - 1) % 13 < 3)
F_PROFILE(f, thread, position) = hf;
else
F_PROFILE(f, thread, position) = hf2;
您需要注意第一个条件下缺少的下限,以及后两个条件下的边界变化,以防这是故意的。
【讨论】:
((step > 222) && (step <= 225))
及其后的位置与之前的范围相比移动了一个位置。
@t.niese 是的,你是对的。我的猜测是这实际上是一个错字:p 可能是 OP 手动计算了条件。
另一个不写出这样大量表达式的好理由
我也这么认为。这就是为什么我要求 OP 解释该表达式的含义 ;)
我不认为这是“正确的”。如果我把 13 放在那里,我会得到 1 13 而不是 step >= 13 时,这是真的。原始范围内只包含 0,但就像你说的那样,这很奇怪:/ 所以也许不应该包含 0,这是一个错误。以上是关于如何将“IF CONDITION”重写为 ON 3 分钟和 OFF 10 分钟直到 4 小时(240 分钟)的主要内容,如果未能解决你的问题,请参考以下文章
if Condition 在执行 segue 之前为 True
[C]if (CONDITION)语句中CONDITION的情况