aula 03 – 15/03
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/1.jpg)
Aula 03 – 15/03Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas
Simples
![Page 2: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/3.jpg)
![Page 4: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/4.jpg)
Declarações em Delphi/PascalMatriz 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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/7.jpg)
Listas encadeadasListas encadeadas simples – Listas duplamente encadeadas – Listas Circulares
![Page 8: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/9.jpg)
• 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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/10.jpg)
• 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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/11.jpg)
• 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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/12.jpg)
• 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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/13.jpg)
var Numero: Integer; Flag: Char; Ptr: ^Integer;
![Page 14: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/17.jpg)
• 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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/18.jpg)
Representação gráfica de uma lista com nós
![Page 19: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/19.jpg)
Representação gráfica de inserção na lista
![Page 20: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/20.jpg)
Representação gráfica de exclusão na lista
![Page 21: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/21.jpg)
Estrutura de um nóPApontador = ^TItem;TItem = record Valor: string; Proximo: PApontador;end;
![Page 22: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/22.jpg)
Incluindo itens na listaPrimeiroNo: 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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/23.jpg)
Excluir item na lista – Parte 1var 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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/24.jpg)
Excluir item na lista – Parte 2begin 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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/25.jpg)
Percorrer itens na listavar NoAuxiliar: PApontador;begin
NoAuxiliar:= PrimeiroNo; while ( NoAuxiliar <> nil ) do begin ShowMessage( NoAuxiliar.Valor );
NoAuxiliar:= NoAuxiliar.Proximo; end;end;
![Page 26: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/28.jpg)
Práticadownload do
• Mostrar os exemplos implementados no programa DisplayPointers
![Page 29: Aula 03 – 15/03](https://reader035.vdocuments.net/reader035/viewer/2022081507/5681643a550346895dd603ae/html5/thumbnails/29.jpg)
ExercíciosDownload : aula03 – exercícios