Está en la página 1de 2

Programa que hace la multiplicacion AxB de dos matrices cuadradas A y B.

* Para conocer el algoritmo involucrado, estudie el diagrama que se adjunta. * El programa pide al usuario que ingrese la dimension de las matrices, es * decir, la longitud de los lados, asi como los valores para las entradas de * ambas matrices (A y B), calcula la multiplicacion empleando un ciclo for * con anidamiento de tres niveles, y finalmente despliega el resultado de * la multiplicacion A*B, el cual se almaceno en una tercera matriz: C. ********************************************************************** *****/ /* Definicion de la dimension maxima de las matrices. Se emplea en las definiciones */ #define MAX_N 10 main() { int N; el usuario */ int A[MAX_N][MAX_N]; int B[MAX_N][MAX_N]; int C[MAX_N][MAX_N]; guardara AxB */ int i, j, k; /* Dimension real de las matrices, dada por /* Matriz de enteros A, de tamano NxN */ /* Matriz de enteros B, de tamano NxN */ /* Matriz de enteros C, de tamano NxN y que /* Indices para los ciclos */

/* Solicita al usuario que ingrese la dimension real de las matrices (N) */ printf("\nMultiplicacion de A(NxN) X B(NxN)\n"); printf("Ingrese el valor de N (de 1 a 10): "); scanf("%d", &N); /* scanf requiere puntero: & */ /* Ciclos anidados que llevan a cabo la lectura de los valores en las matrices A y B */ /* Solicita al usuario los valores para la matriz A */ printf("\nValores para la matriz A:\n"); for (i=0; i<N; i++) { /* i varia de 0 a N-1 y representa la fila */ printf("\tFila %d:\t", i); for (j=0; j<N; j++) { /* j varia de 0 a N-1 y representa la columna */ /* Se hace la lectura de la entrada en fila i y columna j de la matriz A */ scanf("%d", &A[i][j]); /* scanf requiere puntero: & */ } } /* Solicita al usuario los valores para la matriz B */ printf("\nValores para la matriz B:\n"); for (i=0; i<N; i++) { /* i varia de 0 a N-1 y representa la fila */ printf("\tFila %d:\t", i); for (j=0; j<N; j++) { /* j varia de 0 a N-1 y representa la columna */ /* Se hace la lectura de la entrada en fila i y columna j de la matriz B */

scanf("%d", &B[i][j]); } }

/* scanf requiere puntero: & */

/* El siguiente ciclo con anidamiento de tercer nivel lleva a cabo la multiplicacion */ for (i=0; i<N; i++) { /* i varia de 0 a N-1 y representa la fila i-esima de la matriz C */ for (j=0; j<N; j++) { /* j varia de 0 a N-1 y representa la columna j-esima de la matriz C */ /* Se procede a calcular la entrada i,j de la matriz C, empleando un ciclo */ /* C[i][j] = A[i][1]*B[1][j] + A[i][2]*B[2][j] + ... + A[i][N-1]*B[N-1][j] */ C[i][j] = 0; /* Acumulador para la suma en cero */ for (k=0; k<N; k++) { /* k varia de 0 a N-1 y se emplea para moverse por columna de A y fila de B */ /* Se acumula el termino A[i][k] * B[k][j] en C[i][j] */ C[i][j] = C[i][j] + (A[i][k] * B[k][j]); } } } /* Mediante un ciclo se imprime el resultado de la multiplicacion */ printf("\nResultado AxB:"); for (i=0; i<N; i++) { printf("\n\t"); for (j=0; j<N; j++) { printf("%3d ", C[i][j]); } } printf("\n"); }

También podría gustarte