Você está na página 1de 23

Computação

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:

–  O programa abaixo calcula a média aritméRca entre cinco valores:

Como seria este


programa se precisarmos
calcular a média entre
200 notas?

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];

–  Tamanho representa o número de elementos;


–  O índice do vetor varia de 0 a (tamanho - 1);
–  Ex.:
Declara um vetor do Rpo float com 5 posições

0.0 0.0 0.0 0.0 0.0

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

Posições: nota[0] nota[1] nota[2] nota[3] nota[4]

Í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.

Armazena o valor lido


na i-ésima posição.

Acessa o valor da i-ésima


8
posição.
CIn.ufpe.br
Vetores
•  Atenção! Os valores nos colchetes [ ] possuem significados
diferentes dependendo de onde estão sendo uRlizados:
–  Na declaração de um vetor: informa a quanRdade N de posições que
devem ser alocadas;
–  Após a declaração: informa a posições que será acessada para leitura ou
gravação de informação. Deve ser um valor entre [0...(N-1)]

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:

Deveria ser: i < 20

A posição pares[20]
está fora do vetor!

Onde está o erro?

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:

Vetores só podem ser inicializados dessa forma em sua


declaração!

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

•  É possível fazer algo semelhante uRlizando alocação dinâmica,


assunto que será visto posteriormente.
14
CIn.ufpe.br
Vetores
•  Porém, pode-se uRlizar constantes #define, pois estas são
conhecidas em tempo de compilação:
Recomendável! pois facilita a
legibilidade e a manutenção do
código. Se for preciso aumentar o
número de alunos basta modifica-lo
em um local.

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

Passa este vetor como


argumento para a função
“media”

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

Declaração de um vetor float


de 10 posições

Passa este vetor juntamente


com os outros valores como
argumento para a função
“incrementar”

Imprime o vetor modificado por


“incrementar”
18
CIn.ufpe.br
Posição de vetor como parâmetro
de funções
Recebe uma nota float, e
a média com a qual a
nota será comparada

Declaração de um vetor com


as notas já preenchidas

Passa o valor na posição i do


vetor como argumento para a
função “aprovado”

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

Você também pode gostar