¡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).