Hello,World!!
یک شنبه 02 آبان 1389, 19:50 عصر
سلام به همه دوستان
من یه برنامه واسه ضرب دو ماتریس نوشتم. به نظر درسته ولی اجرا نمی شه و segmentation fault می ده . ممنون می شم راهنمایی کنید
# include <stdio.h>
void mul ( int ** , int ** , int);
int main()
{
int ** mat1 ;//,mat2 ;
int ** mat2;
int n ,i ,j;
system ( "clear");
printf ( "please Enter the matrix size :\n note : matrix is n*n\n" );
scanf ( "%d" , &n );
mat1 = (int **) malloc (sizeof(int) * n);
for ( i = 0 ; i < n ;i++ )
mat1[i] = ( int * ) malloc ( sizeof (int) * n);
mat2 = (int **) malloc (sizeof(int) * n);
for ( i = 0 ; i < n ;i++ )
mat2[i] = ( int * ) malloc ( sizeof (int) * n);
printf( " Enter first matrix elemens:\n");
for ( i=0 ; i<n ; i++ )
for ( j = 0; j<n ;j++)
scanf ( "%d" , &mat1[i][j]);
printf( " Enter second matrix elemens:\n");
for ( i=0 ; i<n ; i++ )
for ( j = 0; j<n ;j++)
scanf ( "%d" , &mat2[i][j]);
mul ( mat1 , mat2 , n );
for ( i=0 ; i<n ; i++)
free ( mat1[i]);
free ( mat1 );
for ( i=0 ; i<n ; i++)
free ( mat2[i]);
free ( mat2);
return 0;
}
void mul ( int ** mat1 , int ** mat2 , int n ){
int i , j,k ;
int ** mat3;
mat3 = (int **) malloc ( sizeof ( int) * n );
for ( i = 0 ; i < n; i++ )
mat3[i] = ( int * ) malloc ( sizeof ( int ) * n) ;
for ( i = 0 ; i< n; i++ )
for ( j = 0 ; j < n ; j++ )
mat3 [i][j] = 0;
for ( k=0 ; k < n ; k++ )
mat3[i][j] = mat3[i][j] + mat1[i][k] * mat2[k][j];
printf ( "\n The multiply of matrixes is:\n");
for ( i = 0 ; i<n ; i++) {
for ( j=0 ; j<n ; j++)
printf ("%d ",mat3[i][j]);
printf( "\n");
}
for ( i=0 ; i<n ; i++)
free( mat3[i]);
free ( mat3);
}
من یه برنامه واسه ضرب دو ماتریس نوشتم. به نظر درسته ولی اجرا نمی شه و segmentation fault می ده . ممنون می شم راهنمایی کنید
# include <stdio.h>
void mul ( int ** , int ** , int);
int main()
{
int ** mat1 ;//,mat2 ;
int ** mat2;
int n ,i ,j;
system ( "clear");
printf ( "please Enter the matrix size :\n note : matrix is n*n\n" );
scanf ( "%d" , &n );
mat1 = (int **) malloc (sizeof(int) * n);
for ( i = 0 ; i < n ;i++ )
mat1[i] = ( int * ) malloc ( sizeof (int) * n);
mat2 = (int **) malloc (sizeof(int) * n);
for ( i = 0 ; i < n ;i++ )
mat2[i] = ( int * ) malloc ( sizeof (int) * n);
printf( " Enter first matrix elemens:\n");
for ( i=0 ; i<n ; i++ )
for ( j = 0; j<n ;j++)
scanf ( "%d" , &mat1[i][j]);
printf( " Enter second matrix elemens:\n");
for ( i=0 ; i<n ; i++ )
for ( j = 0; j<n ;j++)
scanf ( "%d" , &mat2[i][j]);
mul ( mat1 , mat2 , n );
for ( i=0 ; i<n ; i++)
free ( mat1[i]);
free ( mat1 );
for ( i=0 ; i<n ; i++)
free ( mat2[i]);
free ( mat2);
return 0;
}
void mul ( int ** mat1 , int ** mat2 , int n ){
int i , j,k ;
int ** mat3;
mat3 = (int **) malloc ( sizeof ( int) * n );
for ( i = 0 ; i < n; i++ )
mat3[i] = ( int * ) malloc ( sizeof ( int ) * n) ;
for ( i = 0 ; i< n; i++ )
for ( j = 0 ; j < n ; j++ )
mat3 [i][j] = 0;
for ( k=0 ; k < n ; k++ )
mat3[i][j] = mat3[i][j] + mat1[i][k] * mat2[k][j];
printf ( "\n The multiply of matrixes is:\n");
for ( i = 0 ; i<n ; i++) {
for ( j=0 ; j<n ; j++)
printf ("%d ",mat3[i][j]);
printf( "\n");
}
for ( i=0 ; i<n ; i++)
free( mat3[i]);
free ( mat3);
}