Il est temps pour vous d'implémenter mon nouveau langage basé sur la pile! Cela s'appelle StackyMath. Ce sera un langage basé sur la pile avec 8 opérations sur la pile et des façons d'ajouter des numéros à la pile.
Liste des opérations:
/
: Division. Joué sur les 2 premiers numéros de la pile. Repousse le résultat sur la pile.*
: Multiplication. Joué sur les 2 premiers numéros de la pile. Repousse le résultat sur la pile-
: Soustraction. Joué sur les 2 premiers numéros de la pile. Repousse le résultat sur la pile+
: Une addition. Joué sur les 2 premiers numéros de la pile. Repousse le résultat sur la pile^
: Exponentiation. Joué sur les 2 premiers numéros de la pile. Repousse le résultat sur la pile%
: Modulo. Joué sur les 2 premiers numéros de la pile. Repousse le résultat sur la pile!
: Factorielle. Joué sur le numéro du haut de la pile. Repousse le résultat sur la pileD
: Dupliquer le premier numéro de la pile
Opérations définies en pseudo code:
/
: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)
Comment envoyer des nombres à la pile:
Ajouter des numéros à la pile est facile, il suffit de mettre le numéro brut dans votre programme là où vous en avez besoin. Si vous devez mettre plusieurs nombres sur la pile, vous pouvez les séparer par une virgule ( ,
). Votre programme n'aura pas besoin de traiter les -
nombres en entrée. Si l'utilisateur en veut un, il doit pousser le nombre qu'il veut annuler, zéro et -
. Les nombres dans l'entrée du programme sont également limités à des nombres entiers positifs.
Contribution:
Votre programme doit prendre l'entrée sur la ligne de commande, ou à partir de std in. L'entrée sera uniquement composée de nombres (pas de notation scientifique ou décimales) délimités par ,
au besoin, et des opérations définies ci-dessus.
Production:
Votre programme doit imprimer le numéro en haut de la pile.
Cas d'erreur:
- Si le programme essaie de surcharger la pile, vous devez imprimer
StackUnderflowException!!!
. - Si vous avez une division par zéro, imprimez
DivisionByZeroException!!!
- Si un nombre qui dépasse 64 bits, lors de l'exécution du programme ou du traitement d'un nombre dans l'entrée, imprimez
NumberOverflowException!!!
- Si vous obtenez en quelque sorte un nombre négatif en haut de la pile et que vous devez faire une factorielle, imprimez
NegativeFactorialException!!!
- Si vous avez un nombre à virgule flottante sur les sommets de la pile et que l'opération suivante est factorielle, imprimez
FloatingFactorialException!!!
- Si aucun numéro ne se trouve sur la pile à la fin du programme (c'est-à-dire que le programme était vide) imprimer
EmptyProgram!!!
Remarques:
- Toutes les sorties d'erreur vers devraient avoir yo std err ou l'équivalent le plus proche.
- Tous les nombres sont limités à une virgule flottante 64 bits.
Exemples de programmes:
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!!!
(Je peux ajouter plus si nécessaire)
654,489,48,43/5*7D+-*%
devrait revenir 77.6875
. ( 43/48*5-(7+7)
devrait être (7+7)-43/48*5
)
!
enF
).