PDA

View Full Version : محاسبه دترمینان ماتریس در سی



yasinmh
پنج شنبه 11 خرداد 1385, 07:52 صبح
سلام
یه تابع ساده برای
دترمینان یه ماتریس مثلآ ماتریس 10 در 10 رو کسی میتونه بهم کمک کنه ؟

nazaninn
یک شنبه 14 خرداد 1385, 04:31 صبح
در c++ می تونم کمکت کنم

bahram_222222
دوشنبه 15 خرداد 1385, 15:01 عصر
#include <stdlib.h>
#include <alloc.h>
#include <stdio.h>

int detmat ( int *arr, int order );

void main( )
{
int *arr, sum, n, i, j, pos, num ;

printf ( "\nEnter value of n for ( n x n ) matrix " ) ;
scanf ( "%d", &n ) ;
/* allocate memory to accomodate the determinant */
arr = calloc (n * n,2) ;

printf ( "\nEnter numbers :\n" ) ;
for ( i = 0 ; i < n ; i++ )
{
for ( j = 0 ; j < n ; j++ )
{
scanf ( "%d", &num ) ;
pos = i * n + j ;
arr[pos] = num ;
}
}

sum = detmat ( arr, n ) ;
free ( arr ) ;

printf ( "\n%d", sum ) ;
}

int detmat ( int *arr, int order )
{
int sign = 1, sum = 0, i, j, k, count, *arr2 ;
int newsize, newpos, pos ;

if ( order == 1 )
return ( arr[0] ) ;

for ( i = 0 ; i < order ; i++, sign *= -1 )
{
/* copy n-1 by n-1 array into another array */
newsize = ( order - 1 ) * ( order - 1 ) ;
arr2 = calloc (newsize,2) ;
for ( j = 1 ; j < order ; j++ )
{
for ( k = 0, count = 0 ; k < order ; k++ )
{
if ( k == i )
continue ;

pos = j * order + k ;
newpos = ( j - 1 ) * ( order - 1 ) + count ;

arr2[newpos] = arr[pos] ;
count++ ;
}
}

/* find determinant value of n-1 by n-1 array and add it to sum */
sum = sum + arr[i] * sign * detmat ( arr2, order - 1 ) ;
free ( arr2 ) ;
}
return ( sum ) ;
}

powerboy2988
شنبه 27 آبان 1385, 23:38 عصر
#include <stdio.h>
#include <conio.h>
#include <math.h>

#define N 4
#define FALSE 0

void main(void)
{
long determination(int [N][N],int,int);
int array_1[N][N],i,j;
clrscr();
for(i=0;i<N;i++)
for(j=0;j<N;i++)
{
printf("enter A[%u][%u]:\0",i,j)
scanf("%d",&array_1[i][j]);
}
printf("determination of A is =%d\n\0",detemination(array_1,N,N));
}

long determination(int [N][N],int,int)
{
int i,j,ii,jj,i_i,j_j;
int tar[N][N],a1,a2,a3,a4;
long s=0;
if(m!==n)
return 0;
if(m==2)
{
a1=*(*(ar+0)+0);
a4=*(*(ar+1)+1);
a2=*(*(ar+0)+1);
a3=*(*(ar+1)+0);
retrun(a1*a4-a2*a3)
}
else
{
for(i=0;i<m;i++)
for(j=0;j<n;j++)
tar[i][j]=*(*(ar+i)+j)
for(j=0;j<n;j++)
{
i_i=j_j=0;
for(ii=1;ii<m;ii++)
{
for(jj=1;jj<n;jj++)
if(jj!==j)
{
*(*(ar+i_i)+j_j=tar[ii][jj];
j_j++;
}
i_i++;
j_j=0;
}
s+=((j+1)%2==0)?-1:+1)*tar[0][j]*determination(ar,m-1,n-1);
}
retrun(s)
}

}

amirtoty
دوشنبه 17 خرداد 1389, 18:42 عصر
#include <stdio.h>
#include <conio.h>
#include <math.h>

#define N 4
#define FALSE 0

void main(void)
{
long determination(int [N][N],int,int);
int array_1[N][N],i,j;
clrscr();
for(i=0;i<N;i++)
for(j=0;j<N;i++)
{
printf("enter A[%u][%u]:\0",i,j)
scanf("%d",&array_1[i][j]);
}
printf("determination of A is =%d\n\0",detemination(array_1,N,N));
}

long determination(int [N][N],int,int)
{
int i,j,ii,jj,i_i,j_j;
int tar[N][N],a1,a2,a3,a4;
long s=0;
if(m!==n)
return 0;
if(m==2)
{
a1=*(*(ar+0)+0);
a4=*(*(ar+1)+1);
a2=*(*(ar+0)+1);
a3=*(*(ar+1)+0);
retrun(a1*a4-a2*a3)
}
else
{
for(i=0;i<m;i++)
for(j=0;j<n;j++)
tar[i][j]=*(*(ar+i)+j)
for(j=0;j<n;j++)
{
i_i=j_j=0;
for(ii=1;ii<m;ii++)
{
for(jj=1;jj<n;jj++)
if(jj!==j)
{
*(*(ar+i_i)+j_j=tar[ii][jj];
j_j++;
}
i_i++;
j_j=0;
}
s+=((j+1)%2==0)?-1:+1)*tar[0][j]*determination(ar,m-1,n-1);
}
retrun(s)
}

}



توی قسمت تابع چرا هیچ اسمی برای متغیرهاش در نظر نگرفتی؟؟
اصلا ar کجا معرفی شده که داره ازش استفاده میشه؟؟