1 / 29

Aula 03 – 15/03

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

step
Télécharger la présentation

Aula 03 – 15/03

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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.

  3. Declarações em Delphi/Pascal Matriz estática MatrizEstatica: array[0..1, 0..3] ofstring; MatrizEstatica: array [0..1] ofarray[0..3] ofstring; Matriz dinâmica MatrizDinamica: arrayofarrayofstring; SetLength( MatrizDinamica, 2, 3 ); // 2 linhas 3 colunas

  4. 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) toHigh(Matriz) do begin for Coluna := Low(Matriz[Linha]) toHigh(Matriz[Linha]) do begin ShowMessage( Matriz[Linha, Coluna] ); end; end;

  5. 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)

  6. Listas encadeadas Listas encadeadas simples – Listas duplamente encadeadas – Listas Circulares

  7. 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.

  8. 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;

  9. 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^));

  10. 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;

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

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

  13. 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.

  14. 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

  15. 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ó)

  16. 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 nildo ponteiro.

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

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

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

  20. Estrutura de um nó PApontador= ^TItem; TItem= record Valor: string; Proximo: PApontador; end;

  21. 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;

  22. 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 ); endelse continua

  23. 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;

  24. Percorrer itens na lista var NoAuxiliar: PApontador; begin NoAuxiliar:= PrimeiroNo; while( NoAuxiliar<> nil) do begin ShowMessage( NoAuxiliar.Valor ); NoAuxiliar:= NoAuxiliar.Proximo; end; end;

  25. Liberar nós alocados var NoAuxiliar: PApontador; begin NoAuxiliar:= PrimeiroNo; while( NoAuxiliar <> nil) do begin Dispose( NoAuxiliar); NoAuxiliar:= NoAuxiliar.Proximo; end;

  26. 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

  27. Práticadownload do • Mostrar os exemplos implementados no programa DisplayPointers

  28. Exercícios Download : aula03 – exercícios

More Related