Prévia do material em texto
26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=S… 1/12 Algoritmos Aula 10 - Matrizes e vetores INTRODUÇÃO As estruturas de dados servem principalmente para abstrair estruturas da vida real em formas computacionais que sejam viáveis de serem implementadas. Nesta aula, vamos estudar as estruturas de dados mais fundamentais que existem e que vão nos ajudar a continuar a resolver muitos problemas: os vetores e as matrizes. Vamos lá! Boa aula! OBJETIVOS 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=S… 2/12 Aplicar os conhecimentos adquiridos para criar programas em C++ usando vetores e matrizes. 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=S… 3/12 ESTRUTURA DE DADOS Na ciência da computação, existe uma área de estudo chamada Estrutura de Dados. Para quem é da área de programação de computadores, esta é uma disciplina obrigatória e fundamental. As estruturas de dados servem principalmente, e de uma maneira resumida, para abstrair estruturas da vida real em formas computacionais que sejam viáveis de serem implementadas. Exemplo , Você já deve ter visto uma planilha eletrônica. Como você faria se fosse uma das pessoas da equipe de desenvolvimento do Excel para poder implementar uma planilha? Usando uma tabela, não é? Logo, a tabela é uma estrutura de dados e serve para abstrair uma planilha. Existem muitos exemplos semelhantes, e nesta aula, vamos estudar as estruturas de dados mais fundamentais que existem e que vão nos ajudar a continuar a resolver muitos problemas. Apresentaremos a você os vetores e as matrizes. PROBLEMA: NUCLEOTÍDEOS DE UMA CADEIA DE DNA Já vamos começar a nossa aula lançando um problema para você: vamos supor que você acabou de ser contratado por um laboratório de bioinformática, e o primeiro problema que caiu no seu colo foi contar o número de nucleotídeos de uma cadeia de DNA. Antes que você ache que estamos falando em outra língua, vamos explicar um pouco de biologia molecular. Lembra-se das suas aulas do colégio, em que você aprendeu que o DNA (ácido desoxirribonucleico) é uma molécula enrolada que contém o nosso código genético? Resumidamente falando, o DNA é um conjunto de nucleotídeos (existem quatro: adenina [A], citosina [C], guanina [G] e tiamina [T]), que se combinam. As combinações formam nosso genoma ou de qualquer ser vivo que possua um código genético. Para nós, que somos da programação, o DNA será “apenas” uma sequência combinada dessas quatro letras, como por exemplo: AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC Essa sequência de letras, por incrível que pareça, pode representar um pedaço do nosso genoma, que determina, por exemplo, a cor dos nossos olhos. AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC Seu chefe no laboratório passa a seguinte tarefa: Quantos nucleotídeos de cada tipo existem nesta sequência de DNA?Qual o tamanho desta cadeia? 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=S… 4/12 Normalmente, ele vai acrescentar: “preciso disso para ontem”. E agora, como resolvemos essa? VETORES A primeira estrutura de dados que vamos estudar é chamada de vetor ou array. Se você quiser um nome mais acadêmico, pode escolher o nome “variável composta unidimensional”. São sinônimos. Um vetor, array ou variável composta unidimensional é uma estrutura de dados contendo um conjunto de dados, todos do mesmo tipo, indexados por um valor. Gra�camente, podemos representá-lo assim: A �gura mostra um array com tamanho 9, chamado de x, cujo conteúdo é de variáveis do tipo char. Temos algumas informações importantes na �gura: Como declaramos este array em C++? O array precisa ter um nome. No array da �gura, o nome é x; O array tem um tamanho. No array da �gura, o tamanho é 9; O array possui um tipo. Todos os componentes do array obrigatoriamente são do mesmo tipo. No array da �gura, o tipo é char; O array é dividido em índices, um para cada elemento do array, começando obrigatoriamente pelo número 0; 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=S… 5/12 O array é �nito. Não é possível trabalhar com índices maiores que o tamanho do array, nem com índices negativos. No nosso caso, não é possível colocar um valor na posição 9; isso vai gerar um erro chamado de index out of bounds; Os índices sempre são números inteiros. Como declaramos este array em C++? Usamos a seguinte sintaxe: TIPO nome_do_array[tamanho]; No nosso caso, o array da �gura 1 pode ser declarado assim em C++: char x[9]; Certo, mas e o nosso problema de bioinformática, como �ca? Clique aqui (glossário) e veja mais detalhes. MANIPULAÇÕES COM VETORES Podemos fazer várias operações com vetores. Veja atentamente os exemplos: Vamos supor que o seu professor de Algoritmos peça que você faça algumas operações com as notas das provas. São 15 alunos na sala e as notas podem ter uma casa decimal. Qual é o tipo de dados mais apropriado para guardar as notas? Pode ser o �oat, não é? Vamos usar um array para esta tarefa. Em primeiro lugar, vamos criar um array em C++:�oat notas[15]; Após essa declaração, teremos o vetor criado na memória do computador. Vetor criado na memória do computador: Como podemos perceber, ele está pronto para receber valores; temos que preenchê-lo. Em C++, fazemos assim para atribuir um valor a uma posição do array: notas[0] = 7.5; Após essa linha, teremos o seguinte vetor na memória: http://estacio.webaula.com.br/cursos/gra007/galeria/aula10/docs/a10_t04.pdf 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=S… 6/12 Vamos continuar atribuindo valores para cada posição. Na prática, cada posição será a nota de um aluno. Após essas atribuições, teremos o seguinte vetor na memória: Não é obrigatório que a atribuição dos valores seja feita sequencialmente e é possível termos um vetor com posições em branco, sem problema algum. Podemos manipular os índices e valores dos vetores de várias maneiras. Analise aqui (glossário) o código em C++. Para �car mais interessante, falta apresentar a você uma tarefa muito importante: atravessar o vetor (o que também chamamos de percorrer o vetor ou iterar sobre o vetor). TRAVESSIA DO VETOR Atravessar o vetor, ou iterar sobre ele, ou percorrê-lo consiste em fazer uma repetição e veri�car índice por índice o valor de cada posição, até chegar ao �nal do vetor, seja ele do tamanho que for. No nosso exemplo de bioinformática, diminuímos o tamanho da string de entrada para simpli�car, mas como já vimos, um genoma tem terabytes de tamanho. Já pensou você declarar um vetor com um bilhão de posições? É por isso que máquinas que trabalham com esta área precisam ser rápidas, para poder processar os dados dentro de um tempo razoável. Vamos veri�car aqui (glossário) a solução para o nosso problema bioinformático e conferir aqui (glossário) a execução Pronto, agora podemos entregar o trabalho para o nosso chefe, e que venham mais sequências de DNA! Aprendemos o básico sobre os vetores. Existem mais detalhes que vamos reservar para você usar sua curiosidade e habilidade para aprender novas funções da linguagem C++ que podem ser feitas com as strings e também que podem ser usadas exclusivamente com vetores. http://estacio.webaula.com.br/cursos/gra007/galeria/aula10/docs/a10_t05.pdf http://estacio.webaula.com.br/cursos/gra007/galeria/aula10/docs/a10_t05.pdf http://estacio.webaula.com.br/cursos/gra007/galeria/aula10/docs/a10_t06.mp4 26/08/2019Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=S… 7/12 MATRIZES A outra estrutura de dados que vamos estudar nesta aula são as matrizes, ou variáveis compostas multidimensionais. O que é uma matriz? Pense numa tabela. Pronto, aprendeu! Quando falamos sobre vetores na primeira parte da aula, você viu que as �guras representativas da estrutura de dados estão desenhadas horizontalmente? Mas e se empilhássemos vários vetores, desta forma? Veja que temos 7 (de 0 a 6) vetores empilhados de 13 (0 a 12) posições, certo? Observe que é a mesma representação de uma tabela ou uma planilha. Também temos aqui índices para a dimensão horizontal e para a dimensão vertical. Podemos até chamar de x e y, mas normalmente chamamos de linhas e colunas. Cada uma tem a sua numeração correspondente. Da mesma forma que o vetor, uma matriz também tem um nome, é uma variável e, por de�nição, seu conteúdo só pode ser preenchido por valores do mesmo tipo. 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=S… 8/12 Veja a �gura a seguir: Essa �gura mostra uma matriz chamada “a”, com n colunas e m linhas. Cada par linha x coluna é denotado por aij ou também a[i,j].Em C++, declaramos uma matriz de duas dimensões assim: tipo nome_da_matriz [linhas] [ colunas]; sendo linhas o total de linhas e colunas o total de colunas Atenção , Repare que essa é a declaração de uma matriz de duas dimensões. Quer dizer que podemos ter mais dimensões. Existem também várias aplicações para matrizes com três dimensões (os cubos), quatro dimensões, cinco etc. Porém, este conhecimento não faz parte do nosso contexto. As regras que foram apresentadas para os vetores (índices negativos ou maiores que o tamanho da estrutura, nome da estrutura etc.) também são aplicáveis para as matrizes. Vamos apresentar um programa e incluir nele a forma de declaração de uma matriz em C++, e sua forma de travessia. É muito parecido com o vetor, porém agora, temos que trabalhar com dois índices para cada valor. Este exemplo é bem simples. Ele vai pedir para o usuário preencher uma matriz de 3x3 e depois vamos imprimir a matriz na tela. Clique aqui (glossário) para analisá-lo e veja aqui (glossário) a execução do programa. http://estacio.webaula.com.br/cursos/gra007/galeria/aula10/docs/a10_t07a.pdf http://estacio.webaula.com.br/cursos/gra007/galeria/aula10/docs/a10_t07a.mp4 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=S… 9/12 VÍDEO Temos um exemplo mais detalhado. Suponha que temos uma classe com 10 alunos e duas provas por aluno. Precisamos calcular e imprimir a média de cada aluno. Veja aqui (glossário) como podemos organizar a solução. Veja a execução do programa. As linhas 10 a 15 fazem a leitura das provas de cada aluno. Para �car mais atraente, somamos 1 às variáveis i e j, para não apresentar o índice 0 para o usuário. Isto foi feito tanto para cada aluno quanto na prova. Assim aparece prova1 e prova2, para �car mais realista. Após a leitura das notas, as linhas 17 a 23 calculam a média para cada aluno e atribuem o resultado para o vetor “médias” no índice correspondente. En�m, as linhas 24 a 26 percorrem o vetor de médias mostrando os valores para o usuário. ATIVIDADES 1. Agora, vamos exercitar tudo o que aprendemos! O nosso chefe do laboratório de informática nos passou outra tarefa: dada uma sequência de DNA, ele precisa da transcrição desta sequência em mRNA. O que é isso? O RNA é outro nucleotídeo presente nas nossas células. Vamos lá, dada então uma sequência de DNA, como a seguir: GATGGAACTTGACTACGTAAATT Devemos transformá-la em RNA. Para isso, temos que percorrer a string do DNA e substituir todas as ocorrências do caractere “T” pelo “U”. Neste caso, o resultado é: GAUGGAACUUGACUACGUAAAUU Como você faria isso? Resposta Correta http://estacio.webaula.com.br/cursos/gra007/galeria/aula10/docs/a10_t07b.pdf 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=… 10/12 2. (Ano: 2012 - Banca: FUNIVERSA - Órgão: PC-DF - Prova: Perito Criminal – Informática) A estrutura de dados formada por vários elementos do mesmo tipo que podem ser acessados por meio do uso de um índice é o(a): Pilha Fila Inteiro Array Lista encadeada Justi�cativa 3. (Ano: 2009 - Banca: CESPE - Órgão: ANAC - Prova: Analista Administrativo - Tecnologia da Informação) Um array é um agregado, possivelmente heterogêneo, de elementos de dados. Nele, um elemento individual é identi�cado por sua posição em relação ao primeiro. Certo Errado Justi�cativa 4. Em qual jogo abaixo não podemos usar matrizes para abstrair a estrutura de dados de implementação? Jogo da velha Batalha naval Loteria esportiva Adivinhação de um número Jogo da forca Justi�cativa 5. (Ano: 2010 - Banca: CESPE - Órgão: Banco da Amazônia - Prova: Técnico Cientí�co - Tecnologia da Informação) Os dados armazenados em uma estrutura do tipo matriz não podem ser acessados de maneira aleatória. Portanto, usa-se normalmente uma matriz quando o volume de inserção e remoção de dados é maior que o volume de leitura dos elementos armazenados. Certo Errado Justi�cativa 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=… 11/12 6. Ano: 2010 - Banca: AOCP - Órgão: Colégio Pedro II - Prova: Técnico de Tecnologia da Informação) Em algoritmos e estruturas de dados, existe um tipo de estrutura chamada de vetor. Sobre vetores, assinale a alternativa INCORRETA: Trata-se de variáveis do mesmo tipo, que possuem um mesmo identi�cador (nome), e são alocadas aleatoriamente na memória. Como as variáveis têm o mesmo nome, o que as distingue é um índice que referencia sua localização dentro da estrutura. Na seguinte declaração: tipo nome [tamanho]; “nome” é o nome da variável, “tamanho” é a quantidade de variáveis que vão compor o vetor e “tipo” é o tipo básico dos dados que serão armazenados no vetor. Em pseudocódigo, uma sintaxe válida de atribuição em um vetor pode ser: X[1] ← 45. Vetor também é conhecido como variável composta homogênea unidimensional. Justi�cativa Finalizando Chegamos ao �nal de nossa disciplina. Existem vários programas que podem ser usados com as matrizes e vetores. Tentamos resumir aqui os principais tópicos envolvendo essas estruturas de dados. Para saber mais sobre os tópicos estudados, pesquise na internet sites, vídeos e artigos relacionados ao conteúdo visto. Se ainda tiver alguma dúvida, fale com seu professor online utilizando os recursos disponíveis no ambiente de aprendizagem. 26/08/2019 Disciplina Portal estacio.webaula.com.br/Classroom/index.html?id=2653843&courseId=13042&classId=1185234&topicId=0&enableForum=S&enableMessage=… 12/12 Glossário