mc102 - algoritmos e programação de computadores 12ª aula - matrizes amanda meincke melo...

34
MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

Upload: internet

Post on 17-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

MC102 - Algoritmos e Programação de Computadores

12ª Aula - Matrizes

Amanda Meincke Melo

Instituto de Computação/Unicamp

1º Sem/2005

Page 2: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 2/34

Roteiro

Vetores (Exemplos)MatrizesLeituras Complementares

Page 3: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 3/34

Vetores

O que estes programas fazem?

(em papel)

Page 4: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 4/34

Matrizes

Estrutura bastante conhecidaUma Definição em Álgebra Linear:

“Uma matriz é um agrupamento retangular de números. Os números neste agrupamento são chamados entradas da matriz.” (Howard e Rorres, 2001:41)

Page 5: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 5/34

1º Exemplo Prático :-)

Você precisa organizar melhor seu tempo para conseguir estudar todas as disciplinas da faculdade e não ficar sobrecarregado(a) no período de provas. Para ajudá-lo(a) nesta tarefa, um amigo sugeriu que você contabilize as horas que tem dedicado para estudar cada disciplina (fora da sala de aula) em uma grade Disciplina X Dia da Semana.

Page 6: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 6/34

Disciplina X Dia da Semana

Seg Ter Qua Qui Sex Sab Dom

D1

D2

D3

D4

D5

D6

Page 7: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 7/34

Organizada a grade, seu amigo o questionou: Qual o dia da semana em que você está mais

sobrecarregado? Qual o dia da semana em que você está

menos sobrecarregado? Em média, quantas horas você tem estudado

por dia? E nos finais de semana? Quantas horas por semana você tem dedicado

para estudar cada disciplina?

Page 8: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 8/34

Para qual disciplina você tem dedicado mais tempo de estudo? Quanto tempo?

Para qual disciplina você dedicado menos tempo de estudo? Quanto tempo?

... Tem sobrado tempo para você conseguir

dormir, pelo menos, 6 horas por dia? Tem sobrado tempo para algum lazer? Finalmente, como você tem utilizado seu

tempo?

Page 9: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 9/34

Só com este exemplo já dá para perceber o potencial de modelar um problema utilizando matrizes

Existem outros tantos no mundo real!

Page 10: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 10/34

Pesquisa de Campo (Exemplo 4/Aula 11) Seu programa o(a) ajuda a tabular os

seguintes dados, relacionados a cada entrevistadoSexoIdadeAlturaPeso

2º Exemplo Prático

Page 11: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 11/34

Entrevistados X Dados

Sexo Idade Altura PesoE1

E2

...EN-1

EN

Page 12: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 12/34

Seu programa também o(a) ajuda a obter as seguintes informações: Total de entrevistados Dados de um determinado entrevistado Dados do entrevistado mais jovem Dados do entrevistado mais velho Se existem entrevistados menores de idade Se existem entrevistados com 60 anos ou mais

Page 13: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 13/34

Número de mulheres entrevistadas Número de homens entrevistados Altura média das mulheres Altura média dos homens Altura média dos entrevistados Peso médio das mulheres Peso médio dos homens Peso médio dos entrevistados ...

Page 14: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 14/34

Outro Exemplo

Realizar operação com Matrizes Identificar se duas matrizes são iguais Somar e subtrair matrizes Multiplicar uma matriz por um escalar Calcular a combinação linear de matrizes Multiplicar duas matrizes Determinar se um produto entre matrizes está definido Particionar matrizes ...

Page 15: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 15/34

Matrizes em programação

Tipo de dado usado para representar uma certa quantidade de dados na memória de tipo homogêneo (de mesmo tipo), utilizando o mesmo identificador

Um vetor, por exemplo, pode ser considerado um tipo de dado matriz, entretanto, unidimensional

Page 16: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 16/34

Matrizes

Veremos Como este tipo de dado representa a

memória Como este tipo de dado é representado pela

linguagem C Como acessar cada elemento de uma matriz

de forma precisa

Page 17: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 17/34

Representação da Memória

Cada elemento de uma matriz fica disposto seqüencialmente na memória (alocação seqüencial), entretanto, para facilitar o entendimento podemos representá-la visualmente de outra maneira

A próxima transparência ilustra uma matriz bidimensional mxn, que nos ajudará a entender como a linguagem C trata este tipo de dado

Page 18: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 18/34

Representação da linguagem C para uma Matriz Bidimensional mxn

0 1 2 3 n-1

| | | | ... || | | | ... || | | | ... |

| | | | ... |

0

1

2

m-1

...

Page 19: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 19/34

Exemplo 1

Vamos resolver parte do 2º Exemplo Prático para entender como manipular matrizes com a linguagem C

Os dados precisam ser de tipo homogêneo Para começar: que tipo você escolheria para

representar as informações (idade, sexo, altura, peso) dos entrevistado?

Page 20: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 20/34

Declaração

Sintaxe C para declaração de uma matriz:

tipo identificador[numero de linhas][numero de colunas];

Sintaxe C para declaração de uma matriz:

tipo identificador[numero de linhas][numero de colunas];

Na declaração de uma matriz bidimensional, o número de linhas e o número de colunas devem ser uma constante inteira!

Na declaração de uma matriz bidimensional, o número de linhas e o número de colunas devem ser uma constante inteira!

#include <stdio.h>

int main () {

int e = 0; //Auxilia a fazer referência a um entrevistado

int d = 0; //Auxilia a fazer referência aos dados de um entrevistado

int entrevistados[50][4]; /* declaração de uma matriz bidimensional de 50 linhas e 4 colunas: as linhas representam os entrevistados (ex. entrevistados[0], entrevistados[1], ..., entrevistados[49]), enquanto que as colunas representam cada dado de um entrevistado: (entrevistados[e][0] é seu sexo: 0 para sexo feminino e 1 para sexo masculino; entrevistados[e][1] é sua idade: um inteiro maior que zero; entrevistados[e][2] é sua altura em centímetros: um inteiro maior que zero; entrevistas[e][3] é o peso em gramas: um inteiro maior que zero */

/* Código do restante do programa */

return 0;

}

Page 21: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 21/34

Declaração (uso de constante)

#include <stdio.h>

#define N_LINHAS 50 //número máximo de entrevistados

#define N_COLUNAS 4

int main () {

int e = 0;

int d = 0;

int entrevistados[N_LINHAS][N_COLUNAS];

/* Código do restante do programa */

return 0;

}

O número de linhas e o número de colunas de uma matriz bidimensional podem ser dados por uma constante inteira definida.

O número de linhas e o número de colunas de uma matriz bidimensional podem ser dados por uma constante inteira definida.

Page 22: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 22/34

Cuidado!

#include <stdio.h>int main () {

int e = 0;

int d = 0;

int n_linhas = 50, n_colunas = 4;

int entrevistados[n_linhas][n_colunas];

/* Código do restante do programa */

return 0;

}

Na declaração, o valor inteiro para indicar o número de linhas ou colunas de um vetor não pode estar em uma variável.

Na declaração, o valor inteiro para indicar o número de linhas ou colunas de um vetor não pode estar em uma variável.

Page 23: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 23/34

Referência a uma Entrada

Existe uma sintaxe na linguagem C para acesso a uma entrada de uma matriz

Para nosso exemplo entrevistados[0][0] //Sexo do 1º entrevistado entrevistados[0][1] //Idade do 1º entrevistado entrevistados[0][2] //Altura do 1º entrevistado entrevistados[0][3] //Peso do 1º entrevistado ... entrevistados[49][3] /*Peso do 50º entrevistado, se

for o caso*/

Page 24: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 24/34

Referência a uma Entrada

Podemos usar uma variável inteira para indicar o índice de uma matriz. Exemplo: entrevistados[e][0] //Sexo do entrevistado e entrevistados[e][1] //Idade do entrevistado e entrevistados[e][2] //Altura do entrevistado e entrevistados[e][3] //Peso do entrevistado e entrevistados[e][d] /*Dado do entrevistado e: se d for

0, indica o sexo; se d for 1, indica a idade; se d for 2, é a altura; se d for 3, indica o peso*/

•Como e e d são variáveis, precisam ser declaradas

•Também devem conter valores válidos no momento em que forem utilizadas para indexar a matriz

•Como e e d são variáveis, precisam ser declaradas

•Também devem conter valores válidos no momento em que forem utilizadas para indexar a matriz

Page 25: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 25/34

Referência a uma Entrada

Também podemos utilizar expressões que resultem em um número inteiro válido. Exemplo: entrevistados[0][N_COLUNAS - 1] /* Peso do

primeiro entrevistado */ entrevistados[e][d++]

Consideremos que:

•N_COLUNAS é uma constante inteira que representa número de colunas da matriz

•e e d são variáveis do tipo inteiro

Consideremos que:

•N_COLUNAS é uma constante inteira que representa número de colunas da matriz

•e e d são variáveis do tipo inteiro

Page 26: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 26/34

Cuidado!

Os índices de uma matriz devem variar entre 0 (zero) e o número de linhas menos 1 (um), e 0 (zero) e o número de colunas menos 1 (um)

Ao acessar valores inválidos seu programa pode ser finalizado pelo Sistema Operacional

Voltando ao nosso exemplo...

Page 27: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 27/34

Referência a uma Entrada

Sintaxe C para referenciar um elemento:

identificador[índice][outro índice];

Sintaxe C para referenciar um elemento:

identificador[índice][outro índice];

#include <stdio.h>

#define N_LINHAS 50 //número máximo de entrevistados

#define N_COLUNAS 4

int main () {

int e = 0;

int d = 0;

int entrevistados[N_LINHAS][N_COLUNAS];

/* O programa deve:

- ler os dados, organizando-os na matriz

- viabilizar as pesquisas sobre os dados

*/

return 0;

}

Page 28: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 28/34

Pequeno Desafio...

E se você também quisesse guardar o nome dos entrevistados?

Page 29: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 29/34

Inicialização de Matrizes

Assim como em variáveis e vetores, podemos atribuir um valor inicial a uma matriz no momento de sua criação

Exemplo:int grade[6][7] = { 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0 };

Page 30: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 30/34

Exemplo 2

Operação com matrizes Cálculo da Matriz Transposta Adição de Matrizes Multiplicação de Matrizes

Page 31: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 31/34

Matrizes Multidimensionais

Exemplos de declaração: int C[3][3][3]; float H[4][4][4][4];

Exemplos de acesso a um elemento: C[0][0][0] C[2][2][2] C[i][j][k] C[i][j][MAX_K-1] H[0][0][0][0] H[3][3][3][3]

Consideremos que:

•i, j e k são variáveis do tipo inteiro

•MAX_K é uma constante inteira o número máximo de elementos da dimensão K

Consideremos que:

•i, j e k são variáveis do tipo inteiro

•MAX_K é uma constante inteira o número máximo de elementos da dimensão K

Page 32: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 32/34

Dica para o Laboratório 06

A tarefa de Laboratório 06 está baseada no 2º Exemplo Prático Adapte o programa da aula para obter também

as seguintes informações:Existe um entrevistado com idade x?Há quantas mulheres com altura entre 1,60m e

1,80m (exclusive)? Qual a idade e o peso de cada uma delas?

Qual o peso médio dos homens com mais de 60 anos?

Page 33: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 33/34

Leitura Complementar

C Completo e Total (3ª edição) Capítulo 4

(disponível no Xerox)

Page 34: MC102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke Melo Instituto de Computação/Unicamp 1º Sem/2005

15/04/2005 34/34

Referência

Howard, A.; Rorres C. Álgebra Linear com Aplicações (trad. Claus Ivo Doering), 8ª edição, Bookman, Porto Alegre, 2001, 572p.