¡Es hora de que implemente mi nuevo lenguaje basado en pila! Se llama StackyMath. Este será un lenguaje basado en la pila con 8 operaciones en la pila y formas de agregar números a la pila.
Lista de operaciones:
/
: División. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila.*
: Multiplicación. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila-
: Resta. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila+
: Además. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila^
: Exponenciación. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila%
: Modulo. Realizado en los 2 primeros números de la pila. Empuja el resultado nuevamente en la pila!
: Factorial. Realizado en el número superior en la pila. Empuja el resultado nuevamente en la pilaD
: Duplica el número superior en la pila
Operaciones definidas en pseudocódigo:
/
:push(pop divided by pop)
*
:push(pop times pop)
-
:push(pop minus pop)
+
:push(pop plus pop)
^
:push(pop to the pop)
%
:push(pop mod pop)
!
:push(factorial pop)
D
:t = pop; push(t); push(t)
Cómo empujar números a la pila:
Agregar números a la pila es fácil, solo coloque el número sin procesar en su programa donde lo necesite. Si necesita poner varios números en la pila, puede separarlos con una coma ( ,
). Su programa no necesitará procesar -
números en la entrada. Si el usuario quiere uno, debe presionar el número que quiere negado, cero y -
. Los números en la entrada del programa también están restringidos a enteros positivos.
Entrada:
Su programa debe tomar la entrada en la línea de comando, o desde la entrada estándar. La entrada solo consistirá en números (sin notación científica o decimales) delimitados según ,
sea necesario, y las operaciones definidas anteriormente.
Salida:
Su programa debe imprimir el número en la parte superior de la pila.
Casos de error:
- Si el programa intenta sobrecargar la pila, debe imprimir
StackUnderflowException!!!
. - Si tiene división por cero, imprima
DivisionByZeroException!!!
- Si un número que excede los 64 bits, ya sea mientras ejecuta el programa o procesa un número en la entrada, imprima
NumberOverflowException!!!
- Si de alguna manera obtienes un número negativo en la parte superior de la pila y necesitas hacer un factorial, imprime
NegativeFactorialException!!!
- Si tiene un número de coma flotante en la parte superior de la pila y la siguiente operación es factorial, imprima
FloatingFactorialException!!!
- Si no hay números en la pila cuando el programa sale (es decir, el programa estaba vacío) imprimir
EmptyProgram!!!
Notas:
- Toda salida de error debe tener su error estándar o el equivalente más cercano.
- Todos los números están restringidos a coma flotante de 64 bits.
Programas de ejemplo:
50,47* -> 2350
50,47/ -> 0.94
100,8! -> 40320
100D* -> 10000
! -> StackUnderflowException!!!
5,2/! -> FloatingFactorialException!!!
4,3!2*/ -> 3
654,489,48,43/5*7D+-*% -> 77.68749999999909
-> EmptyProgram!!!
(Puedo agregar más si es necesario)
654,489,48,43/5*7D+-*%
Debería volver 77.6875
. ( 43/48*5-(7+7)
debería ser (7+7)-43/48*5
)
!
aF
).