Ir ao conteúdo
  • Cadastre-se

Multiplicação entre matrizes


Posts recomendados

ola pessoal, estou tentando fazer um programa que recebe duas matrizes e realiza sua multiplicação, porém para alguns teste aparece aquele erro chato do Windows "O programa tal.exe parou de funcionar, procurando solução e blá blá blá".

 

o programa pede de início as linhas e as colunas da matriz a e matriz b e depois faz a leitura de cada matriz, em seguida faz a multiplicação. um dos testes é esse e o programa é:

 

2 (linha matriz a)

2 (coluna matriz a)

2(linha matriz B)

1(coluna matriz )

valor da matriz a

1 2

3 1 

valor da matriz b

1

 

programa:

#include<stdio.h>
#include<stdlib.h>
void imprimir_matriz(int** m, int l, int c)
{
   int i, j;
   for (i=0; i<l; i++)
   {
      for (j=0; j<c; j++)
      {
      printf("%d\t", m[j]);
      }
      printf("\n");
   }
}
void main()
{
    int ia,ja,ib,jb,ic,jc,d,i,j,k,x;
    int **a,**b,**ab;
    scanf("%d",&ia);
    scanf("%d",&ja);
    scanf("%d",&ib);
    scanf("%d",&jb);
    if(ja!=ib)
    {
       d=1;
    }
    else
    {
       d=0;
    }
    if(d==0)
    {
        ic=ia;
        jc=jb;
        printf("%d %d\n",ic,jc);
        a =(int**) malloc(ia* sizeof(int*));
        for(i=0;i<ja;i++)
        {
            a = (int*) calloc(ja,sizeof(int));
        }
        b = (int**) malloc(ib* sizeof(int*));
        for(i=0;i<jb;i++)
        {
            b = (int*) calloc(jb,sizeof(int));
        }
        ab = (int**) malloc(ic*sizeof(int*));
        for(i=0;i<jc;i++)
        {
            ab = (int*) calloc(jc,sizeof(int));
        }
        //prencher matriz//
        for(i=0;i<ia;i++)
        {
            for(j=0;j<ja;j++)
            {
                scanf("%d",&a[j]);
            }
        }
        for(i=0;i<ib;i++)
        {
            for(j=0;j<jb;j++)
            {
                scanf("%d",&b[j]);
            }
        }
        for(i=0;i<ic;i++)
        {
            for(j=0;j<jc;j++)
            {
                ab[j]=0;
            }
        }
        //multiplicar matriz//
        x=0;
        for(i=0;i<ia;i++)
        {
            for(j=0;j<jb;j++)
            {
                for(k=0;k<ib;k++)
                {
                    x=x+(a[k]*b[k][j]);
                }
                ab[j]=x;
                x=0;
            }
        }
        imprimir_matriz(ab,ic,jc);
    }
    else
    {
        printf("Operacao invalida!\n");
    }
} 
 

 

Link para o comentário
Compartilhar em outros sites

@Cristiano Nogueira Boa Noite,

      Não estou conseguindo ler o seu código, é importante saber o que ele faz, mas um  teste de 

mesa  com  estes  nomes  de  variáveis  que você colocou limitou  muito  o  entendimento,  ficou 

particular.  Dou-te   um   conselho,  você    refazer   o   código   sem   alocação  dinâmica  e sem

entrada  de  dados,  focando  apenas  na  tarefa  principal  que  é  a multiplicação das matrizes.

 

      Às vezes é melhor, resolver  o  problema  principal e depois criar uma função exclusiva para

o  código.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...