【问题标题】:Design an algorithm to input 2 numbers and then output the lowest number in little man computing设计一个算法,输入2个数字,然后输出小人计算中最小的数字
【发布时间】:2020-09-25 18:31:15
【问题描述】:

我正在做一个程序,我想输入两个数字,以便 LMC 可以输出最小的一个。我的代码给了我最大的数字,帮我解决它。

INP
STA first
INP
STA second

SUB second
BRP secondBig
LDA second
OUT
BRA endProgram
secondBig LDA second
OUT
endProgram HLT
first DAT
second DAT

【问题讨论】:

  • 自己解决这样的简单问题是一种比复制别人的解决方案更好的学习方法。如果您的目标是学习。
  • 或者至少找到更好的人来复制:)
  • 正如 Scott Hunter 已经指出的那样,您正在两个分支中打印第二个值。另请注意,您正在测试 second - second,它不会为您提供任何有用的信息。请给我们您尝试实现的伪代码。

标签: algorithm little-man-computer


【解决方案1】:

您将两个输入值都存储在 first 中,这意味着您将用第二个覆盖第一个。

在修复上述问题之前和之后,您的代码都不是输出最大的,而是输出 second(无论相对大小)。单步执行或实际阅读代码应该会告诉您原因。

【讨论】:

  • 对不起,打错了,请重新检查代码
【解决方案2】:

反转您的条件分支:使用 BRN(否定分支)而不是 BRP。 或者,切换决定哪个值可用于输出的逻辑分支。

【讨论】:

  • 好吧,让我试试
  • 程序在 BRN 停止,是否可以为我重写代码
  • BRN 不是有效指令。
  • 你说的分支否定
  • 我的错误——错误的指令集。当您澄清问题时,我会更正答案(请参阅帖子的评论)。
【解决方案3】:

问题在于您将第二个输入与自身进行了比较。你可以在SUB second 之前插入LDA first,但是如果你反转输出块,你可以避免额外的LDA

您有一个标签“secondBig”也令人困惑,而实际上您不是在寻找最大的数字,而是最小的数字

更正:

#input: 4 7
           INP
           STA first
           INP
           STA second

           SUB first
           BRP firstLeast

           LDA second     
           OUT
           BRA endProgram
           
firstLeast LDA first
           OUT
           
endProgram HLT

first      DAT
second     DAT

<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.7/lmc.js"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多