C/C++の宿題やらせてください。8代目。
■ このスレッドは過去ログ倉庫に格納されています
0441デフォルトの名無しさん
NGNGこれでどうよ?
#include <stdio.h>
#include <float.h>
#define ROW 2
#define COL 2
int readM(double M[][COL])
{ char buf[BUFSIZ];
printf("A00 A01 A10 A11>");
if(fgets(buf,sizeof(buf),stdin)==0) return -1;
if(sscanf(buf,"%lf%lf%lf%lf",&M[0][0],&M[0][1],&M[1][0],&M[1][1])!=4) return -2;
return 0; }
int revM(double A[][COL],double B[][COL])
{ double det=A[0][0]*A[1][1]-A[0][1]*A[1][0];
if(fabs(det) < DBL_EPSILON) return -1;
B[0][0]=A[1][1]/det;B[0][1]=-1*A[0][1]/det;B[1][0]=-1*A[1][0]/det;B[1][1]=A[0][0]/det;
return 0; }
void mulM(double A[][COL],double B[][COL],double C[][COL])
{ int i,j,k; for(i=0;i<ROW;i++) for(j=0;j<COL;j++) for(C[i][j]=0,k=0;k<COL;k++) C[i][j]+=A[i][k]*B[k][j]; }
void printM(double M[][COL])
{ int i,j; for(i=0;i<ROW;i++) { for(j=0;j<COL;j++) printf("%1.4f ",M[i][j]); printf("\n"); } }
int main(int argc, char *argv[])
{ double A[ROW][COL],B[ROW][COL],C[ROW][COL];
while(readM(A)==0){
if(revM(A,B)){ printf("逆行列は存在しません\n"); continue; }
mulM(A,B,C);
printf("[A]\n"); printM(A);printf("[A]^-1\n"); printM(B);printf("[A]*[A]^-1\n"); printM(C);
}
return 0;}
■ このスレッドは過去ログ倉庫に格納されています