#include<stdio.h>
#include<stdlib.h>
int main(){
int seed,A[100][100],a=1,b=1,k;
for(b=1;b<5;b++){
for(a=1;a<5;a++)
}
printf("The 4x4 matrix is:\n"); for(a=1;a<5;a++){
for(b=1;b<5;b++)
{ if(0<=A
[a
][b
]<=9){printf("%3d ",A
[a
][b
]);} else {printf("%3d ",A
[a
][b
]); } } }
for(a=1;a<4;a++){
for(b=2;b<5;b++){
if(a==2&&b==2){b++;}
if(a==3&&b==2){b++;}
k=A[a][b];
A[a][b]=A[b][a];
A[b][a]=k;
}
}
printf("The transpose matrix is:\n"); for(a=1;a<5;a++){
for(b=1;b<5;b++)
{ if(0<=A
[a
][b
]<=9){printf("%3d ",A
[a
][b
]);} else {printf("%3d ",A
[a
][b
]); } } }
for(a=1;a<4;a++){
for(b=2;b<5;b++){
if(a==2&&b==2){b++;}
if(a==3&&b==2){b++;}
k=A[a][b];
A[a][b]=A[b][a];
A[b][a]=k;
}
}
int condition=1,n=0;
float B[100][100],m[100],det,inversematrix[100];
for(b=1;b<5;b++){
for(a=1;a<5;a++)
{B[a][b]=A[a][b];}
}
a=1;b=1;n=0;
for(a=1;a<5;a++){
for(b=1;b<5;b++){m[n]=B[a][b];
if(b<4){n++;}
}
}
det=m[0]*m[5]*m[10]*m[15]+m[0]*m[6]*m[11]*m[13]+m[0]*m[7]*m[9]*m[14]
+m[1]*m[4]*m[11]*m[14]+m[1]*m[6]*m[8]*m[15]+m[1]*m[7]*m[10]*m[12]
+m[2]*m[4]*m[9]*m[15]+m[2]*m[5]*m[11]*m[12]+m[2]*m[7]*m[8]*m[13]
+m[3]*m[4]*m[10]*m[13]+m[3]*m[5]*m[8]*m[14]+m[3]*m[6]*m[9]*m[12]
-m[0]*m[5]*m[11]*m[14]-m[0]*m[6]*m[9]*m[15]-m[0]*m[7]*m[10]*m[13]
-m[1]*m[4]*m[10]*m[15]-m[1]*m[6]*m[11]*m[12]-m[1]*m[7]*m[8]*m[14]
-m[2]*m[4]*m[11]*m[13]-m[2]*m[5]*m[8]*m[15]-m[2]*m[7]*m[9]*m[12]
-m[3]*m[4]*m[9]*m[14]-m[3]*m[5]*m[10]*m[12]-m[3]*m[6]*m[8]*m[13];
if(det==0){condition=0;}
if(condition){
float invdet;
invdet = 1/det;
inversematrix[0] = invdet*(m[5]*m[10]*m[15]+m[6]*m[11]*m[13]+m[7]*m[9]*m[14]-m[5]*m[11]*m[14]-m[6]*m[9]*m[15]-m[7]*m[10]*m[13]);
inversematrix[1] = invdet*(m[1]*m[11]*m[14]+m[2]*m[9]*m[15]+m[3]*m[10]*m[13]-m[1]*m[10]*m[15]-m[2]*m[11]*m[13]-m[3]*m[9]*m[14]);
inversematrix[2] = invdet*(m[1]*m[6]*m[15]+m[2]*m[7]*m[13]+m[3]*m[5]*m[14]-m[1]*m[7]*m[14]-m[2]*m[5]*m[15]-m[3]*m[6]*m[13]);
inversematrix[3] = invdet*(m[1]*m[7]*m[10]+m[2]*m[5]*m[11]+m[3]*m[6]*m[9]-m[1]*m[6]*m[11]-m[2]*m[7]*m[9]-m[3]*m[5]*m[10]);
inversematrix[4] = invdet*(m[4]*m[11]*m[14]+m[6]*m[8]*m[15]+m[7]*m[10]*m[12]-m[4]*m[10]*m[15]-m[6]*m[11]*m[12]-m[7]*m[8]*m[14]);
inversematrix[5] = invdet*(m[0]*m[10]*m[15]+m[2]*m[11]*m[12]+m[3]*m[8]*m[14]-m[0]*m[11]*m[14]-m[2]*m[8]*m[15]-m[3]*m[10]*m[12]);
inversematrix[6] = invdet*(m[0]*m[7]*m[14]+m[2]*m[4]*m[15]+m[3]*m[6]*m[12]-m[0]*m[6]*m[15]-m[2]*m[7]*m[12]-m[3]*m[4]*m[14]);
inversematrix[7] = invdet*(m[0]*m[6]*m[11]+m[2]*m[7]*m[8]+m[3]*m[4]*m[10]-m[0]*m[7]*m[10]-m[2]*m[4]*m[11]-m[3]*m[6]*m[8]);
inversematrix[8] = invdet*(m[4]*m[9]*m[15]+m[5]*m[11]*m[12]+m[7]*m[8]*m[13]-m[4]*m[11]*m[13]-m[5]*m[8]*m[15]-m[7]*m[9]*m[12]);
inversematrix[9] = invdet*(m[0]*m[11]*m[13]+m[1]*m[8]*m[15]+m[3]*m[9]*m[12]-m[0]*m[9]*m[15]-m[1]*m[11]*m[12]-m[3]*m[8]*m[13]);
inversematrix[10] = invdet*(m[0]*m[5]*m[15]+m[1]*m[7]*m[12]+m[3]*m[4]*m[13]-m[0]*m[7]*m[13]-m[1]*m[4]*m[15]-m[3]*m[5]*m[12]);
inversematrix[11] = invdet*(m[0]*m[7]*m[9]+m[1]*m[4]*m[11]+m[3]*m[5]*m[8]-m[0]*m[5]*m[11]-m[1]*m[7]*m[8]-m[3]*m[4]*m[9]);
inversematrix[12] = invdet*(m[4]*m[10]*m[13]+m[5]*m[8]*m[14]+m[6]*m[9]*m[12]-m[4]*m[9]*m[14]-m[5]*m[10]*m[12]-m[6]*m[8]*m[13]);
inversematrix[13] = invdet*(m[0]*m[9]*m[14]+m[1]*m[10]*m[12]+m[2]*m[8]*m[13]-m[0]*m[10]*m[13]-m[1]*m[8]*m[14]-m[2]*m[9]*m[12]);
inversematrix[14] = invdet*(m[0]*m[6]*m[13]+m[1]*m[4]*m[14]+m[2]*m[5]*m[12]-m[0]*m[5]*m[14]-m[1]*m[6]*m[12]-m[2]*m[4]*m[13]);
inversematrix[15] = invdet*(m[0]*m[5]*m[10]+m[1]*m[6]*m[8]+m[2]*m[4]*m[9]-m[0]*m[6]*m[9]-m[1]*m[4]*m[10]-m[2]*m[5]*m[8]);
n=0;a=1;b=1;
for(a=1;a<5;a++){
for(b=1;b<5;b++){B[a][b]=inversematrix[n];
if(b<4){n++;}
}
}
printf("The inverse matrix is:\n"); for(a=1;a<5;a++){
for(b=1;b<5;b++)
{ if(0<=B
[a
][b
]<=9){printf("%f ",B
[a
][b
]);} else {printf("%f ",B
[a
][b
]); } } }
}
else {printf("The inverse matrix isn't exist");}
return 0;
}