所以在下面的代码中,我写了。我能够得到最大值输出后,用户输入8个随机整数,与一个上限32000在积极的一面和-32000在消极的一面,但我似乎不能得到最小值。对于最小值,它保持打印0
验证码:-
ORG 100
Main, LOAD Count
STORE Count
Loop, Input
STORE Value
LOAD Count
ADD One
STORE Count
CheckMin, LOAD Value
SUBT Smallest
SKIPCOND 800
JUMP Continue
LOAD Value
STORE Smallest
CheckMax, LOAD Value
SUBT Largest
SKIPCOND 400
JUMP Continue
LOAD Value
STORE Largest
Continue, LOAD Count
SUBT Seven
SKIPCOND 800
JUMP Loop
Print, LOAD Smallest
Output
LOAD Largest
Output
HALT
Value, Dec 0
Count, Dec 0
Smallest, Dec 0
Largest, Dec 0
One, Dec 1
Seven, Dec 7
END
字符串
我试图改变“小数”(12月)的值,但它没有工作。保持他们在0除了“七,12月7日”,这是循环计数器设置为8为8个用户输入。这是家庭作业,所以任何帮助是赞赏!
1条答案
按热度按时间4ktjp1zp1#
你有一些逻辑错误,我想一次解决一个。
假设初始最小值为0,因此,代码将仅捕获小于0的值作为最小值-如果您输入所有正数,则最小值将是给定该变量的初始值,即0。
此外,如果你只输入负数,最大的也会显示为0,这是你对最大值的初始假设。
有三种可能的修复方法:
1.不管比较中的最小/最大,捕获第一个输入作为最初已知的最小值(和最大值),以忽略初始化假设为零。我们将在循环之外这样做,所以在C/pseudo代码中,类似于这样。
字符串
这种方法适用于任何数量的输入,其中输入的计数>= 1,但是如果你想处理一个支持值为0的变量输入计数(例如,一个零元素的列表是一个合理的数学构造),它将不起作用,因为它需要至少一个输入。简单地检查计数以跳过包括第一个输入在内的整个事情可以缓解这种情况。
1.使用布尔值来判断一个值是否已被捕获。
型
这是精确的,但需要在循环中有更多的逻辑,并且,该逻辑涉及短路析取运算符,所以有点复杂。或者,它可以用if-then-else-if来完成。
1.对于最小(和最大)的初始假设使用不同的值
型
由于这些初始化超出了您的预期范围,因此第一个输入将始终被捕获为最小值和最大值。(使用最大值也可以,例如32000,-32000。)
另一个问题是,当你对最小值检查执行if-then时,在某些情况下它会跳过最大值检查,所以你的代码看起来有点像这样:
型
这是一个控制流逻辑错误。应该将最小值和最大值作为单独的顺序语句独立检查,而不是作为嵌套语句。