Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H....

43
Pearson Education Slide 1

Transcript of Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H....

Page 1: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 1

Page 2: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 2

Capítulo 5

Criado por Frederick H. Colclough, Colorado Technical University

Vetores

Page 3: 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

Page 4: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 5: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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)

Page 6: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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]

Page 7: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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”

Page 8: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 8

Exemplo de Programa com VetorPainel 5.1 página 118

Page 9: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 9

Exemplo de Programa com Vetor (cont)

Painel 5.1 página 119

Page 10: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 11: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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’

Page 12: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 13: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 14: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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!

Page 15: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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)

Page 16: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 16

Um Vetor na MemóriaPainel 5.2

página 121

Page 17: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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;

Page 18: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 19: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 20: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 21: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 22: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 23: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 23

Exemplo de Vetor Completo como Argumento

Painel 5.3 página 133

Page 24: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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!

Page 25: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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’

Page 26: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 27: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 28: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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…

Page 29: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 29

Programando como Vetores Muitas utilidades

Vetores parcialmente preenchidos Deve ser declarado algum ‘tamanho máximo’

Ordenação Busca

Page 30: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 31: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 31

Exemplo de Vetores Parcialmente Preenchidos

Painel 5.5 página 133

Page 32: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 33: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 33

Busca em um Vetor Uso muito comum de vetores Painel 5.6 no próximo slide

Page 34: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 34

Busca em um Vetor (Cont)Painel 5.6

página 135

Page 35: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 35

Busca em um Vetor (Cont)

Painel 5.6

página 136

Page 36: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 36

Ordenando um Vetor Algorítmo de

Ordenação por Seleção

Painel 5.7 página 137

Page 37: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 37

Exemplo de Ordenação de um Vetor

Painel 5.8 página 137

Page 38: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 38

Exemplo de Ordenação de um Vetor (cont)

Painel 5.8

página 138

Page 39: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

Pearson Education Slide 39

Exemplo de Ordenação de um Vetor (cont)

Painel 5.8 página 139

Page 40: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

Page 41: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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

}

Page 42: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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’

Page 43: Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.

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’