algoritmos e estrutura de dados - aula 05

24
ANHANGUERA – 2016.1 ALGORITMOS E ESTRUTURA DE DADOS AULA 05 – PONTEIROS, VETORES E MATRIZES Prof. Thomás da Costa [email protected]

Upload: thomas-da-costa

Post on 22-Jan-2017

478 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Algoritmos e Estrutura de Dados - Aula 05

ANHANGUERA – 2016.1

ALGORITMOS E ESTRUTURA DE DADOSAULA 05 – PONTEIROS, VETORES E MATRIZES

Prof. Thomás da [email protected]

Page 2: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

PONTEIROS, VETORES E MATRIZES

PONTEIROS

Page 3: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

PONTEIROS, VETORES E MATRIZES

É um tipo de variável que armazena um endereço de memoria referente a uma outra variável. O ponteiro não armazena diretamente um valor como os outros tipos em C++.

PonteirosO que é?:

Page 4: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

Para operação com ponteiros, utilizamos dois operadores unários:

PonteirosOperadores:

Operador Descrição

* Utilizado para declarar um ponteiro e para retornar o valor

& Utilizado para retornar o endereço de memória da variável

Vamos ver como declarar uma variável do tipo ponteiro !!!

PONTEIROS, VETORES E MATRIZES

Page 5: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

Declarando uma variável do tipo ponteiro:

int *ptr;Tipo da variável

Nome da variável

Operador unário

Ponteiros

PONTEIROS, VETORES E MATRIZES

Page 6: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

#include <iostream> using namespace std; int main(){

int *ptr;

cout << ptr << endl;}

Declarando um ponteiro

Exibe o endereço da variável, neste caso, nenhum endereço foi atribuído

Page 7: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

PonteirosDeclaração e atribuição de ponteiros:

Variável ponteiro

Atribuindo o endereço de memória

int *ptr;int valor;

valor = 1500;ptr = &valor;

PONTEIROS, VETORES E MATRIZES

Page 8: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

#include <iostream> using namespace std; int main(){

int valor;int *ptr;

valor = 1500;ptr = &valor;

cout << ptr << endl;cout << *ptr << endl;

}

ptrvalor

0x23fe480x23fe44

0x23fe480x23fe44 0x23fe441500

1 12

23 4

34

Page 9: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

PonteirosMais detalhes:

- Ponteiro armazena o endereço de memória- O operador & mostra o endereço da variável - O operador * é utilizado na declaração do ponteiro- Exibindo o valor de um ponteiro com cout é mostrado o

endereço referenciado - Utilizando o operador * seguido pelo nome da variável

de ponteiro é exibido o valor atribuído no endereço de memória referente.

Vamos ver mais um exemplo !!!

PONTEIROS, VETORES E MATRIZES

Page 10: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

#include <iostream> using namespace std; int main(){

int valor;int *ptr;int total;

valor = 1600;ptr = &valor;total = *ptr;

cout << *ptr << endl;

cout << total << endl;}

ptrvalor

0x23fe480x23fe44

total

0x23fe40

0x23fe480x23fe44 0x23fe401600 0x23fe44 1600

112 3

234

4

56

5 6

Page 11: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

PonteirosImportante:

A atribuição de valores para ponteiros, deve ser do mesmo tipo. Quando as variáveis são de tipos diferentes, vamos ter um erro de compilação.

PONTEIROS, VETORES E MATRIZES

Page 12: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

#include <iostream> using namespace std; int main(){

// PROGRAMA COM ERRO NAO COMPILA !!!!int *ptr_inteiro;double valor;

valor = 345.76;ptr_inteiro = &valor;

cout << *ptr_inteiro << endl;}

ERRO !!!

Page 13: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

Atribuição de valores:

Podemos atribuir um valor diretamente para um ponteiro. Para isso utilizamos o operador * antes do nome da variável do tipo ponteiro.

*ptr = 999;

Variável do tipo ponteiro

Atribuindo um valor

Ponteiros

PONTEIROS, VETORES E MATRIZES

Page 14: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

#include <iostream> using namespace std; int main(){

int *ptr;int x;

ptr = &x;*ptr = 999;

cout << &x << endl;cout << ptr << endl;cout << *ptr << endl;

}

xptr

0x23fe440x23fe48

0x23fe48 0x23fe440x23fe44 999

11

2

2 33

4

4

Page 15: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

PonteirosResumo:

• Um ponteiro armazena uma posição de memória.• Esta posição de memória é referente a um valor.• Atribuição de ponteiros deve acontecer se for do mesmo tipo.• Existem dois tipo de operadores unários para trabalhar com ponteiros.• O operador & retornar o endereço de memória da variável.• O operador * é utilizado para declarar um ponteiro e para retornar o valor.• Vamos utilizar bastante na disciplina de Estrutura de Dados.

PONTEIROS, VETORES E MATRIZES

Page 16: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

VETORES

PONTEIROS, VETORES E MATRIZES

Page 17: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

Exemplo:#include <iostream>#include <string.h>

using namespace std;

int main(){

int k[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // inicializando um vetor

for (int i=9;i>=0;i--){

k[i] = i;cout << k[i] << "\n";

}

char nome1[10] = "João"; // uma stringchar nome2[10] = "Maria";strcat(nome2, " das Graças"); // concatena duas stringscout << "Nome1, Nome2: " << nome1 << "," << nome2 << "\n";cout << "Tamanho do Nome1: " << strlen(nome1) << "\n"; // tamanho de uma stringcout << "Tamanho do Nome2: " << strlen(nome2) << "\n";cout << "Comparando:" << strcmp(nome1, nome2) << "\n"; // compara duas strings

char usuario[100];gets(usuario);// lê a string do tecladocout << "Usuário: " << usuario;

}

Criando um vetor com 10 posições

Inicializando um vetor

Atribuindo um valor na posição

Ler um vetor de char pelo teclado

Vetores

PONTEIROS, VETORES E MATRIZES

Page 18: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

MATRIZES

PONTEIROS, VETORES E MATRIZES

Page 19: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

Matrizes

São vetores que possuem duas ou mais dimensões para armazenar valores. Uma matriz de duas dimensões, possui um comportamento semelhante ao de uma tabela com linhas e colunas.

O que é:

PONTEIROS, VETORES E MATRIZES

Page 20: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

MatrizesExemplo:

int valor[4][4] = {

{0, 0 ,0 ,0},

{0, 1 ,1 ,0},

{0, 1 ,1 ,0},

{0, 0 ,0 ,0}

};

Declaração de uma matriz

PONTEIROS, VETORES E MATRIZES

Page 21: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

#include <iostream> using namespace std; int main(){

int valor[4][4] = { {0, 0 ,0 ,0},{0, 1 ,1 ,0},{0, 1 ,1 ,0},{0, 0 ,0 ,0}

};

for (int i=0;i<=3;i++){

for (int j=0;j<=3;j++){

cout << valor[i][j];}cout << endl;

}

}

Page 22: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

Matrizes

Podemos atribuir valores para uma posição de uma matriz utilizando diretamente os seus índices.

Atribuição de Valor:

valor[0][2] = 22;

PONTEIROS, VETORES E MATRIZES

Page 23: Algoritmos e Estrutura de Dados - Aula 05

ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa

Matrizes

• Sempre usar com sabedoria !!!• Quanto maior o tamanho da matriz, maior a quantidade de memória

ocupada.• A memória da matriz é de alocação estática.• Podemos declarar qualquer tipo de matriz.• Matrizes podem possuir várias dimensões, mas cuidado ao utilizar.• Não se esqueça: computador tem memória limitada !!! • Para acessar as informações de uma matriz vamos precisar sempre de dois

índices.

Detalhes:

PONTEIROS, VETORES E MATRIZES

Page 24: Algoritmos e Estrutura de Dados - Aula 05

Obrigado !!!

ANHANGUERA – 2016.1