エントリが有理係数を持つ多項式である行列をコーディングしています。どんな助けでも大歓迎です。
有理数と有理多項式が宣言されています:
Rational_number.h
struct long_rational{
long p;
long q;
};
typedef struct long_rational rational;
多項式.h
#define MAX_DEGREE 200
struct rational_polynomial{
long degree;
rational coef[MAX_DEGREE]; //rational coefficients in increase power.
};
typedef struct rational_polynomial polynomial;
poly_mat.c 全体
#include "poly_mat.h"
#define NR_END 1
#define FREE_ARG char*
polynomial **poly_matrix( long nrl, long nrh, long ncl, long nch )
/* allocates a matrix with polynomial entries in the range m[nrl..nrh][ncl..nch] */
{
long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;
polynomial **m;
/* allocate pointers to rows */
m=( polynomial ** ) malloc( ( size_t )( ( nrow+NR_END )*sizeof( polynomial* ) ) );
if ( !m ) nrerror( "allocation failure 1 in matrix()" );
m += NR_END;
m -= nrl;
/* allocate rows and set pointers to them */
m[nrl]=( polynomial * ) malloc( ( size_t )( ( nrow*ncol+NR_END )*sizeof( polynomial ) ) );
if ( !m[nrl] ) nrerror( "allocation failure 2 in matrix()" );
m[nrl] += NR_END;
m[nrl] -= ncl;
for ( i=nrl+1; i<=nrh; i++ ) m[i]=m[i-1]+ncol;
/* return pointer to array of pointers to rows */
return m;
}
void **free_poly_matrix( polynomial **m, long nrl, long nrh, long ncl, long nch )
/* free a polynomial matrix allocated by poly_matrix() */
{
free( ( FREE_ARG ) ( m[nrl]+ncl-NR_END ) );
free( ( FREE_ARG ) ( m+nrl-NR_END ) );
}
void init_random_poly_matrix( int **m, long nrl, long nrh, long ncl, long nch )
/* initialize a random polynomial matrix with coefficient <=100*/
{
long i,j;
long iseed = ( long )time( NULL );
srand ( iseed );
for ( i=nrl; i<=nrh; i++ )
{
for ( j=ncl; j<=nch; j++ )
{
m[i][j].degree=( rand()%MAX_DEGREE );
for ( k=0;k<=MAX_DEGREE;k++ )
{
m[i][j].coef[k].p = (rand()%100 );
m[i][j].coef[k].q = (1+rand()%100 );
}
}
}
}
謎めいたエラーメッセージは次のとおりです。
gcc -Wall -c -o poly_mat.o poly_mat.c poly_mat.c: 関数 'init_random_poly_matrix' 内: poly_mat.c:6: エラー: '(' トークンの前に宣言指定子が必要です poly_mat.c:28: エラー: '{' トークンの前に '='、','、';'、'asm' または '__attribute__' が必要です poly_mat.c:35: エラー: '{' トークンの前に '='、','、';'、'asm' または '__attribute__' が必要です poly_mat.h:14: エラー: プロトタイプ化された関数定義の古いスタイルのパラメーター宣言 poly_mat.c:51: エラー: 入力の最後に '{' が必要です make: *** [poly_mat.o] エラー 1
欠落しているセミコロンが埋められた poly_mat.h。
#ifndef POLY_MAT_H
#define POLY_MAT_H
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "nrutil.h"
#include "rational_number.h"
#include "polynomial.h"
/* matrix with polynomial entries */
polynomial **poly_matrix( long nrl, long nrh, long ncl, long nch );
void init_random_poly_matrix( int **m, long nrl, long nrh, long ncl, long nch );
void **free_poly_matrix( polynomial **m, long nrl, long nrh, long ncl, long nch );
#endif
現在、ドット演算子を使用して配列内の多項式のメンバーにアクセスできません。
新しいエラー メッセージ:
gcc -Wall -c -o poly_mat.o poly_mat.c poly_mat.c: 関数 'init_random_poly_matrix' 内: poly_mat.c:43: エラー: 構造体または共用体ではないメンバー 'degree' の要求 poly_mat.c:46: エラー: 構造体または共用体ではないメンバー 'coef' の要求 poly_mat.c:47: エラー: 構造体または共用体ではないメンバー 'coef' の要求 make: *** [poly_mat.o] エラー 1
編集2:間違いを見つけました。polynomial** ではなく int** として宣言します。