Escolar Documentos
Profissional Documentos
Cultura Documentos
Eletrônica
Vetores
Prof.: Hansenclever de França Bassani (Hans)
h8@cin.ufpe.br
Site da disciplina: www.cin.ufpe.br/~h8/ce
CIn.ufpe.br
Problema
• Como armazenar grandes quan;dades de Informações nos
programas?
– Até agora, vimos construções de programação que permitem guardar
uma única informação de cada vez: Variável e constante
– Neste caso, a solução seria criar uma variável para cada valor que
desejamos armazenar;
• Porém, como fazemos se precisarmos armazenar centenas ou
milhares de valores?
– Criar centenas de variáveis não é uma boa solução, porém hoje veremos
como podemos trabalhar de outra forma.
CIn.ufpe.br
Exemplo
• A média aritméRca de um conjunto de valores é dada pela
seguinte expressão:
CIn.ufpe.br
Solução: Variáveis Compostas
Homogêneas
• Interpretadas como um conjunto (coleção) de valores de um
mesmo Rpo de dados.
• Podem ser:
– Unidimensionais
– MulRdimensionais
• Requerem uma sintaxe diferente para serem manipuladas.
4
CIn.ufpe.br
Variáveis Compostas
Unidimensionais
• Vetores (Arrays)
– Tipo de dado usado para representar uma coleção de variáveis de um
mesmo Rpo.
– Estrutura de dados homogênea e unidimensional.
– Sintaxe:
;po nome_do_vetor[tamanho];
5
CIn.ufpe.br
Variáveis Compostas
Unidimensionais
• São uma coleção de caixinhas, onde cada caixinha armazena
uma variável;
• Semelhante a uma coleção de gavetas do armário agrupadas;
• As variáveis são alocadas sequencialmente na memória, onde o
endereço mais baixo corresponde ao primeiro elemento (índice
0) do vetor.
• O acesso a cada posição do vetor é realizado uRlizando-se seu
índice:
0.0 0.0 0.0 0.0 0.0
Índices: 0 1 2 3 4
6
CIn.ufpe.br
Vetores
• Um determinado elemento do vetor pode ser acessado usando
o nome do vetor seguido do índice do elemento entre colchetes
([ ])
• A expressão notas[2] se refere ao 3º elemento do array abaixo
(contendo o valor 1.9):
2.5 3.2 1.9 4.1 2.0
notas[2]
• A expressão notas[2] representa um local para armazenar um
float e pode ser uRlizada da mesma forma que uma variável do
Rpo float.
CIn.ufpe.br
Vetores
• Exemplo com o uso de vetores: Ler a nota de 5 alunos de uma
disciplina e calcular a média.
Declara um vetor de
5 posições.
Declara um vetor de
N=5 posições.
Grava informação na
posição i em [0...4].
Lê informação da
posição i em [0...4].
9 CIn.ufpe.br
Vetores e seus limites
• Cuidado! Apesar do vetor do exemplo possuir cinco posições, o
índice da úlRma posição é 4 e acessar notas[5] causa falha de
memória.
• Ao uRlizar o índice para referenciar um elemento do vetor, este
índice deve permiRr o acesso a um elemento válido (em um
endereço da memória alocado para o vetor);
• Índice deve variar de 0 à [tamanho informado na declarado -1];
• C não avisa quando o limite de um vetor é excedido!
• Se o programa transpuser o fim do vetor durante a operação de
atribuição, os valores serão armazenados em posições inválidas
de memória, ou sobrescrevendo outras variáveis;
O programador tem a responsabilidade de
10 verificar o limite do vetor!
CIn.ufpe.br
Vetores e seus limites
• O acesso fora dos limites é um erro comum de programação no
uso de vetores dentro de laços;
– Deve-se prestar atenção na parte de teste do laço:
A posição pares[20]
está fora do vetor!
11
CIn.ufpe.br
Vetores
• A inicialização de vetores é realizada da seguinte forma:
{expressões}, onde expressões representam expressões de
Rpos válidos separadas por vírgulas;
• Vetores podem ser inicializados na declaração:
• Ou, simplesmente:
12
CIn.ufpe.br
Vetores
• No caso de uRlizar inicializadores de vetores, note que:
– Quando não especificado o tamanho, o compilador aloca espaço
suficiente para armazenar todos os valores conRdos na inicialização;
• Quando o tamanho for especificado e houver a lista de
inicialização:
– Se há menos inicializadores que o tamanho especificado, os outros serão
zero;
– Mais inicializadores que o necessário implica em um aviso de compilação
(warning).
• Quando o vetor não for inicializado, o tamanho deve ser
especificado na declaração. Nesse caso os valores das posições
de memória irão conter lixo de memória.
13
CIn.ufpe.br
Vetores
• Em ‘C’ não é permiRda a declaração de vetor uRlizando
variáveis como tamanho.
• O tamanho de um vetor tem que ser determinado em tempo de
compilação, portanto deve ser uRlizado um valor literal não
uma variável.
• Exemplo:
Erro!
nAlunos é desconhecido
em tempo de compilação
15 CIn.ufpe.br
Vetores como parâmetro de
funções
• Um vetor pode ser passado como argumento para uma função;
– Parâmetro da função deve ser do Rpo:
;po nome[]
• Ao passar um vetor para uma função podemos modificar o
conteúdo deste vetor dentro da função:
– Passa-se na verdade o endereço do primeiro elemento do vetor na
memória (veremos em breve!);
– Os demais estão nas posições seguintes de memória;
• Podemos passar também um elemento em parRcular de um
vetor para uma função
– O parâmetro deve ser do mesmo Rpo do vetor
16
CIn.ufpe.br
Vetores como parâmetro de
funções
Recebe um vetor float e o
número de elementos
como parâmetro e
calcula a média
Declaração de um vetor
float de 10 posições
17
CIn.ufpe.br
Vetores como parâmetro de
funções
Recebe um vetor float, o
número de elementos e
um valor que será
uRlizado para modificar o
vetor
19
CIn.ufpe.br
A;vidade 1
• Sendo V o vetor abaixo e as variáveis X=2 e Y=4, quais os
valores de:
2 6 8 3 10 9 1 21 33 14
0 1 2 3 4 5 6 7 8 9
a) V[X+1]
b) V[X] + 1
c) V[X+Y]
d) V[8-V[2]]
e) V[V[V[7]]]
20
CIn.ufpe.br
A;vidades adicionais - Vetores
1. Construa um programa que preenche um vetor de inteiros de
100 números, colocando 0 nas posições pares e 1 nas ímpares.
2. Construa um programa que lê, soma e imprime o resultado da
soma de um vetor de inteiros de 10 posições.
3. Construa um programa que mulRplique os valores de um vetor
de reais de 20 posições pelos valores de um outro vetor de
reais de 20 posições. O primeiro vetor deve ser inicializado
com valores crescentes a parRr de 1 e o segundo vetor com
valores decrescentes a parRr de 20. Os resultados das
mulRplicações devem ser armazenados num terceiro vetor.
4. Leia um vetor de 16 posições e troque os 8 primeiros valores
pelos 8 úlRmos e vice-versa. Escreva ao final o vetor obRdo.
5. Refaça as questões anteriores criando uma função para cada
uma delas.
21
CIn.ufpe.br
Desfio – bubble sort
• Construa um programa que leia e guarde os elementos em um
vetor de 20 posições. Em seguida o algoritmo ordena os
elementos do vetor de acordo com o bubble sort:
– O bubble sort, ou ordenação por flutuação (literalmente "por bolha"), é
um algoritmo de ordenação dos mais simples.
– A ideia é percorrer o vetor diversas vezes, a cada passagem fazendo
flutuar para o topo o maior elemento da sequência.
– Essa movimentação lembra a forma como as bolhas em um tanque de
água procuram seu próprio nível, e disso vem o nome do algoritmo.
• Transforme este programa em uma função para a ordenação de
vetores
• Veja um exemplo no próximo slide
22
CIn.ufpe.br
Desfio – Passo-a-passo
• Tomemos o conjunto de números "5 1 4 2 8" , e classificar o vetor de número do menor para o
maior usando bubble sort . Em cada etapa, os elementos escritos em negrito estão sendo
comparados. Três passagens serão necessárias.
• Primeiro passagem :
– ( 5 1 4 2 8) para (1 5 4 2 8) , aqui , o algoritmo compara os dois primeiros elementos , e troca-os já que 5 > 1 .
– (1 5 4 2 8) para (1 4 5 2 8), troca , já que 5> 4
– (1 4 5 2 8) para ( 1 4 2 5 8), troca, já que 5> 2
– ( 1 4 2 5 8) para ( 1 4 2 5 8), agora, uma vez que esses elementos já estão em ordem (5 < 8) , o algoritmo não os
troca.
• Segunda passagem:
– ( 1 4 2 5 8) para (1 4 2 5 8), não troca
– ( 1 4 2 5 8) para (1 2 4 5 8), troca, já que 4 > 2
– ( 1 2 4 5 8) para (1 2 4 5 8), não troca
– ( 1 2 4 5 8) para (1 2 4 5 8), não troca
• Agora, o vetor já está ordenado, mas nosso algoritmo não sabe disso. O algoritmo precisa de
mais uma passagem inteira, sem qualquer troca para saber que está ordenado.
• Terceira passagem :
– ( 1 2 4 5 8 ) para ( 1 2 4 5 8 ), não troca
– ( 1 2 4 5 8 ) para ( 1 2 4 5 8 ), não troca
– ( 1 2 4 5 8 ) para ( 1 2 4 5 8 ), não troca
– ( 1 2 4 5 8 ) para ( 1 2 4 5 8 ), não troca
• Não houve troca: fim! (o algoritmo termina quando ocorre uma passagem por todo o vetor sem
que haja nenhuma troca)
23
CIn.ufpe.br