Dadas duas matrizes do tipo float A (
linhas,
colunas) e
(
linhas,
colunas), escrever um programa para calcular o produto de A por
.
Passo 1
O enunciado pede um programa que receba duas matrizes de ponto flutuante A de dimensão m×n e B de dimensão n×p e calcule seu produto A·B, resultando em uma matriz C de dimensão m×p. O conteúdo envolvido é multiplicação de matrizes e vamos precisar da definição de cada elemento da matriz produto.
Passo 2
A teoria diz que o elemento da linha i e coluna j da matriz C, que chamamos de c_{ij}, é dado por:
Ou seja, para cada par (i,j) de índices, somamos o produto dos elementos da linha i de A pelos elementos da coluna j de B.
Passo 3
Para implementar isso em código, precisamos de estruturas de dados que guardem as matrizes A, B e C. Em C, podemos usar arrays bidimensionais de float: A[m][n], B[n][p] e C[m][p]. Além disso, precisamos ler as dimensões m, n e p e os valores de A e B da entrada.
Passo 4
O algoritmo usa três loops aninhados:
- O primeiro loop percorre i de 0 a m−1 (linhas de A)
- O segundo percorre j de 0 a p−1 (colunas de B)
- Dentro, inicializamos C[i][j] = 0.0 e usamos um terceiro loop k de 0 a n−1 para acumular C[i][j] += A[i][k] * B[k][j]
Isso implementa exatamente a soma definida na fórmula.
Passo 5
Por fim, montamos o programa em C que:
- Lê m, n e p
- Lê os elementos de A e B
- Executa os três loops para preencher C
- Imprime a matriz C resultante
Resposta
#include <stdio.h>
int main() {
int m, n, p;
// Leitura das dimensões
scanf("%d %d %d", &m, &n, &p);
int m, n, p;
// Leitura das dimensões
scanf("%d %d %d", &m, &n, &p);
// Declaração das matrizes usando arrays de tamanho variável (C99)
float A[m][n];
float B[n][p];
float C[m][p];
// Leitura da matriz A
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%f", &A[i][j]);
}
}
// Leitura da matriz B
for (int i = 0; i < n; i++) {
for (int j = 0; j < p; j++) {
scanf("%f", &B[i][j]);
}
}
// Cálculo do produto C = A * B
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
C[i][j] = 0.0f;
for (int k = 0; k < n; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
// Impressão da matriz C
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
printf("%.2f ", C[i][j]);
}
printf("\n");
}
return 0;
}