Practice Problems in LOLGraphics/Solution to Problem I

Code
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

IMPORTANT: The subprograms minus and subtract are not the same! Minus is for subtraction operation, and subtract is used for division because division is broken in LOLGraphics.

Explanation
This code can be easily divided into 3 parts:
 * 1) The first part of the code asks the user to enter 2 numbers and stores them in 2 4-byte variables called x and y. Note that LOLGraphics doesn’t have scopes - once you define a variable it exists forever until the program ends. That’s why there’s no problem in defining variables in the subprograms where they are first used.
 * 2) The second part of the code asks the user to enter the mathematical operation that he wishes to do. Because LOLGraphics doesn’t let you ask for string inputs - only number inputs, each one of the 4 basic arithmetic operations is given a number from 1-4.
 * 3) The third part of the code checks what operation the user entered using a switch/case structure and calculates the result of the arithmetic operation. Addition, subtraction, multiplication, and division are straight forward so I will focus on the division routine. Because division seems to be broken in LOLGraphics, I had to implement it myself. Ideally, the code would just keep subtracting Y from X in a loop while X>=Y but this simply isn’t possible. The code does it while X>0, but that means there’s a chance it will subtract to below 0, that’s why it after that has to check that X is not negative, and if it is correct the answer by subtracting 1 from Z, and Y to Z. After that, Z will store the integer part of the solution, and X the reminder, and both will be printed.

Alternative ways
There are multiple things that can be done differently. For one, if you run this code you will see X=5. You can theoretically add spaces that it will be X = 5, by remember that since the LOLGraphics interpreter wastes spaces from the beginning and end of every line, so to print the second space you will need to use the command.

Also, it’s possible to print to the user what operation is calculating. Since the code is in any case running with conditions, and each operation has a subprogram, the best way would be to add in each such subprogram a print command. for the addition subprogram, etc.

Also it’s possible to implement the division routine differently. This code will subtract Y from X while X>0. This means that it’s possible that it will stop at X=-2 for example and that the result will be of so there’s a subprogram that checks and corrects if necessary. You can also subtract Y from X while X>Y but take into account that if X can be evenly divided by Y, then your answer will be lower by 1 then the correct answer, so you will still need to run a correction subprogram.