2016-10-24 4 views
1

内のデータを分離:これらの行の読書タブには、私は次のような私のプログラムの入力ファイルを与えることができC99

1  0  0  0  2 -1 
16 70 -169 -580 75 
1  0  4  0 -5 
0 -9  3  5 -3 
5 -4  3 -2  0 
1.0 -3.4 5.4531 -4.2077 1.5092 -0.2030 

各多項式を表します。たとえば、最初の行はx^6 + 2x^2 - 1

ですが、このファイルを読み込もうとしていますが、タブと改行の処理方法がわかりません。私は、係数と多項式の量が変化するという事実をどのように扱うかもわかりません。

今私が持っている:

polynomial** readPolyFile(FILE *polyFile){ 
    polynomial *p = NULL; 
    int size = 1; /* Size to malloc */ 
    polynomial **polynomials = NULL; 

    polyList = malloc(sizeof(polynomial*) * size); /* Initialize */ 

    if(polyList == NULL){ 
     fprintf(stderr, "%s %n: Could not allocate memory\n", __FILE__, __LINE__); 
     exit(-99); 
    } 

    /* Read all of the data from the file */ 
    do { 

    } 

} 

私の最初に考えたのは大きさに私がする必要があるたびにインクリメントすることですが、私はそれがこのことについてに行くための最善の方法だかはわかりません。次のようにpolynomial

私の定義は次のとおりです。

typedef struct 
{ 
    unsigned int nterms;  /* number of terms */ 
    double complex *polyCoef; /* coefficients */ 
} polynomial; 

私は多項式構造体のリストを返すようにしたいと思います。これについてどのように進むべきかに関する提案はありますか?

+0

あなたの多項式構造体の 'complex'は何を分離しましたか –

+0

@MarekKlein複素数ライブラリを使用しています http://pubs.opengroup.org/onlinepubs/009695399/basedefs/complex.h.html –

+1

@tibsar注:サンプル係数には、「複合」の例は含まれていません数字。 – chux

答えて

2

これについてのご提案はありますか?

リンクされたリストに入力を読み込み、完了すると配列を作成します。


いくつかのクイックコードでは、エラーチェックが必要ではありません。

は、バッファ内の行を読んで polynomialにそれを解析し、LLに追加、ループ内で空の連結リスト

typedef struct LL { 
    polynomial *poly; 
    struct LL *next; 
} LL; 
LL head = { NULL, NULL }; 
LL *p = &head; 

を設定します。

#define N 1000 
count = 0; 
char buf[N]; 
/* Read all of the data from the file */ 
while (fgets(buf, sizeof buf, polyFile)) { 
    p->next = malloc(sizeof *(p->next)); 
    p = p->next; 

    // TBD code for OP. 
    // Hint: degree of polynomial < sizeof buf/2 
    p->poly = polyList_from_line(buffer); 

    p->next = NULL; 
    count++; 
} 

配列

polyList = malloc(sizeof *polyList * count); 
p = head.next; 
for (i=0; i< count; i++) { 
    assert(p); 
    polylist[i] = p->poly; 
    next = p->next; 
    free(p); 
    p = next; 
} 

return polylist; 

サブ問題のために割り当てる:?タブを読み取るためにもっと擬似コードは、データに

polynomial *polyList_from_line(char *buffer) { 
    double complex coef[some factor of N]; 
    count = 0; 

    char *token = strtok(buffer, "\t"); 
    while (token) { 
     // parse the token for a complex number 
     if (sscanf(buffer, tbd_format, tbd_variables) != expected_result) 
     break; 
     coef[count++] = ... 
     token = strtok(tbd_code); 
    } 
    // Malloc polynomial using count 
    // Populate polynomial from coef[] 
    // return allocation 
    } 
関連する問題