Inverse Matrix nxn c code

#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");
      }

}

1 ความคิดเห็น: