問題タブ [postfix-notation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Cでの接尾辞式の評価
接尾辞の算術式を評価するプログラムを書こうとしています。プログラムは文字列を私の関数evaluatePostfix
に送信します。関数はオペランドと演算子を識別し、整数の解を考え出します。このプログラムでは、スキャンされた文字が識別されたときにそれをプッシュし、評価が必要なときに適切なポップ機能を実行することで、スタックを操作しています。しかし、今のところ、プログラムが無限ループのように見えるものにぶら下がっているという問題があります。最初の文字を評価した後、文字列内の次の文字に進むように関数に指示する方法がよくわからないと思います。もう1つの注意点は、ユーザーが各オペランドと演算子の間にスペースを入れることです。これが私の関数です:
スタックを操作する関数は、インストラクターから提供されたものであるため、正しいことを知っています。誰かが私に何が欠けているのかについての手がかりを教えてもらえますか?
math - 後置表記の評価
後置式を評価するためのスタック クラスを作成しました。順番以外のやり方は理解できました。次のような単純なものがあるとしましょう:
A B - C +
私の唯一の質問は、それは A - B でしょうか、それとも B - A でしょうか? 評価のその部分を説明しているリソースをオンラインで見つけることができません。
c - C で PostFix 式を評価する (新しい問題)
私の以前の質問はここにあります (この最も役立つコミュニティに、質問をスパム送信しようとしていないことを保証したいだけです):
私の問題には、後置式の評価が含まれます。次のような後置式があるとします。
3 2 1 2 + ^ ^
値 (すべてのユーザーが文字列として入力したもの) をスタックに格納しようとしていますが、他の関数を使用して、最終結果がスタック内の唯一の残りの要素としてポップアウトされるように評価するつもりです。と提示しました。Code Blocks でデバッガーを数時間いじった後、関数がスタックに何も格納していないことがわかりました。さらに、関数を使用して、指している文字がオペランドであるかどうかを確認すると、オペランドであるにもかかわらず、取るべき適切なアクションが無視されます。isOperand 関数も含めて使用しているコードを次に示します。
どうやらポインタの値を1つだけ送信する方法がわかりません。そして、それが 2 桁または 3 桁の場合、プログラムにそれを認識させるにはどうすればよいでしょうか? 繰り返しになりますが、お時間をいただきありがとうございます。人々が提供するすべての支援に感謝します。
****編集/解決策が見つかりました****
さて、私はまだ「新しいユーザー」であるため、自分の質問に答えることが許可されていないため、代わりに元の投稿を編集して、おそらく将来他の誰かに役立つようにします.
ここでは、トークン化が適切な状況であるように思われます。使用することで
strtok(文字列,区切り文字)
この関数は、文字列を空白文字のように見えるもので区切られた小さな文字列に分割します。文字列スペースの区切り文字 (別名 " ") を使用したためかどうかはまだ 100% わかりませんが、関係ありません。
でループを終了する
トークン = strtok(NULL, " ");
ポインターを 1 ずつインクリメントする代わりに、元の文字列を取得して直接変更しているように見えるため、元の文字列から完全に削除して小さな文字列部分をスタックにプッシュするのではなく、十分に機能します。良い習慣ではありませんが (代わりに、元の文字列のコピーを作成して入力の完全性を維持し、代わりにコピーを変更する必要があるため)、このプロジェクトの範囲ではうまくいくと思います。将来誰かに役立つかもしれない場合に備えて、私の発見を共有したかっただけです。また、私の使用説明で訂正すべき点があれば、ぜひ教えていただきたいです。
java - Java Binary Expression Tree - Checking parenthesis in an expression
I coded up this program which will take an infix notation expression and build a binary tree from it. Right now the only input expression that actually works would be like 2 + 2. I can't seem to figure out at all how to make it handle parenthesis and take in longer expressions such as ( ( 2 + 2 ) * 3 ). For my output I am trying to get it into postfix notation and also evaluate the expression. So right now if I plug in 2 + 2 without the parenthesis my output is 22+ and it evaluates it so it prints 4.
I need to figure out a way for it to print out the output with spaces in between each number and operator and also get it to accept longer expressions with parenthesis. I have no idea right now how to continue from here. Can anyone please help me out?
Thanks!
This is my code:
java - 後置プログラムへの中置が機能しない
中置を後置に変換するプログラムを書くことになっています。一部の場合は機能しますが、正しく機能しない場合もあります。特に、括弧を含む中置式について。誰かが私にこれが間違っている理由の手がかりを教えてもらえますか?たとえば、中置式
を返します5562-*42^++8*((2
。
programming-languages - 連結言語は接頭辞表記を使用できますか?
連結言語には、さまざまなアリティの関数を作成できることや、関数の任意のセクションを除外できることなど、非常に興味深い特性がいくつかあります。ただし、多くの人は、後置記法を使用していることと、読みにくいことを理由に、それらを却下します。加えて、ポーランド人はおそらく、慎重に作成された表記法を逆に使用している人々を高く評価していません。
それで、接頭辞表記を持つことは可能ですか?もしそうなら、トレードオフは何でしょうか?
私はそれがどのように機能するかについての考えを持っていますが、私は連結言語の経験がないので、おそらく何かが欠けています。基本的に、関数は逆の順序で評価され、値は逆の順序でスタックからプルされます。これを示すために、接尾辞を接頭辞がどのようになるかと比較します。これは、従来の接尾辞表記を使用した連結式です。
式は左から右に評価されます。最初の例で5
は、スタックにプッシュされ、スタックdup
の最上位の値を複製してから、スタック*
の最上位の2つの値を乗算します。関数は最初に最後の引数をスタックからプルします。2番目の例では、-
が呼び出されると2
、スタックの一番上にありますが、これが最後の引数です。
プレフィックス表記は次のようになります。
式は右から左に評価され、関数は最初にスタックから最初の引数をプルします。プレフィックスフィルタの例がその説明に非常に近く、アプリケーションスタイルに似ていることに注意してください。私が気付いた問題の1つは、物事を除外することはそれほど有用ではないかもしれないということです。たとえば、後置記法では、subtractTwo関数を作成するために2 -
因数分解することができます。3 2 -
プレフィックス表記では、subtractFromThree関数を作成するために因数分解することができますが- 3
、- 3 2
これはあまり有用ではないようです。
明白な問題を除けば、おそらく接頭記法を使用する連結言語は、後置記法を嫌う人々に勝つ可能性があります。任意の洞察をいただければ幸いです。
c++ - スタックとキューを使用した C++ 電卓
計算機をプログラミングする手段としてスタックとキューを使用することに関するクラスのトピックを理解しようとしています。中置式と後置式が何であるかは理解していますが、プログラムが式を評価しやすくする方法と、この状況でキューとスタックが理想的な理由は何ですか? ありがとう
c++ - C++ Postfix から infix への変換
だから私は C++ で cmd ベースの電卓をプログラミングしています。私はそれを終えましたが、インフィックスをポストフィックスに変換した後、演算子/オペランドを正しい順序で含むポストフィックスキューと呼ばれるキューがあるのだろうかと思っていました。後置式を中置式に戻すにはどうすればよいですか?
c++ - C++ でのスタック (リンクされたリスト) を使用した中置から後置への変換
みなさん、良い一日を!私は C++ が初めてで (ここではスタックオーバーフローも)、専門家の助けが必要です。エラーや警告がなくても、このコードには何か問題があります。プログラムが実行されているときはいつでもハングします。
プログラムは、リンクされたリスト (スタック) を使用して、中置を後置に変換します。
私を助けてください!私は初心者で、皆さんなしでは遠くまで行くことはできません。どうもありがとうございました!
c++ - スタックを使用したインフィックスからポストフィックスへのアウトプット (Postfix Calculator)
みなさん、良い一日を!私は C++ が初めてで (ここではスタックオーバーフローも)、専門家の助けが必要です。
ここに、ユーザーに中置式を要求し、それを後置式に変換して結果を出力するコードがあります (後置計算機)。ただし、後置式を出力に即座に変換できないため、後置式が表示されるとすぐに、実際の回答を出力する前に、後置式を再度要求します (たとえば、 1 2 + の後にスペースを入れます)。
エラーや警告はありませんが、プログラムを実行すると、後置式が表示された後に「file.exe が動作を停止しました」と表示されます。したがって、プログラムは中置式を後置式に正しく変換できますが、出力を表示するときにまだいくつかのジンクスがあります。
私は初心者であり、あなたの専門家からの助けが本当に必要です. 私のプログラムを修正するのを手伝ってくれて本当に感謝しています。どうもありがとうございました。良い一日を!