Introdução
Neste laboratório, vamos escrever um programa de multiplicação de matrizes em C. Aprenderemos como criar uma matriz, realizar operações de matrizes e discutir o algoritmo padrão para multiplicação de matrizes. Criaremos um programa em C para multiplicar duas matrizes e imprimir a matriz resultante.
Nota: Você precisa criar o arquivo
~/project/main.cpor conta própria para praticar a codificação e aprender como compilar e executá-lo usando o gcc.
cd ~/project
## create main.c
touch main.c
## compile main.c
gcc main.c -o main
## run main
./main
Criando matrizes
Primeiramente, vamos aprender como criar matrizes. Uma matriz é um array bidimensional. Aqui está um exemplo de como declarar e inicializar uma matriz 2x2 em C:
int matrix[2][2] = {{1, 2}, {3, 4}};
Podemos acessar elementos específicos da matriz usando dois índices, como no exemplo a seguir:
int element = matrix[1][0];
Multiplicação de matrizes por um valor escalar
A multiplicação de matrizes com um único valor é fácil e é feita da seguinte forma:
int arr[2][2], n;
//Enter scalar value
scanf("%d", &n);
//Input matrix elements
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++){
scanf("%d", &arr[i][j]);
}
}
// Multiply every element of the matrix with the scalar value
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++){
arr[i][j] = arr[i][j] * n;
}
}
// Print the updated matrix elements
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++){
printf("%d ", arr[i][j]);
}
printf("\n");
}
O programa multiplica cada elemento da matriz com o valor escalar inserido pelo usuário e, em seguida, imprime a matriz atualizada.
Multiplicação de matrizes com duas matrizes
Para multiplicar duas matrizes, é necessário seguir certas regras. Primeiro, o número de colunas da primeira matriz deve ser igual ao número de linhas da segunda matriz. Segundo, a matriz resultante terá o mesmo número de linhas que a primeira matriz e o mesmo número de colunas que a segunda matriz.
Suponha que temos duas matrizes:
A = {{1, 3, 5},
{4, 2, 6}};
B = {{7, 4},
{3, 1},
{6, 9}};
Para multiplicar essas duas matrizes, realizaremos um produto escalar (dot product) em suas linhas e colunas. Os elementos das matrizes são multiplicados usando a seguinte fórmula:
result[row][col] = matrix1[row][0] * matrix2[0][col]
+ matrix1[row][1] * matrix2[1][col]
+ matrix1[row][2] * matrix2[2][col]
+ ...;
Segue um programa em C sobre Multiplicação de Matrizes:
#include <stdio.h>
int main()
{
int m, n, p, q, c, d, k, sum = 0;
// define two matrices
int first[10][10], second[10][10], result[10][10];
// input the number of rows and columns of the first matrix
printf("Enter the number of rows and columns of the first matrix:\n");
scanf("%d %d", &m, &n);
// input the elements of the first matrix
printf("Enter the %d elements of the first matrix:\n", m * n);
for (c = 0; c < m; c++) {
for (d = 0; d < n; d++) {
scanf("%d", &first[c][d]);
}
}
// input the number of rows and columns of the second matrix
printf("Enter the number of rows and columns of the second matrix:\n");
scanf("%d %d", &p, &q);
// input the elements of the second matrix
printf("Enter the %d elements of the second matrix:\n", p * q);
for (c = 0; c < p; c++) {
for (d = 0; d < q; d++) {
scanf("%d", &second[c][d]);
}
}
// check if matrices can be multiplied
if (n != p) {
printf("Matrices cannot be multiplied with each other.\n");
} else {
// multiplying the matrices
for (c = 0; c < m; c++) {
for (d = 0; d < q; d++) {
for (k = 0; k < p; k++) {
sum = sum + first[c][k] * second[k][d];
}
result[c][d] = sum;
sum = 0;
}
}
// print the resulting matrix
printf("The resulting matrix is:\n");
for (c = 0; c < m; c++) {
for (d = 0; d < q; d++) {
printf("%d\t", result[c][d]);
}
printf("\n");
}
}
return 0;
}
O programa pedirá ao usuário para inserir os elementos de duas matrizes, verificará se elas podem ser multiplicadas, multiplicará-as, se possível, e imprimirá a matriz resultante.
Programa completo
Aqui está o programa completo combinando todas as etapas:
#include<stdio.h>
int main()
{
int n, m, c, d, p, q, k, first[10][10], second[10][10], pro[10][10], sum = 0;
printf("\nInsira o número de linhas e colunas da primeira matriz: \n\n");
scanf("%d%d", &m, &n);
printf("\nInsira os %d elementos da primeira matriz: \n\n", m*n);
for(c = 0; c < m; c++) {
for(d = 0; d < n; d++) {
scanf("%d", &first[c][d]);
}
}
printf("\nInsira o número de linhas e colunas da primeira matriz: \n\n");
scanf("%d%d", &p, &q);
if(n != p)
printf("Matrizes com a ordem fornecida não podem ser multiplicadas entre si.\n\n");
else {
printf("\nInsira os %d elementos da segunda matriz: \n\n",m*n);
for(c = 0; c < p; c++) {
for(d = 0; d < q; d++) {
scanf("%d", &second[c][d]);
}
}
printf("\n\nA primeira matriz é: \n\n");
for(c = 0; c < m; c++) {
for(d = 0; d < n; d++) {
printf("%d\t", first[c][d]);
}
printf("\n");
}
printf("\n\nA segunda matriz é: \n\n");
for(c = 0; c < p; c++) {
for(d = 0; d < q; d++){
printf("%d\t", second[c][d]);
}
printf("\n");
}
for(c = 0; c < m; c++) {
for(d = 0; d < q; d++) {
for(k = 0; k < p; k++) {
sum = sum + first[c][k] * second[k][d];
}
pro[c][d] = sum;
sum = 0;
}
}
printf("\n\nA multiplicação das duas matrizes inseridas é: \n\n");
for(c = 0; c < m; c++) {
for(d = 0; d < q; d++) {
printf("%d\t", pro[c][d]);
}
printf("\n");
}
}
printf("\n\n\t\t\tCoding is Fun !\n\n\n");
return 0;
}
Resumo
Neste laboratório, aprendemos como criar uma matriz em C e os diferentes tipos de operações de multiplicação de matrizes que podemos realizar. Criamos um programa para calcular a multiplicação de duas matrizes em C e discutimos o algoritmo padrão para a multiplicação de matrizes.



