27 de octubre de 2010

Multiplicacion de Matrices en C/C++

Para los que recien comienzan en este mundo de la programcion en C les dejo este codigo que multiplica dos matricez. Para los que necesiten el archivo cpp voy a subirlo a mi cuenta de 4share, para descargalo solo lo buscan el archivo en la parte inferior que dice "Archivos para descargar" 


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;
const int MaxF=10, MaxC=10;
void leerMatriz(int X[MaxF][MaxC],int *dimF,int *dimC);
void mostrarMatriz(int X[MaxF][MaxC],int dimF,int dimC);
void multiplicarMatriz(int X[MaxF][MaxC],int XdimF,int XdimC,int Y[MaxF][MaxC],int YdimF,int YdimC,int Z[MaxF][MaxC],int *ZdimF,int *ZdimC);
void formatofondo();
int main()
{
   formatofondo();
   int A[MaxF][MaxC],B[MaxF][MaxC],C[MaxF][MaxC],Anf,Anc,Bnf,Bnc,Cnf,Cnc;
   leerMatriz(A,&Anf,&Anc);
   mostrarMatriz(A,Anf,Anc);
   leerMatriz(B,&Bnf,&Bnc);
   mostrarMatriz(B,Bnf,Bnc);
   multiplicarMatriz(A,Anf,Anc,B,Bnf,Bnc,C,&Cnf,&Cnc);
   mostrarMatriz(C,Cnf,Cnc);
   system("pause");
   return 0;
}
void leerMatriz(int X[MaxF][MaxC],int *dimF,int *dimC)
{
   int i,j,M,N,Val;
   printf("\n\nDimension de la MATRIZ:\n\n");
   printf("Num filas--->");
   scanf("%d",&M);
   printf("Num Columnas ---->");
   scanf("%d",&N);
   printf("\n");
   if(M<MaxF && N<MaxC){
      for(i=0;i<M;i++){
         for(j=0;j<N;j++){
            printf("Matriz[%d][%d]=",i+1,j+1);
            scanf("%d",&Val);
            X[i][j]=Val;
         }
      }
      *dimF=M;
      *dimC=N;
   }
   else{
      printf("Dimension fuera de RANGO\n");
      system("pause");
      exit(1);
   }
}

void mostrarMatriz(int X[MaxF][MaxC],int dimF, int dimC)
{
   int i,j;
   printf("\nMatriz[%d][%d]:\n\n",dimF,dimC);
   for(i=0;i<dimF;i++){
      for(j=0;j<dimC;j++){
         printf("%4d", X[i][j]);
      }
      printf("\n");
   }
   printf("\n\n");
}
void multiplicarMatriz(int X[MaxF][MaxC],int XdimF,int XdimC,int Y[MaxF][MaxC],int YdimF,int YdimC,int Z[MaxF][MaxC],int *ZdimF,int *ZdimC)
{
   int i,j,k;
   if(XdimC==YdimF){
      printf("La multiplicacion es: ");
      for(i=0;i<XdimF;i++){
         for(j=0;j<YdimC;j++){
            Z[i][j]=0;
            for(k=0;k<YdimF;k++){
               Z[i][j]=Z[i][j]+X[i][k]*Y[k][j];
            }
         }
      }
      *ZdimF=XdimF;
      *ZdimC=YdimC;
   }
   else{
      printf("No es posible multiplicar.");
   }
}
void formatofondo()
{
   textbackground(WHITE);//color de resalte de las letras
   textcolor(BLACK);//color de letra
   clrscr();
}

No hay comentarios.:

Publicar un comentario