aula 03 – 15/03 vetores bidimensionais – debug - ponteiros – listas encadeadas simples

29
Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Upload: internet

Post on 22-Apr-2015

123 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Aula 03 – 15/03Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas

Simples

Page 2: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Vetores Bidimensionais - Matrizes

• Parecido com estrutura de vetores porem mais elaborada• Estrutura que consiste de linhas e colunas que unidas damos o nome

de células• Semelhante a tabelas• Primeiro índice representa a linha e o segundo a coluna.

Page 3: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Page 4: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Declarações em Delphi/Pascal

Matriz estática

MatrizEstatica: array [0..1, 0..3] of string;MatrizEstatica: array [0..1] of array[0..3] of string;

Matriz dinâmica

MatrizDinamica: array of array of string;

SetLength( MatrizDinamica, 2, 3 ); // 2 linhas 3 colunas

Page 5: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Acesso aos valores da matriz

Matriz[1][4] // Acesso a linha 1 coluna 4

Matriz[2] // Acesso a todos os elementos linha 2

Percorrer os elementos de uma matriz

for Linha := Low(Matriz) to High(Matriz) dobegin for Coluna := Low(Matriz[Linha]) to High(Matriz[Linha]) do begin ShowMessage( Matriz[Linha, Coluna] ); end;end;

Page 6: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Aplicação de Matrizes

• Manipulação de imagens – informação de cores de pixel• Rotinas de criptografia – cálculos• Sistemas de geolocalização – cálculo de coordenas• Desenvolvimento de jogos – lógica• Estrutura de tabelas em banco de dados - linhas(registros) colunas

(campos)

Page 7: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Listas encadeadasListas encadeadas simples – Listas duplamente encadeadas – Listas Circulares

Page 8: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Ponteiros

• Memória do computador e um grande vetor de bytes• Cada byte é uma unidade de memória conhecida como célula• Exemplo de uso de identificadores.

Ponteiro Variável1258 Casa Azul849 Casa Amarela98577 Casa do Vizinho

Page 9: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

• Ponteiros ou apontadores são tipos de dados utilizados para acessar endereços de memória.• Os ponteiros são a base para a alocação dinâmica de memória• O valor do ponteiro corresponde a uma posição na memória onde o

dado(valor) esta armazenado.• Variável (qualquer que seja) e um conjunto de células de memória.• A variável é composta por nome, tipo, conteúdo e endereço• Cada variável ocupa uma quantidade de n de células

Integer = 4; Boolean = 1;

Page 10: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

• Utilizamos o ^ (circunflexo) antes do tipo de dado para declarar uma variável do tipo ponteiro

Ptr: ^Integer;

• Utilizamos o ^ (circunflexo) depois da variável para acessar o valor do ponteiro.

Ptr^:= 28;ShowMessage( IntToStr( Ptr^));

Page 11: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

• Utilizamos o @ para obter o ponteiro de uma variável

Ptr: ^Integer;Int: Inteiro;

Ptr:= @Int;

• Ponteiros tipados que são muito comuns.

PInt: ^Integer;PStr: ^string;PPes: ^TPessoa;

Page 12: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

• Para alocar memória para um ponteiro utilizamos a função New(). Essa função aloca um ponteiro com base no tamanho do tipo de dados

TPessoa = record; Nome: string;

end;

Pessoa:= ^TPessoa;

New(Pessoa);Pessoa^.Nome := ‘Fulano’;ShowMessage(Pessoa^.Nome);

• Para liberar a memoria alocada com a função New() utilizamos a função Dispose()

Dispose(Pessoa);

Page 13: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

var Numero: Integer; Flag: Char; Ptr: ^Integer;

Page 14: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Uso pratico de ponteiros

• Usado com a API do Windows onde vários métodos tem como parâmetros ponteiros de memória.• No desenvolvimento de componentes para o Delphi.• Integrações com DLLs.• Utilizado por componentes do Delphi(TList, TCLientDataSet. etc).• No Delphi as referências a classes são ponteiros.• Recursos de RTTI.

Page 15: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Práticadownload do projeto DisplayPointers

• Declarar uma variável string e acessar o seu valor através de ponteiros• Uso Debug

• Declara uma variável do tipo record e acessar através de ponteiros

Page 16: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Listas encadeadas

• É uma lista com agrupamento de itens conhecidos como nós(blocos de memória)• Os nós possuem um tipo de variável especial chamada ponteiro.• O ponteiros apontam para o próximo item do agrupamento• Os nós possuem dois campos: O Dado(valor) e o Ponteiro(posição de

memória do próximo nó)

Page 17: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

• A listas deve ser identificada pelo primeiro nó(cabeça) e a partir desse nó os outros itens podem ser visitados até o final da lista• Os vetores sequencias eram acessados pelo índice pois estavam

alocados sequencialmente na memória.• As listas encadeadas possuem seus itens em posições NÃO sequencias

na memória o que justifica o uso de ponteiros.• Observe que os ponteiros intercalam cada nó com o seu vizinho de

modo a criar uma lista em memória• O final da lista encadeada é identificada pelo valor nil do ponteiro.

Page 18: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Representação gráfica de uma lista com nós

Page 19: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Representação gráfica de inserção na lista

Page 20: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Representação gráfica de exclusão na lista

Page 21: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Estrutura de um nó

PApontador = ^TItem;TItem = record Valor: string; Proximo: PApontador;end;

Page 22: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Incluindo itens na lista

PrimeiroNo: PApontador;......var NoAuxiliar: PApontador;begin New( NoAuxiliar ); // alocando espaço na memória  NoAuxiliar.Proximo:=PrimeiroNo; NoAuxiliar.Valor:= InputBox('', 'Digite uma string', '');  PrimeiroNo:= NoAuxiliar;end;

Page 23: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Excluir item na lista – Parte 1

var

NoAuxiliar, NoASerExcluido, NoAnterior: PApontador;

begin

  if (PrimeiroNo.Proximo = nil) or (PrimeiroNo.Valor = ValorASerExcluido) then

begin

NoAuxiliar:= PrimeiroNo;

PrimeiroNo:= PrimeiroNo.Proximo;

Dispose( NoAuxiliar );

end else

continua

Page 24: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Excluir item na lista – Parte 2

begin

NoAuxiliar:= PrimeiroNo;

while ( NoAuxiliar.Proximo <> nil ) do

begin

if ( NoAuxiliar.Proximo.Valor = ValorASerExcluido ) then

begin

NoAnterior:= NoAuxiliar; // pega o item anterio

NoASerExcluido := NoAuxiliar.Proximo

NoAnterior.Proximo:= NoASerExcluido.Proximo;

Exit();

end;

NoAuxiliar:= NoAuxiliar.Proximo;

Page 25: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Percorrer itens na lista

var

NoAuxiliar: PApontador;

begin

 

NoAuxiliar:= PrimeiroNo;

while ( NoAuxiliar <> nil ) do

begin

ShowMessage( NoAuxiliar.Valor );

 

NoAuxiliar:= NoAuxiliar.Proximo;

end;

end;

Page 26: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Liberar nós alocados

var

NoAuxiliar: PApontador;

begin

  NoAuxiliar:= PrimeiroNo;

while ( NoAuxiliar <> nil) do

begin

Dispose( NoAuxiliar );

 

NoAuxiliar:= NoAuxiliar.Proximo;

end;

Page 27: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Observações

• Para identificar o final de uma lista encadeada simples verificamos se o ponteiro tem o valor nil• Sempre quanto efetuarmos operações de inclusão ou exclusão de nós

devemos nos certificar de que o ponteiro do nó esteja sendo preenchido corretamente

Page 28: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

Práticadownload do

• Mostrar os exemplos implementados no programa DisplayPointers

Page 29: Aula 03 – 15/03 Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples

ExercíciosDownload : aula03 – exercícios