3

微積分のプログラミング プロジェクトでは、シンプソンの 1/3 および 3/8 ルールをモデル化するプログラムをコーディングするように指示されました。

多項式 (つまり、5x^2+7x+10) を使用することになっていますが、これを概念化するのに苦労しています。スキャナの使用から始めましたが、多項式を正しく読み取るためのより良い方法はありますか?

例や参考資料は大歓迎です。

4

4 に答える 4

1

いくつかの入力値を受け取り、出力値を返す Function インターフェイスから始めることをお勧めします。

public interface Function {
    double evaluate(double x);
}

多項式の実装を書きます:

public class Poly {

    public static double evaluate(double x, double [] coeffs) {
        double value = 0.0;
        if (coeffs != null) {
            // Use Horner's method to evaluate.
            for (int i = coeffs.length-1; i >= 0; --i) {
                value = coeffs[i] + (x*value);
            }
        }
        return value;
    }
}

それをインテグレーターに渡して、その仕事をさせてください。

于 2013-03-04T18:54:42.940 に答える
1

(開始するための) 簡単な方法は、配列を使用することです。
あなたの例では、次の5x^2 + 7x + 10ようになります:つまり
{10,7,5}
、インデックス 0 では x^0 の係数 10、インデックス 1 では x^1 では 7、インデックス 2 では x^2 では 10 です。

もちろん、これは最善のアプローチではありません。あなたがどのように表現するかを理解する方法を理解するx^20

于 2013-03-04T18:47:00.240 に答える
1

Java では、「X^2 項を入力してください」(次に X 項、定数) のように、入力を事前にフォーマットして定数を要求するのが最も簡単です。

それが受け入れられない場合、入力スタイルの違いに対して非常に脆弱になります。+ と - で String.split[ting] によって用語を区切ることができます。これにより、次のようになります。

[5x^2]、[7x]、[10]

次に、「x^2」と「x」を含む文字列を検索して、用語を区別できます

もちろん、最初にスペースと .toLowerCase() を削除して、ユーザーの差異に対処します。

文字列を分割するときは、これらの定数を否定できるように - ケースを識別する必要があります。

1 つは + で、もう 1 つは - で 2 つの分割を行うことができます。「トークン」を保持するオプションを指定して StringTokenizer を使用することもできますが、これはより簡単かもしれませんが、StringTokenizer は一部の人々を少し不快にさせるので、あなたに合ったものを使用してください.

これは、ユーザーが「5x^2 + 10 + 7 x」と入力しても成功することに注意してください。これは便利です。

于 2013-03-04T18:47:48.220 に答える
0

解析が私の問題だと思います。私はJavaに少し慣れていないので、これは私を悩ませています。

パーサー ジェネレーターを使用する必要があります。

パーサー ジェネレーターは、文法仕様を読み取り、文法との一致を認識できる Java プログラムに変換するツールです。パーサージェネレーター自体に加えて、JavaCC は、ツリー構築 (JavaCC に含まれる JJTree と呼ばれるツールを使用)、アクション、デバッグなど、パーサー生成に関連する他の標準機能を提供します。

JavaCC の FAQ の回答算術式を解析するにはどうすればよいですか?

JavaCC に付属の例を参照してください。

コンパイルに関するテキストを参照してください。

Recursive Descent による式の解析とTheodore Norvellによるチュートリアルを参照してください。

また、JavaCC - 数学式をクラス構造に解析するも参照してください。

于 2013-03-04T18:50:49.573 に答える