Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

WagCez

[Resolvido] Multiplicação de Matrizes em C

Recommended Posts

Eu queria saber como faz multiplicação de uma matriz A10x4 e uma matriz B 4x3 que gerasse a matriz C=A*B

 

Eu até fiz e consegui

Está aqui

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int i, j, lA, cA, lB, cB, X;
printf("\n Informe a quantidade de linhas da matriz A : ");
scanf("%d",&lA);
printf("\n Informe a quantidade de colunas da matriz A : ");
scanf("%d",&cA);
printf("\n Informe a quantidade de linhas da matriz B : ");
scanf("%d",&lB);
printf("\n Informe a quantidade de colunas da matriz B : ");
scanf("%d",&cB);
float matrizA[lA][cA],matrizB[lB][cB],matrizC[lA][cB],Aux=0;
if(cA==lB)
{
for(i=0; i<lA; i++)
{
        for(j=0; j<cA; j++)
        {
        printf("\n\n Informe o valor da %d%c Linha e da %d%c Coluna da Matriz A: ", i+1, 167, j+1, 167);
        scanf("%f", &matrizA[i][j]);
        }
        printf("\n");
        }
for(i=0; i<lB; i++)
{        
        for(j=0; j<cB; j++)
        {
        printf("\n\n Informe o valor da %d%c Linha e da %d%c Coluna da 2%c Matriz B: ", i+1, 167, j+1, 167, 167);
        scanf("%f", &matrizB[i][j]);
        }
        printf("\n");
        }
printf("Matriz A \n\n");
for(i=0; i<lA; i++)
{        
        for(j=0; j<cA; j++)
        {
        printf("%6.f", matrizA[i][j]);
        }
        printf("\n\n");
        }
printf("Matriz B \n\n");
for(i=0; i<lB; i++)
{
        for(j=0; j<cB; j++)
        {
        printf("%6.f", matrizB[i][j]);
        }
        printf("\n\n");
        }
for(i=0; i<lA; i++)
{
        for(j=0; j<cB; j++)
        {
                 matrizC[i][j]=0;
                 for(X=0; X<lB; X++)
                 {
                 Aux += matrizA[i][X] * matrizB[X][j];
                 }
                 matrizC[i][j]=Aux;
                 Aux=0;
                 }
                 }
                 printf("\n\n");
printf("Matriz Gerada da Multiplicação: A*B \n\n");
for(i=0; i<lA; i++)
{
        for(j=0; j<cB; j++)
        {
        printf("%6.f", matrizC[i][j]);
        }
        printf("\n\n");
        }
        printf("\n\n");
        }
else
{
printf("\n\n Nao ha como multiplicar as matrizes dadas \n");
}
system("pause");
return 0;
}

 

 

 

Porém meu professor, que passou esse exercício, queria já as matrizes A e B com a quantidade de linhas e colunas e apenas colocar os componentes

Nesse algoritmo que fiz, ele pede a quantidade de linhas e coluna de cada matriz para depois calcular

Aliás tem como redúzi-la? E se possível alguem me ajude a colocá-la com as linhas e colunas já prontas

Compartilhar este post


Link para o post
Compartilhar em outros sites

/*24. Faça um algoritmo que dadas duas matrizes A(10x4) e B(4x3), calcule a
matriz C, onde C=A*B.*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
int i, j, lA, cA, lB, cB, x;
lA=10;
cA=4;
lB=4;
cB=3;
float matrizA[lA][cA],matrizB[lB][cB],matrizC[lA][cB],Aux=0;
     for(i=0; i<10; i++){
         for(j=0; j<4; j++){
             printf("Informe os Componentes da Matriz A(por linha): ");
             scanf("%f", &matrizA[i][j]);
         }
         printf("\n");
     }
     for(i=0; i<4; i++){   
         for(j=0; j<3; j++){
             printf("Informe os componentes da Matriz B(por linha): ");
             scanf("%f", &matrizB[i][j]);
         }
         printf("\n");
     }
printf("Matriz A \n\n");
     for(i=0; i<10; i++){        
         for(j=0; j<4; j++){
             printf("%6.f", matrizA[i][j]);
/* "%6.f" significa para eliminar 6 casas decimais dos componentes dados */
         }
         printf("\n\n");
     }
printf("Matriz B \n\n");
     for(i=0; i<4; i++){
         for(j=0; j<3; j++){
             printf("%6.f", matrizB[i][j]);
         }
         printf("\n\n");
     }
     for(i=0; i<10; i++){
         for(j=0; j<3; j++){
             matrizC[i][j]=0;
                 for(x=0; x<4; x++){
                     Aux+= matrizA[i][x] * matrizB[x][j];
/* x significa que a quantidade de colunas da Matriz A é mesma  que as linhas 
da Matriz B */
                 }
                 matrizC[i][j]=Aux;
                 Aux=0;
/* Aux significa guardar valor para não ser perdido durante o algoritmo
- Pág 40-41 */
         }
     }
printf("\n\n");
printf("Matriz Gerada da Multiplicacao A*B \n\n");
     for(i=0; i<10; i++){
         for(j=0; j<3; j++){
             printf("%6.f", matrizC[i][j]);
         }
         printf("\n\n");
     }
printf("\n\n");
system("PAUSE");
return 0;
}

 

 

lembrando que as matrizes já possuem um número fixo de linhas e colunas (A(10x4) e B(4x3))

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução que você quer é mais simples que a que você já tem. Ao invés de operar sobre dados determinados em tempo de execução, defina constantes que representem as quantidades de linhas e colunas:

 

#define LINHAS_A       10
#define COLUNAS_B      20
#define DIMENSAO_COMUM 15

int main(void)
{
   int A[ LINHAS_A ][ DIMENSAO_COMUM ],
       B[ DIMENSAO_COMUM ][ COLUNAS_B ],
       C[ LINHAS_A ][ COLUNAS_B ];

   // ...
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.