Es más fácil que lo veas a explicarlo.
El código es totalmente modular: se introducen las dimensiones, se asigna memoria dinámicamente , se rellenan, se multiplican y por último se libera la memoria:
Código C++:
Ver original#include <stdio.h>
void leer_dimen_coeficientes( const char* msg, int* pnum );
int** asig_memoria( int fil, int col );
void ver_matriz( int **mat, int fil, int col );
void introducir_matriz( const char* msg, const char* nombre, int** mat, int fil, int col );
void crear_matriz_producto( int **c,int **a,int **b,int fil, int col,int co1);
void liberar_mem_vector( int** mat, int fil );
int main( void )
{
int **A;
int fil_1, col_1;
int **B;
int fil_2, col_2;
int **C;
leer_dimen_coeficientes( "Introduce el numero de filas de A: ", &fil_1 );
leer_dimen_coeficientes( "Introduce el numero de columnas de A: ", &col_1 );
A = asig_memoria( fil_1, col_1 );
introducir_matriz( "Introduce los valores de los elementos de A:\n","A", A, fil_1, col_1 );
ver_matriz( A, fil_1, col_1 );
/*leer_dimen_coeficientes( "Introduce el numero de filas de B = columnas de A: ", &fil_2 );*/
fil_2 = col_1; /** <== condicion para que se puedan multiplicar **/
leer_dimen_coeficientes( "Introduce el numero de columnas de B : ", &col_2 );
B = asig_memoria( fil_2, col_2 );
introducir_matriz( "Introduce los valores de los elementos de B:\n","B", B, fil_2, col_2 );
ver_matriz( B, fil_2, col_2 );
C= asig_memoria( fil_1, col_2 );
crear_matriz_producto( C,A,B, fil_1,col_2, col_1 );
ver_matriz( C, fil_1, col_2 );
liberar_mem_vector( A, fil_1 );
liberar_mem_vector( B, fil_2 );
liberar_mem_vector( C, fil_1 );
return 0;
}
void leer_dimen_coeficientes( const char* msg, int* pnum )
{
int c;
while( (c
= getchar()) != '\n' && c
!= EOF
); }
int** asig_memoria( int fil, int col )
{
int i;
int** mat;
mat
= malloc( fil
* sizeof *mat
); for( i = 0; i < fil; ++i )
mat
[i
] = malloc( col
* sizeof **mat
); return mat;
}
void introducir_matriz( const char* msg, const char* nombre, int** mat, int fil, int col )
{
int c, i, j;
for( i = 0; i < fil; ++i )
for( j = 0; j < col; ++j )
{
printf( "%s[%d][%d] = ", nombre
, i
, j
); scanf( "%d", &mat
[i
][j
] ); }
while( (c
= getchar()) != '\n' && c
!= EOF
); }
void ver_matriz( int **mat, int fil, int col )
{
int i,j;
for( i = 0; i < fil; ++i )
{
for( j = 0; j < col; ++j )
}
}
void crear_matriz_producto( int **c,int **a,int **b,int fil1, int col2 ,int co1)
{
int i,j,k;
for( i = 0; i < fil1; ++i )
for( j = 0; j < col2; ++j )
{
c[i][j] = 0;
for ( k = 0; k <co1; k++)
c[i][j] += a[i][k]*b[k][j];
}
}
void liberar_mem_vector( int** mat, int fil )
{
int i;
for( i = 0; i < fil; ++i )
}
¡¡¡Saluditos!!!