Baixe o app para aproveitar ainda mais
Prévia do material em texto
Aplicações de Vetores APRESENTAÇÃO Um vetor é um arranjo de uma só dimensão que, portanto, necessita de um só índice para acessar seus elementos. Nesta Unidade de Aprendizagem, serão estudadas algumas aplicações de vetores (conjuntos de dados homogêneos). Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Declarar estruturas de dados homogêneas de uma dimensão.• Construir algoritmos que utilizem estruturas de dados homogêneas de uma dimensão (vetores). • Resolver problemas utilizando vetores.• DESAFIO Um funcionário precisa organizar o seu trabalho. Ele recebe um conjunto de pastas de clientes, revisa essas pastas e anota a referência de cada cliente (seu código). Ao realizar este processo, ele inverte as pastas e, por isso, precisa organizá-las na ordem correta de atendimento depois. Sendo assim, construa um algoritmo que: - Leia os códigos dos clientes, armazenando-os em um vetor de inteiros, conforme o trabalho do funcionário. - Em seguida, inverta o vetor. Para que os dados fiquem organizados da maneira que o funcionário precisa para trabalhar, utilize um procedimento para fazer a inversão do vetor. - Escreva o vetor. INFOGRÁFICO Vetores podem ser utilizados para representar informações de sistemas que precisam de conjuntos de dados. Esses conjuntos podem ser manipulados de diversas formas: ordenando os dados, unindo conjuntos de dados, verificando a interseção, invertendo, etc. CONTEÚDO DO LIVRO A representação e manipulação de coleções de itens em programas computacionais é uma tarefa presente nos mais diversos cenários. De fato, muitos são os problemas onde uma sequência de elementos precisa ser construída e informações sejam extraídas a partir de alguma computação realizada sobre ela. Embora existam várias estruturas de dados que podem ser empregadas nesses contextos, os vetores constituem uma das opções mais simples e disponíveis em praticamente todas as linguagens de programação. Neste capítulo, você conhecer os detalhes sobre como vetores são representados computacionalmente e como eles podem ser manipulados. Alguns algoritmos que são tradicionalmente implementados através de vetores serão descritos e seu funcionamento será exemplificado. Além disso, problemas comuns e presentes em cenários reais serão apresentados para que os vetores sejam vistos sob uma perspectiva mais prática. Boa leitura. ALGORITMOS E PROGRAMAÇÃO Identificação interna do documento BJN1UPS1UW-ISVYP11 OBJETIVOS DE APRENDIZAGEM > Declarar estruturas de dados homogêneas de uma dimensão. > Construir algoritmos que utilizem estruturas de dados homogêneas de uma dimensão (vetores). > Resolver problemas utilizando vetores. Introdução Uma realidade comum na construção de programas computacionais para atender a um dado cenário ou problema a ser resolvido é a possibilidade de serem usadas distintas formas de representação. As diferentes estruturas de dados oferecidas nativamente pelas linguagens de programação fazem com que as formas de des- crever um problema computacionalmente sejam ainda mais variadas. No entanto, existem estruturas que podem ser encontradas na grande maioria das linguagens, senão em todas. Isso faz com que elas componham o principal ferramental no momento de se projetar e implementar um algoritmo. Um exemplo de estrutura de dado elementar que é comumente empregada no desenvolvimento de procedimentos computacionais é conhecido como vetor. Suas características e a forma como são armazenadas em memória possibilitam um amplo espectro de aplicações. Logo, ter um conhecimento sólido sobre como manipular esse tipo de estrutura e entender como elas podem ser exploradas para descrever coleções de objetos é uma etapa essencial para a construção de algoritmos eficientes. Aplicações de vetores Thiago Nascimento Rodrigues Identificação interna do documento BJN1UPS1UW-ISVYP11 Neste capítulo, você vai estudar as principais características dos vetores e vai ter uma visão detalhada de sua representação computacional e funcionamento. Vários algoritmos serão apresentados para demonstrar cenários práticos nos quais essas estruturas de dados podem ser empregadas. Além disso, você vai reconhecer como problemas comuns podem ser representados e resolvidos por meio do uso de vetores. Estruturas de dados homogêneas e de uma dimensão Uma tarefa comum em programação é a manutenção de um conjunto numerado de objetos relacionados. Esse é o caso, por exemplo, do software de algum jogo digital que precisa manter a relação dos dez jogadores com melhor pontuação. Em lugar de utilizar dez variáveis diferentes para essa tarefa, é mais conveniente usar uma única variável que seja capaz de armazenar o inteiro conjunto de pontuações. Para a localização de cada pontuação es- pecífica, essa variável deve contar com um índice numérico para referenciar cada pontuação dentro do conjunto. De maneira análoga, um sistema de informações médicas poderia demandar o armazenamento da associação entre pacientes e leitos de um dado hospital. Como na situação anterior, não seria necessário adicionar 200 variáveis ao programa para representar os 200 leitos do hospital (GOODRICH; TAMASSIA, 2007). Para casos como os descritos, o esforço de programação pode ser oti- mizado por meio do uso de vetores. Vetores são coleções sequencialmente numeradas de variáveis de um mesmo tipo. O fato de as variáveis que com- põem um vetor serem todas do mesmo tipo faz com que ele seja classificado como uma estrutura de dados homogênea. Além disso, como a numeração dessas variáveis é feita com base no uso de apenas um único índice, vetores também são classificados como estruturas de dados unidimensionais. Logo, cada variável ou célula em um vetor tem um índice que referencia de forma única o valor nela armazenado. A Figura 1 apresenta uma visão esquemática da estrutura de um vetor. Nesse diagrama, o vetor é composto de 4 elementos e a sua primeira posição é referenciada pelo índice de valor 0. Aplicações de vetores2 Identificação interna do documento BJN1UPS1UW-ISVYP11 Figura 1. Diagrama de representação de um vetor. Fonte: Adaptada de Array in... (2021). Outra característica fundamental dos vetores é a forma como os seus elementos são armazenados na memória principal de um computador. Um vetor é uma estrutura de dados cuja alocação de dados é feita de forma contígua. Em outras palavras, os elementos de um vetor são armazenados um ao lado do outro na memória. Uma analogia para facilitar o entendimento desse tipo de alocação é comparar um vetor a uma rua repleta de casas, onde cada elemento do vetor é equivalente a uma casa e o índice é equivalente ao número da casa. Assumindo que todas as casas são do mesmo tamanho e numeradas sequencialmente de 1 a n, é possível calcular a posição exata de cada casa imediatamente a partir de seu endereço. Como vetores são estru- turas de dados de tamanho fixo, cada elemento pode ser localizado de forma eficiente por meio de seu índice ou (equivalente) endereço (SKIENA, 2008). Algumas linguagens de programação permitem que o tamanho de um vetor seja alterado de maneira eficiente conforme a necessidade, por meio do uso de vetores dinâmicos. Um cenário comum é a criação de um vetor inicial com tamanho 1 e, sempre que há a necessidade de mais espaço, o seu tamanho é dobrado de n para 2n posições. Esse processo de duplicação envolve a alocação de um novo vetor de tamanho 2n, seguido da cópia do conteúdo do vetor antigo para a primeira metade do novo vetor e a devolução do espaço usado pelo antigo vetor para o sistema responsável pela alocação de memória. Aplicações de vetores 3 Identificação interna do documento BJN1UPS1UW-ISVYP11 Algumas vantagens advindas de os vetores serem alocados contiguamente incluem as listadas a seguir. � Acesso em tempo constante para um dado o índice — Como o índice de cada elemento mapeia diretamente para uma posiçãode memória ou elemento específico do vetor, o tempo para acessar dados ou va- lores arbitrários é constante, desde que os respectivos índices sejam conhecidos. � Eficiência de espaço — Vetores são compostos puramente em dados. Então, nenhum espaço extra é necessário para o armazenamento de outras informações complementares. � Localidade da memória — Linguagens de programação em geral ofe- recem mecanismos para a execução de iterações sobre os elementos de uma estrutura de dados. Vetores são adequados para esse tipo de operação, já que a alocação contígua feita por eles favorece o desem- penho na localização de dados em memória. A Figura 2 apresenta uma descrição de como os vetores são contiguamente armazenados na memória de um computador. Um vetor de 10 posições tem suas primeiras 7 posições preenchidas com dados de um mesmo tipo — ca- racteres não numéricos. Cada posição do vetor está localizada em uma região específica da memória que é identificada unicamente por um endereço — as duas primeiras posições estão alocadas nos endereços 200 e 201, respecti- vamente. No entanto, essas mesmas posições têm um índice associado para facilitar a localização dos dados no vetor. Figura 2. Alocação de um vetor na memória. Fonte: Adaptada de Introduction... (2017). Uma desvantagem no uso de vetores é a impossibilidade de ajustar seu tamanho no meio da execução de um programa. Logo, um programa que faz uso de um vetor de n posições vai falhar assim que houver a tentativa de inserir um valor na sua posição n + 1. Naturalmente, isso poderia ser contornado Aplicações de vetores4 Identificação interna do documento BJN1UPS1UW-ISVYP11 alocando um vetor suficientemente grande. No entanto, essa abordagem pode causar um uso ineficiente do espaço disponível em memória, o que, por sua vez, levaria a uma nova restrição ao que o programa é capaz de fazer. O valor do primeiro índice de um vetor varia entre as linguagens de programação. As linguagens mais populares como JavaScript, Python, Java e C/C++ fazem uso do índice 0 para indicar a primeira posição de um vetor. Por outro lado, o índice 1 é usado em linguagens como Lua, R, MatLab e Cobol. Embora as formas de se declarar um vetor variem de linguagem para linguagem, alguns elementos são comuns à maioria delas, se não todas: Tipo Nome [ Tamanho ] onde: � Tipo: tipo de dado dos valores armazenados no vetor; � Nome: nome da variável que representa o vetor; � Tamanho: número máximo de elementos comportados pelo vetor. Então, a criação de um vetor para armazenar os 10 números de um bilhete de loteria poderia ser feita como segue: inteiro bilhete[ 10 ] Nesse caso, a variável bilhete foi usada para representar o vetor de 10 posições. Além disso, como os números de um bilhete de loteria são números inteiros, o tipo de dado usado foi inteiro. O acesso a cada posição do vetor é feito informando o índice da posição. Por exemplo, se uma variável de nome “letras” for usada para representar o vetor apresentado na Figura 2, as posi- ções 1 e 5 desse vetor podem ser acessadas como letras[1] e letras[5], respectivamente. A Figura 3 descreve outro exemplo de declaração de vetor e acesso a uma de suas posições. Aplicações de vetores 5 Identificação interna do documento BJN1UPS1UW-ISVYP11 Figura 3. Acessando a posição de índice 0 do vetor arr. Fonte: Adaptada de Introduction... (2017). Neste capítulo, a declaração de vetores seguirá a notação adotada por uma linguagem de programação criada para fins didáticos e conhecida como Portugol (NICOLODI, 2017). Nessa linguagem, o índice vetor é declarado como segue: var Nome: vetor [ inicio .. fim ] de Tipo onde: � var: palavra reservada para indicar a declaração de uma variável; � vetor: palavra reservada para indicar que a variável se trata de um vetor; � inicio: índice da primeira posição do vetor; � fim: índice da última posição do vetor. Algoritmos baseados em vetores Um vetor unidimensional é comumente usado para manter uma coleção de itens na memória e para referenciar todos os itens de uma maneira uniforme. Um típico algoritmo que faz uso dessa estratégia é o algoritmo para encontrar o maior elemento de um vetor de inteiros. O código a seguir descreve uma função Maximo que percorre um vetor passado como parâmetro e localiza o maior valor dentre todos armazenados nele (ZIVIANI, 1999). É importante observar que os índices inicial e final do vetor são também informados como parâmetros da função. Aplicações de vetores6 Identificação interna do documento BJN1UPS1UW-ISVYP11 01. funcao Maximo(Vet: Vetor; inicio, fim: inteiro): inteiro 02. var i, Max: inteiro 03. inicio 04. Max ← Vet[inicio] 05. para i de inicio ate fim faca 06. se Max < Vet[i] 07. entao 08. Max ← Vet[i] 09. fimse 10. fimpara 11. retorne Max 12. fimfuncao A função Maximo utiliza uma variável auxiliar Max para armazenar o maior valor encontrado a cada iteração sobre vetor. O valor inicial dessa variável corresponde ao valor armazenado na primeira posição do vetor informado — linha 4. A partir dessa atribuição inicial, sempre que o valor armazenado em uma das demais posições do vetor é maior que o valor corrente da va- riável Max (linha 6), ela é atualizada com o novo valor encontrado (linha 8). O Quadro 1, a seguir, apresenta o resultado obtido pela execução da função sobre três vetores distintos. Supondo que os índices dos vetores informados variam de 1 a 5, o valor máximo encontrado para o primeiro vetor indicado no quadro estará armazenado na posição 1 + 2 = 3 do vetor. No segundo vetor informado, o valor máximo se encontra na primeira posição do vetor e, por isso, a variável Max não receberá nenhuma atualização durante a iteração sobre o vetor. Consequentemente, o índice do maior valor é o inicial. Por outro lado, no terceiro vetor apresentado no quadro, a variável sofre alterações em cada iteração sobre o vetor, já que os valores se encontram ordenados de forma crescente. Quadro 1. Exemplos de vetores passados para a função Maximo Vetor Valor máximo Índice do Maximo 19 23 45 28 29 45 inicio + 2 100 2 4 7 50 100 inicio 10 20 30 40 50 50 fim Aplicações de vetores 7 Identificação interna do documento BJN1UPS1UW-ISVYP11 Algoritmos cujo funcionamento é baseado no uso de vetores podem ser encontrados nos mais diversos cenários. Uma classe de algoritmos que faz uso intenso desse tipo de estrutura corresponde às diferentes técnicas para ordenação de elementos em memória. Existem diversos algoritmos projetados com essa finalidade e eles implementam estratégias com diferentes níveis de complexidade. No entanto, todos eles resolvem um mesmo tipo de problema: dado um vetor com elementos dispostos em uma ordem qualquer, o objetivo é reorganizar os elementos do vetor de forma que todos eles fiquem em ordem crescente (ou decrescente). Por exemplo, para um vetor de 6 posições composto pelos elementos { 5, 3, 1, 2, 4, 0 }, um algoritmo de ordenação deve reorganizar esses elementos para que, ao término do procedimento, o vetor resultante seja da forma { 0, 1, 2, 3, 4, 5 }. Esse tipo de problema é encontrado em muitos contextos práticos nos quais alguma ordem entre os dados ma- nipulados precisa ser estabelecida. O procedimento a seguir descreve um dos algoritmos mais simples desenvolvidos para a ordenação de um vetor de números inteiros (ZIVIANI, 1999). 01. procedimento Ordena(var Vet: vetor; ini, fim: inteiro) 02. var i, j, min, aux: inteiro 03. inicio 04. para i de ini ate fim - 1 faca 05. min ← i 06. para j de i + 1 ate fim faca 07. se Vet[j] < Vet[min] 08. entao 09. min ← j 10. fimse 11. fimpara 12. aux ← Vet[min] 13. Vet[min] ← Vet[i] 14. Vet[i] ← aux 15. fimpara 16. fim O algoritmo acima tem seu funcionamento baseado em duas operações principais: 1. seleção do menor elemento do vetor (linhas 05–11); 2. troca do menor elemento com o primeiro elemento do vetor (linhas 12–14). Aplicaçõesde vetores8 Identificação interna do documento BJN1UPS1UW-ISVYP11 Essas duas operações são executadas inicialmente para os primeiros fim - 1 elementos do vetor. Em seguida, elas são repetidas para os fim - 2 elementos, depois para fim - 3 elementos e assim até que reste apenas um elemento. Ao término do procedimento, os elementos do vetor original estarão ordenados de forma crescente. O Quadro 2, a seguir, detalha como o vetor passado como parâmetro para o procedimento Ordena é alterado na primeira iteração e mostra como os seus elementos ficam organizados após o término dessa iteração. Quadro 2. Primeira iteração do procedimento Ordena Vet i j min Operação 5 3 1 2 4 0 1 2 1 3 é menor que 5; atualiza min 5 3 1 2 4 0 1 3 2 1 é menor que 3; atualiza min 5 3 1 2 4 0 1 4 3 2 é maior que 1; não atualiza min 5 3 1 2 4 0 1 5 3 4 é maior que 1; não atualiza min 5 3 1 2 4 0 1 6 3 0 é menor que 1; atualiza min 5 3 1 2 4 0 1 - 6 Troca 0 e 5 de posição 0 3 1 2 4 5 2 3 2 Início da segunda iteração A variável min é responsável por armazenar o índice do menor valor encontrado em uma dada iteração do laço mais externo (comando da linha 4). O seu valor inicial é sempre o valor referenciado pelo índice i de cada iteração. Portanto, na primeira iteração, o valor de i é 1; consequentemente, o valor de min é Vet[1], ou seja, 5. O índice i delimita o índice de início de cada iteração. O índice j executa a varredura do vetor em cada iteração, iniciando do valor armazenado em i até o fim do vetor. Logo, nessa primeira iteração, j vai começar a partir do índice 2 e vai até o índice 6 (final do vetor). Sempre que o valor armazenado na posição j for menor do que o valor na posição referenciada pela variável min, isso vai indicar que um novo mínimo foi encontrado. Por isso, a variável min é atualizada como o índice do novo mínimo. Quando j finaliza a varredura do vetor, o menor valor encontrado é realocado para a primeira posição do vetor. Aplicações de vetores 9 Identificação interna do documento BJN1UPS1UW-ISVYP11 Solução de problemas com vetores Existem cenários em que o uso de vetores é particularmente a solução mais natural de ser empregada. Esse é o caso de uma empresa que precisa computar a média salarial de seus funcionários e determinar quanto cada valor se desvia dessa média. Esse mesmo problema pode ser observado no contexto de um professor que precisa determinar o desempenho médio da sua turma e iden- tificar os alunos que mais destoam do comportamento mediano. O algoritmo a seguir descreve como um certo número de valores inteiros pode ser lido, como a média aritmética desses valores é encontrada e como determinar o desvio de cada valor da média obtida (TENEMBAUM; LANGSAM; AUGENSTEIN, 1995). Esse algoritmo pode ser empregado tanto nos cenários descritos quanto em outros envolvendo o cálculo de um valor mediano. 01. procedimento media(qtdValores: inteiro) 02. var valores: vetores[1 .. qtdValores] 03. var inteiro: i, total 04. var real: media, dif 05. inicio 06. para i de 1 ate i < qtdValores faca 07. leia(valores[i]) 08. total ← total + valores[i] 09. fimpara 10. media ← total / qtdValores 11. para i de 1 ate i < qtdValores faca 12. dif ← valores[i] - media 13. escreval(valores[i], dif) 14. fimpara 15. escreval("A media: ", media) 16. fim O programa acima usa dois grupos de qtdValores. O primeiro grupo é o conjunto de valores inteiros informados pelo usuário e é representado pelo vetor valores; o segundo grupo é o conjunto de diferenças que são valores sucessivos atribuídos à variável dif no segundo laço. Uma questão que naturalmente surge é: por que usar um vetor para armazenar todos os valores do primeiro grupo simultaneamente, enquanto uma única variável é utilizada para guardar um valor do segundo grupo de cada vez? Cada diferença é calculada (linha 12), impressa (linha 13) e nunca é necessária novamente. Sendo assim, a variável dif pode ser utilizada para armazenar a diferença entre o próximo inteiro e a média. No entanto, os inteiros originais, que são os Aplicações de vetores10 Identificação interna do documento BJN1UPS1UW-ISVYP11 valores do vetor valores, precisam todos ser mantidos na memória. Embora cada um possa ser somado ao total à medida em que são informados pelo usuário, eles precisam ser mantidos até que a média seja calculada. Somente a partir daí é que o programa pode computar a diferença entre o valor e a média obtida. Portanto, é preciso que um vetor seja utilizado. Evidentemente, poderiam ser usadas tantas variáveis quanto o valor passado através do parâmetro qtdValores para armazenar os inteiros. Entretanto, a vantagem de um vetor é que possibilita ao programador declarar somente um identificador e obter ainda assim uma grande quantidade de espaço na memória. Além disso, quando usado dentro de um laço, o vetor também permite que o programador referencie cada elemento de uma maneira uniforme em vez de obrigá-lo a codificar um comando para cada elemento. Outro contexto em que vetores são comumente empregados é na mode- lagem de listas de itens em memória. Conforme definido por Szwarcfiter e Markenzon (2010), uma lista reúne informações sobre um conjunto de elemen- tos que apresentam alguma forma de relação entre si. O conceito de listas está presente em vários cenários reais, como a representação da lista dos funcionários de uma empresa, uma lista de itens a serem comprados, itens de um estoque, notas de alunos, etc. De maneira mais formal, uma lista L é um conjunto de n ≥ 0 elementos onde as seguintes propriedades são observadas: � se n > 0, L[1] é o primeiro elemento; � para 1 ≤ k ≤ n, o item L[k] é precedido pelo item L[k – 1]. Uma das operações mais frequentes realizadas sobre listas é a operação de busca por um determinado elemento. Além disso, a maneira mais simples de se implementar o conceito de listas em um programa computacional é por meio de vetores. O algoritmo a seguir realiza a busca de um elemento passado como parâmetro (chave) em um vetor também informado. 01. funcao busca(Lista: vetor; ini, fim, chave: inteiro): logico 02. var encontrou: logico 03. var i: inteiro 04. inicio 05. encontrou ← FALSO 06. i ← ini 07. enquanto i ≤ fim faca 08. se Lista[i] = chave Aplicações de vetores 11 Identificação interna do documento BJN1UPS1UW-ISVYP11 09. entao 10. encontrou ← VERDADEIRO 11. i ← fim + 1 12. senao 13. i ← i + 1 14. fimse 15. fimenquanto 16. retorne encontrou 17. fimfuncao É importante observar que, para cada elemento da lista (posições do vetor), o algoritmo apresentado realiza dois testes. Primeiro, ele sempre verifica se a variável i atingiu a última posição vetor (linha 7). Quando isso acontece, o laço é interrompido e o valor da variável encontrado é retornado. O segundo teste (linha 8) é realizado no interior do laço que percorre o vetor. Esse teste verifica se o elemento na posição corrente do vetor corresponde ao valor procurado. Quando essa condição é satisfeita, a variável i é atualizada para um valor que extrapola o tamanho do vetor (linha 11). Isso vai ocasionar a interrupção do laço. Além disso, a variável encontrado recebe um valor lógico indicando o sucesso da busca (linha 10). Neste capítulo, foi possível conhecer em detalhes como os vetores são representados na memória de um computador e como eles podem ser mani- pulados por meio de algoritmos. A estrutura sequencial dos seus dados possi- bilita que muitos cenários reais possam ser modelados computacionalmente e soluções eficientes possam ser construídas. Alguns algoritmos tradicionais foram explorados e foi demonstrado como vetores são comumente utilizados na obtenção do valor máximo de um conjunto e na ordenação de elementos. Finalmente, alguns cenários práticos foram apresentados permitindo desen- volver uma visão mais aplicada dessa poderosa estrutura de dados. Aplicações de vetores12 Identificação interna do documentoBJN1UPS1UW-ISVYP11 Referências ARRAY IN Data Structures: What is, Concept, Insert/Delete Operations Example. Guru99, Ahemdabad, 2021. Disponível em: https://www.guru99.com/array-data-structure.html. Acesso em: 12 abr. 2021. GOODRICH, M. T.; TAMASSIA, R. Estruturas de dados e algoritmos em Java. 4. ed. Porto Alegre: Bookman, 2007. 600 p. INTRODUCTION to Arrays. GeeksforGeeks, Noida, 27 Oct. 2017. Disponível em: https:// www.geeksforgeeks.org/introduction-to-arrays/. Acesso em: 12 abr. 2021. NICOLODI, A. C. Manual do Visualg 3.0. Visualg3, Gaspar, 2017. Disponível em: http:// manual.visualg3.com.br/doku.php. Acesso em: 12 abr. 2021. SKIENA, S. S. The algorithm design manual. 2. ed. London: Springer, 2008. 730 p. SZWARCFITER, J.; MARKENZON, L. Estrutura de dados e seus algoritmos. 3. ed. Rio de Janeiro: LTC, 2010. 320 p. TENENBAUM, A. M.; LANGSAM, Y.; AUGENSTEIN, M. J. Estruturas de dados usando C. São Paulo: Makron Books, 1995. 884 p. ZIVIANI, N. Projeto de algoritmos com implementações em Pascal e C. 4. ed. São Paulo: Pioneira, 1999. 267 p. Leituras recomendadas ALVES, G. F. O. O que são Vetores e Matrizes (arrays). Dicas de Programação, São José dos Campos, 13 maio 2013. Disponível em: https://dicasdeprogramacao.com.br/o-que- -sao-vetores-e-matrizes-arrays/. Acesso em: 12 abr. 2021. BERTOL, O. F. Vetores – Parte 1. Revista easy Java Magazine, Rio de Janeiro, n. 16, 2012. Disponível em: https://www.devmedia.com.br/vetores-revista-easy-java-magazine-16- -parte-1/23878. Acesso em: 12 abr. 2021. CASAVELLA, E. Vetores – arrays em linguagem C. Intellectuale Tecnologia e Treinamento, São Paulo, mar. 2012. Disponível em: http://linguagemc.com.br/vetores-ou-arrays-em- -linguagem-c/. Acesso em: 12 abr. 2021. Os links para sites da web fornecidos neste capítulo foram todos testados, e seu funcionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. Aplicações de vetores 13 Identificação interna do documento BJN1UPS1UW-ISVYP11 Identificação interna do documento BJN1UPS1UW-ISVYP11 Identificação interna do documento BJN1UPS1UW-ISVYP11 Identificação interna do documento BJN1UPS1UW-ISVYP11 Identificação interna do documento BJN1UPS1UW-ISVYP11 Nome do arquivo: UA_2152_20210929160920162873.pdf Data de vinculação ao processo: 29/09/2021 16:09 Processo: 475394 DICA DO PROFESSOR A seguir, serão abordadas algumas aplicações de vetores. Conteúdo interativo disponível na plataforma de ensino! EXERCÍCIOS Considere o seguinte objetivo: construir um algoritmo que leia um vetor G[13] que é o Gabarito de um teste da loteria esportiva, contendo os valores 1 (coluna , 2 (coluna , e 3 (coluna do meio). Ler, a seguir, para cada apostador, o número de seu cartão e um vetor Resposta R[13]. Verificar, para cada apostador, o número de acertos e escrever o número do apostador e seu número de acertos. Se tiver 13 acertos, acrescentar a mensagem "Ganhador, parabéns!". Analise a implementação a seguir, feita para atender a essa necessidade: algoritmo "loteria" var G: vetor[1..13] de real R: vetor[1..13] de real indice, cartao, acertos: inteiro procedimento lerG inicio para indice de 1 ate 13 passo 1 faca escreva("Jogo(",indice,"): ") leia(G[indice]) fimpara fimprocedimento procedimento lerR inicio para indice de 1 ate 13 passo 1 faca escreva("Jogo(",indice,"): ") leia(R[indice]) se (R[indice] = G[indice]) entao 1) acertos <- acertos + 1 fimse fimpara fimprocedimento inicio lerG() repita escreva("Digite cartao do apostador: ") leia(cartao) se (cartao <> 0) entao acertos <- 0 lerR() escreval("Acertos: ",acertos) se (acertos = 13) entao escreval("GANHADOR, PARABÉNS!") fimse fimse ate (cartao = 0) fimalgoritmo Assinale a alternativa INCORRETA: A) As rotinas lerG e lerR são muito semelhantes, ambas leem um vetor, mas não realizam exatamente o mesmo procedimento. B) A declaração G: vetor[1..13] de real R: vetor[1..13] de real pode ser substituída por G, R: vetor[1..13] de real C) O algoritmo será repetido infinitamente. D) A variável "indice" poderia ser declarada como variável local nos procedimentos lerG e lerR, sem que isso comprometesse a execução do programa. O valores digitados para os vetores de gabarito e de repostas não são consistidos, portanto, E) O algoritmo irá terminar quando o valor digitado para o cartão for 0. poderiam ser digitados valores diferentes de 1, 2 ou 3, que deveriam somente ser aceitos. Considere o seguinte algoritmo em pseudocódigo: algoritmo "faz" var V: vetor[1..10] de real procedimento T(var a,b : real) var aux : real inicio aux <- a a <- b b <- aux fimprocedimento procedimento X var indice : inteiro inicio para indice de 1 ate 10 passo 1 faca escreva("Elemento(",indice,"): ") leia(V[indice]) fimpara fimprocedimento procedimento Y var i,j : inteiro inicio para i de 1 ate 10 passo 1 faca para j de 1 ate 9 passo 1 faca se (V[j] > V[j+1]) entao T(V[j],V[j+1]) fimse fimpara fimpara fimprocedimento 2) procedimento Z var indice : inteiro inicio para indice de 1 ate 10 passo 1 faca escreval("V(",indice,"): ",V[indice]) fimpara fimprocedimento inicio X() Y() Z() fimalgoritmo Analise as seguintes alternativas e selecione a CORRETA: A) O procedimento Z lê os elementos de um vetor. B) O procedimento Y ordena o vetor em ordem decrescente. C) O procedimento Z ordena o vetor em ordem crescente. D) O procedimento X ordena o vetor em ordem decrescente. E) O procedimento Y ordena o vetor em ordem crescente. 3) Uma professora deseja um programa para lhe auxiliar a calcular a média das notas de seus alunos. Ela possui 25 alunos e três notas para cada aluno, sendo que a média é calculada pela média aritmética simples das três notas. A partir das notas, ela precisa saber o maior valor e a média de cada uma delas. Além disso, precisa saber a maior média e a média das médias. Analise as alternativas a seguir e selecione aquela que tem a declaração de variáveis mais completa e adequada para atender a necessidade da professora. var Nota1, Nota2, Nota3, Media: vetor[1..25] de inteiro A) Executando o algoritmo, verifica-se que a função Y altera o vetor V, ordenando-o em ordem crescente pelo método buble-sort. SomaN1, SomaN2, SomaN3, SomaMedia, MediaN1, MediaN2, MediaN3, MediaMedia : inteiro MaiorN1, MaiorN2, MaiorN3, MaiorMedia : inteiro indice : inteiro B) var Nota1, Nota2, Nota3, Media: vetor[1..25] de real SomaN1, SomaN2, SomaN3, SomaMedia, MediaN1, MediaN2, MediaN3, MediaMedia : real indice : inteiro C) var Nota1, Nota2, Nota3, Media: vetor[1..25] de real SomaN1, SomaN2, SomaN3, SomaMedia, MediaN1, MediaN2, MediaN3, MediaMedia : real MaiorN1, MaiorN2, MaiorN3, MaiorMedia : real indice : inteiro D) var Nota1, Nota2, Nota3, Nota4, Nota5, Nota6, Nota7, Nota8, Nota9, Nota10, Nota11, Nota12, Nota13, Nota14, Nota15, Nota16, Nota17, Nota18, Nota19, Nota20, Nota21, Nota22, Nota23, Nota24, Nota25, Media: vetor[1..3] de real Somatorio, Maior : real indice : inteiro E) var Nota1, Nota2, Nota3, Nota4, Nota5, Nota6, Nota7, Nota8, Nota9, Nota10, Nota11, Nota12, Nota13, Nota14, Nota15, Nota16, Nota17, Nota18, Nota19, Nota20, Nota21, Nota22, Nota23, Nota24, Nota25, Media: vetor[1..3] de inteiro Somatorio, Maior : inteiro indice : inteiro Considere as seguintes declarações de variáveis: DECLARAÇÃO 1 var x1,x2,x3 : vetor[1..4] de real DECLARAÇÃO 2 var x1,x2,x3,x4: vetor[1..3] de real 4) Declara quatro vetores para armazenar as notas e médias de cada um dos alunos, tem as variáveis para armazenar os somatórios e calcular a média,além de ter as variáveis para armazenar o maior valor de cada uma das notas e médias. Analise as alternativas a seguir e selecione aquela que apresenta a CORRETA explicação das variáveis declaradas respectivamente nas declarações 1 e 2. A) (1) 4 variáveis do tipo vetor de 3 posições reais cada. (2) 3 variáveis do tipo vetor de 4 posições reais cada. B) (1) 3 variáveis do tipo vetor de 4 posições reais cada. (2) 4 variávies do tipo vetor de 3 posições reais cada. C) (1) 4 variáveis do tipo vetor de 3 posições inteiras cada. (2) 3 variávies do tipo vetor de 4 posições inteiras cada. D) (1) 3 variáveis do tipo vetor de 4 posições inteiras cada. (2) 4 variávies do tipo vetor de 3 posições inteiras cada. E) As declarações são equivalentes, produzindo a mesma reserva de espaço de memória. Em um programa de seleção de candidatos, no início do dia, é liberada a lista de códigos de inscrição dos 10 candidatos que serão entrevistados naquele dia. Em seguida, as pessoas informam seu código de inscrição e verifica-se se está ou não na lista. Para atender a esse necessidade, foi construído o algoritmo a seguir, que lê o vetor de códigos de inscrição dos candidatos selecionados, na sequência lê um código de inscrição e verifica-se se está ou não na lista, escrevendo essa conclusão. algoritmo "procura" var candidatos: vetor[1..10] de inteiro codigo : inteiro procedimento ler var indice : inteiro inicio para indice de 1 ate 10 passo 1 faca escreva("Elemento(",indice,"): ") leia(candidatos[indice]) fimpara fimprocedimento 5) Declara quatro vetores para armazenar as notas e médias de cada um dos alunos, tem as variáveis para armazenar os somatórios e calcular a média, além de ter as variáveis para armazenar o maior valor de cada uma das notas e médias. procedimento escrever var indice : inteiro inicio para indice de 1 ate 10 passo 1 faca escreval("V(",indice,"): ",candidatos[indice]) fimpara fimprocedimento funcao busca(c : inteiro): inteiro var indice, achou : inteiro inicio indice <- 1 achou <- 0 enquanto (indice <= 10) faca se (candidatos[indice] = c) entao achou <- 1 fimse indice <- indice + 1 fimenquanto retorne achou fimfuncao inicio ler() escrever() repita escreva("Digite código do candidato: ") leia(codigo) se (busca(codigo) = 0) entao escreval()"Candidato nao encontrado!") senao escreval"Candidato selecionado!" fimse ate codigo = 0 fimalgoritmo Analise as alternativas a seguir a selecione a INCORRETA. A) Na função busca, quando o código do candidato selecionado é encontrado, a repetição termina e é retornada a informação adequada. B) O programa é repetido até que seja digitado o código 0 para buscar um candidato. C) A função busca retorna um valor inteiro, 0 quando achou e 1 quando não achou. D) O comando "para indice de 1 ate 10 passo 1 faca" poderia ser substituído por "para indice de 10 ate 1 passo -1 faca" E) O comando "candidatos: vetor[1..10] de inteiro" declara um vetor de 10 posições em que cada elemento é do tipo inteiro e denominados candidatos. NA PRÁTICA Em um sistema de uma rede de lojas, os códigos dos produtos vendidos em cada área são armazenados em vetores. Utiliza-se um vetor para cada área. Desse modo, as vendas da área 1 são armazenadas no vetor1, e as vendas da área 2, no vetor2, e assim por diante. O gerente de vendas solicitou que sejam identificados os códigos dos produtos que são vendidos na área 1 e também na área 2, a fim de saber quais são mais vendidos. Ou seja, o gerente não deseja saber aqueles produtos que somente são vendidos em uma área, mas aqueles que são comuns às áreas. Para isso, foi desenvolvido um algoritmo que: - Lê os códigos dos produtos da área 1 (e os armazena no vetor1). - Lê os códigos dos produtos da área 2 (e os armazena no vetor2). - Verifica a intersecção entre os vetores vetor1 e vetor2, armazenando o resultado no vetor3. - Mostra o vetor3. -Obs.: considerou-se que a quantidade de produtos comercializados é 20. Veja o programa desenvolvido em Visualg. A função busca retorna um valor inteiro, 1 quando achou e 0 quando não achou. algoritmo "intersecção" var vendas1, vendas2 : vetor[1..20] de inteiro comuns : vetor[1..20] de inteiro indicecomum : inteiro procedimento lerV1 var indice : inteiro inicio para indice de 1 ate 20 passo 1 faca escreva("Produto - area 1: ") leia(vendas1[indice]) fimpara fimprocedimento procedimento lerV2 var indice : inteiro inicio para indice de 1 ate 20 passo 1 faca escreva("Produto - area 2: ") leia(vendas2[indice]) fimpara fimprocedimento procedimento escreverV1 var indice : inteiro inicio para indice de 1 ate 20 passo 1 faca escreval("Produto - area 1: ",vendas1[indice]) fimpara fimprocedimento procedimento escreverV2 var indice : inteiro inicio para indice de 1 ate 20 passo 1 faca escreval("Produto - area 2: ",vendas2[indice]) fimpara fimprocedimento procedimento escreverComum var indice : inteiro inicio para indice de 1 ate indicecomum passo 1 faca escreval("Produto em Comum: ",comuns[indice]) fimpara fimprocedimento procedimento interseccao var indice1, indice2: inteiro inicio indice3 <- 0 para indice1 de 1 ate 20 passo 1 faca para indice2 de 1 ate 20 passo 1 faca se (vendas1[indice1] = vendas2[indice2]) entao indicecomum <- indicecomum + 1 comuns[indicecomum] <- vendas1[indice1] fimse fimpara fimpara fimprocedimento inicio lerV1() lerV2() escreverV1() escreverV2() interseccao() escreverComum() fimalgoritmo SAIBA + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Lógica de Programação - Ordenação de Vetores (Arrays) Conteúdo interativo disponível na plataforma de ensino! Lógica de Programação - Pesquisa Binária em Vetores (Arrays) Conteúdo interativo disponível na plataforma de ensino! Lógica de Programação - Pesquisa Sequencial em Vetores (Arrays) Conteúdo interativo disponível na plataforma de ensino! Introdução ao visualG Veja neste artigo os principais comandos do visualG incluindo vetores Conteúdo interativo disponível na plataforma de ensino! O que são vetores e matrizes Veja neste artigo as diferenças entre vetores e matrizes Conteúdo interativo disponível na plataforma de ensino! Criando vetores Veja nesta vídeo aula como implementar vetores com visualG Conteúdo interativo disponível na plataforma de ensino!
Compartilhar