/* PRODUCTO DE MATRICES CON MUCHAS FUNCIONES */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* PROTOTIPOS DE FUNCION O FIRMA DE FUNCION */
void Lee_Dimension( void );
int LeeValor( char *);
void Muestra(char *);
int Verifica_Dimension( void );
void PideDatos(char*);
void Multiplica( );
void Muestra_Matriz(char);
/* DECLARACION DE VARIABLES GLOBALES */
struct DIMENSION
{
int RENGLONES;
int COLUMNAS;
int DATO[100][100];
};
struct DIMENSION MAT_A;
struct DIMENSION MAT_B;
struct DIMENSION MAT_RESP;
/* INICIO DE LAS FUNCIONES ... */
/* ===========================*/
void PideDatos(char *MENSAJE)
{
int R, C;
char *CADENA = (char *)malloc(sizeof(char)*100);
Muestra(MENSAJE);
sprintf(CADENA, "MATRIZ A: [ %d x %d ]\n", MAT_A.RENGLONES, MAT_A.COLUMNAS);
Muestra(CADENA);
for ( R = 0; R < MAT_A.RENGLONES; R++ )
for ( C = 0; C < MAT_A.COLUMNAS; C++ )
{
sprintf(CADENA, "MAT_A[%d, %d]= ", R+1, C+1);
Muestra(CADENA);
scanf( "%d", &MAT_A.DATO[R][C] );
}
for ( R = 0; R < MAT_B.RENGLONES; R++ )
for ( C = 0; C < MAT_B.COLUMNAS; C++ )
{
sprintf(CADENA, "MAT_B[%d, %d]= ", R+1, C+1);
Muestra(CADENA);
scanf( "%d", &MAT_B.DATO[R][C] );
}
}
int Verifica_Dimension( void )
{
return MAT_A.COLUMNAS == MAT_B.RENGLONES;
}
void Muestra(char *MENSAJE)
{
printf("%s", MENSAJE);
}
int LeeValor( char *MENSAJE )
{
int Valor = 0;
Muestra(MENSAJE);
scanf("%d", &Valor);
return Valor;
}
void Lee_Dimension( void )
{
Muestra("Introduce la dimension de la matriz A ...\n\n");
MAT_A.RENGLONES = LeeValor("Renglones de la matriz A: ");
MAT_A.COLUMNAS = LeeValor("Columnas de la matriz A: ");
Muestra("Introduce la dimension de la matriz B ...\n\n");
MAT_B.RENGLONES = LeeValor("Renglones de la matriz B: ");
MAT_B.COLUMNAS = LeeValor("Columnas de la matriz B: ");
}
void Multiplica( )
{
int Rma, Rmb, Cma, Cmb;
for( Rma=0; Rma<MAT_A.RENGLONES; Rma++)
for( Cma=0; Cma<MAT_A.COLUMNAS; Cma++)
{
MAT_RESP.DATO[Rma][Cmb] = 0;
for(Rmb=0; Rmb<MAT_B.RENGLONES; Rmb++)
{
MAT_RESP.DATO[Rma][Cmb] += MAT_A.DATO[Rma][Cma] * MAT_B.DATO[Cma][Rmb];
}
}
}
void Muestra_Matriz( char MAT )
{
int R, C, i,j;
switch (MAT)
{
case 'A': R = MAT_A.RENGLONES; C = MAT_A.COLUMNAS;
for(i=0; i<R; i++) { for(j=0; j<C; j++) printf("%d ", MAT_A.DATO[i][j]); printf("\n"); } break;
case 'B': R = MAT_B.RENGLONES; C = MAT_B.COLUMNAS;
for(i=0; i<R; i++) { for(j=0; j<C; j++) printf("%d ", MAT_B.DATO[i][j]); printf("\n"); } break;
case 'R': R = MAT_RESP.RENGLONES; C = MAT_RESP.COLUMNAS;
for(i=0; i<R; i++) { for(j=0; j<C; j++) printf("%d ", MAT_RESP.DATO[i][j]); printf("\n"); } break;
}
}
int main (int NARGS, char **ARGS)
{
Lee_Dimension( );
if( Verifica_Dimension( ) )
{
Muestra("MATRICES CORRECTAS ...\n");
PideDatos("DATOS DE LA MATRIZ ... \n");
Muestra_Matriz( 'A' );
Muestra_Matriz( 'B' );
Multiplica( );
Muestra_Matriz( 'R' );
}
else Muestra("MATRICES NO CORRECTAS ... \n");
}