/* Este programa lee dos matrices y, si es que las dimensiones de ambas lo permite, las multiplica e imprime el resultado. El programa también calcula, si las condiciones lo permiten, el determinante de la primera matriz */ #include const int DIMMAX=5; // Máximo número de filas y columnas de una matriz // Prototipos de funciones: void leeMat (float [][DIMMAX], int &, int &); void multMat (float [][DIMMAX], int, int, float [][DIMMAX], int, int, float [][DIMMAX], int &, int &); void imprimeMat (float [][DIMMAX], int, int); float determinante (float [][DIMMAX], int); void reduceMat (float [][DIMMAX], int, int, float [][DIMMAX]); void main (void) { float a[DIMMAX][DIMMAX], b[DIMMAX][DIMMAX], c[DIMMAX][DIMMAX]; int nFilA, nColA, nFilB, nColB, nFilC, nColC; float determ; // Lectura de las matrices y sus dimensiones printf("Matriz A:\n"); leeMat (a, nFilA, nColA); printf("Matriz B:\n"); leeMat (b, nFilB, nColB); // Verifica si se pueden multiplicar if (nColA != nFilB) { printf("Las dimensiones de las matrices no son correctas\n"); return; } // Calcula lal multiplicación de ambas matrices multMat (a, nFilA, nColA, b, nFilB, nColB, c, nFilC, nColC); printf("El producto de A y B =\n"); imprimeMat (c, nFilC, nColC); // Calcula el determinanate de la primera matriz if (nFilA != nColA) { printf("Las dimensiones de esta matriz no permiten\ncalcular el determinante\n"); return; } determ = determinante (a,nFilA); printf("El determinante de esta matriz es: %f\n", determ); } void leeMat (float x[][DIMMAX], int &nFil, int &nCol) { printf("Ingrese el n£mero de filas y columnas de la matriz: "); scanf("%d %d", &nFil, &nCol); for (int fil = 0; fil < nFil; fil++) for (int col = 0; col < nCol; col++) scanf("%f", &x [fil][col]); } void multMat (float a [][DIMMAX], int nFilA, int nColA, float b [][DIMMAX], int nFilB, int nColB, float c[][DIMMAX], int &nFilC, int &nColC) { nFilC = nFilA; nColC = nColB; for (int fil = 0; fil < nFilC; fil++) for (int col = 0; col < nColC; col++) { c[fil][col] = 0; for (int k = 0; k < nColA; k++) c[fil][col] += a[fil][k] * b[k][col]; } } void imprimeMat (float x[][DIMMAX], int nFil, int nCol) { for (int fil = 0; fil < nFil; fil++) { for (int col = 0; col < nCol; col++) printf("%7.2f", x[fil][col]); putchar('\n'); } } float determinante (float x[][DIMMAX], int dim) { float det=0.0, aux[DIMMAX][DIMMAX]; if (dim==1) return x[0][0]; for (int col=0; col