Buscar

Aplicações de Vetores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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!

Continue navegando