Baixe o app para aproveitar ainda mais
Prévia do material em texto
Estrutura de Dados Homogêneas do tipo Matriz (Fundamentos, definição, inicialização, atribuição, escrita) Apresentação Nesta unidade de aprendizagem, será feito estudo sobre conjuntos de dados homogêneos muldimensionais, denominados matrizes, ou seja, variáveis que representam um conjunto de informações de mesmo tipo. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Declarar estruturas de dados homogêneas de duas dimensões.• Diferenciar variáveis simples de variáveis que representam conjuntos de dados.• Construir algoritmos que utilizem estruturas de dados homogêneas de duas dimensões.• Desafio Matrizes não são estruturas exclusivas da área de computação (programação), elas são utilizadas na matemática e em outras áreas com diversos objetivos. Seu desafio é pesquisar sobre a utilidade das matrizes e enumerar três aplicações em que matrizes podem ser utilizadas. Infográfico Matriz é um tipo de dado que possibilita a representação de conjuntos de dados homogêneos bidimensionais. Conteúdo do Livro As estruturas de dados homogêneas de duas ou mais dimensões (matrizes) permitem utilizar variáveis que representam um conjunto de dados. Conheça um pouco mais sobre estas estruturas a partir da leitura das páginas do livro Algoritmos e Programação com exemplos em Pascal e C de Nina Edelweiss. Boa leitura. s é r ie liv ro s d id á tic o s in fo r m á tic a u fr g s 23 s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s volume 3 Linguagens Formais e Autômatos, 6.ed., de Paulo Blauth Menezes volume 4 Projeto de Banco de Dados, 6.ed., de Carlos Alberto Heuser volume 5 Teoria da Computação: Máquinas Universais e Computabilidade, 3.ed, de Tiarajú Asmuz Diverio e Paulo Blauth Menezes volume 6 Arquitetura de Computadores Pessoais, 2.ed., de Raul Fernando Weber volume 7 Concepção de Circuitos Integrados, 2.ed., de Ricardo Augusto da Luz Reis e cols. volume 8 Fundamentos de Arquitetura de Computadores, 4.ed., de Raul Fernando Weber volume 10 Tabelas: Organização e Pesquisa, de Clesio Saraiva dos Santos e Paulo Alberto de Azeredo volume 11 Sistemas Operacionais, 4.ed., de Rômulo Silva de Oliveira, Alexandre da Silva Carissimi e Simão Sirineo Toscani volume 12 Teoria das Categorias para Ciência da Computação, 2.ed., de Paulo Blauth Menezes e Edward Hermann Haeusler volume 13 Complexidade de Algoritmos, 3.ed., de Laira Vieira Toscani e Paulo A. S. Veloso volume 16 Matemática Discreta para Computação e Informática, 4.ed., de Paulo Blauth Menezes volume 18 Estruturas de Dados, de Nina Edelweiss e Renata Galante volume 19 Aprendendo Matemática Discreta com Exercícios, de Paulo Blauth Menezes, Laira Vieira Toscani e Javier García López volume 20 Redes de Computadores, de Alexandre da Silva Carissimi, Juergen Rochol e Lisandro Zambenedetti Granville volume 21 Introdução à Abstração de Dados, de Daltro José Nunes volume 22 Comunicação de Dados, de Juergen Rochol COMPUTAÇÃO www.grupoa.com.br A Bookman é um dos selos editoriais do Grupo A Educação, empresa que oferece soluções em conteúdo, tecnologia e serviços para a educação acadêmica e profissional. algoritmos e programação com exemplos em Pascal e C nina edelweiss maria aparecida castro livi Material didático para professores Visite www.grupoa.com.br nina edelweiss maria aparecida castro livi l i v r o s d i s p o n í v e i s algoritm os e program ação com exem plos em P ascal e C 23 edelw eiss livi 23 algoritmos e programação com exemplos em Pascal e C Aprender programação não é uma tarefa simples. Requer um entendimento perfeito do problema, a análise de como solucioná-lo e a escolha da forma de implementação da solução. algoritmos e programação apresenta o processo de construção de algoritmos e de programas, enfatizando as etapas de abstração, organização, análise e crítica na busca de soluções eficientes. Os elementos de um programa são introduzidos pouco a pouco ao longo do texto, inicialmente apresentados em pseudolinguagem e, em seguida, exemplificados nas linguagens de programação Pascal e C. Este é um livro-texto para disciplinas iniciais de programação de duração de um semestre. Pode ser utilizado sobretudo em cursos de bacharelado e licenciatura em ciência da computação, análise de sistemas e engenharia da computação. E22a Edelweiss, Nina. Algoritmos e programação com exemplos em Pascal e C [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014. Editado também como livro impresso em 2014. ISBN 978-85-8260-190-7 1. Informática. 2. Algoritmos – Programação. I. Livi, Maria Aparecida Castro. II. Título. CDU 004.421 as autoras Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni- versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge- nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais e internacionais. Participou de diversos projetos de pesquisa financiados por agências de fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e desenvolvimento de software. Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro- fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial quanto a distância. Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052 Edelweiss_Iniciais_eletronica.indd iiEdelweiss_Iniciais_eletronica.indd ii 14/05/14 16:5114/05/14 16:51 ■ ■ Este capítulo apresenta e analisa arranjos de duas ou mais dimensões, também denominados matrizes. Inicialmente, são vistos os conceitos relacionados a matrizes de duas dimensões, e em seguida os conceitos são estendidos para matrizes com um número qualquer de dimensões. variáveis estruturadas: capítulo 7 arranjos multidimensionais Edelweiss_07.indd 195Edelweiss_07.indd 195 12/03/14 09:0212/03/14 09:02 196 Algoritmos e Programação com Exemplos em Pascal e C Seja o seguinte problema: ler as 5 notas de 7 alunos, identificados por um número entre 1 e 7, calcular a média de cada aluno e, após, imprimir as notas e médias dos alunos, ordenadas pela média, da maior para a menor. Quantas variáveis são necessárias para armazenar as notas e as médias nesse problema? São necessárias 35 variáveis simples ou 7 vetores (um por aluno), cada um com 6 elementos, sendo 5 para armazenar as notas e o último para a média (Figura 7.1). Outra opção é reunir em uma só estrutura os 7 vetores, ou seja, usar uma estrutura com 7 linhas e 6 colunas. Nesse caso, para acessar uma determinada nota ou média será preciso utilizar dois índices: um para linha, para especificar o aluno desejado, e outro para coluna, para especificar a nota ou média desejada (Figura 7.2). Uma estrutura assim, um arranjo de 2 dimensões, é chamada de matriz. 7.1 matrizes Matrizes são arranjos de duas ou mais dimensões. Assim como nos vetores, todos os ele- mentos de uma matriz são do mesmo tipo, armazenando informações semanticamente se- melhantes. No exemplo da Figura 7.2, todos os elementos da matriz Notas são do tipo real e guardam valores correspondentes a notas de alunos. Matrizes bidimensionais são arranjos de duas dimensões. São necessários dois índices para acessarcada um de seus elementos, um para cada uma das dimensões. Matrizes de mais de duas dimensões, de forma similar, necessitam de um índice para cada dimensão para definir um elemento de forma única. aluno6 aluno5 aluno4 aluno3 aluno2 aluno1 1 2 3 4 5 6 7,5 aluno7 aluno6[4] é a 4ª nota do 6º aluno média5 notas figura 7.1 Um vetor para cada aluno. Edelweiss_07.indd 196Edelweiss_07.indd 196 12/03/14 09:0212/03/14 09:02 Capítulo 7 Variáveis Estruturadas: Arranjos Multidimensionais 197 7.2 matrizes bidimensionais Em uma matriz de duas dimensões, ou bidimensional, todos os elementos são do mes- mo tipo, identificados por um índice para cada dimensão. No mundo real, os teatros são exemplos práticos de matrizes bidimensionais. Uma poltrona, em um teatro, tem a si asso- ciada a especificação da fila na qual se situa (fila A, B, C, etc.), bem como a especificação que define a posição da poltrona dentro da fila (1, 2, 3, 4...). Se uma entrada de teatro é rasgada e nela só resta uma dessas duas identificações, ou de fila ou de poltrona, não é possível mais determinar com precisão a poltrona referenciada. Só as duas referências juntas, de fila e pol- trona, permitem especificar de forma única uma poltrona no teatro. 7.2.1 declaração de uma matriz bidimensional Em pseudolinguagem, uma matriz bidimensional é declarada com o seguinte tipo: arranjo [<índice menor da dimensão 1>..<índice maior da dimensão 1>, <índice menor da dimensão 2>..<índice maior da dimensão 2> ] de <tipo da matriz>) onde <índice menor da dimensão n> e <índice maior da dimensão n> são os valores limites que definem o intervalo de índices válidos para cada uma das dimensões, e <tipo da matriz> é o tipo dos dados passíveis de serem armazenados nessa matriz. 1 2 3 4 5 6 7,5 1 2 3 4 5 6 7 notas al u n o nota notas[6,4] é a 4ª nota do 6º aluno figura 7.2 Uma matriz para todos os alunos. Edelweiss_07.indd 197Edelweiss_07.indd 197 12/03/14 09:0212/03/14 09:02 198 Algoritmos e Programação com Exemplos em Pascal e C A declaração a seguir corresponde à matriz da Figura 7.2: Variável: notas (arranjo [1..7, 1..6] de real) onde notas é o nome comum a todos os elementos da matriz, 1..7 é o intervalo de valores válidos para o índice da primeira dimensão (aluno), 1..6 é o intervalo de valores válidos para o índice da segunda dimensão (nota), e real é o tipo da matriz, ou seja, o tipo de todos os seus elementos. Em matrizes bidimensionais, costuma-se dizer que a primeira dimensão cor- responde às linhas e a segunda, às colunas. 7.2.2 acesso a um elemento de uma matriz Para acessar um determinado elemento de uma matriz deve-se usar um índice para cada uma de suas dimensões. Os índices, desde que dentro dos intervalos válidos, podem ser constan- tes, variáveis ou expressões aritméticas. A seguir, alguns exemplos de acesso a um elemento de uma matriz, considerando a ma- triz bidimensional notas antes declarada: ■ primeira nota do primeiro aluno: notas[1,1] ■ primeira nota do aluno 3, considerando i = 3 e j = 1 (sendo i e j variáveis inteiras): notas[i, j] ■ quinta nota do segundo aluno, considerando i = 4: notas[2, i+1] Um elemento de uma matriz é utilizado em comandos da mesma forma que uma variável simples, já que corresponde a um único valor. Por exemplo, o trecho abaixo preenche um elemento por leitura, copia esse valor para outro elemento da matriz, verifica se o valor lido é igual a 10 e, em caso positivo, imprime o valor: ler (notas[1,1]) notas[1,2] ← notas[1,1] se notas [1,1] = 10 então escrever (notas[1,1]) 7.2.3 inicialização de matrizes No que se refere à inicialização, o que foi colocado para vetores vale também para matrizes. Se a matriz é totalmente preenchida por leitura, não é necessário inicializá-la, uma vez que todos os valores anteriores das posições de memória da matriz são descartados quando novos valores nelas são colocados. Mas se a matriz for preenchida apenas parcialmente, restando posições não ocupadas no seu início, meio ou fim, ou se for utilizada em totalizações, cuida- dos devem ser tomados para garantir que os valores iniciais de todas as suas posições sejam os desejados. Edelweiss_07.indd 198Edelweiss_07.indd 198 12/03/14 09:0212/03/14 09:02 Capítulo 7 Variáveis Estruturadas: Arranjos Multidimensionais 199 O trecho a seguir inicializa de forma completa, com zeros, uma matriz de 10 elementos em cada dimensão, com índices no intervalo de 1 a 10: para i de 1 incr 1 até 10 faça para j de 1 incr 1 até 10 faça valor[i,j] ← 0 Dependendo do tipo do problema, por vezes também é possível inicializar, imediatamente antes do uso, apenas as posições da matriz que serão utilizadas. 7.2.4 exemplos de uso de matrizes Nos exemplos a seguir, sempre que todos os elementos da matriz são acessados, a variação dos índices de linha e coluna é realizada usando comandos para/faça encadeados. Em- bora essa não seja a única solução possível em tais casos, certamente é a mais amplamente utilizada, pois esse encadeamento garante que, para cada valor do índice alterado pelo laço externo, tenha-se toda a variação do índice alterado pelo laço interno, permitindo o acesso ordenado aos elementos das matrizes, linha após linha e, em cada linha, coluna após coluna. Dada a constante MAX e uma matriz quadrada, definida por tabela(MAX, MAX), a seguir são apresentadas algumas operações sobre essa matriz. a Preenchimento da matriz por leitura, percorrendo linha por linha: para i de 1 incr 1 até MAX faça para j de 1 incr 1 até MAX faça ler(tabela[i,j]) b Escrita da matriz completa, percorrendo linha por linha: para i de 1 incr 1 até MAX faça para j de 1 incr 1 até MAX faça escrever(tabela[i,j]) c Somatório dos elementos da última coluna: soma ← 0 para i de 1 incr 1 até MAX faça soma ← soma + tabela[i,MAX] escrever('Somatório dos elementos da última coluna = ', soma) d Somatório dos elementos da diagonal principal. Observe que neste caso, teoricamente, dois índices deveriam ser usados para acesso à matriz tabela, já que ela é bidimensional. No entanto, como os elementos da diagonal principal têm índices com valores iguais para linha e coluna (0,0 – 1,1 – 2,2 – etc.), uma única variável pode ser usada como índi- ce para as duas dimensões: soma ← 0 para i de 1 incr 1 até MAX faça soma ← soma + tabela[i,i] escrever('Somatório dos elementos da diagonal principal = ', soma) Edelweiss_07.indd 199Edelweiss_07.indd 199 12/03/14 09:0212/03/14 09:02 Dica do Professor O vídeo a seguir colabora para a compreensão do que são matrizes. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/108afa8ff313221c980d915be4aa7966 Exercícios 1) Em relação às matrizes, estruturas de dados homogêneas de duas ou mais dimensões, assinale a alternativa INCORRETA. A) a) Vetores e matrizes são estruturas semelhantes, diferenciando-se apenas pela quantidade de dimensões. B) b) Matrizes são úteis para conjuntos relativamente grandes de dados de mesmo tipo. C) c) Para indexar uma matriz de duas dimensões, são necessários dois índices, um para cada dimensão. D) d) Um elemento de uma matriz é equivalente a uma variável simples. E) e) Cada elemento de uma matriz é identificado por um nome diferente. 2) Considere a estrutura das matrizes bidimensionais e selecione a seguir a alternativa que NÃO apresenta uma aplicação que poderia ser modelada com este tipo de arranjo bidimensional. A) a) Cadeiras em um teatro. B) b) Planilha Excel. C) c) Lugares/poltronas em um avião. D) d) Lista de alunos de uma turma. E) e) Tabela de distâncias entre cidades. Considere o seguinte algoritmo em pseudocódigo: algoritmo "matrizes" var valores: vetor[1..5,1..6] de real i,j: inteiro inicio para i de 1 ate 5 passo 1 faca paraj de 1 ate 6 passo 1 faca escreva("Digite valor: ") 3) leia(valores[i,j]) fimpara fimpara fimalgoritmo Analise as alternativas a seguir e selecione a FALSA: A) a) A variável "valores" é uma matriz, ou seja, um vetor de duas dimensões. B) b) A matriz deste algoritmo possui 50 elementos do tipo real. C) c) Considerando a estrutura de repetição: "para i de 1 ate 5 passo 1 faca para j de 1 ate 6 passo 1 faca" pode-se concluir que os comandos do bloco de repetição serão executados 30 vezes. D) d) Para acessar cada um dos elementos da matriz, é necessário utilizar dois indexadores. E) e) As variáveis i e j devem ser do tipo inteiro. Considere o seguinte algoritmo em pseudocódigo, os dois dígitos à esquerda identificam a linha do algoritmo: 01- algoritmo "matrizes" 02- var 03- valores: vetor[1..5,1..6] de real 04- i,j: inteiro 05- inicio 06- para i de 1 ate 5 passo 1 faca 07- para j de 1 ate 6 passo 1 faca 08- escreva("Digite valor: ") 09- leia(valores[i,j]) 10- fimpara 11- fimpara 12- para i de 1 ate 5 passo 1 faca 13- para j de 1 ate 6 passo 1 faca 14- escreval("valor[",i,",",j,"): ",valores[i,j]) 15- fimpara 16- fimpara 17- para i de 1 ate 5 passo 1 faca 18- escreval("") 4) 19- para j de 1 ate 6 passo 1 faca 20- escreva(" ",valores[i,j]: 21- fimpara 22- fimpara 23- fimalgoritmo Analise as alternativas a seguir e selecione a CORRETA: A) a) Para cada processo de manipulação da matriz, são sempre utilizados três comandos "para...faça" encadeados. B) b) O trecho de comandos da linha 12 até 16 tem o mesmo objetivo geral do trecho da linha 17 até 22. C) c) No comando da linha 20, é especificado que somente serão mostrados os valores menores do que :5 D) d) O comando da linha 09 "leia(valores[i,j])" pode ser substituído por "leia(valores[i],[j])". E) e) O algoritmo lê uma matriz de 20 elementos e depois apresenta essa matriz duas vezes em formatos diferentes. 5) Considere o seguinte algoritmo em pseudocódigo: Clique aqui Analise as alternativas a seguir e assinale a alternativa correta. A) a) A variável i somente pode ser utilizada para indexar a primeira coordenada (linha), e a variável j somente pode ser utilizada para indexar a segunda coordenada (coluna). B) b) A matriz do programa está representando as 10 notas de quatro alunos, por isso, para calcular a média, somam-se as 10 notas e dividem-nas pela sua quantidade. C) c) Durante a execução do algoritmo, calcula-se o somatório de cada uma das três notas e da média, ao final, calculam-se a média de cada uma das notas e a média das médias. D) d) Na leitura das notas, tem-se a seguinte estrutura de repetição "para j de 1 ate 3 passo 1 faca", o limite 3 deveria ser substituído por 4 para que o programa funcionasse corretamente. https://statics-marketplace.plataforma.grupoa.education/sagah/f30ffbda-3f01-4bea-a829-be1c3f77b23e/82f58a66-ff8f-4bcb-ab44-fef140c5346c.pdf E) e) A declaração "somas: vetor[1..4] de real" não poderia ser substituída por "soman1,soman2, soman3, somamedia : real", pois não seria possível alterar o programa e fazê-lo funcionar. Na prática Matrizes são estruturas muito úteis para representar e resolver diversos problemas. Considere que se deseja verificar o nível de oxigênio em 10 pontos de um rio, e que essa coleta de informações será realizada por 7 dias. Para representar esse cenário, uma matriz com 7 linhas e 10 colunas pode ser utilizada, conforme pode ser observado a seguir: Saiba mais Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Lógica de Programação - Matrizes - Declaração e preenchimento de arrays bidimensionais: Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Lógica de Programação Vetores e Matrizes: Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://www.youtube.com/watch?v=Ww1aP4j1M6M https://www.youtube.com/watch?v=7i3YfiLy1vE
Compartilhar