ブール式を解くプログラムを書く必要があります。
「1+0*(1*0)」のような文字列があります。
この式の結果を取得するにはどうすればよいですか?
Shunting-yard アルゴリズムアルゴリズムを使用して postfix に変更し、解決することを考えていますが、必要かどうかはわかりません。これを行う方法についてのアイデアは高く評価されます。
ブール式を解くプログラムを書く必要があります。
「1+0*(1*0)」のような文字列があります。
この式の結果を取得するにはどうすればよいですか?
Shunting-yard アルゴリズムアルゴリズムを使用して postfix に変更し、解決することを考えていますが、必要かどうかはわかりません。これを行う方法についてのアイデアは高く評価されます。
方程式が既に後置表記になっている場合は、Shunting-Yard アルゴリズムを使用せずに解くことができます。たとえば、上記1+0*(1*0)
は になります1 0 1 0 * * +
。演算子に到達するまで要素をスタックにプッシュし、次に 2 つの要素をポップし、結果を評価してスタックにプッシュします。
この例では1
、 、0
、1
、および0
get がスタックにプッシュされます。次に*
、スタックをポップさ0
せ、次に1
. 結果は0
です。これはスタックにプッシュされ、スタックには1
, 0
, 0
(下から上への順序) が含まれるようになりました。とがスタックから*
ポップ0
さ0
れ、結果として がスタックに0
プッシュバックされます。最後に、スタックから+
ポップ0
し0
て、スタックを空のままにし、結果は 0 になります。
ほぼすべての CPU にスタックが組み込まれているため、これは非常に簡単にアセンブリに実装できます。文字列から文字を読み取って、上記の手順に従います。オペランド/演算子はそれぞれ 1 文字より長くないため、単語の解析について心配する必要はありません。