В чем же ошибка этой программы?
#include <stdio.h> #include <stdlib.h> #define N 3 int main() { int i,j,k,n=N;float b[N][N],a[N][N],c[N][2*N],det,l; printf("Enter the matrix :\n\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("a[%d][%d]= ",i+1,j+1); scanf("%f",&b[i][j]); } } printf("ENTERED MATRIX:\n\n"); for(i=0;i<N;i++) { for(j=0;j<N;j++)printf("%10.4f",b[i][j]);printf("\n"); } /*Identity Matrix*/ for(i=0;i<N;i++)for(j=0;j<N;j++)a[i][j]=(i==j)?1:0; /*Echelon Form*/ for(i=0;i<N;i++) { for(j=0;j<(2*N);j++) { if(j<N)c[i][j]=b[i][j]; else c[i][j]=a[i][j-n]; } } printf("\nRow Echelon Form:\n\n"); for(i=0;i<N;i++) { for(j=0;j<(2*N);j++)printf("%10.4f",c[i][j]);printf("\n"); } printf("\n"); /*Operation for inverse of matrix begins*/ for(k=0;k<N-1;k++) { if(c[k][k]==0) { for(i=k+1;i<N;i++)if(c[i][k]!=0)break; for(j=0;j<(2*N);j++){l=c[i][j];c[i][j]=c[k][j];c[k][j]=l;} } for(i=k+1;i<N;i++) { for(j=k;j<N;j++) {c[i][j]=c[i][j]-(c[i][k]/c[k][k])*c[k][j]; c[i][j+n]=c[i][j+n]-(c[i][k]/c[k][k])*c[k][j+n];} } } for(i=0,det=1;i<N;i++)det*=c[i][i]; if(det==0.0){printf("\nInverse of Matrix can't be found.\n");exit(0);} /*Determinant operation ends*/ for(k=N-1;k<0;k--) { if(c[k][k]==0) { for(i=k-1;i<=0;i--)if(c[i][k]!=0)break; for(j=0;j<(2*N);j++){l=c[i][j];c[i][j]=c[k][j];c[k][j]=l;} } for(i=k-1;i<=0;i--) { for(j=k;j<=0;j--) {c[i][j]=c[i][j]-(c[i][k]/c[k][k])*c[k][j]; c[i][j+n]=c[i][j+n]-(c[i][k]/c[k][k])*c[k][j+n];} } } for(i=0;i<N;i++){c[i][i]=c[i][i]/c[i][i];c[i][i+n]=c[i][i+n]/c[i][i];}/*corner elements*/ printf("\nRow Echelon Form:\n\n"); for(i=0;i<N;i++) { for(j=0;j<(2*N);j++)printf("%10.4f",c[i][j]);printf("\n"); } printf("\nDeterminant of Matrix is %f",det); printf("\n\nINVERSE OF MATRIX:\n\n"); /*printing operation for inverse of matrix begins*/ for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%10.4f",c[i][j+n]); } printf("\n"); } return 0; }
Что я уже пробовал:
Это программа для инверсии матрицы, которая не показывает никаких ошибок, но и не дает правильного вывода.
Patrice T
Дайте образец ввода, ожидаемый выход и реальный выход.
Dave Kreskowiak
Компилятор только проверяет, чтобы увидеть, если ваш синтаксис утверждение является верным. Он не может знать, верна ли ваша логика.
Не зная, каков ожидаемый результат для входных данных, которые вы ему даете, довольно трудно понять, что происходит во всей этой математике.
Richard MacCutchan
Главная ошибка-это ваш стиль кодирования. То, что вы здесь имеете, просто невозможно понять. И я сильно подозреваю, что вам на самом деле не нужны все эти массивы, назначение которых опять же невозможно понять.