#include<stdio.h>
#include<conio.h>
void InputMat(float *matrix,int n);
void IdentMat(float *matrix1,int
n);
void ShowMat(float *matrix,int n);
void
ShowAnsMat(float *matrix1,int n);
void SetInv(float *matrix1,float
*matrix,int n);
void main()
{
float *matrix,*matrix1;
int n;
printf("How many size:");
scanf("%d",&n);
matrix=new float[n*n];
InputMat(matrix,n);
matrix1=new float [n*n];
IdentMat(matrix1,n);
ShowMat(matrix,n);
SetInv(matrix1,matrix,n);
ShowAnsMat(matrix1,n);
getch();
}
void InputMat(float *matrix,int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("input
matrix[%d][%d]",i+1,j+1);
scanf("%f",&matrix[n*i+j]);
}
}
}
void IdentMat(float *matrix1,int n)
{
for(int
i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)
matrix1[i*n+j]=1.0;
else
matrix1[i*n+j]=0.0;
}
}
}
void ShowMat(float *matrix,int n)
{
printf("\n*****Matrix[%d]x[%d]*****\n",n,n);
for(int
i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("
%.2f",matrix[i*n+j]);
}
printf("\n");
}
}
void SetInv(float *matrix1,float
*matrix,int n)
{
float ratio;
for(int
i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if(i!=j)
{
ratio =
matrix[j*n+i]/matrix[i*n+i];
for(int
l=0;l<n;l++)
{
matrix[j*n+l]=matrix[j*n+l]-ratio*matrix[i*n+l];
matrix1[j*n+l]=matrix1[j*n+l]-ratio*matrix1[i*n+l];
}
}
}
}
for(int i =0; i<n;i++)
{
float a = matrix[i*n+i];
for(int j=0; j<n;j++)
{
matrix[i*n+j] =matrix[i*n+j]/ a;
matrix1[i*n+j] =matrix1[i*n+j]/ a;
}
}
}
void
ShowAnsMat(float *matrix1,int n)
{
printf("*****Inverse Natrix*****\n");
for(int
i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("
%.2f",matrix1[i*n+j]);
}
printf("\n");
}
}
สั้นกว่านี้ ทำได้อีกไหมครับ
ตอบลบ