C/C++の宿題を片付けます 112代目
■ このスレッドは過去ログ倉庫に格納されています
0309デフォルトの名無しさん
2008/07/09(水) 21:07:35double ** mmake(double a1,double a2, double a3, double a4){
double **ret = (double **)malloc(sizeof(double*) * 2 );
ret[0] = (double *)malloc(sizeof(double) * 2 );
ret[1] = (double *)malloc(sizeof(double) * 2 );
ret[0][0] = a1; ret[0][1] = a2; ret[1][0] = a3; ret[1][1] = a4;
return ret;
}
#define mdel(ret) { free(ret[0]);free(ret[1]);free(ret); }
#define mshow(m,name) { printf("MATRIX[%s]\n %lf %lf\n %lf %lf\n", name,m[0][0],m[0][1],m[1][0],m[1][1]); }
void madd(double **r,double **a,double **b){
r[0][0] = a[0][0] + b[0][0]; r[0][1] = a[0][1] + b[0][1];
r[1][0] = a[1][0] + b[1][0]; r[1][1] = a[1][1] + b[1][1];
}
void msub(double **r,double **a,double **b){
r[0][0] = a[0][0] - b[0][0]; r[0][1] = a[0][1] - b[0][1];
r[1][0] = a[1][0] - b[1][0]; r[1][1] = a[1][1] - b[1][1];
}
void mmul(double **r,double **a,double **b){
r[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0]; r[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1];
r[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0]; r[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1];
}
void mtra(double **r,double **a){r[0][0]=a[0][0];r[1][0]=a[0][1];r[0][1]=a[1][0];r[1][1]=a[1][1];}
int main(void){
double **A = mmake(5.0 , 6.0 , 7.0 , 8.0 ) , **B = mmake(1.0 , 2.0 , 3.0 , 4.0 ), **C = mmake(0,0,0,0);
mshow(A,"A"); mshow(B,"B");
madd(C, A,B); mshow(C,"A+B"); msub(C, A,B); mshow(C,"A-B");
mmul(C, A,B); mshow(C,"A*B"); mmul(C, B,A); mshow(C,"B*A");
mtra(C, A); mshow(C,"Transposed(A)");
mdel(A); mdel(B); mdel(C);return 0;
}
■ このスレッドは過去ログ倉庫に格納されています