Escolar Documentos
Profissional Documentos
Cultura Documentos
matrizes
tpicos
declarao (alocao esttica)
operaes com matrizes
referncia
Captulo 8 da apostila
Captulo 6 do livro
float m[4][3];
6.0
j inicializando:
linha 4
float m[4][3] = {
{5.0, 10.0,
{2.0, 2.0,
{3.0, 4.0,
{5.0, 5.0,
};
5.0
9.0},
3.0},
5.0},
6.0}
m[3] [0]
linha 3
5.0
4.0
3.0
m[2] [0]
linha 2
coluna j
5.0
3.0
2.0
2.0
linha i
m[2][1]
5.0
10.0
9.0
2.0
2.0
3.0
3.0
4.0
5.0
5.0
5.0
6.0
m[1] [0]
linha 1
9.0
10.0
5.0
104
m[0][0]
3
5.0
10.0
9.0
2.0
2.0
3.0
3.0
4.0
5.0
5.0
5.0
6.0
4
ou
void imprime_matriz (int linhas, int cols, float mat[ ][3]);
exerccios
1.
EX. 01
2.
3.
exerccio
EX. 02
exerccio
EX. 02
exerccio
EX. 03
exerccio
EX. 03
10
exerccio
EX. 04
exerccio
EX. 04
12
exerccio
EX. 05
Escreva uma funo que multiplique uma matriz quadrada NxN por
um escalar. Considere que N foi definido da seguinte maneira:
#define N 4
void mat_mult_escalar (double orig[][N], double mult[][N], double valor)
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
13
exerccio
EX. 05
Escreva uma funo que multiplique uma matriz quadrada NxN por
um escalar. Considere que N foi definido da seguinte maneira:
#define N 4
void mat_mult_escalar (double orig[][N], double mult[][N], double valor)
{
int i, j;
for (i=0; i < N; i++) {
for (j=0; j < N; j++) {
mult[i][j] = valor * orig[i][j];
}
}
}
14
exerccio
EX. 06
Escreva uma funo que multiplique uma matriz NxN por um vetor
de tamanho N. Considere que N foi definido da seguinte maneira:
#define N 4
void mat_mult_vetor (double mat[][N], double orig[], double mult[])
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
15
exerccio
EX. 06
Escreva uma funo que multiplique uma matriz NxN por um vetor
de tamanho N. Considere que N foi definido da seguinte maneira:
#define N 4
void mat_mult_vetor (double mat[][N], double orig[], double mult[])
{
int i, j;
for (i=0; i < N; i++) {
mult[i] = 0.0;
for (j=0; j < N; j++) {
mult[i] = mult[i] + mat[i][j] * orig[j];
}
}
}
16
exerccio
EX. 07
exerccio
EX. 07
18
matrizes dinmicas
C s permite alocao dinmica de conjuntos unidimensionais
cria-se uma abstrao conceitual de matriz
19
int i;
float **mat; /* vetor de ponteiros */
/* aloca vetor de m ponteiros */
matriz */
< m; i++)
j < n; j++)
j * m + i ] = mat[ i * n + j ];
return trp;
}
21
22
/* preenche matriz */
for (i=0; i < m; i++)
for (j=0; j < n; j++)
trp[ j * m + i ] = mat[ i * n + j ];
/* preenche matriz */
for (i=0; i<m; i++)
for (j=0; j<n; j++)
trp[ j ] [ i ] = mat[ i ][ j ];
return trp;
return trp;
}
23
matrizes simtricas
s = 1 + 2 + 3 + ... + n =
4
n (n + 1)
2
24
matrizes simtricas
mat[i][j]
mat[2][1]
i = 2, j = 1
s = 1 + 2 + 3 + ... + n =
4
n (n + 1)
2
v[i*(i+1)/2+j]
v[4]
k = i*(i+1)/2 + j
k=4
25 25
matrizes simtricas
/* Soluo 1: matriz alocada como vetor simples
*/
float* cria (int n)
{
int s = n*(n+1)/2;
float* mat = (float*)
malloc(s*sizeof(float));
return mat;
}
dvidas?
Prof. Gustavo Moreira
gmoreira@inf.puc-rio.br
27