programação ii professora: mai-ly vanessa horário: ter 9h-11h; sex 11h-13h aula 1

Post on 26-Jan-2016

32 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

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

Mapa de memória de um computador padrão IBM-PC

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;

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)

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,

Memória alocada conforme a necessidade

EvitaDESPERDÍCIO DE MEMÓRIA

XMEMÓRIA INSUFICIENTE

Quantidade de memória pode ser determinada em tempo de execução

Procedimento new(ponteiro) Aloca espaço de memória alta para

armazenar uma variável alocada dinamicamente por vez.

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

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.

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.

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)

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

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.

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.

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.

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;

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]);

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]);

Liberando a memória do vetorfreeMem(aponta,N * SizeOf(integer));

Liberando a memória da matrizfreeMem(aponta_mat, L * C *

SizeOf(integer));

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

top related