Delphi 7布尔方程不起作用

时间:2013-10-23 19:23:03

标签: delphi delphi-7 boolean-expression

我有一个用Delphi 7编写的程序似乎遇到了一些逻辑问题。即使我的观察窗口显示它,下面的行也永远不会给出真正的价值。

Seq^.step[1] := 
  (PlcStart^ and (not Seq^.Step[2])) or 
  (RetryDelay^.Done and (not Seq^.Step[2])) or 
  (Seq^.Step[1] and (not Seq^.Step[reset_]));

我的观看窗口显示(PlcStart^ and (not Seq^.Step[2])) or (RetryDelay^.Done and (not Seq^.Step[2])) or (Seq^.Step[1] and (not Seq^.Step[reset_]))为真,但Seq^.Step[1]的值永远不会设置为true。

真正奇怪的是,我有许多程序具有完全相同的行,所有程序似乎都正常工作。

1 个答案:

答案 0 :(得分:0)

  

Seq ^ .step [1]:=     (PlcStart ^和(不是Seq ^ .Step [2]))或     (RetryDelay ^ .Done和(不是Seq ^ .Step [2]))或     (Seq ^ .Step [1]和(不是Seq ^ .Step [reset _]));

我不熟悉Delphi,但我熟悉布尔逻辑。如果我正在读这个,你说的是:

(A∧¬B)∨(C∧¬B)∨(D∧¬E)

在javascript中:

(a && !b) || (c && !b) || (d && !e)

使用http://mustpax.github.io/Truth-Table-Generator/生成真值表并将“false”转换为“0”和“true”为“1”,我们得到真值表:

a b c d e (a & !b) | (c & !b) | (d & !e)
1 1 1 1 1 0
0 1 1 1 1 0
1 0 1 1 1 1
0 0 1 1 1 1
1 1 0 1 1 0
0 1 0 1 1 0
1 0 0 1 1 1
0 0 0 1 1 0
1 1 1 0 1 0
0 1 1 0 1 0
1 0 1 0 1 1
0 0 1 0 1 1
1 1 0 0 1 0
0 1 0 0 1 0
1 0 0 0 1 1
0 0 0 0 1 0
1 1 1 1 0 1
0 1 1 1 0 1
1 0 1 1 0 1
0 0 1 1 0 1
1 1 0 1 0 1
0 1 0 1 0 1
1 0 0 1 0 1
0 0 0 1 0 1
1 1 1 0 0 0
0 1 1 0 0 0
1 0 1 0 0 1
0 0 1 0 0 1
1 1 0 0 0 0
0 1 0 0 0 0
1 0 0 0 0 1
0 0 0 0 0 0

此表可能正确也可能不正确,我尚未对其进行验证。你可以通过它来自己决定。无论如何,假设它是正确的,您可以检查给定输入的预期输出,并验证您的期望是否正确。