4

我完全期待投票,但这让我很好奇,我希望至少有人可以回答。我们的离散数学教授非常喜欢旧语言,因为它们提供了大量的位运算符。现在,他给了我们一个作业,它是确定以下 BASIC 语句的输出:

PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)

我已经解决了它,我很确定它应该输出 -105,但我想编译它只是为了确保。然后我发现我遇到了一个问题。我不知道这是什么 BASIC!原始 BASIC 语言的编译器无法编译它。QBasic 编译器无法编译它。VB.NET 编译器无法编译它,即使我将其修改为我认为应该是 VB.NET 的语法,如下所示:

Console.WriteLine((NOT (15 OR 51) EQV 85) IMP (15 AND 51))

问题是:是否有某种 BASIC 或方言可以编译具有此语句的程序?如果是,是哪个?

4

6 回答 6

3

这适用于“原始”Microsoft Visual Basic。VB.NET 版本并不完全兼容。

尝试此操作的最简单方法是使用 Visual Basic for Applications,您可以在 Microsoft Office 中找到它。实际上,表达式的计算结果为-105。我已经使用 Excel 与此代码:

Cells(1, 1).Value = (Not (15 Or 51) Eqv 85) Imp (15 And 51)

可能还有其他可以正常工作的基本方言 - PowerBASIC 可能是其中之一,但我无法真正检查:)

在不了解老师背景的情况下识别确切的方言是很棘手的——其中有很多,而且很多都非常相似。

于 2014-10-24T08:20:33.923 回答
1

也许您的教授专门以这种形式提供了这个问题,作为分析解决问题的挑战,而不是通过将代码输入编译器。这不是一个复杂的表达。

不再支持 EQV和 IMP BASIC 功能(对于 MS 总是向后兼容的如此之多!)。

要验证您的答案,您应该使用函数定义并手动求解。

如果做不到这一点,有趣的是,VBA 仍然支持它。您可以在大多数 MS Office 套件应用程序中找到 VBA。

于 2014-10-24T08:27:36.080 回答
1

对我来说,这似乎是一种VBA语法。

也许您可以在 MS-Excel 宏中尝试一下。

Sub VBA_Function()
    Dim x
    x = (Not (15 Or 51) Eqv 85) Imp (15 And 51)
    Range("A1").Value = x
End Sub
于 2014-10-24T08:20:21.947 回答
0

BASIC 布尔真值表的示例:

X EQV Y  Computes not xor
X IMP Y  Computes not(x and not y)

  Boolean truth tables:

      X | Not               X |  Y  |  Or         X |  Y  |  And
  -----------           -----------------     ------------------
      1 |  0                1 |  1  |  1          1 |  1  |   1
      0 |  1                1 |  0  |  1          1 |  0  |   0
                            0 |  1  |  1          0 |  1  |   0
                            0 |  0  |  0          0 |  0  |   0

      X |  Y  |  Xor        X |  Y  |  Imp        X |  Y  |  Eqv
  ------------------    ------------------    ------------------
      1 |  1  |   0         1 |  1  |   1         1 |  1  |   1
      1 |  0  |   1         1 |  0  |   0         1 |  0  |   0
      0 |  1  |   1         0 |  1  |   1         0 |  1  |   0
      0 |  0  |   0         0 |  0  |   1         0 |  0  |   1
于 2018-07-08T04:34:58.620 回答
0

额外的布尔真值表:

Where NOR is NOT OR, NON is NOT IMP, XAN is NOT AND

      X |  Y  |  Nor        X |  Y  |  Non        X |  Y  |  Xan
  ------------------    ------------------    ------------------
     -1 | -1  |   0        -1 | -1  |   0        -1 | -1  |   0
     -1 |  0  |   0        -1 |  0  |  -1        -1 |  0  |  -1
      0 | -1  |   0         0 | -1  |   0         0 | -1  |  -1
      0 |  0  |  -1         0 |  0  |   0         0 |  0  |  -1
于 2018-07-08T04:45:20.630 回答
0

因此,从您的等式中删除 EQV 和 IMP,并将其重新构建为:

REM modify boolean values:

PRINT (NOT (15 OR 51) EQV 85) IMP (15 AND 51)

REM removing EQV and IMP:

PRINT NOT (NOT (NOT (15 OR 51) XOR 85) AND NOT (15 AND 51))

解决了你的问题。

于 2018-07-08T06:26:10.087 回答