۱۲-خرداد-۱۳۸۵, ۱۰:۱۵:۳۲
۱۹-تير-۱۳۸۵, ۱۸:۵۵:۳۲
سلام
من دانشجوی کامپیوتر دانشگاه پیام نور هستم .
این برنامه و حتی برنامه وارون ماتریس n*n رو دارم ، ولی خدایی خیلی براشون زحمت کشیدم
من دانشجوی کامپیوتر دانشگاه پیام نور هستم .
این برنامه و حتی برنامه وارون ماتریس n*n رو دارم ، ولی خدایی خیلی براشون زحمت کشیدم
۱۹-تير-۱۳۸۵, ۲۲:۰۱:۳۲
سلام
اگه عجله نداشتي ميتونستم كمكت كنم تا آخر اين هفته اصلا وقت ندارم. ولي فك نكنم زياد سخت باشه اول خودت سعي كن فرمولش رو كه داري ( اگه نه فك كنم تو كتاب هندسه تحليلي و جبر خطي سيد موسوي (مبتكران) باشه - همون بحث كهاد و ... هست كه حول يه سطر يا ستون بسط ميدي ) سرچ كن تو PSC هم احتمالا باشه.
اگه عجله نداشتي ميتونستم كمكت كنم تا آخر اين هفته اصلا وقت ندارم. ولي فك نكنم زياد سخت باشه اول خودت سعي كن فرمولش رو كه داري ( اگه نه فك كنم تو كتاب هندسه تحليلي و جبر خطي سيد موسوي (مبتكران) باشه - همون بحث كهاد و ... هست كه حول يه سطر يا ستون بسط ميدي ) سرچ كن تو PSC هم احتمالا باشه.
۲۲-دى-۱۳۸۵, ۲۲:۲۳:۰۴
سلام دوستان
کسی برنامه گرفتن دترمینان بروش کرامر را دارد!!!!!!!!!!!!
خیلی خیلی ممنون میشوم!!!!
برایم حیاتی است
کسی برنامه گرفتن دترمینان بروش کرامر را دارد!!!!!!!!!!!!
خیلی خیلی ممنون میشوم!!!!
برایم حیاتی است
۰۹-بهمن-۱۳۸۷, ۱۷:۴۱:۰۳
دترمينان ماتريس
#include <stdio.h>
#include <conio.h>
#include <math.h>
// A square matrix struct
typedef struct
{
int order;
int **array;
} SQRMATRIX;
// Function declarations
int CreateMatrix( SQRMATRIX *p, int order );
void DisplayMatrix( SQRMATRIX *p );
void InputMatrix( SQRMATRIX *p );
int CalcMinor( SQRMATRIX *p, SQRMATRIX *minor, int row, int col );
int CalcDeterminant( SQRMATRIX *p );
void DestroyMatrix( SQRMATRIX *p );
// main( )
int main( )
{
SQRMATRIX p;
int order;
printf("Enter order of matrix: ");
scanf("%d", &order );
if( !CreateMatrix( &p, order ))
{
printf("Matrix couldn't be created.");
return 0;
}
printf("Matrix created.\n\n");
InputMatrix( &p );
printf("\nThe matrix is:\n");
DisplayMatrix( &p );
printf("\nThe determinant of the matrix is: %d", CalcDeterminant( &p ));
getch( );
return 0;
}
// Create matrix of specified order
int CreateMatrix( SQRMATRIX *p, int order )
{
int i;
if( order < 1 )
return 0;
p->order = order;
p->array = (int**) malloc( order * sizeof( int* )); // Allocate space for each row
if( !p->array )
return 0;
for( i=0; i < order; i++ )
{
p->array = (int*) malloc( order* sizeof( int )); // Allocate space for each column
if( !p->array )
return 0;
}
return 1;
}
// Print matrix in proper format
void DisplayMatrix( SQRMATRIX *p )
{
int i,j;
if( p->order < 1 )
return;
for( i = 0; i < p->order; i++ )
{
for( j = 0; j < p->order; j++ )
printf("%5d ", p->array[j] );
printf("\n");
}
}
// Input matrix from user
void InputMatrix( SQRMATRIX *p )
{
int i,j;
for( i = 0; i < p->order; i++ )
for( j = 0; j < p->order; j++ )
{
printf("Enter element at ( %d, %d ", i+1, j+1 );
scanf("%d", &p->array[j] );
}
}
/* Calculate the 'minor' of the given matrix at given position.
The minor is the matrix formed by deleting the specified row
and column from the matrix.
*/
int CalcMinor( SQRMATRIX *p, SQRMATRIX *minor, int row, int col )
{
int i,j,a,b;
if( p->order <= 1 )
return 0;
if( row >= p->order || col >= p->order )
return 0;
if( !CreateMatrix( minor, p->order-1 ))
return 0;
a = b = 0;
for( i = 0; i < p->order; i++ )
{
if( i != row )
{
b = 0;
for( j = 0; j < p->order; j++ )
{
if( j != col )
{
minor->array[a] = p->array[j];
b++; // Increase column-count of minor
}
}
a++; // Increase row-count of minor
}
}
return 1;
}
/* Calculate the determinant recursively.
The recursive definition is :
det( m ) = Summation( i = 0 to order ) [ (-1)^i * m[0] * det( minor( m[0] ))]
*/
int CalcDeterminant( SQRMATRIX *p )
{
int i, result = 0, temp;
SQRMATRIX minor;
if( p->order < 1 )
{
printf("CalcDeterminant( ) : Invalid matrix.");
return 0;
}
// The 'stopping' condition
if( p->order == 1 )
return p->array[0][0];
for( i = 0; i < p->order; i++ )
{
if( !CalcMinor( p, &minor, 0, i ))
{
printf("CalcDeterminant( ) : Memory allocation failed.");
return 0;
}
result += ( pow( -1, i ) * p->array[0] * CalcDeterminant( &minor ));
DestroyMatrix( &minor );
}
return result;
}
// Release allocated memory
void DestroyMatrix( SQRMATRIX *p )
{
int i;
if( p->order < 1 )
return;
for( i = 0; i < p->order; i++ )
free( p->array ); // free each columns
free( p->array ); // free each row
p->order = 0;
}
#include <stdio.h>
#include <conio.h>
#include <math.h>
// A square matrix struct
typedef struct
{
int order;
int **array;
} SQRMATRIX;
// Function declarations
int CreateMatrix( SQRMATRIX *p, int order );
void DisplayMatrix( SQRMATRIX *p );
void InputMatrix( SQRMATRIX *p );
int CalcMinor( SQRMATRIX *p, SQRMATRIX *minor, int row, int col );
int CalcDeterminant( SQRMATRIX *p );
void DestroyMatrix( SQRMATRIX *p );
// main( )
int main( )
{
SQRMATRIX p;
int order;
printf("Enter order of matrix: ");
scanf("%d", &order );
if( !CreateMatrix( &p, order ))
{
printf("Matrix couldn't be created.");
return 0;
}
printf("Matrix created.\n\n");
InputMatrix( &p );
printf("\nThe matrix is:\n");
DisplayMatrix( &p );
printf("\nThe determinant of the matrix is: %d", CalcDeterminant( &p ));
getch( );
return 0;
}
// Create matrix of specified order
int CreateMatrix( SQRMATRIX *p, int order )
{
int i;
if( order < 1 )
return 0;
p->order = order;
p->array = (int**) malloc( order * sizeof( int* )); // Allocate space for each row
if( !p->array )
return 0;
for( i=0; i < order; i++ )
{
p->array = (int*) malloc( order* sizeof( int )); // Allocate space for each column
if( !p->array )
return 0;
}
return 1;
}
// Print matrix in proper format
void DisplayMatrix( SQRMATRIX *p )
{
int i,j;
if( p->order < 1 )
return;
for( i = 0; i < p->order; i++ )
{
for( j = 0; j < p->order; j++ )
printf("%5d ", p->array[j] );
printf("\n");
}
}
// Input matrix from user
void InputMatrix( SQRMATRIX *p )
{
int i,j;
for( i = 0; i < p->order; i++ )
for( j = 0; j < p->order; j++ )
{
printf("Enter element at ( %d, %d ", i+1, j+1 );
scanf("%d", &p->array[j] );
}
}
/* Calculate the 'minor' of the given matrix at given position.
The minor is the matrix formed by deleting the specified row
and column from the matrix.
*/
int CalcMinor( SQRMATRIX *p, SQRMATRIX *minor, int row, int col )
{
int i,j,a,b;
if( p->order <= 1 )
return 0;
if( row >= p->order || col >= p->order )
return 0;
if( !CreateMatrix( minor, p->order-1 ))
return 0;
a = b = 0;
for( i = 0; i < p->order; i++ )
{
if( i != row )
{
b = 0;
for( j = 0; j < p->order; j++ )
{
if( j != col )
{
minor->array[a] = p->array[j];
b++; // Increase column-count of minor
}
}
a++; // Increase row-count of minor
}
}
return 1;
}
/* Calculate the determinant recursively.
The recursive definition is :
det( m ) = Summation( i = 0 to order ) [ (-1)^i * m[0] * det( minor( m[0] ))]
*/
int CalcDeterminant( SQRMATRIX *p )
{
int i, result = 0, temp;
SQRMATRIX minor;
if( p->order < 1 )
{
printf("CalcDeterminant( ) : Invalid matrix.");
return 0;
}
// The 'stopping' condition
if( p->order == 1 )
return p->array[0][0];
for( i = 0; i < p->order; i++ )
{
if( !CalcMinor( p, &minor, 0, i ))
{
printf("CalcDeterminant( ) : Memory allocation failed.");
return 0;
}
result += ( pow( -1, i ) * p->array[0] * CalcDeterminant( &minor ));
DestroyMatrix( &minor );
}
return result;
}
// Release allocated memory
void DestroyMatrix( SQRMATRIX *p )
{
int i;
if( p->order < 1 )
return;
for( i = 0; i < p->order; i++ )
free( p->array ); // free each columns
free( p->array ); // free each row
p->order = 0;
}