/* Este es un ejemplo muy elelemtal de programa C */ /* Hace lo mismo que ejemplo1, solo que utiliza */ /* punteros para recorrer las matrices */ #include /* Definimos un tipo: matriz cuadrada de 2x2 */ typedef int matriz2x2[2][2]; /* Declaramos las matrices a multiplicar */ matriz2x2 A ; matriz2x2 B ; /* Declaramos e inicializamos la matriz resultado */ matriz2x2 R = {0, 0, 0, 0}; /* Declaramos prototipos de funciones utilizadas en el programa */ void Entra_Mat2x2( matriz2x2 M ); void Mult_Mat2x2( matriz2x2 H, matriz2x2 F, matriz2x2 G); void Visu_Mat2x2( matriz2x2 M ); main() { /* Introducimos valores de las matrices a multiplicar */ Entra_Mat2x2( A ); Entra_Mat2x2( B ); /* Multiplicamos matrices */ Mult_Mat2x2( A, B, R ); /* Visualizamos matriz resultado */ Visu_Mat2x2( R ); } /* Funcion para entrar por teclado los valores de una matriz */ /* Cuadrada de dimension 2 */ void Entra_Mat2x2( matriz2x2 M ) { int i,j; int *p; /* Bucle de lectura de valores de la matriz */ p = &M[0][0]; for (i=0; i<2; i++) { printf("\n"); for(j=0; j<2; j++) { printf("(%d,%d) = ",i,j); scanf("%d",p); p++; } } printf("\n\n"); return; } /* Funcion que multiplica dos matrices cuadardas de dimension 2 */ /* A y B son las matrices a multiplicar */ /* En R se deposita el resultado */ void Mult_Mat2x2( matriz2x2 A, matriz2x2 B, matriz2x2 R ) { int i, j, q; int *p_A, *p_B, *p_R, *aux; p_R = (int *)R; /* Esto es un ejemplo de cast */ /* Bucles anidados que realizan el producto entre matrices */ for (i=0; i<2; i++) { p_A = (int *)A + i*2; /* Aritmetica de punteros!! */ for (j=0; j<2; j++) { aux = p_A; p_B = (int *)B + j; /* Aritmetica de punteros !! */ for (q=0; q<2; q++) { (*p_R) += (*aux) * (*p_B); aux++; p_B += 2; } p_R++; } } return; } /* Esta es una funcion que visualiza el contenido de una matriz */ /* Cuadrada de dimension 2 */ void Visu_Mat2x2( matriz2x2 M ) { int i,j; int *p; p = (int *)M; /* Bucle para visualizar los valores de la matriz */ for (i=0; i<2; i++) { printf("\n"); for (j=0; j<2; j++) printf("(%d,%d) = %d ",i,j,*p++); } printf("\n\n"); return; }