0

私の問題をできるだけ詳しく説明しようと思います。次のような方程式を処理するプログラムを作成しようとしています。

F = (X∨A) ↔ (X∨B) ( (X OR A) is equivalent to (X OR B) )!

私はそれを「X」で解かなければなりません。あるいは、より適切に言えば、論理和および/または論理和の正規形を書く必要があります。

したがって、理論的には、次のようになります。

ここに画像の説明を入力

真理値表を書くときは、いつ F が 1 に等しいか (トートロジー) を見て、連言/選言の正規形を書かなければなりません。

例 (与えられたテーブルの選言正規形): A=0,B=0 および A=1,B=1 の場合、X の値は重要ではなく、A=0,B=1 AND A=1 の場合,B=0、X は 1 でなければなりません。

ここに画像の説明を入力

結局、X=A∨B。

C#で書いているので、数式はTextBoxに書きます。私を悩ませているのは、部分的に解決できるように、文字列をどのように分離すればよいですか?

4

2 に答える 2

0

まず、C# で String クラスの "Split()" メソッド (または他のメソッド) を試してみてはどうでしょうか。まず、ソルバーのメイン ロジックに集中できるように、トークンの各ペア (例: A AND B) の間に (Split() の区切りとして) 空白を挿入するようにユーザーに促した方がよいでしょう。

于 2015-06-14T12:49:49.323 に答える
0

分かりました。これは基本的に単純化された電卓であり、(必然的に) ボタンによる順次入力はありませんが、既製の数式をテキスト ボックスに入力または貼り付けます。

したがって、あなたがする必要があるのは

  • 許可されているさまざまな表記法 (Λ、V、!、=、!= など、+、*、-、=、↔ など) で、許可されている演算子 (AND、OR、NOT、XOR など) のセットを定義します。
  • 入力が構文的に正しいかどうかを確認します。つまり
    、最初に入力文字列からすべてのスペースを削除してから、
    許可された構造に正規表現を使用する必要がありますが、これ
    はおそらく面倒であることがわかります
  • 入力が有効な場合は、最初に括弧をチェックして、グループ化された式を決定します
  • ブール代数に従って単純化する

または、単にこのリンクをたどってください (Java でもまだ): Boolean expression solver/simplifier、ツール bc2cnf またはそこにリンクされている他のライブラリを使用し、許可された入力を使用されているライブラリで許可されているものに制限することで、多くの頭痛の種を避けてください。

お役に立てれば。

于 2015-06-14T17:18:11.200 に答える