6
votes

Difficulté à comprendre quoi faire avec la sortie de l'algorithme de la cour de la coureuse

Je cherche la page wiki: http://fr.wikipedia.org/ wiki / shunting-yard_algorithm

J'ai utilisé l'exemple de code pour construire la première partie, je peux actuellement tourner:

3 + 4 * 2 / (1 - 5) ^ 2 ^ 3 dans 3 4 2 * 1 5 - 2 3 ^ ^ / +

mais je ne sais pas comment utiliser alors 3 4 2 * 1 5 - 2 3 ^ ^ / + pour obtenir 3.00012207

et l'exemple de code et d'explication sur wiki n'a aucun sens pour moi.

Quelqu'un pourrait-il s'il vous plaît expliquer comment évaluer 3 4 2 * 1 5 - 2 3 ^ ^ / + et produire la réponse. Merci d'avance. Je n'ai pas besoin d'un exemple de code juste une bonne explication ou une ventilation d'un exemple.

pas que cela compte, mais je travaille .net c #.


0 commentaires

4 Réponses :


8
votes

La notation post-correction est la façon dont vous faites les mathématiques, disons, une calculatrice HP.

Gardez une pile, chaque fois que vous obtenez un numéro l'ajoutez au sommet. Chaque fois que vous obtenez un opérateur consommant des entrées du haut, puis ajoutez le résultat au sommet xxx


0 commentaires

9
votes

Le but de l'algorithme de cour de la courage est que sa sortie est dans notation inversée polonaise , qui est simple à évaluer:

  • Créer une pile pour contenir des valeurs
  • Bien qu'il y ait une entrée de notation polonaise inverse gauche:
    • Lire un élément d'entrée
    • S'il s'agit d'une valeur, poussez-la sur la pile
    • Sinon, c'est une opération; Valeurs pop de la pile, effectuez l'opération sur ces valeurs, repousser le résultat
    • Lorsqu'il n'y a pas d'entrée à gauche, si l'expression était bien formée, il devrait y avoir exactement une valeur sur la pile; C'est le résultat évalué.

1 commentaires

Une pile est une structure de données appropriée pour y parvenir, quel type de collection suggéreriez-vous à utiliser en Java (si vous le savez)? Une liste linité ou une dentelle? Je sais que Java a une pile classe mais j'ai lu qu'il n'est pas conseillé d'utiliser en raison de la synchronisation.



3
votes

Processez les éléments 3 4 2 * 1 5 - 2 3 ^ ^ / + gauche-de-droite comme suit:

  1. initialiser une pile pour contenir des chiffres.
  2. Si l'élément est un nombre, poussez-le sur la pile.
  3. Si l'élément est un opérateur, retirez les deux éléments supérieurs de la pile, appliquez l'opérateur à ces deux éléments et poussez le résultat sur la pile.

    Lorsque vous arrivez à la fin, la pile doit avoir un seul élément qui sera le résultat.


0 commentaires

2
votes

Je vois que je suis un peu en retard à la fête.

J'ai vu la question et je suis allé sur une tangente écrit quelques tâches pour le code Rosetta. Il arrive tout simplement que Cette tâche pourrait être ce que vous êtes après. Il donne une table annuée de ce qui se passe lors du calcul de la valeur d'une expression de RPN, jeton par jeton.

Voici un échantillon de sa sortie: xxx


0 commentaires