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