1 / 22

Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1

Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1. Ponteiros. Variáveis. Podem ser divididas em: Variáveis estáticas Variáveis dinâmicas Podem ser criadas e destruídas durante a execução de um programa. Declaração -> Indireta

reese
Download Presentation

Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1

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. Programação IIProfessora: Mai-Lyvanessahorário: ter 9h-11h; sex 11h-13hAula 1

  2. Ponteiros

  3. Variáveis • Podem ser divididas em: • Variáveis estáticas • Variáveis dinâmicas • Podem ser criadas e destruídas durante a execução de um programa. • Declaração -> Indireta • Vinculação -> Por meio de ponteiros • Vantagens

  4. Áreas de Memória Mapa de memória de um computador padrão IBM-PC

  5. O tipo pointer • Sua posição de memória armazena um endereço de outra posição de memória, que por sua vez pode conter um dado. Não armazena um dado. • Notação utiliza ^ • Exemplos: • Var • P_nome : ^string; • P_idade : ^integer; • P_salario : ^real;

  6. O tipo pointer • Exemplos: • write(‘Idade = ‘,P_idade^); • Sugestão: Padronização de nomes • Ponteiro vazio é preenchido com NIL • Operador @ • Ex: P_idade := @idade; • (Acessa o endereço da posição de memória referenciada)

  7. Exemplo: • Criação de um ponteiro apontando para uma variável inteira. • Criação de um ponteiro apontando para uma variável real. • Exercicios: • Declare 2 variáveis inteiras e dois ponteiros para inteiros que devem ser associados ao endereço das variáveis. Usando somente os ponteiros faça com que as variáveis recebam o dobro e o triplo de seu valor respectivamente,

  8. Alocação dinâmica de memória • Memória alocada conforme a necessidade • Evita DESPERDÍCIO DE MEMÓRIA X MEMÓRIA INSUFICIENTE • Quantidade de memória pode ser determinada em tempo de execução

  9. Alocação dinâmica de memória • Procedimento new(ponteiro) • Aloca espaço de memória alta para armazenar uma variável alocada dinamicamente por vez.

  10. Alocação dinâmica de memória • IMPORTANTE: Sempre que um espaço de memória for alocado dinamicamente, ele tem que ser liberado explicitamente. Ou seja a cada new, deve corresponder um dispose, pois o espaço de memória alocado explicitamente não será liberado automaticamente. • Procedimento dispose(ponteiro) • Libera o espaço de memória, endereçada pelo ponteiro, existente na área de memória (HEAP).

  11. Algumas funções de gerenciamento de memória em Pascal • MemAvail • Exibe a quantidade total de memória livre no HEAP, ou seja a soma de todos os blocos de memória livres. • Procedimento MaxAvail • Retorna o tamanho do maior bloco contínuo de memória no HEAP. Este valor corresponde ao maior tamanho possível de variável dinâmica que pode ser alocado a qualquer tempo. • Obs: Estas funções estão disponíveis apenas no Turbo Pascal.

  12. Alocação dinâmica de memória - exercícios - • Ex: • 1)Aloque dinamicamente duas variáveis do tipo inteiro. Leia dois valores nestas variáveis. Verifica se o valor de A é maior que B. Em caso afirmativo exiba o quociente de A dividido por B. • 2) Leia 5 valores e apresente o total da soma dos mesmos. Crie dinamicamente a variável que irá receber os valores. Exiba a quantidade de memória antes e depois da alocação de memória para a variável e depois da liberação da mesma.

  13. Alocação dinâmica de memória • GetMem • Também é usado para alocar dinamicamente espaço de memória para uma variável. Gerencia melhor o espaço de memória. A variável criada pode ter o número de bytes especificado pelo programador. • Sintaxe • GetMem(ponteiro,numero_de_bytes); • Ex: GetMem(P_nome, 30); GetMem(P_total, 20); • Como saber quantos bytes reservar? • Sizeof(tipo)

  14. Algumas funções de gerenciamento de memória em Pascal • Função útil na alocação de blocos de memória: • SizeOf • Retorna o número de bytes ocupados por um argumento (funciona tanto no Pascal como no Delphi).

  15. Alocação dinâmica de memória • FreeMem => Destrói uma variável criada dinamicamente, liberando seu espaço de memória. Deve ser usada em conjunto com GetMem. Ex: FreeMem(P_nome, 30); FreeMem(P_total, 20); Obs: Especificar exatamente a mesma quantidade de bytes que foi alocada.

  16. Alocação dinâmica de memória • Alocação dinâmica de memória na verdade tem uma grande utilidade para alocação de blocos de dados. Até agora vimos como fazer a alocação apenas de uma variável por vez. Veremos como trabalhar com vetores e matrizes alocados dinamicamente.

  17. Alocação dinâmica de memória – Vetores e matrizes • Características • Satisfaz a necessidade de criarmos uma matriz com uma quantidade de elementos desconhecida em tempo de projeto. • Deve-se criar um tipo matriz. • Pode-se usar a constante MaxInt pré-definida. • Declara-se uma variável que seja do tipo ponteiro para o tipo matriz criado. • Faz-se alocação dinâmica de memória usando-se GetMem e SizeOf.

  18. Alocação dinâmica de memória – Vetores e matrizes • Ex de criação do tipo e declaração do ponteiro: Type P_mat = ^vetor; vetor = array[1..MaxInt] of integer; matriz = array[1..181,1..181]; Var aponta : P_mat; aponta_mat : ^matriz;

  19. Alocação dinâmica de memória – Vetores e matrizes • Ex. de alocação dinâmica da memória do vetor: getMem(aponta, N * SizeOf(integer)); • Onde N é a quantidade de elementos que se deseja no vetor • Ex. de utilização dos elementos do vetor: for x:= 1 to N do writeln(aponta^[x]);

  20. Alocação dinâmica de memória – Vetores e matrizes • Ex. de alocação dinâmica da memória da matriz: getMem(aponta, L * C * SizeOf(integer)); • Onde L é a quantidade de linhas que se deseja na matriz e C é a quantidade de colunas. • Ex. de utilização dos elementos da matriz: for x:= 1 to L do for y := 1 to C do writeln(aponta_mat^[x,y]);

  21. Alocação dinâmica de memória – Vetores e matrizes • Liberando a memória do vetor freeMem(aponta,N * SizeOf(integer)); • Liberando a memória da matriz freeMem(aponta_mat, L * C * SizeOf(integer));

  22. Exercício • Leia um número inteiro N e aloque dinamicamente memória para um vetor de N inteiros. Leia os valores do vetor e exiba a média dos valores lidos.

More Related