Construa um programa que entre com duas matrizes e com suas respectivas dimensões. Em seguida, verifique se é possível fazer a multiplicação entre as matrizes. Caso seja possível, calcule e exiba em tela o produto entre elas.

Passo 1

O programa deve ler duas matrizes A e B com suas dimensões, verificar se é possível multiplicá-las (número de colunas de A igual ao número de linhas de B) e, se sim, calcular e mostrar o produto C = A·B.
Declarar variáveis inteiras para as dimensões (m, n, p, q) e arrays bidimensionais para A, B e C. Utilizar tamanhos máximos ou alocação dinâmica conforme necessário.

Passo 2

Ler as dimensões de A (m, n) e de B (p, q) via teclado ou entrada padrão.

Passo 3

Verificar se n != p. Caso seja verdade, imprimir mensagem de erro “Multiplicação impossível” e encerrar o programa.
Se n == p, ler os elementos de A em dois loops aninhados de i=0 até m-1 e j=0 até n-1.

Passo 4

Ler os elementos de B em dois loops aninhados de i=0 até p-1 e j=0 até q-1.

Passo 5

Calcular cada elemento C[i][j] usando três loops: i de 0 a m-1, j de 0 a q-1, armazenando soma de A[i][k]·B[k][j] para k de 0 a n-1.

Passo 6

Exibir a matriz C resultante em formato matricial, iterando i de 0 a m-1 e j de 0 a q-1.

Resposta

#include <stdio.h>
#include <stdlib.h>
int main() {
int m, n, p, q;
printf(“Digite linhas e colunas de A: “);
scanf(”%d %d”, &m, &n);
printf(“Digite linhas e colunas de B: “);
scanf(”%d %d”, &p, &q);
if (n != p) {
    printf("Multiplicação impossível: colunas de A ≠ linhas de B\n");
    return 0;
}

int **A = malloc(m * sizeof(int*));
int **B = malloc(p * sizeof(int*));
int **C = malloc(m * sizeof(int*));
for (int i = 0; i < m; i++) A[i] = malloc(n * sizeof(int));
for (int i = 0; i < p; i++) B[i] = malloc(q * sizeof(int));
for (int i = 0; i < m; i++) C[i] = malloc(q * sizeof(int));

printf("Digite os elementos de A:\n");
for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++)
        scanf("%d", &A[i][j]);

printf("Digite os elementos de B:\n");
for (int i = 0; i < p; i++)
    for (int j = 0; j < q; j++)
        scanf("%d", &B[i][j]);

// Calcula C = A · B
for (int i = 0; i < m; i++) {
    for (int j = 0; j < q; j++) {
        C[i][j] = 0;
        for (int k = 0; k < n; k++) {
            C[i][j] += A[i][k] * B[k][j];
        }
    }
}

// Exibe resultado
printf("Matriz resultante C = A·B:\n");
for (int i = 0; i < m; i++) {
    for (int j = 0; j < q; j++) {
        printf("%d ", C[i][j]);
    }
    printf("\n");
}

// Libera memória
for (int i = 0; i < m; i++) free(A[i]);
for (int i = 0; i < p; i++) free(B[i]);
for (int i = 0; i < m; i++) free(C[i]);
free(A); free(B); free(C);

return 0;
}

Exercícios relacionados