問題タブ [shunting-yard]
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++ での分流場アルゴリズム
中置文字列 (「3 + 4 * 9」など) を取り、それを後置 (「4 9 * 3 +」など) に変換する関数が必要です。
括弧内に括弧を入れるまで、私はそれを機能させました。私は一日中それに取り組んできましたが、自分が間違っていることを理解できません。本当に近くにいるような気がします!
ありがとう!コードは次のとおりです。
java - Javaの操車場アルゴリズムが機能していませんか?
これが私のコードです:
入力3+5 * 6 + 7の場合、3 5 6 * + 7 +を返すことになっていますが、代わりに3 + 5 * 6 + 7+*を取得します。ウィキペディアのページにあるアルゴリズムの指示に従ったので、なぜか混乱しています...どこか別の場所で混乱していますか?よろしくお願いします!
c# - 三角関数を使用した操車場アルゴリズム
私は、C# で分流ヤード アルゴリズムの実装に取り組んでいます。記号 ( + 、 * - / および ^) を使用した数式はかなりうまく解析しますが、何らかの理由で正弦余弦関数では機能しません。たとえば、 sin(45) を計算しようとすると、 0.707106 が得られます。しかし、次のような式を解析しようとすると
ウィキペディアのこの記事に記載されているすべての手順に従いました。これを数日間試していますが、完全に機能させることはできません。これが主な解析関数です
さらに、プログラムの出力は次のとおりです。
//欠陥のあるもの
新しいケース:
それだけです。誰かが私が間違っていることを指摘できますか。
編集:
IsHigherPrecedance 関数と優先度列挙型は次のとおりです。
これらの三角関数は単一引数関数になったので、それらは他のロジックで解析されるのでしょうか、それともこのシャント ヤード アルゴはそのような関数でも同様に機能しますか?
よろしく。
java - Java 電卓バージョン 4
電卓は現在、ほとんど機能しています。読み込んだすべての方程式に対して同じ答えが得られるようになりましたか?
the output ends up as: 49+62*61-36 15.666666666666668 4/64 15.666666666666668 (53+26) 15.666666666666668 0*72 15.666666666666668 21-85+75-85 15.666666666666668 90*76-50+67 15.666666666666668 46*89-15 15.666666666666668 34/83-38 15.666666666666668 20/76/14+92-15 15.666666666666668 5*10/3-1 15.666666666666668
そこに各方程式の答えがある代わりに?
私の方法で何かを逃したことがありますか?
ありがとう
すべてのコードを以下に示します。どんな助けでも大歓迎です。
スタック クラス:
配列リスト クラス
方程式処理用の TestClass
c++ - 入力文字列 C++ ダブル シェブロン
現在、「<<」と「>>」の文字列でダブル シェブロンを使用して、ビット シフトを表現しようとしています。ただし、私のプログラムは、入力に二重シェブロンの使用を認識していないようです。他の文字列に変更すると、完全に機能します。
derpleft は機能しますが、"<<" は機能しません。
java - Java Expression Parser & Calculator Shunting Yard Algorithm
したがって、タスクは式計算機用の独自のパーサーを作成することです。例えば:
入力: 3+2*1-6/3 出力: 3
入力: 3++2 出力: 無効な式
入力: -5+2 出力: -3
入力: 5--2 出力: 7
ここのコードは、入力が固定されており、負の値を解決できないことを除いて、問題の一部を解決します。また、演算子の優先順位を使用して式を本当に解決するかどうかはまだよくわかりません。しかし、ユーザーから入力式を取得するように既に変更しています。負の値の解決方法を実装する方法を何時間も考えていました。誰か助けて?
JAVASCRIPT エンジンは使用しないでください。
これが現在のコードです
更新コード: 追加: unaryToexp() 関数。私がやりたかったのは、「 - 」が発生するたびに、コードがそれを別の演算子として「 _ 」に変更してバイナリとして扱い、この演算子が-1で乗算することを解決することでした(最初に追加したいのは[- 1] および [*] を rpn スタックに)。ここでもまだ問題があります。
コンパイラは次のように述べています。
Double d1 = Double.valueOf( stack.pop() );
単項演算子を解くために必要な値が1つだけである別の2つの値をまだポップする原因と関係があると思います。助けはありますか?
algorithm - 中置式を後置式に変換するために必要なスタックスペースを見積もるにはどうすればよいですか?
中置式(など)を後置式(など)に変換するために使用できる有名な操車場アルゴリズムがあります。操車場アルゴリズムには、移動しようとしている要素を格納するためのスタックが必要です。1 + 2 * 3
1 2 2 * +
線形時間と一定のメモリで特定の入力を接尾辞形式に変換するために必要なスタックの長さを事前に見積もることは可能ですか?
c++ - 分流式パーサーの単項マイナス
これは、シャンティング ヤード アルゴリズムを使用した私の式パーサーです。1 つの状況を除いて、期待どおりに機能します。-2*3 のように単項マイナスを使用すると機能しません (アルゴリズムで何も見つからなかったので、そうすべきではないと思います)これを処理するには)これを修正できる簡単な方法はありますか?(これは () + - * / ^ のみが必要な単純なパーサーです) よろしく Pedram
parsing - PHP で数式を解析する
現在、数式を解析して式ツリーにしようとしています。しかし、関数と否定を実装する必要がある段階で立ち往生しています。Shunting-Yard アルゴリズムを使用してそれを行うロジックがわかりません。
今やりたいことは応援すること
- -(x+5) のような否定
- min(x,y) などの関数呼び出し
- cos^2(x) のような、関数名の直後の累乗
- 2x は 2*x と同じなどの暗黙の乗算
- 科学表記法
- 定数 e と pi
誰かがこれを実装する方法のヒントを教えてもらえますか?