- 
	
			
				
					یک شنبه 28 تیر 1388, 23:57 عصر
				
			
			
				
					#1
				
				
				
			
	 
		
			
			
				کاربر جدید
			
			
				  
 
					    
				 
 
			
				
				
				
					برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی
				
					
						
							امیدوارم که این برنامه نیاز شما را برآورده نماید.
 جعفر فخرطه
 
 
 
 
 
 
 
- 
	
			
				
					یک شنبه 28 تیر 1388, 23:58 عصر
				
			
			
				
					#2
				
				
				
			
	 
		
			
			
				کاربر جدید
			
			
				  
 
					    
				 
 
			
				
				
				
					نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی
				
					
						
							برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی
 
 #include<stdio.h>
 #include<CONIO.H>
 #include<MATH.H>
 typedef struct
 {
 double *p;
 int num;
 }det_mat;
 /////////////////////////////////////////////////////////
 det_mat *AllocateMat(int i)
 {
 det_mat *X;
 X=new det_mat;
 X->p=new  double [i];
 return X;
 }
 
 void FreeMat(det_mat *X)
 {
 delete X->p;
 delete X;
 }
 
 det_mat *DeleteColRow(det_mat *M ,int i)
 {
 det_mat *X=AllocateMat((M->num-1)*(M->num-1));
 
 int tt=0,a,b=0;
 
 // !!!!!!!!!!!!!!!! M->p+=M->num;
 for(a=0;a<M->num*(M->num-1);a++)
 {
 tt++;
 if (tt!=i)
 {
 X->p[b] = M->p[a+M->num];
 b++;
 }
 if (tt == M->num) tt=0;
 }
 X->num=M->num-1;
 return(X);
 }
 //////////////////////////////////////////////////////////
 double determinan(det_mat *f)
 {
 double s=0;
 if (f->num==1) return(*(f->p));
 else
 
 for (int i=1; i<=f->num;i++)
 {
 det_mat *deli=DeleteColRow(f,i);
 double d = determinan(deli);
 FreeMat(deli);
 s += pow(-1,i+1) * f->p[i-1] * d;
 }
 
 return s;
 }
 
 //////////////////////////////////////////////////////////
 void main(void)
 {
 double p[16]={2,1,4
 ,5,1,2
 ,0,5,2};
 
 det_mat *D = new det_mat;
 D->p=p;
 D->num=3;
 
 printf("\n\n determinan [ matris ] = %4lf \n" ,determinan(D));
 
 delete D;
 getch();
 }
 
 
 
 
 
 
 
- 
	
			
				
					یک شنبه 28 تیر 1388, 23:59 عصر
				
			
			
				
					#3
				
				
				
			
	 
		
			
			
				کاربر جدید
			
			
				  
 
					    
				 
 
			
				
				
				
					نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی
				
					
						
							برنامه دترمینان ماتریس به روش بازگشتی
 
 
 #include<stdio.h>
 #include<CONIO.H>
 #include<MATH.H>
 typedef struct
 {
 double *p;
 int num;
 }det_mat;
 /////////////////////////////////////////////////////////
 det_mat *AllocateMat(int i)
 {
 det_mat *X;
 X=new det_mat;
 X->p=new  double [i];
 return X;
 }
 
 void FreeMat(det_mat *X)
 {
 delete X->p;
 delete X;
 }
 
 det_mat *DeleteColRow(det_mat *M ,int i)
 {
 det_mat *X=AllocateMat((M->num-1)*(M->num-1));
 
 int tt=0,a,b=0;
 
 // !!!!!!!!!!!!!!!! M->p+=M->num;
 for(a=0;a<M->num*(M->num-1);a++)
 {
 tt++;
 if (tt!=i)
 {
 X->p[b] = M->p[a+M->num];
 b++;
 }
 if (tt == M->num) tt=0;
 }
 X->num=M->num-1;
 return(X);
 }
 //////////////////////////////////////////////////////////
 double determinan(det_mat *f)
 {
 double s=0;
 if (f->num==1) return(*(f->p));
 else
 
 for (int i=1; i<=f->num;i++)
 {
 det_mat *deli=DeleteColRow(f,i);
 double d = determinan(deli);
 FreeMat(deli);
 s += pow(-1,i+1) * f->p[i-1] * d;
 }
 
 return s;
 }
 
 //////////////////////////////////////////////////////////
 void main(void)
 {
 double p[16]={2,1,4
 ,5,1,2
 ,0,5,2};
 
 det_mat *D = new det_mat;
 D->p=p;
 D->num=3;
 
 printf("\n\n determinan [ matris ] = %4lf \n" ,determinan(D));
 
 delete D;
 getch();
 }
 
 
 
 
 
 
 
- 
	
			
				
					دوشنبه 29 تیر 1388, 00:02 صبح
				
			
			
				
					#4
				
				
				
			
	 
		
			
			
				کاربر جدید
			
			
				  
 
					    
				 
 
			
				
				
				
					نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی
				
					
						
							چند قطعه کد و برنامه دیگر برای محاسبه دترمینان ماتریس براتون میذارم.امیدوارم که به دردتون بخوره.
 سید جعفر فخرطه
 
 
 
 
 
 
 
- 
	
			
				
					دوشنبه 29 تیر 1388, 00:04 صبح
				
			
			
				
					#5
				
				
				
			
	 
		
			
			
				کاربر جدید
			
			
				  
 
					    
				 
 
			
				
				
				
					نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی
				
					
						
							محاسبه دترمینان ماتریس با اشاره گر n*n
 
 
 #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, %dSad ", 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;
 }
 
 
 
 
 
 
 
- 
	
			
				
					دوشنبه 29 تیر 1388, 00:05 صبح
				
			
			
				
					#6
				
				
				
			
	 
		
			
			
				کاربر جدید
			
			
				  
 
					    
				 
 
			
				
				
				
					نقل قول: برنامه محاسبه دترمینان ماتریس m*n به روش بازگشتی
				
					
						
							محاسبه دترمینان ماتریس
 
 
 #include<conio.h>
 #include<stdio.h>
 #include<math.h>
 int main()
 {
 clrscr();
 int i,j,k=1,n,p;
 float m[50][50],a[50][50],b[50][50],h,det=1;
 printf("enter row and column of matrix:");
 scanf("%d%d",&n,&p);
 if(p!=n)
 printf("this matrix havenot the determinan!");
 else
 {
 printf("enter element of matrix:\n");
 for(i=1;i<=n;++i)
 {
 printf("\n");
 for(j=1;j<=n;++j)
 {
 printf("a[%d,%d]=",i,j);
 scanf("%f",&a[i][j]);
 b[i][j]=a[i][j];
 if(i==n &&j==n)
 printf("\a\a");
 }
 }
 i=1;
 /*while(i<=n)
 {
 if(a[i][1]==0)
 ++i;
 else
 break;
 }
 if(i-1==n)
 {
 printf("determinan of matrix(%d*%d)=%d\n",n,n,0);
 printf("matrix(%d*%d) is:",n,n);
 for(i=1;i<=n;++i)
 {
 printf("\n");
 for(j=1;j<=n;++j)
 printf("%4.2f ",b[i][j]);
 }
 getch();
 return 0;
 } */
 while(k<=n-1)
 {
 for(i=k+1;i<=n;++i)
 {
 if(abs(a[k][k])<abs(a[i][k]))
 {
 for(j=1;j<=n;++j)
 {
 h=a[k][j];
 a[k][j]=a[i][j];
 a[i][j]=h;
 }
 det=-1*det;
 break;
 }
 }
 for(i=k+1;i<=n;++i)
 {
 if(a[k][k]!=0)
 m[i][k]=(float)(a[i][k]/a[k][k]);
 for(j=1;j<=n;++j)
 a[i][j]=a[i][j]-m[i][k]*a[k][j];
 }
 ++k;
 }
 for(i=1;i<=n;++i)
 det=det*a[i][i];
 printf("determinan of matrix (%d*%d)=%4.2f\n",n,n,det);
 printf("matrix(%d*%d) is:",n,n);
 for(i=1;i<=n;++i)
 {
 printf("\n");
 for(j=1;j<=n;++j)
 printf("%4.2f ",b[i][j]);
 }
 }
 getch();
 }
 
 
 
 
 
 
 
 
	
	
	
	
	
	
	
	
	
	
	
	
		
		
			
				 قوانین ایجاد تاپیک در تالار
				قوانین ایجاد تاپیک در تالار
			
			
				
	
		- شما نمی توانید تاپیک جدید ایجاد کنید
- شما نمی توانید به تاپیک ها پاسخ دهید
- شما نمی توانید ضمیمه ارسال کنید
- شما نمی توانید پاسخ هایتان را ویرایش کنید
-  
قوانین سایت