Matrices

Páginas: 6 (1400 palabras) Publicado: 20 de octubre de 2011
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
int max(int,int);int **multiplicamatriz(int **,int **,int); // Función recursiva que multiplica matrices
int **suma(int **,int **,int); // suma de matrices
int **resta(int **,int **,int);// Resta de matricesvoid libera(int **,int); // Libera memoria
 int main()
{
   int **mapa1,**mapa2,**sol;
   int f1,c1,f2,c2,a,b,m,m1;
    freopen("in.in","r",stdin);
 
   scanf(" %d %d",&f1,&c1); // Tamaño de la primera matriz
   scanf(" %d%d",&f2,&c2); // Tamaño de la segunda matriz
   m1=max(f1,max(c1,max(f2,c2))); 
   for(m=1;m<m1;m*=2); // El tamaño de las matrices cuadradas a multiplicar
   //debe ser de la forma 2^k, si no se completan con ceros.
 
   mapa1=(int **)malloc(sizeof(int *)*m); // Se crea la primera matriz  for(a=0;a<m;a++)
   {
      mapa1[a]=(int *)malloc(sizeof(int)*m);
      memset(mapa1[a],0,sizeof(int)*m);
   }   for(a=0;a<f1;a++) // Se cogen los datos de la primera matriz.
      for(b=0;b<c1;b++)
         scanf(" %d",&mapa1[a][b]);
 
   mapa2=(int**)malloc(sizeof(int *)*m); // Se crea la sedunda matriz.   for(a=0;a<m;a++)
   {
      mapa2[a]=(int *)malloc(sizeof(int)*m);
      memset(mapa2[a],0,sizeof(int)*m);
   }   for(a=0;a<f2;a++) // Se cogen los datos de la segunda matriz.
      for(b=0;b<c2;b++)
         scanf(" %d",&mapa2[a][b]); 
   sol=multiplicamatriz(mapa1,mapa2,m); // Se multiplican. 
   for(a=0;a<f1;a++) // Se imprime el resultado.
   {
      for(b=0;b<c2;b++)
         printf("%d ",sol[a][b]);      printf("n");
   }
 
   return(0);
} int max(int a,int b)
{
   return((a>b)?a:b);

int **multiplicamatriz(int **mapa1,int **mapa2,int num)
{
   int **sol,**M[8],**f1,**f2,**aux,**aux2;
   int **A[2][2],**B[2][2],**C[2][2];   int a,q,w,r;
 
   sol=(int **)malloc(sizeof(int*)*num);
   for(a=0;a<num;a++)
      sol[a]=(int *)malloc(sizeof(int)*num); 
   if(num==1)
   {
      sol[0][0]=mapa1[0][0]*mapa2[0][0];
      return(sol);   }
// Crear las submatrices de A y B.
   for(q=0;q<2;q++)
   {
     for(w=0;w<2;w++)      {
         A[q][w]=(int **)malloc(sizeof(int *)*(num/2));
         for(a=0;a<num/2;a++)
         {
            A[q][w][a]=(int *)malloc(sizeof(int)*(num/2));            for(r=0;r<num/2;r++)
               A[q][w][a][r]=mapa1[a+(num/2)*q][r+(num/2)*w];
         } 
         B[q][w]=(int **)malloc(sizeof(int *)*(num/2));         for(a=0;a<num/2;a++)
         {
            B[q][w][a]=(int *)malloc(sizeof(int)*(num/2));
            for(r=0;r<num/2;r++)
               B[q][w][a][r]=mapa2[a+(num/2)*q][r+(num/2)*w];         }
      }...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Matrices
  • Matrices
  • matrices
  • MATRICES
  • Matrices
  • Matrices
  • Matrices
  • matrices

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS