MC 102 Algoritmos e Programao de Computadores 12

  • Slides: 34
Download presentation
MC 102 - Algoritmos e Programação de Computadores 12ª Aula - Matrizes Amanda Meincke

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

Roteiro z Vetores (Exemplos) z Matrizes z Leituras Complementares 15/04/2005 2

Roteiro z Vetores (Exemplos) z Matrizes z Leituras Complementares 15/04/2005 2

Vetores z. O que estes programas fazem? (em papel) 15/04/2005 3

Vetores z. O que estes programas fazem? (em papel) 15/04/2005 3

Matrizes z. Estrutura bastante conhecida z. Uma Definição em Álgebra Linear: “Uma matriz é

Matrizes z. Estrutura bastante conhecida z. Uma 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) 15/04/2005 4

1º Exemplo Prático : -) z. Você precisa organizar melhor seu tempo para conseguir

1º Exemplo Prático : -) z. 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. 15/04/2005 5

Disciplina X Dia da Semana 15/04/2005 6

Disciplina X Dia da Semana 15/04/2005 6

z. Organizada a grade, seu amigo o questionou: y. Qual o dia da semana

z. Organizada a grade, seu amigo o questionou: y. Qual o dia da semana em que você está mais sobrecarregado? y. Qual o dia da semana em que você está menos sobrecarregado? y. Em média, quantas horas você tem estudado por dia? y. E nos finais de semana? y. Quantas horas por semana você tem dedicado para estudar cada disciplina? 15/04/2005 7

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

y. Para qual disciplina você tem dedicado mais tempo de estudo? Quanto tempo? y. Para qual disciplina você dedicado menos tempo de estudo? Quanto tempo? y. . . y. Tem sobrado tempo para você conseguir dormir, pelo menos, 6 horas por dia? y. Tem sobrado tempo para algum lazer? y. Finalmente, como você tem utilizado seu tempo? 15/04/2005 8

z. Só com este exemplo já dá para perceber o potencial de modelar um

z. Só com este exemplo já dá para perceber o potencial de modelar um problema utilizando matrizes z. Existem outros tantos no mundo real! 15/04/2005 9

2º Exemplo Prático z. Pesquisa de Campo (Exemplo 4/Aula 11) y. Seu programa o(a)

2º Exemplo Prático z. Pesquisa de Campo (Exemplo 4/Aula 11) y. Seu programa o(a) ajuda a tabular os seguintes dados, relacionados a cada entrevistado x. Sexo x. Idade x. Altura x. Peso 15/04/2005 10

Entrevistados X Dados 15/04/2005 11

Entrevistados X Dados 15/04/2005 11

z. Seu programa também o(a) ajuda a obter as seguintes informações: y. Total de

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

y. Número de mulheres entrevistadas y. Número de homens entrevistados y. Altura média das

y. Número de mulheres entrevistadas y. Número de homens entrevistados y. Altura média das mulheres y. Altura média dos homens y. Altura média dos entrevistados y. Peso médio das mulheres y. Peso médio dos homens y. Peso médio dos entrevistados y. . . 15/04/2005 13

Outro Exemplo z Realizar operação com Matrizes y. Identificar se duas matrizes são iguais

Outro Exemplo z Realizar operação com Matrizes y. Identificar se duas matrizes são iguais y. Somar e subtrair matrizes y. Multiplicar uma matriz por um escalar y. Calcular a combinação linear de matrizes y. Multiplicar duas matrizes y. Determinar se um produto entre matrizes está definido y. Particionar matrizes y. . . 15/04/2005 14

Matrizes em programação z. Tipo de dado usado para representar uma certa quantidade de

Matrizes em programação z. 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 z. Um vetor, por exemplo, pode ser considerado um tipo de dado matriz, entretanto, unidimensional 15/04/2005 15

Matrizes z. Veremos y. Como este tipo de dado representa a memória y. Como

Matrizes z. Veremos y. Como este tipo de dado representa a memória y. Como este tipo de dado é representado pela linguagem C y. Como acessar cada elemento de uma matriz de forma precisa 15/04/2005 16

Representação da Memória z. Cada elemento de uma matriz fica disposto seqüencialmente na memória

Representação da Memória z. 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 z. A próxima transparência ilustra uma matriz bidimensional mxn, que nos ajudará a entender como a linguagem C trata este tipo de dado 15/04/2005 17

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

Representação da linguagem C para uma Matriz Bidimensional mxn | | | |. . . | 0 1 2 . . . m-1 15/04/2005 0 | |. . . | 1 2 3 n-1 18

Exemplo 1 z. Vamos resolver parte do 2º Exemplo Prático para entender como manipular

Exemplo 1 z. Vamos resolver parte do 2º Exemplo Prático para entender como manipular matrizes com a linguagem C z. Os dados precisam ser de tipo homogêneo y. Para começar: que tipo você escolheria para representar as informações (idade, sexo, altura, peso) dos entrevistado? 15/04/2005 19

Sintaxe C para declaração de uma matriz: tipo identificador[numero de linhas][numero de colunas]; Declaração

Sintaxe C para declaração de uma matriz: tipo identificador[numero de linhas][numero de colunas]; Declaração #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; 15/04/2005 } Na declaração de uma matriz bidimensional, o número de linhas e o número de colunas devem ser uma constante inteira! 20

Declaração (uso de constante) #include <stdio. h> #define N_LINHAS 50 //número máximo de entrevistados

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; } 15/04/2005 O número de linhas e o número de colunas de uma matriz bidimensional podem ser dados por uma constante inteira definida. 21

Cuidado! #include <stdio. h> int main () { int e = 0; int d

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; } 15/04/2005 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. 22

Referência a uma Entrada z. Existe uma sintaxe na linguagem C para acesso a

Referência a uma Entrada z. Existe uma sintaxe na linguagem C para acesso a uma entrada de uma matriz z. Para nosso exemplo yentrevistados[0][0] //Sexo do 1º entrevistado yentrevistados[0][1] //Idade do 1º entrevistado yentrevistados[0][2] //Altura do 1º entrevistado yentrevistados[0][3] //Peso do 1º entrevistado y. . . yentrevistados[49][3] /*Peso do 50º entrevistado, se for o caso*/ 15/04/2005 23

Referência a uma Entrada z Podemos usar uma variável inteira para indicar o índice

Referência a uma Entrada z Podemos usar uma variável inteira para indicar o índice de uma matriz. Exemplo: yentrevistados[e][0] //Sexo do entrevistado e yentrevistados[e][1] //Idade do entrevistado e yentrevistados[e][2] //Altura do entrevistado e yentrevistados[e][3] //Peso do entrevistado e yentrevistados[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 15/04/2005 • Também devem conter valores válidos no momento em que forem 24 utilizadas para indexar a matriz

Referência a uma Entrada z Também podemos utilizar expressões que resultem em um número

Referência a uma Entrada z Também podemos utilizar expressões que resultem em um número inteiro válido. Exemplo: yentrevistados[0][N_COLUNAS - 1] /* Peso do primeiro entrevistado */ yentrevistados[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 15/04/2005 25

Cuidado! z Os índices de uma matriz devem variar entre 0 (zero) e o

Cuidado! z 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) z Ao acessar valores inválidos seu programa pode ser finalizado pelo Sistema Operacional z Voltando ao nosso exemplo. . . 15/04/2005 26

Sintaxe C para referenciar um elemento: identificador[índice][outro índice]; Referência a uma Entrada #include <stdio.

Sintaxe C para referenciar um elemento: identificador[índice][outro índice]; Referência a uma Entrada #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; } 15/04/2005 27

Pequeno Desafio. . . z. E se você também quisesse guardar o nome dos

Pequeno Desafio. . . z. E se você também quisesse guardar o nome dos entrevistados? 15/04/2005 28

Inicialização de Matrizes z Assim como em variáveis e vetores, podemos atribuir um valor

Inicialização de Matrizes z Assim como em variáveis e vetores, podemos atribuir um valor inicial a uma matriz no momento de sua criação z Exemplo: int grade[6][7] = { 0, 0, 2, 0, 2, 0, 0, 1, 0, 2, 0, 0, 0, 4, 0, 0, 0, 1, 0 15/04/2005 }; 29

Exemplo 2 z. Operação com matrizes y. Cálculo da Matriz Transposta y. Adição de

Exemplo 2 z. Operação com matrizes y. Cálculo da Matriz Transposta y. Adição de Matrizes y. Multiplicação de Matrizes 15/04/2005 30

Matrizes Multidimensionais z Exemplos de declaração: yint C[3][3][3]; yfloat H[4][4]; z Exemplos de acesso

Matrizes Multidimensionais z Exemplos de declaração: yint C[3][3][3]; yfloat H[4][4]; z Exemplos de acesso a um elemento: y. C[0][0][0] y. C[2][2][2] y. C[i][j][k] y. C[i][j][MAX_K-1] y. H[0][0] y. H[3][3] 15/04/2005 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 31

Dica para o Laboratório 06 z. A tarefa de Laboratório 06 está baseada no

Dica para o Laboratório 06 z. A tarefa de Laboratório 06 está baseada no 2º Exemplo Prático y. Adapte o programa da aula para obter também as seguintes informações: x. Existe um entrevistado com idade x? x. Há quantas mulheres com altura entre 1, 60 m e 1, 80 m (exclusive)? Qual a idade e o peso de cada uma delas? x. Qual o peso médio dos homens com mais de 60 anos? 15/04/2005 32

Leitura Complementar z. C Completo e Total (3ª edição) y. Capítulo 4 (disponível no

Leitura Complementar z. C Completo e Total (3ª edição) y. Capítulo 4 (disponível no Xerox) 15/04/2005 33

Referência z. Howard, A. ; Rorres C. Álgebra Linear com Aplicações (trad. Claus Ivo

Referência z. Howard, A. ; Rorres C. Álgebra Linear com Aplicações (trad. Claus Ivo Doering), 8ª edição, Bookman, Porto Alegre, 2001, 572 p. 15/04/2005 34