この式を後置から中置に解くことができません。詳しく分かりやすく教えてください
5 x y - / x y + 3 ^ 7 / +
この式を後置から中置に解くことができません。詳しく分かりやすく教えてください
5 x y - / x y + 3 ^ 7 / +
これはコードではありませんが、接尾辞を infix: に展開する必要があります。
5 xy - / xy + 3 ^ 7 / +
5 (xy) / xy+ 3^ 7 / +
(5/(xy)) xy+ 3^ 7 / +
(5/(xy)) (x+y)3^ 7 / +
(5/(xy)) ((x+y)^3) 7 / +
(5/(xy)) (((x+y)^3) / 7) +
(5/(xy)) + (((x+y)^3) / 7)
それはかなり簡単です:
C++ でこれに対処するためにExpression
、さまざまな種類のノード ( Value
、Variable
、およびBinaryOperation
) を表す派生クラスを持つ基本クラス ( ) を作成し、std::stack<std::shared_ptr<Expression>>
. これをコーディングすることは、主にタイピングの演習です。
後置から中置:
5 x y - / x y + 3 ^ 7 / +
ステップ
5 xy - /
A) 5xy-/ = 5 (xy)/ = (5 / (xy))
xy +
B) xy + = (x + y)
(x+y) 3 ^
B.1) (x + y ) 3 ^ = ((x + y) ^ 3 )
さて、 (5 / (xy)) ((x + y) ^ 3 ) 7 / +
= (5 / (xy)) (((x + y) ^ 3 )/7 ) + = (5 / (xy)) + (((x + y) ^ 3 )/7 )
POSTFIX と PREFIX は括弧を使用しない式です。演算子の優先順位は、式に出現する順に決定されるため、式を評価するために次の操作を検索してFASTを実行する必要はありません。
INFIX 式では、演算子の優先順位は括弧で上書きされます。したがって、括弧は中置式にあります-実行する操作を検索する必要があります。たとえば、 A+B%D -したがってSLOWです。
これが、コンピューター サイエンスで変換が役立つ理由です。