Я получаю ошибку "Ошибка сегментации", когда я запускаю это!Я пытаюсь использовать вывод массива функции hilbert () в качестве входных данных для другой функции, называемой определителем ().Я пытался использовать статический, динамический массив и многое другое.Вот мой код: (Мне нужно создать матрицу Гильберта и использовать эту матрицу в качестве входных данных в функции определителя, чтобы найти ее определитель)
Я пытаюсь найти матрицу Гильберта 4 на 4, а затем запустить ее по определителюфункция, которая содержит другую функцию def () для матрицы 3 X 3.пожалуйста помоги.
#include<stdio.h>
#include<stdlib.h>
double arr3[4][4];
double deter(double m[3][3])
{
double determinant= m[0][0] * ((m[1][1]*m[2][2]) - (m[2][1]*m[1][2])) -m[0][1] * (m[1][0]
* m[2][2] - m[2][0] * m[1][2]) + m[0][2] * (m[1][0] * m[2][1] - m[2][0] * m[1][1]);
return determinant;
}
double determinant(double **a,int o) // o denotes order of the matrix
{
int i,j;
double b[3][3];
int m,n;
int c,s=1; // s is for the signed values; c is used for expanding along the row
double det;
det=0;
for(c=0;c<=o-1;c++) // c used for iterating along the row
{
m=0,n=0;
for(i=0;i<o;i++)
{
for(j=0;j<o;j++)
{
b[i][j]=0; // array b initialized zero
if(i!=0 && j!=c) // For obtaining the matrix of minor by deleting the first row and the concerned element column
{
b[m][n]=a[i][j];
if(n<(o-2)) //to allow elements of the minor to be stored, we need to increment m and n as well.
n++;
else
{
n=0; // restarting the n values for columns
m++; // increment m for next row values
}
}
}
}
det=det+ s * (a[0][c]*deter(b)); // The main recursive determinant function; a[0][c] denotes the expanding along the row approach; next recursion to find determinant of the lesser order minor
s=-1*s; // to get cofactor from minor
}
return(det);
}
double **hilbert()
{
//int m=4;
double **array;
array=malloc(sizeof(int*) * 4);
for(int i = 0 ; i < 4 ; i++)
{ array[i] = malloc( sizeof(int*) * 4);
}
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
array[i][j] = 1.0/((i + 1) + (j + 1) - 1.0);
}
}
/*printf("Hilbert actual is \n");
for(int i=0;i<4;i++)
{
printf("\n");
for(int j=0;j<4;j++)
{
printf("%lf\t",array[i][j]);
}
}
*/
return array;
}
int main()
{
//double a[4][4];
int i,j;
double d;
// hilbert();
// double **ab;
double **aff=hilbert();
/* printf("\nEnter the matrix elements: ");
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
scanf("%d",&a[i][j]); //taking the input
}
}
// d=determinant(a,3); //calling the determinant function
//printf("\nDeterminant is %d",d);
*/
printf("\nHilbert matrix is : \n");
for(i=0;i<=3;i++)
{
printf("\n");
for(j=0;j<=3;j++)
{
printf("%lf\t",aff[i][j]); //taking the input
}
}
d=determinant(aff,4); //determinant function
printf("\nDeterminant is %lf",d);
free(aff);
return 0;
}