2

64x64 のマトリックス値を含むテキスト ファイルがあり、それらは複素数です。ファイルからそれらを読みたいのですが、問題があります。C の複雑なライブラリを使用するか、複素数用の新しいデータ型を作成するかは、私にとっては問題ありません。正しく読み取る必要があるだけです。

つまり、次を使用するかどうかです。

#include <complex.h>
int complex matrix[64][64];

またはそのデータ型を作成します。

typedef struct {
    int real, imag;
} Complex;

Complex matrix[64][64];

それらが正しく読み取られている限り、私にとっては問題ありません。

以下に、2x3 マトリックスを示します。これは、私のファイルに数値がどのように含まれているかを示すためです。

{{-32767, 12532 + 5341I, -3415 - 51331I}
 {32767I, 32609 + 3211I, 32137 + 6392I}}

ご覧のように、実数部と虚数部の両方が含まれる部分もあれば、虚数部と実数部だけの部分もあり、すべての虚数の末尾に大文字の「i」が付いています。そのお手伝いができれば幸いです。

4

2 に答える 2

0

番号がどのように編成されているかは問題ではありません。それらがメモリ内で整列されている場合は、一度にすべてを読み取ることができます。

Complex matrix[64][64];
fread(matrix,sizeof(Complex),64*64, your_file_pointer);

書くのと同じ:

fwrite(matrix, sizeof(Complex), 64*64, your_file_pointer);
于 2012-11-17T12:57:38.803 に答える
0

2 つの一般的な設計パターンが適用されます
。1) 「言語」を受け入れる再帰降下パーサー
2)ステート マシン

どちらの場合も、「{」、「}」、0-9、i、+、- 以外のものに遭遇するとエラーで終了し、すべての空白をスキップする read_char() 関数の恩恵を受けることができます (ch<=32) .

ステート マシンはもう少し汎用性があります。任意の時点で「+」または「-」がある場合、次の値 (「i」または「i」以外で終わる) を現在の累積値に加算または減算するだけです。 . (その後、ステート マシンは 1+2-1+1i も計算できます...)

于 2012-11-17T12:58:21.177 に答える