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,因此你仍然需要執行一個修正子程式。