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).

Slides:



Advertisements
Apresentações semelhantes
Estruturas de Dados Homogêneas Multidimensionais – Matrizes
Advertisements

Matrizes e Funções - Continuação
PROGRAMAÇÃO I PONTEIROS.
Profa. Mercedes Gonzales Márquez
Fundamentos de Programação 1
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Aula 5 Bases Num é ricas Prof. Filipe Mutz.. Bases Numéricas São sistemas de organização de medidas em que unidades são organizadas em grupos com um tamanho.
Jean Carlo Mendes
1 Aula 07 Strings Prof. Filipe Mutz. 2 Em nossos programas ainda não vimos como armazenar palavras e textos, e eles são muito importantes! Exemplos: Programas.
Estruturas Homogêneas - Matrizes
1 Aula 08 Conteúdo de Suporte ao Trabalho 2 Prof. Filipe Mutz.
CLASSES EM JAVA Dilvan Moreira (baseado no livro Big Java)
1 Aula 06 – Funções Prof. Filipe Mutz Colocar mais exemplos de funções simples no começo.
Linguagem de Programação – Aula 03 Prof. Me. Ronnison Reges Vidal.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Variáveis e Atribuições.
Introdução à Computação para Engenharia MAC2166
Introdução à Computação para Engenharia MAC2166
Algoritmo e Lógica Programação Vetores e Matrizes
Estruturas de Dados Tópicos Vetores Matrizes Registros
Algoritmos e Estruturas de Dados I
Vetores e Matrizes em C/C++
Lógica de Programação I
Fundamentos de Programação 1
Programação em C Aula 8.
Profa. Mercedes Gonzales Márquez
Fundamentos de Programação 1
Profa. Mercedes Gonzales Márquez
Estrutura de Dados Revisão
Introdução à Computação para Engenharia MAC2166
Comandos da Linguagem C
Estruturas de Repetição
Linguagem C Para programadores Python
Algoritmos e Estruturas de Dados I
Algoritmos e Estruturas de Dados I
Fundamentos de Programação 1
Introdução à Programação BCC 201 Aula
Prof. Wellington Franco Manipulação de Arquivos em C
Programação de Computadores I – Arquivos
Estruturas de Dados Vetores.
FUNDAMENTO DE PROGRAMAÇÃO
02/08/2011 Professor Leomir J. Borba- –
IP – Repetições Prof. Eduardo Falcão.
UNIDADE 7 Tipos estruturados
INE 5201 – INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO
Algoritmos e Programação MC102
Variáveis Compostas Homogêneas
Aula 22 Modularização 22/10/08.
Fundamentos de Programação 1
Elaborando as Interfaces Aulas 37, 38 e 39.
Relembrando... Variáveis : endereçam uma posição de memória que contem um determinado valor dependendo do seu tipo (char, int, float, double, ...) void.
Complexidade de Algoritmos
Linguagem de Programação II
Linguagem PASCAL Tipos Estruturados
DHD – Desenvolvimento em Hardware
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Prof. Rafael Mesquita Pilha Prof. Rafael Mesquita
Linguagem de Programação
Fundamentos de Programação 1
Linguagem C Linguagem Imperativa
Introdução à lógica de programação utilizando Scratch Aula 3
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS
DHD – Desenvolvimento em Hardware
Linguagem C Linguagem Imperativa
Prof. Rafael Mesquita Listas Encadeadas Prof. Rafael Mesquita
Programação de Computadores LINGUAGEM C – AULA 03 – PROF. WELLINGTON TELLES.
Matrizes.
Vetores.
Prof. Elisson de Andrade
RESULUÇÃO DOS EXERCÍCIOS E
MATEMÁTICA.
Transcrição da apresentação:

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). 2 int v[3] int m[3][3] float t[3][4][2]

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

Exemplo: Aluguel por Região 4 CasaApto. Sala Comercial Vitória Cariacica Viana Vila Velha Serra

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

Declaração e Acesso a Elementos de uma Matriz int m[6][4]; tipo nome [nlinhas][ncols];

Declaração e Acesso a Elementos de uma Matriz int m[6][4]; m[2][3] = 7;

Declaração e Acesso a Elementos de uma Matriz int m[6][4]; m[0][3] = -79;

Declaração e Acesso a Elementos de uma Matriz int m[6][4]; int *l = m[3];

Declaração e Acesso a Elementos de uma Matriz int m[6][4]; int *l = m[3]; l[2] = 80;

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

#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; } Pressione qualquer tecla...

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; }

#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

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

#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 M = N = O =

Soma de Matrizes M = N = 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?

Soma de Matrizes M = N = 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!

Soma de Matrizes M = N = 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];....

Soma de Matrizes M = N = 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!

Soma de Matrizes M = N = 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];....

Soma de Matrizes M = N = 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?

Soma de Matrizes M = N = 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”); }....

Multiplicação de Matrizes M = N = O =

Multiplicação de Matrizes M = N = O =

Multiplicação de Matrizes M = N = O = Linha 0 de M Coluna 0 de N O[0][0] = M[0][0] * N[0][0] +...

Multiplicação de Matrizes M = N = O = Linha 0 de M Coluna 0 de N O[0][0] = M[0][0] * N[0][0] + M[0][1] * N[1][0]

Multiplicação de Matrizes M = N = O = Linha 0 de M Coluna 0 de N O[0][0] = M[0][0] * N[0][0] + M[0][1] * N[1][0]

Multiplicação de Matrizes M = N = O = 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];

Multiplicação de Matrizes M = N = O = 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];

Multiplicação de Matrizes M = N = O = Linha 0 de M Coluna 1 de N O[0][1] =...

Multiplicação de Matrizes M = N = O = Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] +...

Multiplicação de Matrizes M = N = O = Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1]

Multiplicação de Matrizes M = N = O = Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1]

Multiplicação de Matrizes M = N = O = 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?

Multiplicação de Matrizes M = N = O = Linha 0 de M Coluna 1 de N O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1]

Multiplicação de Matrizes M = N = O = 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.

Multiplicação de Matrizes M = N = O = 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?

Multiplicação de Matrizes M = N = O = Linhas de M

Multiplicação de Matrizes M = N = O = Linhas de M

Multiplicação de Matrizes M = N = O = Linhas de M 2.P/ cada linha de M, as colunas de N.

Multiplicação de Matrizes M = N = O = Linhas de M 2.P/ cada linha de M, as colunas de N.

Multiplicação de Matrizes M = N = O = 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.

#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; }

#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++) { }

#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++) { }

#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]); }

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 = O[0][1] = M[0][0] * N[0][1] + M[0][1] * N[1][1]

Matrizes na Memória PosiçãoNomeValor int m[2][2];

Matrizes na Memória int m[2][2]; PosiçãoNomeValor m[0] [0] 108[1] m[1] [0] 120[1] m [0] [1] Linha 0 Linha 1

Matrizes na Memória int m[2][2]; PosiçãoNomeValor m[0] [0] 108[1] m[1] [0] 120[1] m [0] [1] Linha 0 Linha 1 Cada linha da matriz se comporta como um vetor!

Matrizes na Memória int m[2][2]; int *l = m[0]; PosiçãoNomeValor m[0] [0] 108[1] m[1] [0] 120[1] m [0] [1] Qual será o valor de l ?

Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor m[0] [0] 108[1] m[1] [0] 120[1] m [0] [1]

Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor m[0] [0] 108[1] m[1] [0] 120[1] m [0] [1]

Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor m[0] [0]5 108[1] m[1] [0] 120[1] m [0] [1]

Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor m[0] [0]5 108[1] m[1] [0] 120[1] m [0] [1] l104

Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor m[0] [0]5 108[1] m[1] [0] 120[1] m [0] [1] l104

Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[0]; l[0] = 3; PosiçãoNomeValor m[0] [0]3 108[1] m[1] [0] 120[1] m [0] [1] l104

Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[1]; l[0] = 3; PosiçãoNomeValor m[0] [0]3 108[1] m[1] [0] 120[1] m [0] [1] l116

Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[1]; l[0] = 3; PosiçãoNomeValor m[0] [0]3 108[1] m[1] [0] 120[1] m [0] [1] l116

Matrizes na Memória int m[2][2]; m[0][0] = 5; int *l = m[1]; l[0] = 3; PosiçãoNomeValor m[0] [0]3 108[1] m[1] [0]3 120[1] m [0] [1] l116

Matrizes na Memória int m[3][3]; PosiçãoNomeValor m[0] [0] 108[1] m[1] [0] 120[1] m[2] [0] 132[1] m [0] [1] [2]

Matrizes na Memória int m[3][3]; PosiçãoNomeValor m[0] [0] 108[1] m[1] [0] 120[1] m[2] [0] 132[1] m [0] [1] [2]

Matrizes na Memória int m[2][2]; PosiçãoNomeValor m[0][0] 108m[0][1] m[1][0] 120m[1][1] m[0] m[1] m128 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.

Matrizes na Memória int m[2][2]; PosiçãoNomeValor m[0][0] 108m[0][1] m[1][0] 120m[1][1] m[0] m[1] m128 Ao acessar um elemento na matriz estamos na verdade realizando dois movimentos na memória! m[0][1] = 7;

Matrizes na Memória int m[2][2]; PosiçãoNomeValor m[0][0] 108m[0][1] m[1][0] 120m[1][1] m[0] m[1] m128 Ao acessar um elemento na matriz estamos na verdade realizando dois movimentos na memória! m[0][1] = 7;

Matrizes na Memória int m[2][2]; PosiçãoNomeValor m[0][0] 108m[0][1] m[1][0] 120m[1][1] m[0] m[1] m128 Ao acessar um elemento na matriz estamos na verdade realizando dois movimentos na memória! m[0][1] = 7;

Matrizes na Memória PosiçãoNomeValor m[0][0] 108m[0][1] m[1][0] 120m[1][1] m[0] m[1] m128 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.