/* 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"); }