Pearson Education Slide 1
Pearson Education Slide 2
Capítulo 5
Criado por Frederick H. Colclough, Colorado Technical University
Vetores
Pearson Education Slide 3
Objetivos do Estudo Introdução aos Vetores
Declarando e referenciando vetores Loops for e vetores Vetores na Memória
Vetores em Funções Vetores como argumentos de Funções, valores de
retorno
Programando com Vetores Vetores parcialmente preenchidos, busca,
ordenação
Vetores Multidimensionais
Pearson Education Slide 4
Introdução aos Vetores Definição de vetor :
Uma coleção de dados do mesmo tipo ‘Agregado’ de dados do mesmo tipo
Significa ‘agrupar’ int, float, double e char são tipos de dados
simples
Usado para listar dados semelhantes Pontos marcados, temperaturas, nomes, etc. Evita a declaração múltipla de variáveis simples Pode manipular ‘listas’ como uma entidade
Pearson Education Slide 5
Declarando Vetores Declarar o vetor alocar na memória
int nota[5]; Declara o vetor de 5 inteiros chamado ‘nota’ Semelhante a declaração de 5 variáveis:
int nota[0], nota[1], nota[2], nota[3], nota[4]
Partes individuais chamadas de diversas formas: Variáveis indexadas ou subscritas ‘Elementos’ do vetor Valor entre colchetes chamado índice ou
subscrito Numerados a partir do 0 (Zero)
Pearson Education Slide 6
Acessando Vetores Acesso usando o índice/subscrito
cout << nota[3]; Note os dois usos dos colchetes:
Na declaração, especifica o TAMANHO do vetor Em qualquer outro lugar, especifica um subscrito
Tamanho e subscrito precisam ser literais int nota[NOTAS_MAXIMAS]; nota[n+1] = 99;
Se n for 2, é idêntico a: nota[3]
Pearson Education Slide 7
Uso do Vetor Poderoso Mecanismo de
Armazenamento Pode-se usar comandos como:
“Faça isso com a ia variável indexada” onde, i é calculada pelo programa
“Mostre todos os elementos do vetor nota” “Preencha o vetor nota com os dados
digitados” “Encontre o valor mais alto no vetor nota” “Encontre o valor mais baixo no vetor nota”
Pearson Education Slide 8
Exemplo de Programa com VetorPainel 5.1 página 118
Pearson Education Slide 9
Exemplo de Programa com Vetor (cont)
Painel 5.1 página 119
Pearson Education Slide 10
Loops For com Vetores Loop natural de contagem
Trabalha bem contando elementos ‘através’ de um vetor
Exemplo:for (idc = 0; idc<5; idc++){
cout << nota[idc] << “off by “<< max – nota[idc] << endl;
} Variável de controle do loop (idc) conta de 0 até
5
Pearson Education Slide 11
Vetor: Armadilha Os índices do vetor sempre começam com
0! Zero é o ‘primeiro’ número para os
cientistas da computação C++ ‘permitirá’ que você vá além do
limite Resultados imprevisíveis O compilador não detecta esses erros!
O programador : é responsável por ‘ficar dentro do limite’
Pearson Education Slide 12
Exemplo de Vetor: Armadilha Os índices vão de 0 até (tamanho_declarado – 1)
Exemplo:double temperatura[24]; // 24 é o tamanho// Declara um vetor de 24 valores double chamado temperatura
Eles estão indexados como:temperatura[0], temperatura[1] … temperatura[23]
Erro comum:temperatura[24] = 5;
O índice 24 está ‘fora da escala’! Nenhum aviso e o resultado poderá ser desastroso
Pearson Education Slide 13
Constante Definida como Tamanho de Vetor
Sempre utilize uma constante definida para
o tamanho do vetor Exemplo:
const int NUMERO_DE_ALUNOS = 5;int nota[NUMERO_DE_ALUNOS];
Melhora a legibilidade Melhora a versatilidade Torna fácil a manutenção
Pearson Education Slide 14
Uso de Constante Definida Utilize sempre que o tamanho do vetor for
necessário Em um loop for:
for (idc = 0; idc < NUMERO_DE_ALUNOS; idc++){
// Manipular o vetor}
Em cálculos envolvendo tamanho:lastIndex = (NUMERO_DE_ALUNOS – 1);
Quando passar vetores para funções Se o tamanho muda requer só UMA
mudança no programa!
Pearson Education Slide 15
Vetores na Memória Recordando variáveis simples:
Alocadas na memória em um ‘endereço’ Declarações de vetor alocam memória
parao vetor inteiro
Alocação seqüencial Significa endereços alocados ‘um depois do
outro Permite cáclulos indexados
A ‘adição’ do vetor é simples começando do (índice 0)
Pearson Education Slide 16
Um Vetor na MemóriaPainel 5.2
página 121
Pearson Education Slide 17
Inicializando Vetores As variáveis simples podem ser
inicializadas
na declaração:int preco = 0; // 0 é o valor inicial
Vetores também podem :int criancas[3] = {2, 12, 1};
Eqüivalente a:int criancas[3];criancas[0] = 2;criancas[1] = 12;criancas[2] = 1;
Pearson Education Slide 18
Auto-Inicialização de Vetores Se menos valores que o tamanho
fornecido: Preenche do começo Preenche o ‘resto’ com zero do tipo base do
vetor
Se o tamanho do vetor for omitido Declare o vetor como tamanho baseado no
número de valores de inicialização Exemplo:
int b[] = {5, 12, 11}; Aloca o vetor b para o tamanho de 3
Pearson Education Slide 19
Vetores em Funções Como argumentos para funções
variáveis indexadas Um ‘elemento’ individual de um vetor pode ser
parâmetro de um função Vetores completos
Todos os elementos do vetor podem ser passados
como ‘uma entidade’
Como valor retornado de uma função Pode ser feito capítulo 10
Pearson Education Slide 20
Variáveis Indexadas como Argumentos Variável indexada é manipulada como
umavariável de tipo-base do vetor
Dada a declaração de função :void minhaFuncao (double par1);
E essas declarações:int i; double n, a[10];
Podemos fazer essas chamadas:minhaFuncao(i); // i é convertido para doubleminhaFuncao(a[3]); // a[3] é doubleminhaFuncao(n); // n é double
Pearson Education Slide 21
Sutileza da Indexação Considere:
minhaFuncao(a[i]); O valor de i é determinado primeiro
Determina qual variável indexada é enviada
minhaFuncao(a[i*5]); Perfeitamente Legal, do ponto de vista do
compilador O programador é o responsável por
permane-cer ‘dentro dos limites’ do vetor
Pearson Education Slide 22
Vetores Completos como Argumentos Parâmetro formal pode ser um vetor
completo O argumento passado na chamada de
função
é o nome do vetor Chamado ‘parâmetro vetorial’
Também envia o tamanho do vetor Como um segundo parâmetro Parâmetro formal tipo int
Pearson Education Slide 23
Exemplo de Vetor Completo como Argumento
Painel 5.3 página 133
Pearson Education Slide 24
Exemplo de Vetor Inteiro como Argumento
Dado o exemplo anterior: Em alguma definição de função main(),
considere essas chamadas:int nota[5], numeroDeNotas = 5;preenche(nota, numeroDeNotas);
1o argumento é um vetor completo 2o argumento é um inteiro
Nenhum colchetes no argumento vetorial!
Pearson Education Slide 25
Vetor como Argumento: Como? O que realmente é passado? Pense no vetor como 3 ‘partes’
Endereço da primeira variável indexada (arrName[0])
Tipo-base de vetor Tamanho do vetor
Somente a 1a parte é passada! Exatamente o endereço inicial do vetor Muito parecido com ‘passar por referência’
Pearson Education Slide 26
Parâmetros Vetoriais Pode parecer estranho
Nenhum colchetes no argumento vetorial! Precisa enviar o tamanho separadamente!
Uma propriedade legal: Podemos usar a mesma função para
preencherum vetor de qualquer tamnho
Isso é um exemplo das propriedades de ‘reutilização’ das funções Exemplo:
int nota[5], tempo[10];preenche(nota, 5);preenche (tempo, 10);
Pearson Education Slide 27
O Parâmetro Modificador const Lembre-se: O parâmentro vetorial atual-
mente passa o endereço do 1o elemento Parecido com ‘passar por referência’
A função pode então modificar o vetor! Freqüentemente desejado, algumas vezes não!
Proteje o conteúdo do vetor contra modificações Utilize o modificador ‘const’ antes do parâmetro vetorial
Chamado ‘parâmentro vetorial constante’ Diz ao compilador para ‘não permitir’ modificações
Pearson Education Slide 28
Funções que Retornam um Vetor Funções não podem retornar um vetor
da
mesma forma que retornam um valor de
tipo int ou double Isso requer o uso de um ‘ponteiro’ Será discutido no capítulo 10…
Pearson Education Slide 29
Programando como Vetores Muitas utilidades
Vetores parcialmente preenchidos Deve ser declarado algum ‘tamanho máximo’
Ordenação Busca
Pearson Education Slide 30
Vetores Parcialmente Preenchidos Difícil saber o tamanho exato necessário Declarar o vetor com o maior tamanho
possível Precisa guardar o ‘caminho’ do dado válido
no
vetor É necessário uma variável para ‘caminho’ int numeroUsado;
Segue o número atual de elementos em um vetor
Pearson Education Slide 31
Exemplo de Vetores Parcialmente Preenchidos
Painel 5.5 página 133
Pearson Education Slide 32
Constantes Globais vs. Parâmetros Constantes tipicamente ‘globais’
Declaradas acima de main() Funções então têm escopo para a
constante de tamanho do vetor Não é necessário então enviar como
parâmetro? Tecnicamente sim
O que deveríamos fazer de qualquer jeito? A definição de função talvez em arquivo
separado A função talvez usada por outros programas
Pearson Education Slide 33
Busca em um Vetor Uso muito comum de vetores Painel 5.6 no próximo slide
Pearson Education Slide 34
Busca em um Vetor (Cont)Painel 5.6
página 135
Pearson Education Slide 35
Busca em um Vetor (Cont)
Painel 5.6
página 136
Pearson Education Slide 36
Ordenando um Vetor Algorítmo de
Ordenação por Seleção
Painel 5.7 página 137
Pearson Education Slide 37
Exemplo de Ordenação de um Vetor
Painel 5.8 página 137
Pearson Education Slide 38
Exemplo de Ordenação de um Vetor (cont)
Painel 5.8
página 138
Pearson Education Slide 39
Exemplo de Ordenação de um Vetor (cont)
Painel 5.8 página 139
Pearson Education Slide 40
Vetores Multidimensionais Vetores com mais de um índice
char pagina[30][100]; Dois índices: um ‘vetor de vetores’ Visualize as:
pagina[0][0], pagina[0][1], …, pagina[0][99]pagina[1][0], pagina[1][1], …, pagina[1][99]…pagina[29][0], pagina[29][1], …, pagina[29][99]
C++ permite qualquer número de índices Comumente não mais que 2
Pearson Education Slide 41
Parametros Vetoriais Multidimensionais Semelhante a um vetor de uma dimensão
1a dimensão não dada Fornecida como segundo parâmetro
2a dimensão é dada Exemplo:
void mostraPagina(const char p[][100], int tamanhoDimensao1){
for (int indice1=0; indice1<tamanhoDimensao1; indice1++)
{for (int indice2=0; indice2 < 100; indice2+
+)cout << p[indice1][indice2];
cout << endl;}
}
Pearson Education Slide 42
Sumário 1 Vetor é uma coleção de dados do ‘mesmo tipo’ Variáveis indexadas de vetor usadas exata-
mente como qualquer outra variável Loop for é uma boa forma de se percorrer os
ítens de um vetor O Programador é o responsável por permane-
cer ‘dentro dos limites’ do vetor Parâmentro vetorial é um ‘novo’ tipo
Parecido com ‘passar por referência’
Pearson Education Slide 43
Sumário 2 Elementos armazenados seqüencialmente
Porções ‘adjacentes’ de memória Somente o endereço do 1o elemento é Passado às funções
Vetores parcialmente preenchidos mais uma varíavelpara controlar quando o vetor é usado
Parâmetro vetorial constante Previne modificações no conteúdo do vetor
Vetores Multidimensionais Cria ‘vetor de vetores’