#ifndef MATUTIL #define MATUTIL #include #include #ifndef SCALAR #define SCALAR float #endif typedef SCALAR *vector,**matrix; void error(char *massage) { fprintf(stderr,"\n%s\n",massage); exit(EXIT_FAILURE); } vector newvec(int n){ return malloc(sizeof(SCALAR)*n); } matrix newmat(int nrow,int ncol) { int i; matrix a; a=malloc((nrow+1)*sizeof(void *)); if(a==NULL) return NULL; for(i=0;i=0) free(a[i]); free(a); return NULL; } } a[nrow]=NULL; return a; } vector new_vector(int n){ vector v; v=newvec(n); if(v==NULL) error("記憶領域不足"); return v; } matrix new_matrix(int nrow,int ncol) { matrix a; a=newmat(nrow,ncol); if(a==NULL) error("記憶領域不足"); return a; } void free_vector(vector v) { free(v); } void free_matrix(matrix a) { matrix b; b=a; while(*b!=NULL) free(*b++); free(a); } double innerproduct(int n,vector u,vector v) { int i,n5; double s; s=0; n5=n%5; for(i=0;i=perline){k=0;printf("\n");} } if(k!=0) printf("\n"); } void matprint(matrix a,int ncol,int perline,char *format) { int i; for(i=0;a[i]!=NULL;i++){ vecprint(a[i],ncol,perline,format); if(ncol>perline) printf("\n"); } } #endif /*void main(void){ vector v1=new_vector(5); vector v2=new_vector(5); int i,j; matrix mx=new_matrix(4,3); printf("ベクトルプログラムのテストをします。v1,v2の要素を二つずつ順番に入力してください\n"); for(i=0;i<5;i++){ scanf("%f %f",&v1[i],&v2[i]); } vecprint(v1,5,5,"%f "); printf("内積は%fです。\n",innerproduct(5,v1,v2)); free_vector(v1); free_vector(v2); printf("次は行列のテストです。3列、3つずつ一度に入力してください\n"); for(i=0;i<4;i++){ for(j=0;j<3;j++){ scanf("%f",&mx[i][j]); } printf("%d行目を入力します\n",i+2); } matprint(mx,3,4,"%f"); free_matrix(mx); }*/