Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 7布尔方程是';行不通_Delphi_Delphi 7_Boolean Expression - Fatal编程技术网

Delphi 7布尔方程是';行不通

Delphi 7布尔方程是';行不通,delphi,delphi-7,boolean-expression,Delphi,Delphi 7,Boolean Expression,我有一个用Delphi7编写的程序,它似乎遇到了一些逻辑问题。下面这行永远不会给出一个真正的值,即使我的手表窗口说它应该 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^和(非Seq^.Step[2])或(

我有一个用Delphi7编写的程序,它似乎遇到了一些逻辑问题。下面这行永远不会给出一个真正的值,即使我的手表窗口说它应该

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^和(非Seq^.Step[2])或(RetryDelay^.Done和(非Seq^.Step[2])或(Seq^.Step[1]和(非Seq^.Step[reset^])
为真,但
Seq^.Step[1]
的值从未设置为真

真正奇怪的是,我有许多程序,它们的代码行完全相同,而且似乎都正常工作

步骤[1]:= (PlcStart^和(非以下步骤[2])或 (RetryDelay^.完成且(非后续步骤[2])或 (顺序步骤[1]和(不是顺序步骤[reset])

我不熟悉Delphi,但我熟悉布尔逻辑。如果我读对了,你会说:

(一)∧ (B)∨ (C)∧ (B)∨ (D)∧ (E)

在javascript中,这是:

(a && !b) || (c && !b) || (d && !e)
使用生成真值表,并将“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

这张表可能正确,也可能不正确,我还没有验证过。你可以自己去做决定。无论如何,假设它是正确的,您可以检查给定输入的预期输出,并验证您的预期是否正确。

看起来您发现了一个编译器错误!或许不是。试着做一些调试。向我们证明Delphi逻辑表达式求值器已损坏。尝试将表达式拆分为3个变量,并分别对每个步骤求值。我不认为编译器在此类表达式上失败。也许编译器可以在搜索路径中看到单元的另一个版本或单元已更改,但编译器使用旧的DCU。。。尝试在不进行编译器优化的情况下构建项目,并在CPU调试窗口中逐指令执行它。通过这种方式,您可以确保编译器真正编译该代码,并且您将看到如何一步一步地完成计算。在两个项目中,“项目>选项>德尔福编译器>编译>语法选项>完成布尔计算”是否设置为相同的值?