A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Aula 11 Matrizes Prof. Filipe Mutz. Matrizes São estruturas de dados usadas para armazenar informações multidimensionais (que possuem mais de uma dimensão).

Apresentações semelhantes


Apresentação em tema: "1 Aula 11 Matrizes Prof. Filipe Mutz. Matrizes São estruturas de dados usadas para armazenar informações multidimensionais (que possuem mais de uma dimensão)."— Transcrição da apresentação:

1 1 Aula 11 Matrizes Prof. Filipe Mutz

2 Matrizes São estruturas de dados usadas para armazenar informações multidimensionais (que possuem mais de uma dimensão). 2 int v[3] 710271 int m[3][3] 710271 90451 8100 float t[3][4][2]

3 Exemplo: Notas dos Alunos por Disciplina 3 Cálculo 1PBC Intro. Eng.... Armando786 Bernardo465 Carlos579 Deise246 Euclides10 9...

4 Exemplo: Aluguel por Região 4 CasaApto. Sala Comercial Vitória300018002500 Cariacica150010001600 Viana150010001200 Vila Velha27001700 Serra260016002000

5 Exemplo: Evolução de Preços 5 Caderno Lápis Borracha Cariacica Vitória Vila Velha Viana Janeiro Fevereiro

6 Declaração e Acesso a Elementos de uma Matriz 6 0123 0786123 14652 25791 32460 410 998 5-798155 int m[6][4]; tipo nome [nlinhas][ncols];

7 Declaração e Acesso a Elementos de uma Matriz 7 0123 0786123 14652 25797 32470 410 998 5-798155 int m[6][4]; m[2][3] = 7;

8 Declaração e Acesso a Elementos de uma Matriz 8 0123 0786-79 14652 25791 32470 4 10998 5-798155 int m[6][4]; m[0][3] = -79;

9 Declaração e Acesso a Elementos de uma Matriz 9 0123 0786123 14652 25791 32470 4-7910998 5-798155 int m[6][4]; int *l = m[3];

10 Declaração e Acesso a Elementos de uma Matriz 10 0123 0786123 14652 25791 324800 4-7910998 5-798155 int m[6][4]; int *l = m[3]; l[2] = 80;

11 Declaração e Acesso a Elementos de uma Matriz 11 0123 0786123 14652 25791 324800 4-7910998 5-798155 int m[6][4]; int *l = m[3]; l[2] = 80; Em C não existe uma funcionalidade pré-definida para retornar uma coluna.

12 #include int main (void) { int m[2][2]; m[0][0] = 0; m[0][1] = 1; m[1][0] = 2; m[1][1] = 3; printf("%d %d\n", m[0][0], m[0][1]); printf("%d %d\n", m[1][0], m[1][1]); return 0; } 0 1 23 Pressione qualquer tecla...

13 Lendo e Escrevendo Elementos de uma Matriz 13 #include int main (void) { int m[2][2]; scanf("%d", &m[0][0]); scanf("%d", &m[0][1]); scanf("%d", &m[1][0]); scanf("%d", &m[1][1]); printf("m[0][0]: %d\n", m[0][0]); printf("m[0][1]: %d\n", m[0][1]); printf("m[1][0]: %d\n", m[1][0]); printf("m[1][1]: %d\n", m[1][1]); return 0; }

14 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes

15 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 O =

16 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 O =

17 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 O =

18 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 5 O =

19 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 5 O =

20 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57 O =

21 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57 O =

22 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57 O =

23 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 579 O =

24 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 579 O =

25 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57911 O =

26 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8;... return 0; } Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57911 O =

27 Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57911 O = A operação de soma foi repetida para todos os elementos da matriz. Parece que estamos fazendo uma repetição, certo? Qual a diferença entre as repetições de vetores e matrizes?

28 Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57911 O = A operação de soma foi repetida para todos os elementos da matriz. Parece que estamos fazendo uma repetição, certo? Qual a diferença entre as repetições de vetores e matrizes? Estamos repetindo a soma para cada coluna!

29 Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57911 O =... int j; for (j = 0; j < 2; j++) o[0][j] = m[0][j] + n[0][j]; for (j = 0; j < 2; j++) o[1][j] = m[1][j] + n[1][j];....

30 Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57911 O =... int j; for (j = 0; j < 2; j++) o[0][j] = m[0][j] + n[0][j]; for (j = 0; j < 2; j++) o[1][j] = m[1][j] + n[1][j];.... Mas estamos realizando a mesma operação para todas as linhas!

31 Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57911 O =... int i, j; for (i = 0; i < 2; i++) // linha for (j = 0; j < 2; j++) // coluna o[i][j] = m[i][j] + n[i][j];....

32 Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57911 O =... int i, j; for (i = 0; i < 2; i++) // linha for (j = 0; j < 2; j++) // coluna o[i][j] = m[i][j] + n[i][j];.... Como mostrar os elementos da matriz resultado na tela?

33 Soma de Matrizes 01 0101 0123 M = 01 0101 5678 N = 01 0101 57911 O =... int i, j; for (i = 0; i < 2; i++) // linha for (j = 0; j < 2; j++) // coluna o[i][j] = m[i][j] + n[i][j]; for (i = 0; i < 2; i++) // linha { for (j = 0; j < 2; j++) // coluna printf(“%d ”, o[i][j]); printf(“\n”); }....

34 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 0 1

35 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 0 1

36 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 0 1 Linha 0 de M Coluna 0 de N O[0][0] = M[0][0] * N[0][0] +...

37 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 0 1 Linha 0 de M Coluna 0 de N O[0][0] = M[0][0] * N[0][0] + M[0][1] * N[1][0]

38 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 07 1 Linha 0 de M Coluna 0 de N O[0][0] = M[0][0] * N[0][0] + M[0][1] * N[1][0]

39 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 07 1 Linha 0 de M Coluna 0 de N O[0][0] = 0; O[0][0] += M[0][0] * N[0][0]; O[0][0] += M[0][1] * N[1][0];

40 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 07 1 Linha 0 de M Coluna 0 de N O[0][0] = 0; O[0][0] += M[0][0] * N[0][0]; O[0][0] += M[0][1] * N[1][0];

41 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 07 1 Linha 0 de M Coluna 1 de N O[0][1] =...

42 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 07 1 Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] +...

43 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 07 1 Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1]

44 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 078 1 Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1]

45 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 078 1 Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1] Já perceberam alguns padrões?

46 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 078 1 Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1]

47 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 078 1 Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1] Para cada par linha x coluna da matriz O, precisamos percorrer simultaneamente uma linha de M e uma coluna de N multiplicando seus elementos e acumulando a soma.

48 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 078 1 Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1] Pergunta de Ouro: Quantos loops são necessários?

49 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 0 1 1.Linhas de M

50 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 0 1 1.Linhas de M

51 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 0 1 1.Linhas de M 2.P/ cada linha de M, as colunas de N.

52 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 0 1 1.Linhas de M 2.P/ cada linha de M, as colunas de N.

53 Multiplicação de Matrizes M = N = O = 01 001 123 01 056 178 01 08 1 1.Linhas de M 2.P/ cada linha de M, as colunas de N. 3.P/ cada linha de M, e cada coluna de N, realizar a multiplicação ponto-a-ponto.

54 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8; … return 0; }

55 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8; … return 0; } int lM, cN, cM_lN; for (lM = 0; lM < 2; lM++) { }

56 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8; … return 0; } int lM, cN, cM_lN; for (lM = 0; lM < 2; lM++) { for (cN = 0; cN < 2; cN++) { }

57 #include int main (void) { int m[2][2]; int n[2][2]; int o[2][2]; m[0][0] = 0; n[0][0] = 5; m[0][1] = 1; n[0][1] = 6; m[1][0] = 2; n[1][0] = 7; m[1][1] = 3; n[1][1] = 8; … return 0; } int lM, cN, cM_lN; for (lM = 0; lM < 2; lM++) { for (cN = 0; cN < 2; cN++) { o[lM][cN] = 0; for (k = 0; k < 2; k++) o[lM][cN] += (m[lM][k] * n[k][cN]); }

58 int lM, cN, cM_lN; for (lM = 0; lM < 2; lM++) { for (cN = 0; cN < 2; cN++) { o[lM][cN] = 0; for (k = 0; k < 2; k++) o[lM][cN] += (m[lM][k] * n[k][cN]); } M = N = O = 01 001 123 01 056 178 01 0 1 O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1]

59 Matrizes na Memória PosiçãoNomeValor 100 104 108 112 116 120 124 128 132 136 int m[2][2];

60 Matrizes na Memória int m[2][2]; PosiçãoNomeValor 100 104 m[0] [0] 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136 Linha 0 Linha 1

61 Matrizes na Memória int m[2][2]; PosiçãoNomeValor 100 104 m[0] [0] 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136 Linha 0 Linha 1 Cada linha da matriz se comporta como um vetor!

62 Matrizes na Memória int m[2][2]; int *l = m[0]; PosiçãoNomeValor 100 104 m[0] [0] 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136 Qual será o valor de l ?

63 Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor 100 104 m[0] [0] 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136

64 Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor 100 104 m[0] [0] 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136

65 Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor 100 104 m[0] [0]5 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136

66 Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor 100 104 m[0] [0]5 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136l104

67 Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor 100 104 m[0] [0]5 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136l104

68 Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor 100 104 m[0] [0]3 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136l104

69 Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[1]; l[0] = 3; PosiçãoNomeValor 100 104 m[0] [0]3 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136l116

70 Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[1]; l[0] = 3; PosiçãoNomeValor 100 104 m[0] [0]3 108[1] 112 116 m[1] [0] 120[1] 124 128 m [0]104 132[1]116 136l116

71 Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[1]; l[0] = 3; PosiçãoNomeValor 100 104 m[0] [0]3 108[1] 112 116 m[1] [0]3 120[1] 124 128 m [0]104 132[1]116 136l116

72 Matrizes na Memória int m[3][3]; PosiçãoNomeValor 100 104 m[0] [0] 108[1] 112 116 m[1] [0] 120[1] 124 128 m[2] [0] 132[1] 136 140 m [0]104 144[1]116 148[2]128 152

73 Matrizes na Memória int m[3][3]; PosiçãoNomeValor 100 104 m[0] [0] 108[1] 112 116 m[1] [0] 120[1] 124 128 m[2] [0] 132[1] 136 140 m [0]104 144[1]116 148[2]128 152

74 Matrizes na Memória int m[2][2]; PosiçãoNomeValor 100 104m[0][0] 108m[0][1] 112 116m[1][0] 120m[1][1] 124 128m[0]104 132m[1]116 136 140m128 Assim como os vetores, a matriz também é um ponteiro, mas dessa vez para uma região de memória onde estão os outros ponteiros.

75 Matrizes na Memória int m[2][2]; PosiçãoNomeValor 100 104m[0][0] 108m[0][1] 112 116m[1][0] 120m[1][1] 124 128m[0]104 132m[1]116 136 140m128 Ao acessar um elemento na matriz estamos na verdade realizando dois movimentos na memória! m[0][1] = 7;

76 Matrizes na Memória int m[2][2]; PosiçãoNomeValor 100 104m[0][0] 108m[0][1] 112 116m[1][0] 120m[1][1] 124 128m[0]104 132m[1]116 136 140m128 Ao acessar um elemento na matriz estamos na verdade realizando dois movimentos na memória! m[0][1] = 7;

77 Matrizes na Memória int m[2][2]; PosiçãoNomeValor 100 104m[0][0] 108m[0][1]7 112 116m[1][0] 120m[1][1] 124 128m[0]104 132m[1]116 136 140m128 Ao acessar um elemento na matriz estamos na verdade realizando dois movimentos na memória! m[0][1] = 7;

78 Matrizes na Memória PosiçãoNomeValor 100 104m[0][0] 108m[0][1]7 112 116m[1][0] 120m[1][1] 124 128m[0]104 132m[1]116 136 140m128 Ao acessar um elemento na matriz estamos na verdade realizando dois movimentos na memória! Por essa razão também precisamos ter atenção ao usar matrizes como parâmetros de funções.


Carregar ppt "1 Aula 11 Matrizes Prof. Filipe Mutz. Matrizes São estruturas de dados usadas para armazenar informações multidimensionais (que possuem mais de uma dimensão)."

Apresentações semelhantes


Anúncios Google