Buscar

189099-estrutura-de-dados

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 452 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 452 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 452 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

Introdução aos tipos abstratos de dados 
APRESENTAÇÃO
A era atual é uma era de dados, na qual todas as informações, os dados, sobre cada 
indivíduo encontram-se disponíveis na rede mundial de computadores, a Internet.
Os dados podem abranger desde um simples cadastro com informações pessoas, tais como nome 
e endereço, e estender-se a gostos e particularidades de cada um, como restaurantes 
frequentados e ciclo de amizades.
A partir dessa massa de dados à disposição de todos, é possível compreender como estes devem 
ser manipulados de forma a possibilitar uma melhor análise, visando a uma futura tomada de 
decisão.
Nesta Unidade de Aprendizagem, você verá os conceitos básicos e as principais características 
da estrutura de dados, bem como as ferramentas necessárias para sua compreensão e suas 
aplicações nas diferentes áreas.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
 Explicar estruturas de dados.•
Descrever os principais elementos para definir os tipos abstratos de dados (TAD).•
Identificar os recursos de programação para implementar as estruturas de dados.•
DESAFIO
Antes de iniciar o desenvolvimento de um software, deve-se realizar uma análise do problema e 
de suas características, bem como das ações a serem realizadas. Essa análise tem como objetivo 
fazer um desenvolvimento com foco em qualidade, efetividade e custos com a reutilização de 
códigos anteriormente desenvolvidos.
Suponha que você atue como programador em uma empresa terceirizada que presta serviços 
ao DETRAN.
Diante desse contexto, indique quais são os tipos abstratos de dados, suas variáveis e operações. 
INFOGRÁFICO
O desenvolvimento de uma aplicação vai além do uso de linguagens de programação, pois 
requer uma análise crítica do problema a ser abordado, bem como suas possíveis soluções. Para 
iniciar o processo de desenvolvimento, é necessário construir um esboço inicial do que será 
desenvolvido, logo, dos objetos abstratos que devem ser programados.
A utilização de um fluxo para a criação de tipos de dados abstratos proporcionará a redução de 
custos com a reutilização de códigos de projetos já desenvolvidos, bem como sua manutenção 
no futuro. 
No Infográfico, veja o fluxo necessário para o desenvolvimento de tipos abstratos de dados.
Conteúdo interativo disponível na plataforma de ensino!
CONTEÚDO DO LIVRO
A atuação do profissional de tecnologias da informação (TI) abrange diferentes áreas, desde a 
análise de requisitos à testagem de aplicações. Durante a trajetória de desenvolvimento, há 
diferentes profissionais em cada etapa de construção de uma aplicação, porém é recomendado 
que o profissional de TI tenha conhecimento aprofundado em pelo menos uma das áreas no 
ciclo de vida de um software. 
No capítulo Introdução aos tipos abstratos de dados, da obra Estrutura de dados, você verá o 
conceito de estrutura de dados, seus principais elementos, bem como sua correta construção e a 
importância de realizar a análise de requisitos com foco na construção dos tipos de dados 
abstratos e suas particularidades. 
Boa leitura.
ESTRUTURA 
DE DADOS
Lucas Plautz Prestes 
Introdução aos tipos 
abstratos de dados
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Explicar estruturas de dados.
 � Descrever os principais elementos para definir os tipos abstratos de 
dados.
 � Identificar os recursos de programação para implementar as estruturas 
de dados.
Introdução
A Internet possibilitou o acesso a dados nas suas mais diferentes formas. 
Ao acessar uma rede social, você é capaz de identificar diversos dados 
de um amigo, gostos pessoais e grupos de interesse. A partir dessas 
informações, você pode imaginar o quão complexo deve ser estruturá-
-las em uma base de dados e classificá-las de forma adequada para 
o desenvolvimento de um sistema inteligente.
Estruturação e classificação de dados não são uma tarefa simples, 
pois as dificuldades inerentes podem acarretar problemas futuros no 
modo como os dados serão amostrados e na performance no sistema 
desenvolvido.
Neste capítulo, você vai estudar a importância da estrutura de dados 
e suas principais características, além de conferir os recursos necessários 
para a sua implantação de forma clara e concisa.
1 O que é estrutura de dados?
Na computação, a estrutura de dados consiste no modo de armazenamento e 
organização de dados em um computador. Quando estamos nos referindo ao 
armazenamento de dados, existe uma infinidade de opções nas quais o dado 
poderá ser armazenado de acordo com o seu tipo e base de dados. Os dados 
podem ser armazenados em pastas, arquivos de texto, planilhas ou até mesmo 
em um banco de dados instalado localmente ou em nuvem. 
Os dados armazenados não consistem somente no local no qual são ar-
mazenados, mas nas relações entre eles. A organização dos dados é tão im-
portante quanto o modo no qual são armazenamos, pois a correta escolha de 
sua categoria irá acarretar na performance ou na velocidade que o compu-
tador, ou usuário, irá demorar para encontrá-los. Logo, a correta escolha de 
como devemos armazenar e organizar os dados deverá levar em consideração 
o modo no qual eles serão utilizados no futuro.
No exemplo a seguir, você poderá identificar como as nossas ações diárias 
estão ligadas diretamente aos conceitos de dados e às suas respectivas estru-
turas, bem como o seu efeito se não utilizadas de forma adequada. 
Hoje, João foi ao maior supermercado da cidade com o objetivo de realizar as compras 
de sua festa de aniversário. Sua mãe realizou uma lista de compras com 50 itens dos 
mais variados tipos. Aproveitando a carona, Maria foi acompanhar seu amigo, mas 
tinha o objetivo de realizar a compra de outros 50 itens para a festa de sua escola. 
Ao chegarem ao supermercado, os amigos se separaram para realizar as compras 
mais rapidamente e, depois, tomar um sorvete na praça de alimentação.
João foi realizando as compras de acordo com a lista enviada pela mãe, item a item, 
seguindo a ordem descrita por ela.
Maria, mais esperta, antes de iniciar as compras, parou por 5 minutos e classificou 
a lista de compras de acordo com as categorias de cada corredor, respeitando a sua 
respectiva ordem, com o objetivo de obter maior eficiência no seu processo.
Após uma hora de compras, João estava na metade de sua lista, caminhando de um 
lado para o outro, a fim de finalizar as compras o mais rápido possível, e encontrou sua 
amiga na praça de alimentação, tomando sorvete. Perguntou a ela: “Você já acabou suas 
compras? Mas como?” Maria respondeu: “Claro, classifiquei todos os meus itens, dados, 
nas suas diferentes categorias, de acordo com seus respectivos tipos, na ordem dos 
corredores do supermercado. Logo, realizei as compras de forma mais rápida e eficaz”.
Introdução aos tipos abstratos de dados2
Quando os dados estão organizados e dispostos de forma coerente, levando 
em consideração o objetivo no qual foram destinados, caracterizam uma forma, 
uma estrutura de dados. A organização e os métodos para manipular essa 
estrutura de dados conferem a ela singularidade.
Você sabe a diferença entre dados e informação?
Usualmente, falamos as palavras dados e informação, porém, seus conceitos são 
completamente distintos. Os dados podem ser números, letras e palavras sem qualquer 
significado. A informação é quando há algum significado para o dado (Figura 1).
Dados:
08
12
07
03
Informação:
Idades
ou
Número de pessoas
ou
Peso de uma caixa
Figura 1. Ilustração de uma lista de dados com possíveis informações as quais os dados 
poderiam representar. 
 � Análise: classificar os dados de acordo com o objetivo, realizar compras no su-
permercado, de acordo com seus respectivos tipos, e ordená-los em categorias 
e corredores faz com que o processo de compras seja mais eficaz.
 � Objetivo: realizar compras em um supermercado.
 � Dados:elementos da lista de compras (p. ex., leite, bolo, chocolate, guardanapo, etc.).
 � Tipos\categorias: categoria de cada corredor do supermercado (p. ex., laticínios, 
enlatados, etc.).
 � Eficaz: eficiência na realização de uma tarefa (compras em um supermercado). 
Quanto menor o tempo, mais eficiente é o processo e menor será o recurso ne-
cessário para a sua realização.
3Introdução aos tipos abstratos de dados
2 Tipos de dados 
Os dados utilizados em um programa de computador, ou armazenados em 
um banco de dados, são classificados de acordo com os seus tipos a partir de 
suas particularidades e limitações. Esses tipos são necessários para definir de 
forma eficiente o seu processo de armazenamento e manipulação.
Apesar de a afirmação anterior ser verdadeira, há linguagens de progra-
mação que são fortemente tipadas e outras não. Mas o que isso significa? 
 � Linguagens altamente tipadas: são linguagens de programação que 
requerem que no momento da declaração de uma variável seja informado 
de forma explícita o seu tipo e utilizada de acordo com a sua declaração. 
O programador estará limitado ao tipo definido inicialmente. 
 � Linguagens não tipadas: são linguagens de programação que não reque-
rem que no momento da declaração de uma variável seja informado de 
forma explícita o seu tipo. O compilador irá identificar o possível tipo 
da variável utilizada pelo programador e defini-la internamente, isso 
irá trazer liberdade ao programador durante o seu desenvolvimento. 
As linguagens não tipadas trazem liberdade e velocidade ao programador no desen-
volvimento de seus códigos, passando a responsabilidade de definir os tipos de dados 
ao compilador. Essa prática geralmente irá acarretar maior consumo de memória e 
processamento na manipulação de dados, pois o compilador desconhece as regras de 
negócio aplicadas no código, assim, atribuindo tipos de dados que possivelmente irão 
ocupar mais memória que o necessário para o seu armazenamento e, logicamente, 
maior processamento em sua manipulação.
De acordo com Edelweiss e Galante (2009, p. 36), podemos definir que 
“[...] um tipo de dado consiste na definição do conjunto de valores (denominado 
domínio) que uma variável pode assumir ao longo da execução de um programa 
e do conjunto de operações que podem ser aplicadas sobre ele”.
Os dados podem ser classificados como tipos de dados primitivos, também 
chamados de básicos ou tipos de dados estruturados. Conforme Edelweiss e 
Galante (2009):
Introdução aos tipos abstratos de dados4
 � Os tipos de dados primitivos são compostos pelos tipos de dados indi-
visíveis, logo, não podem ser decompostos nos demais tipos de dados 
disponíveis na linguagem de programação escolhida. Um exemplo de 
dado primitivo é a idade de uma pessoa, que faz parte dos números 
Naturais na matemática. 
 � Os tipos de dados estruturados permitem a realização de agregação 
de mais de um valor em uma variável, havendo uma relação estrutural 
entre os elementos. A matriz utilizada na matemática representa per-
feitamente esse tipo de dado, no qual cada elemento tem uma relação 
entre os seus vizinhos.
Alocação de memória: estática e dinâmica 
A alocação de memória estática ocorre no momento em que realizamos a 
compilação e a execução do programa. Neste momento, o sistema verifica as 
variáveis criadas no início do programa e reserva um espaço de memória para 
cada uma delas de acordo com os seus respectivos tipos. Logo, a memória 
somente será liberada quando o programa for finalizado. 
A alocação de memória dinâmica ocorre durante a execução do programa, 
sendo realizada juntamente às operações durante a sua execução.
A liberação de memória no momento do fechamento de um programa ocorre de forma 
automática pelo sistema operacional, porém, recomenda-se realizar no momento do 
fechamento a codificação dessa liberação para evitar a criação de “lixo de memória” 
no sistema operacional. Cada sistema operacional trabalha de uma forma diferente 
para executar essa liberação, no qual o Windows notoriamente a realiza de forma 
menos eficaz se comparado aos sistemas operacionais Linux ou MacOs. 
O exemplo ocorre quando utilizamos o computador por um longo período e temos 
a sensação de que o sistema operacional fica cada vez mais lento. Isso acontece devido 
à utilização de memória virtual em virtude de a memória principal estar cheia, mesmo 
que nenhum programa esteja em execução, logo, essa ocupação provavelmente seja 
resquício de variáveis de programas anteriormente finalizados. Nesses casos, será 
recomendado executar programas de limpeza de memória ou o reinício do sistema 
operacional, forçando, assim, a realocação de toda a memória do sistema operacional.
5Introdução aos tipos abstratos de dados
Conforme Cormen (2002), a eficiência de um algoritmo criado para a 
resolução de um problema se difere de forma drástica a partir da estrutura de 
dados e seus métodos de manipulação, indo além da avaliação do hardware 
disponível no computador.
Tipos de dados na prática 
Os tipos de dados utilizados no desenvolvimento de um software, sejam eles 
atribuídos diretamente no código ou pelo compilador, são extremamente 
parecidos entre as linguagens de programação, havendo uma infinidade de 
possibilidades. O Quadro 1 mostra alguns dos tipos de dados mais utilizados 
e suas características. 
Fonte: Adaptado de Schildt (1996), Silva e Oliveira (2014).
Tipo Bits Faixa mínima Descrição
Char 8 –127 a 127 Utilizado para armazenar um 
caractere da tabela ASCII, seja 
ele letra, número ou símbolo.
Unsigned 
Char
8 0 a 255
Int 16 –32.767 a 32.767 Utilizado para definir uma variável 
inteira pertencente ao conjunto dos 
números inteiros da matemática. 
Long int 32 –2.147.483.647 a 
–2.147.483.647 
Float 32 Seis dígitos 
de precisão
Utilizado para definir uma 
variável real pertencente ao 
conjunto dos números reais.
Double 64 Dez dígitos 
de precisão
O tipo double é similar ao tipo 
float, mas com suporte a um maior 
número de casas decimais.
Quadro 1. Tipos de dados – Padrão ANSI
Introdução aos tipos abstratos de dados6
Tipos de dados abstratos
Os tipos de dados abstratos (TADs) são estruturas de dados muito impor-
tantes capazes de representar os tipos de dados que não foram originalmente 
previstos nas linguagens de programação e que geralmente são necessárias 
para o desenvolvimento de aplicações complexas. Essas estruturas são divi-
didas em duas camadas, uma chamada de dados e outra de operações. Logo, 
um TAD é uma forma de definição de um novo tipo de dado em união com 
operações capazes de manipular esses dados. Conforme Edelweiss e Galante 
(2009), a característica essencial de um TAD é a separação entre o conceito e 
a implementação, havendo uma distinção entre a definição do tipo da variável 
e as suas operações. Para Edelweiss e Galante (2009, p. 38), “[...] um TAD 
é, portanto, uma forma de definir um novo tipo de dado juntamente com as 
operações que manipulam esse novo tipo de dado. As aplicações que utilizam 
esse TAD são denominadas clientes do tipo dado”.
Formalmente, podemos definir um TAD como um par (v,o), onde v repre-
senta uma ou mais variáveis e o, uma ou mais operações. Devemos salientar 
que essas operações realizam a manipulação das variáveis definidas pelo 
mesmo TAD e serão utilizadas pela aplicação. Devemos salientar que o usuário 
nunca terá acesso direto às variáveis, e sim às operações, também chamadas 
de funções, que as manipulam. Logo, devemos salientar que sempre será 
necessário ter pelo menos uma operação de inicialização das variáveis.
As principais vantagens em fazer o uso de TADs são:
 � Reutilização: podemos reutilizar TADs criadas em outros programas em 
um novo programa sem a necessidade de realizar nova implementação.
 � Manutenção: podemos facilmente realizar a manutenção em uma TAD 
criada anteriormente ou adicionar novas operações, se necessário.
3 Recursos necessários para criar um projeto 
com o uso de TADs 
Odesenvolvimento de uma TAD envolve a correta escolha das operações mais 
adequadas para a sua respectiva estrutura de dados, levando em consideração 
o contexto aplicado, bem como a respectiva definição de comportamento de 
suas operações. A seguir, podemos definir algumas dicas que poderão facilitar 
o desenvolvimento de uma TAD:
7Introdução aos tipos abstratos de dados
 � Realizar a correta análise dos tipos de dados utilizados com foco no 
hardware e nas necessidades da aplicação.
 � Definir um número pequeno de operações que, combinadas, possibilitem 
a realização de operações mais complexas com foco na manutenção 
da aplicação.
 � Cada operação deverá ter um propósito definido, levando em conside-
ração o contexto aplicado e sua futura manutenção e reutilização, sem 
muitos casos de exceções. 
Os TADs podem ser classificados como genéricos ou específicos. De 
acordo com Edelweiss e Galante (2009), podemos definir os tipos como:
 � Genéricos: estruturas de dados que podem ser utilizados para repre-
sentar qualquer tipo de dados de forma generalista. O mesmo TAD 
poderia ser utilizado para representar uma lista de presença em uma 
classe ou até mesmo uma lista telefônica.
 � Específico: estrutura de dados definida para um domínio específico 
de aplicação com foco em cobrir uma necessidade não contemplada 
por um TAD genérico.
Criaremos um TAD a partir de uma necessidade identificada. Nosso programa precisa 
criar um tipo de dado que represente a conta-corrente de um banco. Esta conta deverá 
ser capaz de realizar saques, depósitos e consultar saldo atual.
1. Identificação do problema: criar uma conta-corrente de acordo com o enunciado 
do problema proposto.
2. Identificação das variáveis: neste exemplo, estamos criando uma conta-corrente, 
logo, será necessário ter informações como saldo, número da conta e agência.
 ContaCorrente: Variáveis
 Ag: inteiro
 CC: inteiro
 Saldo: inteiro
3. Identificação das operações: neste exemplo, devemos realizar todas as operações 
inerentes a uma conta-corrente bancária.
 
 ContaCorrente: Operações
Introdução aos tipos abstratos de dados8
 ■ Função InicializaConta:
 Entrada: Ag, CC, Saldo
 Ação: inserir os respectivos dados informados pelo usuário nas variáveis.
 Saída: Nulo
 ■ Função Deposito:
 Entrada: ValorDepositado 
 Ação: atualizar a variável Saldo.
 Saída: Nulo
 ■ Função Saque:
 Entrada: ValorSacado
 Ação: atualizar a variável Saldo.
 Saída: Nulo
 ■ Função Saldo:
 Entrada: Nulo
 Ação: retornar a variável Saldo ao usuário.
 Saída: Saldo
4. Identificação dos testes: a partir do enunciado, é possível identificar as ações a seguir: 
 ■ Criar uma conta-corrente.
 ■ Realizar depósitos.
 ■ Realizar saques.
 ■ Verificar saldo.
Você poderá identificar que existem funções nas quais não há qualquer saída identifi-
cada. Nesses casos, recomendamos que seja inserida nessas funções uma mensagem 
ao usuário que informe que a operação foi realizada com sucesso.
O conhecimento adquirido com o estudo das estruturas de dados, com os 
seus respectivos tipos abstratos e possibilidades de utilização, será de suma 
importância para o desenvolvimento de aplicações robustas que facilitam 
desde a manutenção da aplicação até o compartilhamento de informações 
entre os times de desenvolvimento.
9Introdução aos tipos abstratos de dados
CORMEN, T. H. Algoritmos: teoria e prática. Rio de Janeiro: Elsevier, 2002.
EDELWEISS, N.; GALANTE, R. Estruturas de dados. Porto Alegre: Bookmann, 2009.
SCHILDT, H. C: completo e total. 3. ed. São Paulo: Makron Books, 1996.
SILVA, R. L. S.; OLIVEIRA, A. M. Algoritmos em C. Juiz de Fora: Rodrigo Luis de Souza da 
Silva, 2014.
Introdução aos tipos abstratos de dados10
 
DICA DO PROFESSOR
A utilização dos tipos adequados de dados é de extrema importância durante o desenvolvimento 
de uma aplicação, pois ela irá definir o consumo de memória utilizado e, assim, a eficiência do 
consumo de hardware durante sua utilização.
Nesta Dica do Professor, veja como identificar os tipos de variáveis e suas aplicações.
Conteúdo interativo disponível na plataforma de ensino!
EXERCÍCIOS
1) O tipo de dado que representa números é muito utilizado em programação; logo, é 
sua correta utilização durante o desenvolvimento de uma aplicação é fundamental.
Suponha que você esteja analisando os tipos de dados para a implementação de uma 
aplicação voltada à contabilidade. Durante essa análise, você questiona qual tipo de 
dados uma variável deve utilizar para representar o número 10, visando à redução do 
custo de memória do computador.
A) Int.
B) Float.
C) Long int.
D) Char.
E) Double.
2) 
Os tipos de dados booleanos têm características específicas em relação aos outros 
tipos de variáveis. A partir dessa afirmação, identifique a alternativa que apresenta 
um exemplo de dados booleanos:
A) Verdadeiro ou falso.
B) Rua Paulista.
C) 2,5.
D) 10.
E) 01/12/2019.
3) Programas de computador fazem uso de diversas variáveis e operações. Em qual 
momento uma variável ocupa a memória do computador?
A) Durante a programação.
B) Durante a compilação do programa.
C) Durante a execução do programa.
D) Quando se finaliza o programa.
E) A variável não ocupa espaço de memória.
A utilização de variáveis que consomem pouca memória é de suma importância para 
o desenvolvimento de aplicações com hardware limitado. Por isso, você precisa 
poupar memória no sistema de presença de uma universidade, na qual os 
4) 
computadores utilizados serão reciclados pelos alunos de anos iniciais. 
A partir das informações anteriores, qual tipo de variável deve ser utilizado para 
representar uma única letra do alfabeto visando à redução do custo de memória do 
computador?
A) String.
B) Char.
C) Double.
D) Int.
E) Float.
5) Durante o desenvolvimento de uma aplicação, faz-se uso de diferentes tipos de dados. 
Na definição de tipos abstratos de dados (TAD), faz-se referência ao par (v,o). Qual é 
o significado desse par? 
A) (versão, operações).
B) (versão, oportunidade).
C) (variável, operação).
D) (variável, oportunidade).
E) (variável, ofício).
NA PRÁTICA
Diariamente surgem problemas que poderiam ser resolvidos facilmente a partir de soluções 
simples aplicando-se o uso de tecnologias. No entanto, nem sempre as soluções são baratas.
Acompanhe, Na Prática, o caso de um analista de negócios com foco em TI que optou 
pelo desenvolvimento de uma aplicação com redução de custos a partir do conhecimento e da 
análise prévia de seu problema. 
 
 
SAIBA +
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Declaração de variáveis
Neste vídeo, você assiste a uma explicação sobre o modo de declaração de variáveis, bem como 
sobre seu uso em português estruturado.
Conteúdo interativo disponível na plataforma de ensino!
Programa VisualG
O programa VisualG é utilizado para o desenvolvimento de softwares em português estruturado. 
Neste link, você terá acesso a informações do software e a seu download.
Conteúdo interativo disponível na plataforma de ensino!
Tipos de dados
Neste link, você acessa um conteúdo completo sobre os tipos de dados.
Conteúdo interativo disponível na plataforma de ensino!
Estrutura de Dados Homogêneas do tipo 
vetor (Fundamentos, definição, 
inicialização , atribuição, escrita)
APRESENTAÇÃO
Os dados existentes podem possuir natureza distinta. Por exemplo, eles podem ser números, 
letras, frases, imagens e até dados complexos, como registros e dicionário de dados, dependendo 
da linguagem de programação. Uma estrutura de dados homogênea utiliza somente um tipo de 
dados. Variáveis compostas por vários dados homogêneos são armazenadas em posições de 
memória, identificadas pelo mesmo nome e individualizadas por meio de índices, que possuem 
conteúdo do mesmo tipo. Para armazenar uma lista de valores do mesmo tipo em uma única 
variável utilizamos os vetores. Os vetores são estruturas de dadosunidimensionais ou lineares 
que necessitam somente de um índice para que seus elementos sejam endereçados. 
Nesta Unidade de Aprendizagem, você irá trabalhar com conjuntos de dados homogêneos, ou 
seja, variáveis que representam um conjunto de informações de mesmo tipo: os vetores. 
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Declarar estruturas de dados homogêneas de uma dimensão.•
Diferenciar variáveis simples de variáveis que representam conjuntos de dados.•
Construir algoritmos que utilizem estruturas de dados homogêneas de uma dimensão.•
DESAFIO
Uma companhia aérea gostaria de organizar as informações de seus voos, e você foi contratado 
para construir um algoritmo que receba um conjunto de códigos de voos e duração (tempo) de 
cada um. A companhia aérea possui 30 voos. 
Você deverá construir um algoritmo que manipula (lê e escreve) um conjunto de vetores; em 
cada posição dos vetores, teremos as informações relativas aos voos:
- número do voo
- tempo de duração do voo (em minutos)
 
Bom trabalho!
INFOGRÁFICO
Os vetores permitem que, através de uma única variável, sejam manipulados conjuntos de 
dados.
CONTEÚDO DO LIVRO
As estruturas de dados homogêneas (vetores, arranjos) permitem utilizar variáveis que 
representam um conjunto de dados. Conheça um pouco mais sobre essas estruturas lendo as 
páginas 163 a 168 do seguinte livro: Algoritmos e programação com exemplos em Pascal e C .
Boa leitura!
23
s é r i e l i v r o s d i d á t i c o s i n f o r m á t i c a u f r g s
algoritmos
e programação 
com exemplos em Pascal e C
nina edelweiss
maria aparecida castro livi
E22a Edelweiss, Nina.
 Algoritmos e programação com exemplos em Pascal e C 
 [recurso eletrônico] / Nina Edelweiss, Maria Aparecida Castro 
 Livi. – Dados eletrônicos. – Porto Alegre : Bookman, 2014.
 Editado também como livro impresso em 2014.
 ISBN 978-85-8260-190-7
 1. Informática. 2. Algoritmos – Programação. I. Livi, 
 Maria Aparecida Castro. II. Título. 
CDU 004.421
 as autoras
Nina Edelweiss é engenheira eletricista e doutora em Ciência da Computação pela Uni-
versidade Federal do Rio Grande do Sul. Durante muitos anos, lecionou em cursos de Enge-
nharia e de Ciência da Computação na UFRGS, na UFSC e na PUCRS. Foi, ainda, orientadora 
do Programa de Pós-Graduação em Ciência da Computação da UFRGS. É coautora de três 
livros, tendo publicado diversos artigos em periódicos e em anais de congressos nacionais 
e internacionais. Participou de diversos projetos de pesquisa financiados por agências de 
fomento como CNPq e FAPERGS, desenvolvendo pesquisas nas áreas de bancos de dados e 
desenvolvimento de software.
Maria Aparecida Castro Livi é licenciada e bacharel em Letras, e mestre em Ciência da 
Computação pela Universidade Federal do Rio Grande do Sul. Desenvolveu sua carreira pro-
fissional na UFRGS, onde foi programadora e analista de sistema, antes de ingressar na 
carreira docente. Ministrou por vários anos a disciplina de Algoritmos e Programação para 
alunos dos cursos de Engenharia da Computação e Ciência da Computação. Sua área de 
interesse prioritário é o ensino de Linguagens de Programação, tanto de forma presencial 
quanto a distância.
Catalogação na publicação: Ana Paula M. Magnus – CRB 10/2052
■ ■ Este capítulo introduz um tipo 
de variável estruturada 
denominado arranjo, que 
agrupa dados do mesmo tipo. 
Analisa os arranjos 
de uma dimensão, ou seja, 
unidimensionais, 
também denominados vetores. 
Também discute como vetores 
devem ser declarados e manipulados, 
e apresenta alguns 
exemplos de algoritmos de 
classificação e de pesquisa de dados 
armazenados em 
vetores.
variáveis estruturadas:
capítulo 6
arranjos unidimensionais
164 Algoritmos e Programação com Exemplos em Pascal e C
Com as estruturas básicas de controle de fluxo já vistas, sequência, seleção e iteração, é pos-
sível resolver praticamente qualquer problema de forma algorítmica. Entretanto, os recursos 
de armazenamento até agora utilizados não são adequados para soluções que envolvam 
grandes volumes de dados.
Por exemplo, se um professor tem 30 alunos em uma turma e deseja calcular a média arit-
mética dessa turma, quantas variáveis ele necessita para ler as médias dos 30 alunos? Pode 
usar 30, mas uma só é suficiente. Isso porque, nesse problema, as médias dos alunos, após 
serem lidas e acumuladas em uma variável, não precisam mais ser guardadas. Uma única 
variável pode ser reaproveitada para ler todas as 30 médias. A cada nova média, ao ser uti-
lizada a mesma variável para nova leitura, a média anterior é perdida, ou seja, “jogada no 
lixo”, sem que isso afete o resultado pretendido, pois o valor anterior já foi acumulado para 
calcular a média.
Mas, se o nosso professor desejar, além de calcular e apresentar a média da turma, também 
listar as médias dos alunos que forem iguais ou superiores à média da turma, quantas variá-
veis ele precisará para armazenar os 30 valores? Nesse caso não há escolha, ele precisará de 
30 variáveis. Se o professor quiser fazer o mesmo para sua turma em EAD (ensino a distância), 
com 150 alunos, precisará de 150 variáveis. Detalhe importante: cada variável deverá ter um 
nome diferente! Surge aí um grande problema: quanto maior o número de variáveis que 
um problema exige, maior é o número de nomes diferentes necessários. É claro que sempre 
dá para usar nomes de variáveis como val01, val02, val03, etc. Mas, além de trabalhosas, 
as soluções que seguem por esse caminho têm grande chance de serem indutoras de erros/
enganos devido ao número elevado de nomes semelhantes. Se pensarmos que há problemas 
em que o número de valores diferentes que devem permanecer armazenados por períodos 
relativamente longos são na ordem de centenas e até mesmo de milhares, o uso de variáveis 
simples para armazenar grandes volumes de dados claramente não parece ser a melhor opção 
de armazenamento.
Este capítulo discute um tipo de variável estruturada denominado arranjo, que agrupa dados 
do mesmo tipo e possibilita trabalhar com grande volume de dados de forma eficiente. Ar-
ranjos de uma dimensão (ou seja, unidimensionais) são apresentados e analisados aqui. São 
vistos também alguns exemplos de algoritmos de classificação e de pesquisa para arranjos 
unidimensionais. Arranjos de mais dimensões serão vistos no Capítulo 7.
6.1 
 arranjos
Um arranjo é uma variável estruturada, formada pelo agrupamento de variáveis de mesmo 
tipo (inteiro, real, etc.). As variáveis que integram um arranjo compartilham um único nome 
e são identificadas individualmente por um índice, que é o valor que indica sua posição no 
agrupamento. Os índices dos arranjos geralmente são de tipos ordinais, como inteiro e ca-
ractere, e podem ser tanto variáveis como constantes. Não existe uma vinculação obrigatória 
entre um arranjo e as variáveis ou constantes usadas para indexá-lo. Dessa forma, consideran-
do um certo código, um arranjo pode ser indexado em momentos diferentes por diferentes 
Capítulo 6 Variáveis Estruturadas: Arranjos Unidimensionais 165
variáveis ou constantes, que podem igualmente ser usadas em outros momentos para a inde-
xação de outros arranjos.
A qualquer momento pode-se acessar um determinado elemento de um arranjo, sem neces-
sidade de acessar antes os elementos que o precedem. O índice utilizado define o elemento 
sendo acessado. Um elemento de um arranjo é equivalente a uma variável simples. Assim, so-
bre qualquer elemento de um arranjo podem ser efetuadas todas as operações até aqui vistas 
para variáveis simples – preencher o elemento por leitura ou por atribuição, utilizar seu valor 
em expressões aritméticas, assim como consultar seu valor para operações, testes ou saídas.
A ideia base dos arranjos é por vezes utilizada em situações do mundo real como, por exem-
plo, no caso do professor que não sabe o nome de seus alunos no início do ano letivo e então 
entrega a eles,ordenadamente, cartões numerados de 1 a 30, do aluno sentado na primeira 
fileira até o aluno sentado na última fileira. Concluída a entrega dos cartões, passa a referir-
-se aos alunos usando o nome genérico aluno, seguido do número que consta no cartão que 
o aluno recebeu, que corresponde à sua posição no conjunto dos alunos da sala: aluno 10, 
aluno 29, etc. O conjunto de alunos da sala constitui “o arranjo” aluno, em que cada aluno 
é indexado por sua posição (índice) na sala.
Arranjos podem ser unidimensionais (de uma só dimensão, quando precisam de um só índice 
para identificar seus elementos) ou multidimensionais (de duas ou mais dimensões). Os arran-
jos de uma só dimensão também são chamados de vetores, e os de duas ou mais dimen-
sões, de matrizes. Este capítulo discutirá os arranjos unidimensionais, e o capítulo seguinte, 
os arranjos multidimensionais.
6.2 
 vetores
Um vetor é um arranjo de uma só dimensão que, portanto, necessita um só índice para 
acessar seus elementos.
Características de um vetor:
 ■ nome, comum a todos os seus elementos;
 ■ índices que identificam, de modo único, a posição dos elementos dentro do vetor;
 ■ tipo dos elementos (inteiros, reais, etc.), comum a todos os elementos do vetor;
 ■ conteúdo de cada elemento do vetor.
Na Figura 6.1 está representado graficamente um vetor de 10 elementos chamado de nota, 
com índices variando de 1 a 10, sendo o conteúdo do sétimo elemento igual a 8,5.
6.2.1 declaração de um vetor
Em pseudolinguagem, um arranjo é declarado com o seguinte tipo:
arranjo [<índice menor>..<índice maior>] de <tipo do vetor>
166 Algoritmos e Programação com Exemplos em Pascal e C
onde índice menor e índice maior definem os valores limites do intervalo de índices váli-
dos para acessar o vetor, bem como o tipo de índice que deve ser usado, e tipo do vetor 
é o tipo dos dados que podem ser armazenados no vetor. Observar que o nome da variável 
vetor definida com esse tipo será comum a todos os seus elementos.
A declaração a seguir corresponde ao vetor da Figura 6.1, de nome nota, com 10 elementos 
reais acessados através dos índices de 1 a 10:
Variável: nota (arranjo [1..10] de real)
6.2.2 acesso a um elemento de um vetor
O acesso a um elemento de um vetor é feito indicando o nome do vetor seguido do ín-
dice do elemento considerado, colocado entre colchetes. Na pseudolinguagem utilizada, os 
índices válidos para acessar um vetor devem estar compreendidos entre os valores dos índices 
definidos na sua declaração, incluindo os extremos. Assim, a referência ao sétimo elemento 
do vetor nota é nota[7].
Somente valores de índice válidos devem ser utilizados para acessar um vetor. Índices fora de 
intervalo provocam tentativas de acesso a áreas não previstas da memória, com resultados 
imprevisíveis e muitas vezes com reflexos aleatórios sobre o comportamento do algoritmo, 
gerando erros difíceis de localizar e corrigir. No caso do vetor nota, os índices válidos são os 
valores de 1 a 10.
Para identificar o índice de um elemento de um vetor podem ser utilizadas:
 ■ uma constante, indicando diretamente o valor do índice. Assim, nota[7] referencia o 
sétimo elemento do vetor nota;
 ■ uma variável, sendo que o valor contido nessa variável corresponde ao índice. Por exem-
plo, se, no momento do acesso, o valor da variável inteira ind for 3, então nota[ind] vai 
acessar o terceiro elemento do vetor nota;
1 2 3 4 5 6 7 8 9
nota
Índices
Nome
8,5
10
Valor
figura 6.1 Características de um vetor.
Capítulo 6 Variáveis Estruturadas: Arranjos Unidimensionais 167
 ■ uma expressão que será avaliada, sendo seu resultado utilizado como índice. Por exem-
plo, se o valor da variável inteira i for 4, então nota[i+1] se refere ao quinto elemento 
do vetor nota.
Variáveis diferentes podem ser utilizadas como índice para acessar o mesmo vetor. No exem-
plo a seguir, o vetor valor é preenchido por leitura com o auxílio da variável i (primeiro 
comando para/faça)e, em seguida, seu conteúdo é exibido com o auxílio da variável k (se-
gundo comando para/faça). Observar o uso da constante MAX, tanto para declarar o vetor 
quanto para acessá-lo.
Constante: MAX = 100
Variáveis:
 valor (arranjo [1..MAX] de inteiro)
 i, k (inteiro)
...
para i de 1 incr 1 até MAX faça
 ler (valor[i])
para k de 1 incr 1 até MAX faça
 escrever('Valor: ', valor[k])
A mesma variável pode ser utilizada, no mesmo momento ou em momentos diferentes, para 
acessar vetores diferentes. Por exemplo, supondo a declaração de dois vetores utilizados em 
um programa para corrigir uma prova, um contendo o gabarito das questões e o outro, as 
respostas de um aluno (Figura 6.2):
Constante: NUMQUEST = 30
Variáveis:
 gabarito, respostas (arranjo [1..NUMQUEST] de caractere)
1 2 3 4 5 6 7
gabarito
a e b d c a a c
... 30
1 2 3 4 5 6 7
respostas 
a e c a c d a c
... 30
resp
o
sta in
co
rreta
resp
o
sta in
co
rreta
resp
o
sta in
co
rreta
figura 6.2 Vetores gabarito e respostas (com respostas de um aluno).
168 Algoritmos e Programação com Exemplos em Pascal e C
O vetor respostas é reaproveitado a cada novo aluno processado. A correção da prova é 
feita comparando cada uma das respostas de um aluno com o elemento correspondente no 
vetor gabarito. O comando a seguir mostra a exibição dos valores desses dois vetores, o do 
gabarito e aquele com os resultados de um aluno, da primeira questão até a última, o que é 
feito utilizando o mesmo índice para acessar os dois vetores:
para k de 1 incr 1 até NUMQUEST faça
 escrever(gabarito[k], respostas[k])
6.2.3 inicialização de vetores
Não é necessário inicializar um vetor quando ele for totalmente preenchido por leitura, uma 
vez que todos os valores anteriormente armazenados nas posições de memória do vetor são 
descartados quando novos valores são colocados nelas.
Se um vetor for criado apenas parcialmente, restando posições não ocupadas no seu início, 
meio ou fim, ou se for utilizado em totalizações, devem ser tomados cuidados para garantir 
que os valores iniciais de todas as suas posições sejam os desejados. Isso pode ser feito ou 
inicializando o vetor na sua totalidade antes de sua utilização, ou inicializando cada posição 
do arranjo imediatamente antes de seu uso.
O trecho a seguir inicializa todos os elementos do vetor nota, de 10 elementos reais, com 
zeros:
para i de 1 incr 1 até 10 faça
 nota[i] ← 0
No caso de vetores preenchidos progressivamente, de forma contínua, visto que o número 
de posições ocupadas é sempre conhecido, é desnecessário inicializá-los antes do uso, desde 
que sempre sejam acessadas apenas as posições efetivamente ocupadas (ver Exercícios 6.2 e 
6.3, a seguir).
6.3 
 exemplos de uso de vetores
6.3.1 operações sobre um só vetor
Os trechos de código a seguir executam algumas operações sobre um vetor inteiro de 5 ele-
mentos chamado de valor:
Constante: MAX = 5
Variável: valor (arranjo [1..MAX] de inteiro)
Encerra aqui o trecho do livro disponibilizado para 
esta Unidade de Aprendizagem. Na Biblioteca Virtual 
da Instituição, você encontra a obra na íntegra.
DICA DO PROFESSOR
Assista ao vídeo para compreender melhor o que são os vetores, sua declaração e manipulação 
básica.
Conteúdo interativo disponível na plataforma de ensino!
 
EXERCÍCIOS
1) Em relação às estruturas de dados homogêneas, é INCORRETO afirmar que: 
A) Vetores são estruturas de dados homogêneas, também denominadas arranjos ou array (em 
inglês).
B) Vetores somente são úteis para pequenos conjuntos de dados (menores que 10 elementos), 
pois, para grandes conjuntos, o ideal é utilizar diversas variáveis simples (individuais).
C) Os índices dos arranjos geralmente são de tipos ordinais.
D) As variáveis que integram um vetor/arranjo compartilham um único nome e são 
identificadas individualmente por um índice.
E) Um elemento de um vetor/arranjo é equivalente a uma variável simples.
2) Um vetor é um arranjo de uma só dimensão que, portanto, necessita de apenas um 
índicepara acessar seus elementos. Selecione a alternativa a seguir que NÃO 
apresenta uma característica de um vetor. 
A) Nome, comum a todos os seus elementos.
B) Índices que identificam, de modo único, a posição dos elementos dentro do vetor.
C) Tipo dos elementos (inteiros, reais, etc.), comum a todos os elementos do vetor.
D) Acesso ao conteúdo de cada elemento do vetor.
E) Passagem de parâmetro complexa, pois exige a enumeração de cada elemento do vetor.
3) Considere o seguinte algoritmo em pseudocódigo: 
 
algoritmo "vetores" 
var 
valores: vetor[1..5] de real 
indice: inteiro 
inicio 
para indice de 1 ate 5 passo 1 faca 
escreva("Digite valor: ") 
leia(valores[indice]) 
fimpara 
fimalgoritmo 
 
Analise as alternativas a seguir e selecione a verdadeira. 
A) A variável "indice" pode ser do tipo real.
B) A declaração "valores: vetor[1..5] de real" cria um vetor com 5 posições e já inicializa o 
vetor com o seguinte conjunto de valores: { 1,2,3,4,5 }.
A declaração "valores: vetor[1..5] de real" cria, inicialmente, um vetor com 5 posições, 
indexadas pelos valores de 1 até 5, mas novos elementos são automaticamente 
C) 
adicionados, indexando novas posições, como 6, 7, 8, etc.
D) Pode-se indexar o vetor "valores" acessando sua posição inicial pelo índice 0 (zero).
E) Para acessar um elemento de um vetor, deve-se acessar o índice da posição desejada; para 
o índice, pode-se utilizar uma variável ou uma constante inteira.
4) Considere o seguinte algoritmo em pseudocódigo (os dois dígitos à esquerda 
identificam o número da linha do algoritmo): 
 
01- algoritmo "vetores" 
02- var 
03- valores: vetor[1..5] de real 
04- indice: inteiro 
05- inicio 
06- para indice de 1 ate 5 passo 1 faca 
07- escreva("Digite valor: ") 
08- leia(valores[indice]) 
09- fimpara 
10- para indice de 1 ate 5 passo 1 faca 
11- escreval("Valor[",indice,"]: ",valores[indice]) 
12- fimpara 
13- fimalgoritmo 
 
Analise as alternativas a seguir e selecione a INCORRETA. 
A) Entre as linhas 10 e 12 realiza-se a repetição que permite escrever o valor de cada um dos 
elementos armazenados no vetor.
B) Entre as linhas 06 e 09 realiza-se a repetição que faz a leitura de cada um dos elementos do 
vetor.
Se forem trocados de lugar os blocos de instruções das linhas 06-09 com 10-12, o C) 
programa será executado da mesma forma e funcionará corretamente.
D) Se a declaração da linha 03 for alterada, mudando o limite superior do arranjo, também 
devem ser alterados os limites superiores dos comandos "para...faça" nas linhas 06 e 10.
E) O bloco de comandos das linhas 06-09 poderia ser substituído pela seguinte sequência de 
comandos: 
 
escreva("Digite valor: ") 
leia(valores[1]) 
escreva("Digite valor: ") 
leia(valores[2]) 
escreva("Digite valor: ") 
leia(valores[3]) 
escreva("Digite valor: ") 
leia(valores[4]) 
escreva("Digite valor: ") 
leia(valores[5]) 
Considere o seguinte algoritmo em pseudocódigo: 
 
algoritmo "vetores" 
var 
v1: vetor[1..5] de real 
v2: vetor[1..4] de real 
v3: vetor[1..9] de real 
indice: inteiro 
inicio 
para indice de 1 ate 5 passo 1 faca 
escreva("Digite valor: ") 
leia(v1[indice]) 
fimpara 
para indice de 1 ate 4 passo 1 faca 
escreva("Digite valor: ") 
leia(v2[indice]) 
5) 
fimpara 
para indice de 1 ate 9 passo 1 faca 
se (indice <= 5) entao 
v3[indice] <- v1[indice] 
senao 
v3[indice] <- v2[indice-5] 
fimse 
fimpara 
para indice de 1 ate 9 passo 1 faca 
escreval("Valor[",indice,"]: ",v3[indice]) 
fimpara 
fimalgoritmo 
 
 
Analise as afirmativas a seguir e selecione a correta. 
A) Ao final da execução do algoritmo, os elementos do vetor v3 terão o produto dos 
elementos dos vetores v1 e v2.
B) O vetor v3 não foi lido, pois é muito grande.
C) O vetor v3 é o resultado da concatenação dos vetores v1 e v2.
D) As declarações dos vetores v1, v2 e v3 está incorreta e todos os vetores deveriam ter o 
mesmo tamanho.
E) O algoritmo precisa de um índice para acesso a cada um dos vetores, portanto, não pode 
utilizar uma única variável com esse fim.
NA PRÁTICA
Vetores são estruturas muito úteis, pois permitem a manipulação simples de um conjunto 
de dados.
Considere que uma professora tem 20 alunos. Para cada um, ela aplica três avaliações e 
calcula a média de cada aluno pela seguinte fórmula:
Média = (N1 * 2 + N2 * 3 + N3 * 5)/10
Assim, foi construído um algoritmo que manipula quatro vetores, um para cada nota e outro 
para a média de cada aluno. A professora tem uma folha para cada uma das notas, na qual há a 
lista de alunos e a nota obtida na avaliação. Portanto, cada vetor precisa ser lido separadamente 
e, depois, calcula-se a média.
algoritmo "notas"
var 
alunos, indice: inteiro 
nota1: vetor[1..20] de real 
nota2: vetor[1..20] de real 
nota3: vetor[1..20] de real 
media: vetor[1..20] de real
inicio
//leitura das informações de cada nota 
escreval("=============================================") 
escreval("Leitura das Informações Sobre os Alunos") 
escreval("=============================================") 
escreval("______________________________________________") 
escreval("______________Nota 01_________________________") 
escreval("______________________________________________")
para indice de 1 ate 20 faca 
escreval("Digite a nota 1 do aluno", indice) 
leia(nota1[indice]) 
fimpara
escreval("______________________________________________") 
escreval("______________Nota 02_________________________") 
escreval("______________________________________________")
para indice de 1 ate 20 faca 
escreval("Digite a nota 2 do aluno", indice) 
leia(nota2[indice]) 
fimpara
escreval("______________________________________________") 
escreval("______________Nota 03_________________________") 
escreval("______________________________________________")
para indice de 1 ate 20 faca 
escreval("Digite a nota 3 do aluno", indice) 
leia(nota3[indice]) 
fimpara
para indice de 1 ate 20 faca 
media[indice] <- ((nota1[indice] * 2) + (nota2[indice] * 3) + (nota3[indice] * 5))/10 
fimpara
escreval("=============================================") 
escreval("Listagem dos alunos e suas respectivas médias") 
escreval("=============================================")
para indice de 1 ate 20 faca 
escreva("Aluno:",indice) 
escreva(" Média:",media[indice]) 
escreval("") 
fimpara
escreval("=============================================")
fimalgoritmo
SAIBA +
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
Algoritmos e programação: Vetores (Scratch)
Existem variadas linguagens de programação, como C, PHP e Java, e algumas delas são 
utilizadas para aprendizagem, como Pascal e o Python, devido a facilidade da sua sintaxe. O 
Scratch é uma dessas linguagens onde são utilizados blocos lógicos, itens de som e imagem para 
criação de suas próprias histórias interativas, jogos e animações. Verifique no link abaixo como 
são criados vetores por meio dessa ferramenta.
Conteúdo interativo disponível na plataforma de ensino!
Algoritmos e programação: Vetores (VisuAlg)
Visualg é um programa gratuito de criação, edição, interpretação e execução de algoritmos, que 
utiliza o português estruturado (Portugol). O Visualg é empregado no ensino de lógica de 
programação em várias escolas e universidades no Brasil e no exterior. Veja no vídeo do 
Professor André Santanchè um tutorial para criar vetores utilizando essa ferramenta.
Conteúdo interativo disponível na plataforma de ensino!
Lógica de Programação - Vetores - Atribuição de valores e leitura de dados
Aprender a lógica de programação e a construção de algoritmos é o primeiro passo para você se 
tornar um excelente programador. Neste sentido, aprenda como atribuir valores aos vetores, ou 
seja, armazenar dados dentro dos vetores, para posteriormente, realizar a leitura desses dados
Conteúdo interativo disponível na plataforma de ensino!
Lógica de Programação- Vetores - Definição e declaração
Uma matriz é uma coleção de variáveis de mesmo tipo, que são acessíveis por um único nome. 
Um vetor ou array é uma matriz de uma única dimensão, onde cada variável do vetor é acessada 
por meio do uso de índices. Veja no link a seguir como declarar um vetor na criação de 
programas.
Conteúdo interativo disponível na plataforma de ensino!
Lógica de Programação - Vetores - Exemplo de uso no VisualG
Pratique um pouco mais verificando um exemplo prático do uso de vetores no VisualG. 
Acompanhe como armazenar notas e realizar o cálculo da média, exibindo o resultado na tela.
Conteúdo interativo disponível na plataforma de ensino!
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 
inicialcom 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ção de 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 desenvolvidospara 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ções de 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ãorepresentados 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 documento BJN1UPS1UW-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]) 
1) 
se (R[indice] = G[indice]) entao 
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.
E) O valores digitados para os vetores de gabarito e de repostas não são consistidos, portanto, 
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 
2) 
se (V[j] > V[j+1]) entao 
T(V[j],V[j+1]) 
fimse 
fimpara 
fimpara 
fimprocedimento 
 
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.
A) var 
Nota1, Nota2, Nota3, Media: vetor[1..25] de inteiro 
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
var E) 
Nota1, Nota2, Nota3, Nota4, Nota5, Nota6, Nota7, Nota8, Nota9, Nota10, Nota11, 
Nota12, Nota13, Nota14, Nota15, Nota16, Nota17, Nota18,

Outros materiais