Hora de você implementar minha nova linguagem baseada em pilha! Chama-se StackyMath. Este será um idioma baseado na pilha com 8 operações na pilha e maneiras de adicionar números à pilha.
Lista de operações:
/
: Divisão. Apresentado nos 2 principais números da pilha. Empurra o resultado de volta para a pilha.*
: Multiplicação. Apresentado nos 2 principais números da pilha. Empurra o resultado de volta para a pilha-
: Subtração. Apresentado nos 2 principais números da pilha. Empurra o resultado de volta para a pilha+
: Adição. Apresentado nos 2 principais números da pilha. Empurra o resultado de volta para a pilha^
: Exponenciação. Apresentado nos 2 principais números da pilha. Empurra o resultado de volta para a pilha%
: Módulo. Apresentado nos 2 principais números da pilha. Empurra o resultado de volta para a pilha!
: Fatorial. Executado no número superior da pilha. Empurra o resultado de volta para a pilhaD
: Duplicar o número superior na pilha
Operações definidas no pseudo-có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)
Como enviar números para a pilha:
Adicionar números à pilha é fácil, basta colocar o número bruto no seu programa onde você precisar. Se você precisar colocar vários números na pilha, poderá separá-los com uma vírgula ( ,
). Seu programa não precisará processar -
números na entrada. Se o usuário quiser um, ele deve pressionar o número que deseja negado, zero e -
. Os números na entrada do programa também são restritos a números inteiros positivos.
Entrada:
Seu programa deve receber a entrada na linha de comando ou a partir de std in. A entrada consistirá apenas de números (sem notação científica ou decimais) delimitados ,
conforme necessário e das operações definidas acima.
Resultado:
Seu programa deve imprimir o número na parte superior da pilha.
Casos de erro:
- Se o programa tentar sobrecarregar a pilha, você deverá imprimir
StackUnderflowException!!!
. - Se você tiver uma divisão por zero, imprima
DivisionByZeroException!!!
- Se um número que exceder 64 bits, durante a execução do programa ou o processamento de um número na entrada, imprima
NumberOverflowException!!!
- Se, de alguma forma, você obtiver um número negativo no topo da pilha e precisar fazer um fatorial, imprima
NegativeFactorialException!!!
- Se você tiver um número de ponto flutuante no topo da pilha e a próxima operação for fatorial, imprima
FloatingFactorialException!!!
- Se nenhum número estiver na pilha quando o programa sair (ou seja, o programa estava vazio), imprima
EmptyProgram!!!
Notas:
- Toda saída de erro deve ter seu erro padrão ou equivalente mais próximo.
- Todos os números são restritos ao ponto flutuante de 64 bits.
Programas de exemplo:
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!!!
(Posso adicionar mais, se necessário)
654,489,48,43/5*7D+-*%
deve retornar 77.6875
. ( 43/48*5-(7+7)
should be (7+7)-43/48*5
)
!
paraF
).