LOLGraphics 实践题/问题 I 解答
外观
HAI 3.4 0 1
IM IN UR CODE EXECUTIN UR KOMANDZ
PLZ RUN SUBPROGRAM INPUT
PLZ RUN SUBPROGRAM OPERATION
PLZ RUN SUBPROGRAM COUNT
IM OUTTA UR CODE
IM IN UR SUBPROGRAM DAT IZ KALLED INPUT
PLZ TYPE TEXT X=
I HAS A FOUR BYTE DAT IZ CALLED X
PLZ ASK TEH USR 2 GIMME A FOUR BYTE X
PLZ PRINT FOUR BYTE X
PLZ TYPE TEXT Y=
I HAS A FOUR BYTE DAT IZ CALLED Y
PLZ ASK TEH USR 2 GIMME A FOUR BYTE Y
PLZ PRINT FOUR BYTE Y
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED OPERATION
PLZ PRINT TEXT 1 +
PLZ PRINT TEXT 2 -
PLZ PRINT TEXT 3 *
PLZ PRINT TEXT 4 /
I HAS A ONE BYTE DAT IZ CALLED OP
PLZ ASK TEH USR 2 GIMME A ONE BYTE OP
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED COUNT
SWITCH [OP]
CASE 1 PLUS
CASE 2 MINUS
CASE 3 MULTIPLICATION
CASE 4 DIVISION
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED PLUS
I HAS A FOUR BYTE DAT IZ CALLED Z
PLZ SET FOUR BYTE Z X+Y
PLZ PRINT FOUR BYTE Z
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED MINUS
I HAS A FOUR BYTE DAT IZ CALLED Z
PLZ SET FOUR BYTE Z X-Y
PLZ PRINT FOUR BYTE Z
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED MULTIPLICATION
I HAS A FOUR BYTE DAT IZ CALLED Z
PLZ SET FOUR BYTE Z X*Y
PLZ PRINT FOUR BYTE Z
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED DIVISION
I HAS A FOUR BYTE DAT IZ CALLED Z
PLZ SET FOUR BYTE Z 0
PLZ RUN SUBPROGRAM SUBTRACT
PLZ ASK CEILIN KAT 2 CHEK IZ [[[X]]]<0
IF CEILIN KAT IZ NODDING PLZ RUN CORRECT
PLZ PRINT FOUR BYTE Z
PLZ PRINT FOUR BYTE X
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED SUBTRACT
PLZ SET FOUR BYTE X X-Y
PLZ SET FOUR BYTE Z Z+1
PLZ ASK CEILIN KAT 2 CHEK IZ [[[X]]]>0
IF CEILIN KAT IZ NODDING PLZ RUN SUBTRACT
IM OUTTA UR SUBPROGRAM
IM IN UR SUBPROGRAM DAT IZ KALLED CORRECT
PLZ SET FOUR BYTE Z Z-1
PLZ SET FOUR BYTE X X+Y
IM OUTTA UR SUBPROGRAM
重要提示: 子程序 minus 和 subtract 并不相同!Minus 用于减法运算,subtract 用于除法,因为 LOLGraphics 中的除法功能失效。
这段代码可以轻松地分成三个部分。
- 代码的第一部分要求用户输入两个数字,并将其存储在名为 x 和 y 的两个 4 字节变量中。请注意,LOLGraphics 没有作用域 - 一旦定义了变量,它将一直存在,直到程序结束。因此,在子程序中定义变量并不会造成问题,因为它们是在第一次使用的地方定义的。
- 代码的第二部分要求用户输入他希望执行的数学运算。由于 LOLGraphics 不允许你输入字符串 - 只能输入数字,因此将四个基本算术运算中的每一个都分配了从 1 到 4 的数字。
- 代码的第三部分使用 switch/case 结构检查用户输入的运算,并计算算术运算的结果。加法、减法、乘法和除法都是很直接的,所以我将重点介绍除法例程。
由于 LOLGraphics 中的除法似乎失效了,我不得不自己实现它。理想情况下,代码应该在一个循环中不断从 X 中减去 Y,直到 X>=Y,但实际上这是不可能的。代码在 X>0 时执行,但这意味着它有可能减到 0 以下,这就是为什么之后需要检查 X 是否为负数,如果为负数,则需要通过从 Z 中减去 1 来修正答案,并将 Y 减到 Z。之后,Z 将存储解的整数部分,X 将存储余数,两者都将被打印。
可以采取多种不同的方式来实现。例如,如果你运行这段代码,你会发现 X=5。理论上,你可以添加空格,使之显示为 X = 5,但要注意,由于 LOLGraphics 解释器在每行开头和结尾都会浪费空格,因此要打印第二个空格,你需要使用命令 PLZ ADD A SPACE
。
此外,还可以向用户打印正在计算的运算。由于代码无论如何都使用条件运行,并且每个运算都有一个子程序,因此最好的方法是在每个子程序中添加一个打印命令。PLZ PRINT TEXT +
用于加法子程序,等等。
还可以用不同的方式实现除法例程。这段代码将在 X>0 的情况下从 X 中减去 Y。这意味着它有可能在 X=-2 时停止,例如,结果将是因此,有一个子程序会检查并根据需要进行修正。你也可以在 X>Y 的情况下从 X 中减去 Y,但要注意,如果 X 可以被 Y 整除,那么你的答案将比正确答案低 1,因此你仍然需要运行一个修正子程序。