A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

PASCAL ALOCAÇÃO DINÂMICA DE MEMÓRIA. Alocação Estática de Memória Definimos exatamente as variáveis necessárias para resolver um problema Usada quando.

Apresentações semelhantes


Apresentação em tema: "PASCAL ALOCAÇÃO DINÂMICA DE MEMÓRIA. Alocação Estática de Memória Definimos exatamente as variáveis necessárias para resolver um problema Usada quando."— Transcrição da apresentação:

1 PASCAL ALOCAÇÃO DINÂMICA DE MEMÓRIA

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 nr3 nr2 Todas do tipo inteiro

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

7 Var nr1, nr2: inteiro // variável estática Var1, var2: ^inteiro // pointer Begin... nr1 nr2 var1 var2 nr 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 Ze 45primeiro Rui 80Ze 45 Lui 10Rui 80Ze 45 primeiro

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 Ze 45primeiro Ze 45Rui 80 Ze 45Rui 80Lui 10 primeiro ultimo

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


Carregar ppt "PASCAL ALOCAÇÃO DINÂMICA DE MEMÓRIA. Alocação Estática de Memória Definimos exatamente as variáveis necessárias para resolver um problema Usada quando."

Apresentações semelhantes


Anúncios Google