-
Notifications
You must be signed in to change notification settings - Fork 0
/
questao19.c
91 lines (75 loc) · 1.98 KB
/
questao19.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <stdio.h>
#include <stdlib.h>
void multiplyMatrix(int **A, int **B, int **C, int nRowsA, int nColsA, int nColsB)
{
int i = 0, j = 0, k = 0, sum = 0;
for (i = 0; i < nRowsA; i++)
{
for (j = 0; j < nColsB; j++)
{
for (k = 0; k < nColsA; k++)
{
sum = (A[i][k] * B[k][j]) + sum;
}
C[i][j] = sum;
sum = 0;
}
}
}
int main(void)
{
int **a, **b, **c;
int nRowsA = 3, nColsA = 3, nRowsB = nColsA, nColsB = 3; // números para exemplo e supondo que número de linhas de B = número de colunas de A
int i = 0, j = 0;
// alocação de memória de cada matriz (A, B, C) usando um ponteiro para pointeiro e uma única chamada de malloc para todas as linhas
a = (int **)malloc(nRowsA * sizeof(int *));
b = (int **)malloc(nRowsB * sizeof(int *));
c = (int **)malloc(nRowsA * sizeof(int *));
a[0] = (int *)malloc(nRowsA * nColsA * sizeof(int));
b[0] = (int *)malloc(nRowsB * nColsB * sizeof(int));
c[0] = (int *)malloc(nRowsA * nColsB * sizeof(int));
for (i = 0; i < nRowsA; i++)
{
a[i] = (*a + nColsA * i);
}
for (i = 0; i < nRowsA; i++)
{
b[i] = (*b + nColsA * i);
}
for (i = 0; i < nRowsA; i++)
{
c[i] = (*c + nColsA * i);
}
for (i = 0; i < nRowsA; i++)
{
for (j = 0; j < nColsA; j++)
{
a[i][j] = i * j; // para exemplo
}
}
for (i = 0; i < nRowsB; i++)
{
for (j = 0; j < nColsB; j++)
{
b[i][j] = i * j; // para exemplo
}
}
multiplyMatrix(a, b, c, nRowsA, nColsA, nColsB);
// imprime a matriz C
for (i = 0; i < nRowsA; i++)
{
for (j = 0; j < nColsB; j++)
{
printf(" %d ", c[i][j]);
}
printf("\n");
}
// libera a memória dos vetores usados
free(a[0]);
free(b[0]);
free(c[0]);
free(a);
free(b);
free(c);
return 0;
}