問題タブ [rpn]
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.
f# - 数式エバリュエーターでこのバグを修正する方法
F# で単純な数式 (いくつかのカスタム関数を使用した算術演算) の典型的なエバリュエーターを作成しました。正しく動作しているように見えますが、一部の式は期待どおりに評価されません。たとえば、次の式は正常に動作します。
- eval "5+2" --> 7
- eval "sqrt(25)^2" --> 25
- eval "1/(sqrt(4))" --> 0.5
- eval "1/(2^2+2)" --> 1/6 ~ 0.1666...
しかし、これらはしません:
- eval "1/(sqrt(4)+2)" --> 1/sqrt(6) ~ 0.408 に評価されます...
- eval "1/(sqrt 4 + 2)" --> 1/sqrt(6) にも評価されます
- eval "1/(-1+3)" --> 1/(-4) ~ -0.25 に評価されます
コードは次のように機能します。トークン化 (入力としての文字列) -> rev-polish-notation (RPN) へ -> evalRpn
単項関数(1つの演算子を受け取る関数)のどこかで問題が発生しているように思いました.sqrt関数と否定( - )関数です。自分のコードで何が問題なのかがよくわかりません。誰かが私がここで見逃していることを指摘できますか?
これはF#での私の実装です
java - パターンが思いどおりに分割されず、+ で分割できません
私は次のコードを持っています:
コンパイルされたパターンは、多くの反復を経ており、現在の反復では、次のリストに追加されています。
すべての操作で分割し、操作を分割文字列に保持する必要があるため、次の出力が期待されます。
数値ではなく演算子のみが見つかった場合、分割されていないようです。
したがって、基本的には、現在の動作と、2 つの演算子が連続して見つかった場合にそれらを分割するような分割演算子が必要です。次のように:
等しいだろう
c - 最初のコードでは機能しなかったのに、2 番目のコードでは機能したのはなぜですか? - 逆ポーランド記法
数字のみを使用して後置式を評価しようとしたので、概念を理解してコードを実装した後、正しいと思いましたが、正しい答えを生成しませんでしたが、いくつかの変更を加えた後、機能しましたが、ここで知りたいです私が最初に犯した間違いは何ですか?
これらは 2 つのコードです (最初の 1 つは間違っていて、2 番目のコードは正しいです)。
正しいコード
プログラムをテストするに32*1+
は、中置記法のような逆ポーランド記法で式を入力する必要3*2+1
があるため、正しい答えが得られます7
c - 逆ポーランド語コンバーター
次の操作を実行できる逆ポーランドプリンターを作成しようとしています-
入力:
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d)))
出力:
abc*+
ab+zx+*
at+bac++cd+^*
これは私のコードです:
しかし、正しく入力さえされておらず、このコードの何が間違っているのかわかりません.何が問題なのかを理解するのを手伝ってください.
java - RPN 式 java の要素間のスペース
逆ポーランド記法文字列を返すメソッドgetRPNString()があります。この文字列をスペースバーで分割して計算したいと思います。2 桁の数字では機能しないため、RNP 文字列にスペースバーを追加する方法がわかりません。
}
StringBuilder 変数 out に append(' ') でスペースバーを追加しようとしました。でも二桁じゃダメ。作り方が全くわからないと思います。
たとえば、入力が文字列の場合 = "((5+3*(4+2)*12)+3)/(1+3)+5"; すべての呼び出しにスペースバーを追加すると、out は5342+ 12 +3+13+/5+になりますout.append(' ')**out は **5 3 4 2 + * 1 2 * + 3 + 1 3 + / 5 +なので、「12」のような数字は「1 2」になりました。手伝ってくれますか?
c - 逆ポーランド記法へのインフィックス
中置式を逆表記に変換するコードを書いていますが、ファイルの実行時にプログラムがクラッシュします。
配列とそのサイズを引数として渡す
")" を見つけるとポップされた演算子を返す
string - Haskell の逆ポーランド記法
Haskell を使用して、算術式を取り、それを逆ポーランド記法で文字列に変換する関数を作成する必要があります。RPN 式を評価する関数を作成するのは非常に簡単で、心配する必要はありません。厄介なのは算術式から RPN への変換だけです。