1 / 16

PASCAL

ALOCAÇÃO DINÂMICA DE MEMÓRIA. PASCAL. Alocação Estática de Memória. Definimos exatamente as variáveis necessárias para resolver um problema Usada quando conhecemos a quantidade e a dimensão das variáveis necessárias Ex.: Var Nr1, nr2, nr3: integer; // variáveis tipo inteiro

keitha
Download Presentation

PASCAL

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. ALOCAÇÃO DINÂMICA DE MEMÓRIA PASCAL

  2. Alocação Estática de Memória • Definimos exatamente as variáveis necessárias para resolver um problema • Usada quando conhecemos a quantidade e a dimensão das variáveis necessárias • Ex.: • Var • Nr1, nr2, nr3: integer; • // variáveis tipo inteiro • Temperaturas: array[1..24] of integer; • // variável estruturada homogênea do tipo inteiro com uma dimensão e 24 elementos

  3. Alocação Dinâmica de Memória • Permite criar variáveis dinamicamente, em tempo de execução, a medida em que forem necessárias • Usada quando não sabemos a quantidade ou a dimensão das variáveis que necessitamos para resolver um problema • Em Pascal, C e C++ a alocação dinâmica de memória é implementada via pointer

  4. Pointer • Um pointer é uma variável que aponta para uma outra variável, esta última criada em tempo de execução • Isto permite definir, durante a execução de um programa, quantas variáveis de um tipo de pointer serão criadas, e a dimensão dessas variáveis • O pointer tem um tipo: ele só pode apontar para variáveis de seu tipo • Pode-se imaginar o pointer como contendo um endereço de uma variável

  5. Exemplo de alocação estática • Var • Nr1, nr2, nr3: integer; nr1 Todas do tipo inteiro nr2 nr3

  6. Exemplo de alocação dinâmica • Var • Var1, var2: ^integer var1 Podem apontar para variáveis do tipo inteiro var2

  7. Var nr1, nr2: inteiro // variável estática Var1, var2: ^inteiro // pointer Begin ... nr1 nr2 var1 var2 nr1  15 15 nr2  nr1 15 new (var1) var1^  25 nr2  var1^ 25 25

  8. Lista encadeada por pointer início nó Encadeamento

  9. Exemplo: agenda por pointer • Algoritmo agendaPointer • (* agenda em pointer com inclusão no início *) • Tipo • tcontato = ^rcontato (* pointer *) • Rcontato = registro nome • fone • proximo: tcontato (* recursão *) • fim • Var • Primeiro, novo, atual, ultimo: tcontato

  10. Inicio • Primeiro  nil // para inicializar com nulo • ............. // repetição e menu com opções • Procedimento incluirContatoInicio • (* procedimento para incluir contato no inicio *) • inicio • New (novo) // alocação dinâmica de memória • Leia (novo^.nome, novo^.fone) (* orientar e testar *) • Novo^.proximo  nil • Se primeiro = nil • Então primeiro  novo // primeira inclusão • Senão // demais inclusões • Novo^.proximo  primeiro • Primeiro  novo • fim

  11. Exemplo de agenda • Primeiro contato: zé fone 45 • Segundo contato: rui fone 80 • Terceiro contato: lui fone 10 primeiro Ze 45 primeiro Rui 80 Ze 45 primeiro Lui 10 Rui 80 Ze 45

  12. Procedimento listarContatos • (* procedimento para listar os contatos *) • Inicio • Atual  primeiro • Enquanto atual <> nil faça • Escreva(atual^.nome, atual^.fone) • Atual  atual^.proximo • fim

  13. procedimento incluirContatoFim • (* procedimento para incluir contato no fim – inclusão mantendo a ordem cronológica *) • new (novo) // alocação dinâmica de memória • leia (novo^.nome, novo^.fone) // orientar e testar • novo^.proximo  nil • se primeiro = nil • então • primeiro  novo // primeira inclusão • Ultimo  novo • senão // demais inclusões • ultimo^.proximo  novo • ultimo  novo • fim

  14. Exemplo de agenda • Primeiro contato: zé fone 45 • Segundo contato: rui fone 80 • Terceiro contato: lui fone 10 ultimo primeiro Ze 45 ultimo primeiro Ze 45 Rui 80 ultimo primeiro Ze 45 Rui 80 Lui 10

  15. Novo exemplo linear • Agenda que permita manter os nomes e telefones de contatos em ordem alfabética em uma lista circular • O contato atual deve ser apresentado na tela • Opções: • Incluir novo contato – este passa a ser o atual • Excluir o contato atual – atual será o próximo • Alterar o telefone do contato atual • Apresentar o próximo – será o atual • Apresentar o anterior – será o atual • Consultar um contato pelo nome - será o atual • Listar todos os contatos – mantido o atual

  16. Exemplo não linear • Agenda que permita manter os nomes e telefones de contatos em ordem alfabética em uma árvore binária • Opções: • Incluir novo contato • Alterar o telefone de um contato • Consultar um contato pelo nome • Listar todos os contatos em ordem alfabética

More Related