conversion de l'infixe au préfixe
Je suis en train de préparer pour un examen où je ne pouvais pas comprendre la conversion de la notation infixe de polonais de notation ci-dessous expression:
(a–b)/c*(d + e – f /g)
Peut on dire étape par étape, comment l'expression donnée seront convertis en préfixe?
source d'informationauteur kar
Vous devez vous connecter pour publier un commentaire.
Si il ya quelque chose à propos de ce préfixe, infixe et dire que vous n'avez pas tout à fait comprendre, je lui conseillerais de vous relire la section de votre manuel. Vous ne faites pas vous-même aucun faveurs si vous sortez de ce avec la bonne réponse pour ce problème, mais ne comprends toujours pas le concept.
Algorithme sage, son vachement simple. Vous suffit d'agir comme un ordinateur vous-même un peu. Commencez par ranger les parenthèses autour de chaque calcul dans l'ordre qu'il serait calculé. Ensuite (toujours dans l'optique de calcul du premier au dernier) il suffit de déplacer l'opérateur en face de l'expression sur son côté gauche. Après cela, vous pouvez simplifier en supprimant les parenthèses.
(a–b)/c*(d + e – f /g)
Préfixe notation polonaise inversée a l'opérateur dernier, il est difficile de savoir qui vous signifiait, mais le principe sera exactement le même):
(/f g)
(+ d e)
(- (+ d e) (/f g))
(- a b)
(/(- a b) c)
(* (/(- a b) c) (- (+ d e) (/f g)))
étape 1:
(a-b)/c*(d+e- /fg))
étape 2:
(a-b)/c*(+de - /fg)
étape 3:
(a-b)/c * -+de/fg
Étape 4:
-ab/c * -+de/fg
étape 5:
/-abc * -+de/fg
étape 6:
*/-abc-+de/fg
C'est préfixe de notation.
J'ai vu cette méthode sur youtube donc de poster ici.
donné infix expression : (a–b)/c*(d + e – f /g)
inverse :
lire des caractères de gauche à droite.
maintenir une pile pour les opérateurs
crédits : youtube
(a–b)/c*(d + e – f /g)
souvenez-vous de la numérisation de l'expression de gauche à droite plus
démarrer sur les termes entre parenthèses
suivez le QUI VIENT d'ABORD à la règle...
*, /, % sont sur le même niveau et plus haut que
le + et le -.... donc
(a-b) = -bc préfixe
(a-b) = bc - pour postfix
un autre terme entre parenthèses:
(d + e - f /g) = faire déplacer le /premier
puis plus '+' avant moins soupir '-' (n'oubliez pas qu'ils sont sur le même niveau..)
(d + e - f /g)
déplacer /première
(d + e - (/fg)) = préfixe
(d + e - (fg/)) = postfix
suivi par + -
((+de) - (/fg)) = préfixe
((de+) - (fg/)) = postfix
(-(+de)(/fg)) = préfixe de sorte que la nouvelle expression est maintenant+de/fg (1)
((de+)(fg/)-) = postfix pour la nouvelle expression est aujourd'hui de+fg/- (2)
(a–b)/c* donc
(a-b)/c*(d + e – f /g) = -bc préfixe [ab]/c*[-+de/fg] ---> prises à partir de (1)
/c * ne déplacez pas encore
so '/' avant '*', parce qu'ils sur le même niveau, déplacez le '/'
à droite de la barre : /[ab]c * [-+de/fg]
puis déplacez - ' * ' à droite de la barre
(a-b)/c*(d + e – f /g) = bc - pour postfix [ab]/c*[de+fg/-]---> prises à partir de (2)
so '/' avant ' " parce qu'elles sur le même niveau, déplacez le '/'
de gauche à droite: [ab]c[de+fg/-]/
puis vous déplacer en " pour la gauche
[ab] c [de+fg/-]/ = supprimer le regroupement des symboles= a b c d e + f g /- /* --> Postfix
simple recherche google est venu avec cette. Doute que quelqu'un peut expliquer ce soit plus simple. Mais je suppose qu'après une modification, je peux essayer de mettre de l'avant les notions de sorte que vous pouvez répondre à votre propre question.
Astuce :
Étude pour l'examen, dur, vous devez. Prévoir vous, le grade de prendre de la hauteur, je le fais 😀
Explication :
Il est tout au sujet de la façon dont les opérations sont associés avec des opérandes. chaque notation de type a ses propres règles. Vous avez juste besoin de casser et de se souvenir de ces règles. Si je vous disais que j'ai écrit (2*2)/3 [* /] (2,2,3) tout ce que vous devez faire est d'apprendre à tourner la dernière notation dans l'ancienne notation.
Mon custom de notation dit que prendre la première à deux opérandes et multiples, alors la résultante opérande doit être divisée par le troisième. Pour l'obtenir ? Ils essayent de vous apprendre trois choses.
Cet algorithme afin de vous aider à mieux comprendre .
L'étape 1. Push “)” sur la PILE, et d'ajouter “(“ à la fin de l'A.
L'étape 2. Le Scan d'Un de droite à gauche et répétez les étapes 3 à 6 pour chaque élément de A jusqu'à ce que la PILE est vide.
L'étape 3. Si un opérande est rencontré ajouter à B.
L'étape 4. Si une parenthèse fermante est rencontré push sur la PILE.
L'étape 5. Si un opérateur est rencontré alors:
un. À plusieurs reprises pop de la PILE et de l'ajouter à B chaque opérateur (sur le haut de la PILE) qui a la même
ou la priorité sur l'opérateur.
b. Ajouter de l'opérateur de PILE.
L'étape 6. Si parenthèse ouvrante est encontered alors
un. À plusieurs reprises pop à partir de la PILE et de l'ajouter à B (chaque opérateur sur le dessus de la pile jusqu'à ce qu'une parenthèse ouvrante est rencontrée)
b. Supprimer la parenthèse gauche.
L'étape 7. Sortie
https://en.wikipedia.org/wiki/Shunting-yard_algorithm
étape à travers:
ici est une implémentation de java pour convertir infix pour le préfixe et d'évaluer préfixe expression (basé sur rajdip de l'algorithme)
En Préfixe opérateurs d'expression vient d'abord, puis opérandes : +ab[ oprator ab ]
Infixe :
(a–b)/c*(d + e – f /g)
Étape 1:
(a - b) = (- ab)
[ '(' a la plus haute priorité ]étape 2:
(d + e - f /g) = (d + e - /fg)
[ '/' a la plus haute priorité ]Étape 3:
(-ab )/c * (- + de /fg)
=/- abc * (- + de /fg)
Préfixe :
* /- abc - + de /fg
Infix à PostFix, à l'aide de la Pile:
Peut-être que vous parlez de la La Notation Polonaise Inversée? Si oui, vous pouvez trouver sur wikipedia un très détaillées pas à pas exemple pour la conversion; si pas, je n'ai aucune idée de ce que vous demandez 🙁
Vous pouvez aussi lire ma réponse à une autre question à laquelle j'ai fourni une telle mise en œuvre: C++ opérations simples (+,-,/,*) évaluation de la classe
C'est l'algorithme à l'aide de la pile.
Il suffit de suivre ces étapes simples.
1.Inverser la infix expression.
2.Remplacer '(' avec ')' et ')' avec '(' dans l'inversion de l'expression.
3.Maintenant appliquer la norme infix à postfix sous-routine.
4.Inverser le fondé de postfix expression, cela donnera préfixe requis expression.
Dans le cas où vous trouvez étape 3 difficile de consulter http://scanftree.com/Data_Structure/infix-to-prefix
lorsqu'un spécimen est également donnée.