lunes, 10 de noviembre de 2014

Calcula multiplicación de dos matrices en C/C++ (Arrays)

El siguiente programa calcula el producto de dos matrices (arrays bidimensionales), también conocido como producto matricial, en lenguaje de programación C. El programa comprueba que las matrices tienen las dimensiones adecuadas para llevar a cabo el producto de ambas dos. Como programa relacionado coloco el cálculo de la suma de dos matrices:
http://cypascal.blogspot.com.es/2012/07/suma-de-matrices-en-c-arrays.html

Este programa es útil para ver como funcionan los arrays en C.

Aquí les dejo el código del programa multiplicador de matrices:


#include <stdio.h>

int const Tam=101;

void PideDatos(int Dim[][3], float Mat1[][Tam], float Mat2[][Tam]);
void EscribeDatos(int Dim[][3], float Mat[][Tam], int au);
void Mult(int Dim[][3], float Mat1[][Tam], float Mat2[][Tam], float Mat3[][Tam]);


int main(void)
{
 int C, Dimension[4][3];
 float Matriz1[Tam][Tam], Matriz2[Tam][Tam], Matriz3[Tam][Tam];
 PideDatos(Dimension,Matriz1,Matriz2);
 printf("\nCalcula MULTIPLICACION: \n\n");
 EscribeDatos(Dimension,Matriz1,1);
 EscribeDatos(Dimension,Matriz2,2);
 Mult(Dimension,Matriz1,Matriz2,Matriz3);
 printf("\n\n\nLa matriz resultante es: \n");
 EscribeDatos(Dimension,Matriz3,3);
 scanf("%d");
 return(0);
}


void PideDatos(int Dim[][3], float Mat1[][Tam], float Mat2[][Tam])
{
 int A,B,i;
 printf("\n\n ||CALCULA EL PRODUCTO DE MATRICES M1*M2||");

 //Matriz 1
 printf("\n\n\n Introduce el numero de filas de la matriz 1:");
 scanf("%d", &Dim[1][1]);
 printf("\n\n\n Introduce el numero de columnas de la matriz 1:");
 scanf("%d", &Dim[1][2]);
 printf("\n\n INTRODUCIR CADA COMPONENTE DE LA MATRIZ 1:");
 for(A=1;A<= Dim[1][1];A++) for(B=1;B<= Dim[1][2];B++){
printf("\n Termino M1(%d,%d):",A,B); scanf("%f",&Mat1[A][B]);}

 //Matriz 2
 printf("\n\n\n Introduce el numero de filas de la matriz 2:");
 scanf("%d", &Dim[2][1]);
 printf("\n\n\n Introduce el numero de columnas de la matriz 2:");
 scanf("%d", &Dim[2][2]);
 printf("\n\n INTRODUCIR CADA COMPONENTE DE LA MATRIZ 2:");
 for(A=1;A<= Dim[2][1];A++) for(B=1;B<=Dim[2][2];B++){
printf("\n Termino M2(%d,%d):",A,B); scanf("%f",&Mat2[A][B]);}
}



void EscribeDatos(int Dim[][3], float Mat[][Tam], int aux)
{
 int A,B;
 if (aux == 1)
printf("\n\n M1: \n");
 else if (aux == 2)
printf("\n\n M2: \n");
 else
printf("\n\n Resultado: \n");

 for(A=1;A<=Dim[aux][1];A++){
 for(B=1;B<=(Dim[aux][2]);B++)
printf("%7.2f",Mat[A][B]);
 printf("\n");
 }
}

void Mult(int Dim[][3], float Mat1[][Tam], float Mat2[][Tam], float Mat3[][Tam])
{
int A, B, aux;
if (Dim[1][2]==Dim[2][1])
{
Dim[3][1] = Dim[1][1];
Dim[3][2] = Dim[2][2];
for (A = 1; A<= Dim[1][1]; A++){
for (B = 1; B<= Dim[2][2]; B++){
Mat3[A][B] = 0;
for (aux = 1; aux <= Dim[1][2]; aux++)
Mat3[A][B] = Mat3[A][B] + Mat1[A][aux]*Mat2[aux][B];
}
}
}
else
printf("\n\n Las matrices no se puden muiltiplicar \n");

}


Salu10, espero que les sea útil.

5 comentarios:

  1. Buenas tardes,
    Gracias por compartir, creo que tienes un pequeño error en el código, en la función PideDatos tu pones la variable Dim y dices que la segunda dimensión del arreglo es de 3, pero del main tu le mandas un arreglo donde la segunda dimensión es de 2, esto dará un error de compilación, o por lo menos en g++ te dará un error de compilación.

    ResponderEliminar
    Respuestas
    1. Buenos días, lo primero de todo, bienvenido al Blog. o tengo más que darte la razón, al inicializar la variable "Dimensión" dentro del main, sería adecuado poner:
      int Dimension[4][3];
      De modo, que concuerde con los tamaños establecidos dentro de las funciones. Corrijo los errores y edito.
      Muchas gracias por la observación Jesús.

      Eliminar
    2. Decir además, que si se utilizan matrices del tamaño [4][3], es para poder trabajar con los indices [3][2], ya que en C está el indice [0][0] en arrays multidimensionales, haciendo más cómoda la escritura del código.

      Eliminar
  2. Steel bracelet with iron cross necklace - TITanium
    TITanium Cross Necklace titanium sheet - Steel bracelet. Includes titanium teeth dog one hypoallergenic titanium earrings sterling cross-necked cross necklace. Made black titanium ring in titanium strength TITanium gold.

    ResponderEliminar