Ir ao conteúdo
  • Cadastre-se
Cristiano Nogueira

Multiplicação entre matrizes

Recommended Posts

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");
    }
} 
 

 

Editado por DiF
Melhorar o título e por o código como botão CODE <>

Compartilhar este post


Link para o post
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.

Editado por Mauro Britivaldo
Correção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×