Я написал программу для определения детерминанта n на n матрицу с использованием рекурсии (теорема Лапласа).детерминантная программа не работает правильно
они три функции
1) определитель(), чтобы найти определитель п * п матрицы
2) создать() динамически выделять * N массиву
3) копию () для создания п-1 * п-1 минор п * п массив
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int determinant(int **a,int size,int noentry);// find determinant using recursion
int copy(int **b,int **a,int size,int noentry);//copy elements to minor
int **create(int size); // dynamically allocate a two dimensional array
int main()
{
int **a,size,i,j,y;
printf("enter the order of the determinant \n");
scanf("%d",&size);
a=create(size);
printf("enter your elements \n");
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
scanf("%d",&a[i][j]);
}
}
y=determinant(a,size,0);
printf("the determinant is %d \n",y);
return 0;
}
int determinant(int **a,int size,int noentry)
{
int i;
static int det=0;
if(size<=2)
return a[0][0]*a[1][1]-a[0][1]*a[1][0];
else
{
for(i=0;i<size;i++)
{
int **b;
b=create(size-1);
copy(b,a,size-1,i);
det= det+pow(-1,i)*a[0][i]*determinant(b,size-1,i);
}
return det;
}
}
int copy(int **b,int **a,int size,int noentry)
{
int i,j,k;
for(i=1;i<=size;i++)
{
k=0;
for(j=0;j<=size;j++)
{
if(j==noentry)
continue;
else
{
b[i-1][k]=a[i][j];
k++;
}
}
}
return size;
}
int **create(int size)
{
int **b;
if(size<=0)
{
printf("the size cannot be negative/null \n");
return NULL;
}
int i;
printf("entered the create function \n");
b=(int **)malloc(sizeof(int *)*size);
for(i=0;i<size;i++)
b[i]=(int *)malloc(size*sizeof(int));
return b;
}
программа корректно работает 3 на 3 матрицы, но не для 4 на 4 матрицы я не могу обнаружить ошибку.
пожалуйста, вы можете показать пример ввода, который не работает? Или это дает неверные результаты для каждой матрицы 4x4? –
Просьба показать, что вход и выход не работают – GNKeshava
для 3 * 3 [2 3 5 7 11 13 17 19 23 29] он работает правильно (-78), но для 4 * 4 [2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53] выход должен быть 880, но я получаю 97560 – kapil