tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf ·...

71
Vetores e Ponteiros INF1005: Programação 1

Transcript of tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf ·...

Page 1: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Vetores e PonteirosINF1005: Programação 1

Page 2: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Tópicos Principais

• Declaração e Inicialização de Vetores

• Exemplos de Manipulação de Vetores

• Ponteiros

• Passagem de Vetores e Ponteiros paraFunções

• Busca em Vetores

Page 3: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Introdução

• Vetores são um mecanismo que nospermite armazenar um conjunto de valoresna memória do computador

• O vetor é uma fileira de variáveis demesmo tipo que ocupa uma regiãocontínua de memória.

Page 4: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Introdução

Um vetor de inteiros

3 1 9 5 1

Page 5: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Declaração de Vetores

• Para declarar um vetor, precisamosespecificar o tipo das variáveis do vetor(um vetor só pode armazenar um tipo devariável) e o tamanho do vetor.

Page 6: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Declaração de Vetores

• Para declarar um vetor, precisamosespecificar o tipo das variáveis do vetor(um vetor só pode armazenar um tipo devariável) e o tamanho do vetor.

tipo nome_vetor[tamanho];

Page 7: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Declaração de Vetores

int nome_vetor[5];

? ? ? ? ?

A declaração acima reserva umespaço na memória para 5 inteiros

Page 8: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Declaração de Vetores

int nome_vetor[5];

? ? ? ? ?

Esse espaço de memória éacessado através da palavra

nome_vetor

Page 9: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Declaração de Vetores

int nome_vetor[5];

? ? ? ? ?

Todas as variáveis do vetorinicialmente possuem valores

não relevantes para a aplicação

Page 10: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Inicializando posiçõesdo vetor

int nome_vetor[5];

? ? ? ? ?

0 1 2 3 4

Page 11: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Inicializando posiçõesdo vetor

int nome_vetor[5];

5 ? ? ? ?

0 1 2 3 4

nome_vetor[0] = 5;

Page 12: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Inicializando posiçõesdo vetor

int nome_vetor[5];

5 ? ? 7 ?

0 1 2 3 4

nome_vetor[0] = 5;

nome_vetor[3] = 7;

Page 13: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Inicializando posiçõesdo vetor

int nome_vetor[5];

5 2 ? 7 ?

0 1 2 3 4

nome_vetor[0] = 5;

nome_vetor[3] = 7;

nome_vetor[1] = 2;

Page 14: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Inicializando posiçõesdo vetor

int nome_vetor[5];

5 2 3 7 ?

0 1 2 3 4

nome_vetor[0] = 5;

nome_vetor[3] = 7;

nome_vetor[1] = 2;

nome_vetor[2] = 3;

Page 15: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Exemplos deDeclaração

• int a, b[20];

• float c[10];

• double d[30], e, f[5];

Page 16: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Exemplos deDeclaração

• int a, b[20];

• float c[10];

• double d[30], e, f[5];

Declara um inteiro e umvetor de inteiros de

20 posições

Page 17: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Exemplos deDeclaração

• int a, b[20];

• float c[10];

• double d[30], e, f[5];

Declara um vetor devariáveis de tipo float

de 10 posições

Page 18: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Exemplos deDeclaração

• int a, b[20];

• float c[10];

• double d[30], e, f[5];

Declara um vetor de30 posições,

uma variável e outrovetor de 5 posições.

Todas as variáveis sãodo tipo double.

Page 19: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Exemplo de Declaraçãocom Inicialização

int v[5] = {12, 5, 34, 32, 9};

12 5 34 32 9

0 1 2 3 4

Page 20: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Exemplos

• Imprimindo valores de um vetor

• Somatório

• Calculando média e variância

• Histograma

• Polinômios

Page 21: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Imprimindo valores deum vetor

#include <stdio.h>

int main (void){ int i; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9};

for (i=0; i<6; i++) { printf("%f", v[i]); }

return 0;}

Page 22: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Somatório

#include <stdio.h>

int main (void){ int i; float s = 0.0; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9};

for (i=0; i<6; i++) { s = s + v[i]; }

printf("%f", s);

return 0;}

Page 23: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Calculando Média eVariância

• Média

• Variância

Page 24: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Calculando média evariância

#include <stdio.h>

int main (void){ int i; float m = 0.0, var = 0.0; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9};

for (i=0; i<6; i++) { m = m + v[i]; }

m = m / 6;

for(i=0; i<6; i++) { var = var + (v[i] - m) * (v[i] - m); }

var = var / 6;

return 0;}

Page 25: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Histograma

• Um histogramamostra adistribuição devalores em umconjunto

Page 26: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Histograma

• Problema: Queremos calcular o histogramadas notas dos alunos em uma prova(quantos notas estão entre 0.0 e 1.0, 1.0 e2.0, etc).

Page 27: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Histograma/*n: numero de notas em v --- v: notas --- min: nota minimamax: nota maxima --- ni: numero de intervalos no histograma --- h: histograma*/

void histograma (int n, float v[ ], float min, float max, int ni, float h[ ]){ int i, j; float delta = (max - min) / ni; /* inicializa vetor de histograma */ for (i=0; i<ni; i++) { h[i] = 0; } /* calcula número de ocorrências em cada intervalo */ for (j=0; j<n; j++) { i = (int) ((v[j]-min) / delta); if (i == ni) { i = ni-1; } h[i]++; } /* calcula freqüência */ for (i=0; i<ni; i++) { h[i] = h[i] / n; }}

Page 28: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Polinômios

• Um polinômio é uma função matemáticadefinida por:

• Onde a0, a1, ..., ag são números reaisdenominados coeficientes do polinômio eg é um número inteiro que representa ograu do polinômio

Page 29: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Polinômios

• Podemos usar vetores para representá-los

2x3 + 8x + 5 5 8 0 2

Page 30: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Avaliação dePolinômios

• Avaliar um polinômio significa calcular ovalor númerico do polinômio para umdeterminado x (y = a(x)).

Page 31: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Avaliação dePolinômios

número decoeficientes

coeficientes

Page 32: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Igualdade dePolinômios

• Dois polinômios de mesmo grau são iguaisse todos os seus coeficientes de mesmograu forem iguais

Page 33: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Igualdade dePolinômios

int igualdade (int n, float a[ ], float b[ ]){ int i; for (i=0; i<n; i++) { if (a[i] != b[i]) { return 0; } } return 1;}

Page 34: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Soma de Polinômios

• A soma de dois polinômios de mesmo graué dada por:

• Que matematicamente é expressa por:

Page 35: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Soma de Polinômios

entrada saída

Page 36: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Derivada de Polinômio

• Se um polinômio possui grau g, suaderivada tem grau g-1 e pode serexpressada por:

• Os termos da derivada são expressos por:

Page 37: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Derivada de Polinômio

Page 38: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Produto de Polinômios

• O produto de dois polinômios de grau ggera outro polinômio de grau 2g.

Page 39: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Produto de Polinômios• Exemplo:

- (1 + 2x + 3x2) * (2 + 3x + 4x2)

- v[0] = 1 * 2

- v[1] = 1*3 + 2*2

- v[2] = 1*4 + 2*3 + 3*2

- v[3] = 2*4 + 3*3

- v[4] = 3*4

Page 40: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Produto de Polinômios

• Como o grau do polinômio de saída é 2g esabemos que n, número de coeficientes dopolinômio de entrada, é igual a g+1, onúmero de coeficientes do vetor de saídaé:

2g+1 = 2(n-1)+1 = 2n-1

Page 41: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Produto de Polinômios

void produto(int n, float a[], float b[], float c[]) {

int i, j;int m = 2*n - 1;

for (i = 0; i < m; i++) {c[i] = 0.0;

}

for (i = 0; i < n; i++) {

for (j = 0; j < n; j++) {

c[i+j] += a[i] * b[j];}

}}

Page 42: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Ponteiros

• Ponteiros são variáveis que armazenamendereços de memória.

Page 43: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Ponteiros

Variável Endereço Conteúdo

a 0 ?

p 4 ?

8

12

int main (void){ int a; int *p; p = &a; *p = 2; return 0;}

Page 44: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Ponteiros

Variável Endereço Conteúdo

a 0 ?

p 4 ?

8

12

int main (void){ int a; int *p; p = &a; *p = 2; return 0;}

variávelponteiro para

int

Page 45: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Ponteiros

Variável Endereço Conteúdo

a 0 ?

p 4 0

8

12

int main (void){ int a; int *p; p = &a; *p = 2; return 0;}

Page 46: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Ponteiros

Variável Endereço Conteúdo

a 0 2

p 4 0

8

12

int main (void){ int a; int *p; p = &a; *p = 2; return 0;}

Page 47: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Operadores usadoscom Ponteiros

• Operador unário & (“endereço de”)

• Operador unário * (“conteúdo de”)

Page 48: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Operadores usadoscom Ponteiros

int main (void){ int a; int *p; p = &a; *p = 2; return 0;}

int main (void){ int a; int *p = &a; *p = 2; return 0;}

Page 49: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Cuidados ao usarponteiros

int main ( void ) { int a, b, *p; a = 2; *p = 3; b = a + (*p); printf(" %d ", b); return 0;}

Page 50: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Cuidados ao usarponteiros

int main ( void ) { int a, b, *p; a = 2; *p = 3; b = a + (*p); printf(" %d ", b); return 0;}

3 é escritoem uma áreade memóriadesconhecida

Page 51: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Aritmética dePonteiros

• Se p é um ponteiro para uma variável,então a expressão p+1 gera o endereçonecessário para acessar uma variável demesmo tipo adjacente.

Page 52: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Aritmética dePonteiros

Variável Endereço Conteúdo

v[0] 0 ?

v[1] 4 ?

p 8 ?

12

int main (void){ int v[2]; int *p; p = v; p = p + 1; *p = 5; return 0;}

Page 53: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Aritmética dePonteiros

Variável Endereço Conteúdo

v[0] 0 ?

v[1] 4 ?

p 8 0

12

int main (void){ int v[2]; int *p; p = v; p = p + 1; *p = 5; return 0;}

Page 54: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Aritmética dePonteiros

Variável Endereço Conteúdo

v[0] 0 ?

v[1] 4 ?

p 8 4

12

int main (void){ int v[2]; int *p; p = v; p = p + 1; *p = 5; return 0;}

Page 55: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Aritmética dePonteiros

Variável Endereço Conteúdo

v[0] 0 ?

v[1] 4 5

p 8 4

12

int main (void){ int v[2]; int *p; p = v; p = p + 1; *p = 5; return 0;}

Page 56: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Relação entre vetores eponteiros

• Um ponteiro é uma variável capaz dearmazenar um endereço de memóriaqualquer.

• O nome de um vetor é um endereço fixode memória.

Page 57: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Relação entre vetores eponteiros

a[i] *(a + i)

é equivalente a

para um vetor a

Page 58: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Relação entre vetores eponteiros

#include <stdio.h>

int main (void){ int i; float v[6] = {2.3, 5.4, 1.0,7.6, 8.8, 3.9};

for (i=0; i<6; i++) { printf("%f", v[i]); }

return 0;}

#include <stdio.h>

int main (void){ int i; float v[6] = {2.3, 5.4, 1.0,7.6, 8.8, 3.9};

for (i=0; i<6; i++) { printf("%f", *(v + i)); }

return 0;}

Page 59: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Passagem de Vetores ePonteiros para Funções

• Nós podemos passar vetores e ponteiroscomo parâmetros para funções.

• Isso permite que dentro de uma função,sejam alteradas variáveis de outras funções.

Page 60: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Passagem de Vetores ePonteiros para Funções

int main (void){ int i; float vet[6] = {2.3, 5.4, 1.0,7.6, 8.8, 3.9}; float m;

m = calculaMedia(vet, 6);

zerar(vet, 6);

return 0;}

float calculaMedia(float v[], int n){ float m = 0.0f; int i; for(i = 0 ; i < n ; i++) { m += v[i]; } m /= n; return m;}

void zerar(float v[], int n) { int i; for(i = 0 ; i < n ; i++) { v[i] = 0; }}

Page 61: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Passagem de Vetores ePonteiros para Funções

int main (void){ int i; float vet[6] = {2.3, 5.4, 1.0,7.6, 8.8, 3.9}; float m;

m = calculaMedia(vet, 6);

zerar(vet, 6);

return 0;}

void zerar(float[] v, int n) { int i; for(i = 0 ; i < n ; i++) { v[i] = 0; }}

v possui o mesmoendereço de vet

Page 62: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Passagem de Vetores ePonteiros para Funções

• Problema: Queremos criar uma função quetroca dois valores passados para ela.

Page 63: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Passagem de Vetores ePonteiros para Funções

#include <stdio.h>

void troca(int* pa, int* pb) {int tmp=*pb;*pb=*pa;*pa=tmp;

}

int main (void) {int a=10, b=20;troca(&a,&b);

}

Page 64: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Passagem de Vetores ePonteiros para Funções

#include <stdio.h>

void troca(int* pa, int* pb) {int tmp=*pb;*pb=*pa;*pa=tmp;

}

int main (void) {int a=10, b=20;troca(&a,&b);

}

Page 65: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Passagem de Vetores ePonteiros para Funções

#include <stdio.h>

void troca(int* pa, int* pb) {int tmp=*pb;*pb=*pa;*pa=tmp;

}

int main (void) {int a=10, b=20;troca(&a,&b);

}

Page 66: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Passagem de Vetores ePonteiros para Funções

#include <stdio.h>

void troca(int* pa, int* pb) {int tmp=*pb;*pb=*pa;*pa=tmp;

}

int main (void) {int a=10, b=20;troca(&a,&b);

}

Page 67: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Passagem de Vetores ePonteiros para Funções

#include <stdio.h>

void troca(int* pa, int* pb) {int tmp=*pb;*pb=*pa;*pa=tmp;

}

int main (void) {int a=10, b=20;troca(&a,&b);

}

Page 68: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Busca em Vetores

• Problema: Implemente uma função quebusca por um inteiro em um vetor deinteiros.

Page 69: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Busca em Vetores

int busca(int n, int[] vet, int elem) { int i; for(i = 0 ; i < n ; i++) { if(vet[i] == elem) { return i; } } return -1;}

Page 70: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Busca em Vetores

int busca_ord(int n, int[] vet, int elem) { int i; for(i = 0 ; i < n ; i++) { if(vet[i]) { return i; } else if(vet[i] > elem) { return -1; } } return -1;}

Page 71: tema07 vetores ponteiros - inf.puc-rio.brinf1005/material/.../tema07_vetores_ponteiros.pdf · Declaração de Vetores • Para declarar um vetor, precisamos especificar o tipo das

Referências• Waldemar Celes, Renato Cerqueira, José

Lucas Rangel, Introdução a Estrutura de Dados,Editora Campus (2004).

- Capítulo 4 - Ponteiros e Endereços deVariáveis

• Waldemar Celes e Roberto Ierusalimschy,Apostila de Programação.

- Capítulo 7 - Vetores.