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

22

Upload: reese

Post on 26-Jan-2016

32 views

Category:

Documents


1 download

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

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

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

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

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

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

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;

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

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)

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

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,

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

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

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

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

armazenar uma variável alocada dinamicamente por vez.

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

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

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

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.

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

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.

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

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)

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

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

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

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.

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

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.

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

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.

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

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;

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

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

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

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

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

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

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

SizeOf(integer));

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

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